1. まとめトップ

実習linuxカーネル カーネルの構造を知る

我々が守りたかったのは、プログラミングのためのよい環境だけでなく、仲間意識を生み出すシステムだった。デニス・リッチー

更新日: 2014年12月14日

4 お気に入り 3130 view
お気に入り追加

この記事は私がまとめました

twcritiqueさん

我々が守りたかったのは、プログラミングのためのよい環境だけでなく、仲間意識を生み出すシステムだった。デニス・リッチー

カーネル少史はunix普及の歴史

1970年代最初に、UNIXはPDP-11/20上で動作するようになり、また、テキストエディタであるedと、テキスト出力用ソフトウェアroffがアセンブリ言語で実装された。

1972年、UNIXはC言語で書き直された[12]。アセンブリ言語から高水準言語であるCへの移行により、ソフトウェアの移植性が高まり、マシン依存の少量のコードを書き直すだけでUNIXを他のプラットフォームに移植できるようになった。

UnixはOSの設計に二つの新たな方向性を確立した、それは、どんな小さなコンピュータ上でも実行できるように設計されている。OSカーネルは最小限の基本機能を提供し、それ以外の機能については、必要に応じて(ユーザーのプログラムとして)追加する。

カーネルの歴史は抽象化の歴史

歴史的に、コンピュータのコンポーネント(部品)は、プロセスとリソースに抽象化されてきた。

Linux がシステム上のプロセスを管理できるようにするため、個々のプロセスは、 task_struct というデータ構造体で表現さ れる。

従来のコンピュータではオブジェクトプログラムが、マシンの実行可能メモリに格納されていた。
プロセスとはオブジェクトプログラムを実行するCPU操作の抽象化である

プログラムと は、実行イメージとしてディスクに保存されたマシン語の命令とデータとのセットで ある。したがって、プログラムとは受動的な実体である。反対に、 プロセスとは実行中のコンピュータプログラムであると考えることができる。 プロセスはダイナミックな実体であり、マシン語の命令がプロセッサにより実行される につれて常に変化してゆく。

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


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

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

カーネルとそれ以外のソフトウェアの切り分けは、実行されるプロセスの実行モードが、どの状態で動いているかで区別します。プロセスの実行モードが、カーネル・モード(UNIX以外のシステムによっては特権モード、スーパーバイザ・モード、あるいはマスタ・モードとも呼ばれる) で動作しているか、ユーザ・モード ( 非特権モード、プロブレム・モード、あるいはスレーブモードとも呼ばれる)で動作しているかどうかです。

1