カーネルの構造と機能
提供: UnixClassWiki
この章では狭義のオペレーティングシステムであるカーネルの概観とその構造と機能を見ていきます。
カーネル空間とユーザ空間
いろいろな切口でカーネルを眺めることはできますが、最初はわかりやすいであろう「プログラムが動作する」という切口から考えてみます。
プログラムが動作する時、システム上では2つの処理空間で処理が行われます。1つはユーザ空間、もう1つがカーネル空間です。この2つの空間を行き来して処理を進めます。といっても、プログラムが動作する際、どちらの空間で処理されているかといったことをユーザが意識することは、まずありませ ん。
---------------------- ユーザ空間 ---------------------- カーネル空間 ----------------------
ユーザ空間は、ユーザに割り当てられるプログラムがアクセス可能な計算資源です。一方、カーネル空間はユーザが直接アクセスできない空間で、システムコール(UNIXのカーネルAPI) を呼ぶことによって始めて、カーネルの機能を利用できます。ユーザからは直接カーネル空間を操作することはできません。Kernel(核)という言葉は元々は堅い殻に守られた種の意味です。この意味のようにユーザ側から見ると、カーネル空間は堅い殻に守られたオペレーティングシステム内部というように見えます。
ここでプログラムがデータを処理し、ファイルにデータを書き込む時を考えてみましょう。ユーザ空間でデータが処理され、write(2)でファイルに書込にいきます。すると、制御は一旦カーネル空間に移ります。カーネルでの処理が済んで、またユーザ空間に戻ってきます。このようにカーネルはユーザ空間で動くプログラムの制御と、カーネル内での必要な資源の提供と管理を行っています。以下に単純化したモデルを示してみます。
- 補足
- write(2)と書いている2の意味はオンラインマニュアルの区分を示しています。2はシステムコール、3はライブラリの意味です。 manコマンドにオプション 2 write と与えるとwrite(2)が表示されます。
write(fd,buf,length) . ------------------->時間軸 . ------------------------------ ユーザ空間 ----+ +------>処理の流れ | | -----|--------|---------------- | | +-+ +-+ カーネル空間 -------|---|------------------ +--+ ハードウェア資源