ユーザ空間とは
ユーザに割り当てられる計算リソースで実行しているプログラムが直接アクセス可能なリソース
カーネル空間とは
カーネルが使用する領域のこと
両者の違い
メモリ領域に違いがある。 ユーザ空間とカーネル空間はそれぞれ独立しており、互いが互いのメモリ領域に直接アクセスできることはない
分ける理由としてはシステムの中枢であるカーネルが動いているメモリ領域がもしバグが存在したらOS毎停止してしまうことになる。 (多々のテストプログラムでさえも致命的な問題になり得る)
メモリ空間を分けることでそのような致命的な問題が発生することを防ぐ目的がある。 (カーネル界隈の開発者は常にOSパニックを意識しての開発が必要なのか。。。正直辛そう。。。)
デーモンとは
デーモンは起動シーケンスによって自動的に開始されるプロセスのこと。デーモンはバックグラウンドで実行され続けるプロセス。
メモリに常駐し続けて実行されるプロセスの一つである。
C言語にはデーモンを生成するためのライブラリ関数daemon(3)があり以下のように簡単に起動することができる
#include <stdio.h> #include <unistd.h> int main(void) { if(daemon(0, 0) == 0) { sleep(5); } else { printf("error\n"); } return 0; }