差分

カーネルの構造と機能

2,931 バイト追加, 2007年10月17日 (水) 16:07
== カーネルの構造と機能 ==

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


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

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


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

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


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


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

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


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