Linuxシステムの主要な構造
##Linuxカーネル
Linuxは厳密にはカーネルというOSの核となる部分を指す。
カーネルはOSの機能として最も重要であり、ハードウェアコントロールやアプリケーションの動作環境・実行状態の管理・ファイルシステムの管理などの機能を持っている。
##コマンドとシェル
コマンドはLinuxカーネルの機能を利用するソフトウェアの総称であり、シェルと呼ばれる機能を使ってコマンドを使用する。
##デーモン
デーモンは裏方で動作するソフトウェアです。基本的にサーバー関連のソフトウェアの多くがデーモンの形で実行される。
ちなみに、Linuxで使われるデーモンは悪魔ではなく、ダイモンという神々と人間との仲介役を果たす神霊を指す。
##ライブラリ
ライブラリはシステムコールを使ってカーネル機能を呼び出すものである。
コマンドやアプリケーションはカーネルを直接呼び出さず、ライブラリを仲介してカーネルの機能を利用している。
#Linuxカーネル動作
Linuxカーネルはイベント駆動型になっており、イベントがカーネル動作を引き起こす作りになっている。
カーネルに伝えられるイベントは以下の3種類である。
- ハードウェア割込み
- CPU例外
- システムコール
また、カーネル内部には各イベントごとに「ハンドラ」と呼ばれるプログラムが用意されている。
「ハンドラ」はイベント発生を受け取った場合、カーネル機能を利用して、目的の処理をするプログラムである。
##システムコールの仕組み
ファイルを読み込むプログラムを例にして説明する。
プログラミングで read() というファイルを読み込む命令があります。
このread()が実行されると、read()システムコールを実行することになります。そしてそのシステムコールはライブラリのread()システムコール用のプログラム(ラッパルーチン)を呼び出します。
ラッパルーチンが呼び出されると、CPUに対して割込み命令(int命令)をだします。
割込み命令を実行すると、CPUはそのとき実行していた処理を一旦中断してカーネルのシステムコールハンドラを起動します。
つまり、カーネルの機能を割り込み命令で呼び出すのがシステムコールの役割なのです。
システムコールハンドラが起動した後は、read()システムコールに対応するsys_read()プログラム(サービスルーチン)を呼び出します。
このsys_read()サービスルーチンによって、HDDからデータを読み出して、呼び出し元のソフトウェアにデータが渡ってくるのです。
ちなみに、システムコール経由でカーネル機能を利用するメリットは、ハードウェアに対する命令用のプログラムを書く必要がなくなることやソフトウェアを簡単に移植できるといったことがあります。