この記事は日経 xTECH有料会員限定ですが、2018年4月6日5時まではどなたでもご覧いただけます。
OSは、WindowsやLinuxの標準インストール後のディスク使用量がギガバイト単位であることからも分かるように、巨大なソフトウエアです。したがって、OSを理解するためには、OSを構成要素に分けて見る必要があります。また、OSの構成を知ることは、パッチ適用判断などの実務にも役立ちます。パッチの対象がOSのどの部分で、その部分の役割が何かが分かれば、OSだからすべてのソフトウエアが影響を受けるという以上のきめの細かい影響調査を行えるようになります。
何がOSを構成するかは、OSにより異なります。エンドユーザーにとっては、OSのインストールメディアに入っている、あるいはOSのインストーラーがインストールするソフトウエアは、すべてOSでしょう。逆の極端な例を挙げると、Linuxの開発コミュニティはOSの中核部分であるカーネルだけを開発しています。しかし、カーネルだけではコンピュータを起動して人間が操作することもできないので、カーネルだけがOSだという人はいません。
確実にOSに入るのは、カーネル、標準ライブラリ、およびシェルです。
カーネルは、名前通りOSの核となる部分です。カーネルはメモリーに常駐し、ハードウエアの操作およびOS専用のデータをアクセス可能なCPUの特権状態で実行します。そのため、カーネルをアップデートするには、システムの再起動が必要になります。
カーネルには、多様な機能を含んたモノリシック(一枚岩の意味)カーネルと、CPUの特権状態を要する必要最小限の機能だけからなるマイクロカーネルがあります。モノリシックカーネルは性能、マイクロカーネルは保守性に優れるので、この両者は、現在は歩み寄っています。例えば、Linuxはモノリシックカーネルですが、モジュールごとに必要に応じてメモリーにロードするようになりました。逆に、WindowsはWindows NTのマイクロカーネルから出発して、現在はカーネルの機能が大きくなっています。
カーネルのうち、ハードウエアを直接操作する部分はデバイスドライバといいます。デバイスドライバは、サードパーティーが提供することが多いため、カーネルとは別の要素として扱うOSが多いです。
標準ライブラリは、APIの実装です。プログラムは、標準ライブラリを呼び出すことにより、APIを実行します。標準ライブラリは、メモリー、ファイルなどのOSが管理するリソースを使用する場合、カーネルを呼び出します。
カーネルの作りの違いは、標準ライブラリの構成にも現れます。例えば、Linuxでは全面的にカーネルで実装されているプロセスやスレッドは、Windowsではライブラリとカーネルで実装されています。LinuxのglibcやWindowsのkernel64(32).dllのようにすべてのプログラムに使用されるライブラリはメモリーに常駐しています。更新にはシステムの再起動が必要ですが、そうでないライブラリはファイルを置き換えるだけで更新できます。