OS: 構成要素ごとに機能を押さえる

 OSは、WindowsLinuxの標準インストール後のディスク使用量がギガバイト単位であることからも分かるように、巨大なソフトウエアです。したがって、OSを理解するためには、OSを構成要素に分けて見る必要があります。また、OSの構成を知ることは、パッチ適用判断などの実務にも役立ちます。パッチの対象がOSのどの部分で、その部分の役割が何かが分かれば、OSだからすべてのソフトウエアが影響を受けるという以上のきめの細かい影響調査を行えるようになります。

 何がOSを構成するかは、OSにより異なります。エンドユーザーにとっては、OSのインストールメディアに入っている、あるいはOSのインストーラーがインストールするソフトウエアは、すべてOSでしょう。逆の極端な例を挙げると、Linuxの開発コミュニティはOSの中核部分であるカーネルだけを開発しています。しかし、カーネルだけではコンピュータを起動して人間が操作することもできないので、カーネルだけがOSだという人はいません。

 確実にOSに入るのは、カーネル、標準ライブラリ、およびシェルです。
f:id:nonbei:20180608173624j:plain
OSの構成要素

 カーネルは、名前通りOSの核となる部分です。カーネルはメモリーに常駐し、ハードウエアの操作およびOS専用のデータをアクセス可能なCPUの特権状態で実行します。そのため、カーネルをアップデートするには、システムの再起動が必要になります。

 カーネルには、多様な機能を含んたモノリシック(一枚岩の意味)カーネルと、CPUの特権状態を要する必要最小限の機能だけからなるマイクロカーネルがあります。モノリシックカーネルは性能、マイクロカーネルは保守性に優れるので、この両者は、現在は歩み寄っています。例えば、Linuxモノリシックカーネルですが、モジュールごとに必要に応じてメモリーにロードするようになりました。逆に、WindowsWindows NTのマイクロカーネルから出発して、現在はカーネルの機能が大きくなっています。

 カーネルのうち、ハードウエアを直接操作する部分はデバイスドライバといいます。デバイスドライバは、サードパーティーが提供することが多いため、カーネルとは別の要素として扱うOSが多いです。

 標準ライブラリは、APIの実装です。プログラムは、標準ライブラリを呼び出すことにより、APIを実行します。標準ライブラリは、メモリー、ファイルなどのOSが管理するリソースを使用する場合、カーネルを呼び出します。

 カーネルの作りの違いは、標準ライブラリの構成にも現れます。例えば、Linuxでは全面的にカーネルで実装されているプロセスやスレッドは、Windowsではライブラリとカーネルで実装されています。LinuxglibcWindowsのkernel64(32).dllのようにすべてのプログラムに使用されるライブラリはメモリーに常駐しています。更新にはシステムの再起動が必要ですが、そうでないライブラリはファイルを置き換えるだけで更新できます。


IEはOSか?

 シェルは、プログラムの起動・停止、ファイルの作成・削除などを対話的に実行します。シェルは、また、ジョブのような一連の操作を自動的に実行するために、条件分岐やループなどのプログラム言語の機能を備えます。一般利用者、開発者、システム管理者の幅広い用途に応えるため、および以前のOSとの互換性のために、複数のシェルを提供するOSもあります。

 GUIによる操作を基本とするシステムでは、シェルもGUIになります。これは、デスクトップ環境でおなじみの機能で、ファイルの一覧表示、ファイルの種別に応じたアプリケーションの起動、メニューからのアプリケーションや管理ツールの起動を行います。

 かつてWebブラウザーInternet ExplorerIE)がOSの一部かどうかという論争がありました。IEGUIシェルと捉えればOSの一部となりますが、主機能をWebブラウザーと捉えると、OSの管理外のインターネット上にあるリソースにアクセスするプログラムなので、OSではないのではないかという反論が出てきたわけです。

 また、OSには、基本的な運用・管理ツールを含めることが多いです。商用システムの運用で使用する運用・管理システムと異なり、そのOSが実行するコンピュータのリソースだけを対象として、OSの起動・終了、基本的なファイル操作、リソース統計取得などの機能を提供します。


ソ-ス:OSは巨大なソフトウエア、構成要素ごとに機能を押さえる - 新人SEのためのOS基礎:日経 xTECH Active