カーネルの構造と機能

提供: UnixClassWiki
2007年10月17日 (水) 16:07時点におけるHironobu.SUZUKI (トーク)による版

(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先: 案内検索

カーネルの構造と機能

この章では狭義のオペレーティングシステムであるカーネルの概観とその構造と機能を見ていきます。


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

いろいろな切口でカーネルを眺めることはできますが、最初はわかりやすいであろう「プログラムが動作する」という切口から考えてみます。


プログラムが動作する時、システム上では2つの処理空間で処理が行われます。1つはユーザ空間、もう1つがカーネル空間です。この2つの空間を行き来して処理を進めます。といっても、プログラムが動作する際、どちらの空間で処理されているかといったことをユーザが意識することは、まずありませ ん。

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


ユーザ空間は、ユーザに割り当てられるプログラムがアクセス可能な計算資源です。一方、カーネル空間はユーザが直接アクセスできない空間で、システムコール(UNIXのカーネルAPI) を呼ぶことによって始めて、カーネルの機能を利用できます。ユーザからは直接カーネル空間を操作することはできません。Kernel(核)という言葉は元々は堅い殻に守られた種の意味です。この意味のようにユーザ側から見ると、カーネル空間は堅い殻に守られたオペレーティングシステム内部というように見えます。


ここでプログラムがデータを処理し、ファイルにデータを書き込む時を考えてみましょう。ユーザ空間でデータが処理され、write(2)でファイルに書込にいきます。すると、制御は一旦カーネル空間に移ります。カーネルでの処理が済んで、またユーザ空間に戻ってきます。このようにカーネルはユーザ空間で動くプログラムの制御と、カーネル内での必要な資源の提供と管理を行っています。

補足
write(2)と書いている2の意味はオンラインマニュアルの区分を示しています。2はシステムコール、3はライブラリの意味です。 manコマンドにオプション 2 write と与えるとwrite(2)が表示されます。


 write(fd,buf,length)
                                                        .
 ------------------->時間軸                
                                                      .  
 ------------------------------
 ユーザ空間
 ----+               +------>処理の流れ
        |               |
 -----|--------|----------------
          |          |
          +-+   +-+ カーネル空間
  -------|---|------------------
             +--+
     ハードウェア資源