地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

ユーザ空間とカーネル空間

f:id:ryuichi1208:20190113221304p:plain

ユーザ空間とは

ユーザに割り当てられる計算リソースで実行しているプログラムが直接アクセス可能なリソース

カーネル空間とは

カーネルが使用する領域のこと

両者の違い

メモリ領域に違いがある。 ユーザ空間とカーネル空間はそれぞれ独立しており、互いが互いのメモリ領域に直接アクセスできることはない

分ける理由としてはシステムの中枢であるカーネルが動いているメモリ領域がもしバグが存在したら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;
}