などの意味を持つ単語である。類義語としてnuclear(こちらも種や核などの意味)がある。もしかして→colonel(大佐、カーネル)
そこから派生して、
概要
OSとは「コンピュータのハードウェア資源を管理し、プログラムが動作する環境を提供するソフトウェア」と定義することができ、このソフトウェアを一般に「カーネル」と呼ぶ。カーネルには「システムコール」と呼ばれるソフトウェア層を介してアクセスする。[1]
OS のうちどこまでがカーネルなのかは、人や本や実装による。通常、カーネルの機能とされることが多いのはプロセス管理、メモリ管理、ファイルシステム、デバイスドライバ、ネットワークなどである。これらを全て単一のカーネルに実装したものがモノリシックカーネルであり、部分的に分離したものがマイクロカーネルやハイブリッドカーネルである。
OSの機能としてはこの他、ユーザーインターフェース(シェル)、システムユーティリティ、ライブラリ等があるわけだが、これらはカーネルとは分けられることが多い。
カーネルの説明の例
一つの説明として、「CPUの特権モードで動くプログラム全体」という考えかたがある。
一般に CPU には、特権モードとユーザモードが存在する。
ユーザモードでは、ハードウェアへのアクセスや、他のアドレス空間へのアクセスは禁止されている。
特権モードでは、すべてのハードウェアへのアクセスが可能である。
プロセスは、このユーザモードで動くことで、暴走したとしても他のプロセスへ悪影響を防ぐことが可能になる。
しかし、ユーザモードだけではハードウェアへのアクセスやプロセス間の通信等ができず、特権モードが必要になる。
この時、特権モードで動き、適切なプロセスに正しいアクセスコントロールのみを許すのがカーネルである。例えば、一般のプロセスがSSDにアクセスする場合、カーネルのシステムコールを使ってのみアクセスできる。このプロセスは、ファイルやディレクトリは変更できるかもしれないが、「ファイルシステムを破壊する」という間違った行為は不可能である。
カーネルの設計による分類
モノリシックカーネル
OSの全ての基本サービスが単一のアドレス空間内で実装されている。うまくチューンすると実行効率に優れるが、例えばデバイスドライバなどにバグがあるとシステム全体を道連れにクラッシュすることになる。
MS-DOSやCP/Mなど昔のOSは全てモノリシックカーネルだった。現在も広く使われているOSでは Linux や FreeBSD などが有名であるが、これらの現代的なモノリシックカーネルは、メンテナンス性や安定性を改善させる目的で全てのデバイスドライバを最初からロードせず、必要に応じてカーネルに結合させることができるようになっており(ダイナミックローディング)、マイクロカーネルの長所を部分的に取り入れている。
マイクロカーネル
メモリ管理やプロセス間通信など必要最低限の機能のみ、特権モードで実装されている。
ネットワークやファイルシステム、デバイスドライバなどユーザモードで動かせるものは、できるかぎりユーザモードで動かす。カーネルの設計が単純化でき、安定性は高いが、実行効率はやや低め。
純粋なマイクロカーネルは超高信頼性が要求される産業システムや、効率より応答性能が最優先のRTOS実装などで使用される。
「マイクロカーネル」という名前からはOSが小さくなるんじゃないかと期待しそうだが、あくまでも小さいのは特権モードで動くコアだけである。通常はこの周りにファイルシステムやら何やらの実用上必須機能が載ってくるわけで、そのOS全体が大きいか小さいかは設計による。
UNIX系ではMachやMINIXなど。TRONの一つであるT-Kernelもこの実装である(TRONの中にはモノリシック実装のものもある)。
RTAIやMkLinux、RTLinuxのように、モノリシックの権化のようなLinuxもマイクロカーネル移植されていたりする。
ハイブリッドカーネル
大抵はマイクロカーネルの派生で、カーネル以外のいくつかのモジュールを特権モードで動かして高速化したものである。モノリシックよりは融通が利くが、マイクロカーネル程安定しない。
現在PCでメジャーなWindows、macOSは共にハイブリッドカーネルである。PC-UNIX系ではDragonFly BSDがハイブリッドカーネルを採用している。
近年のハイブリッドカーネルOSでは、信頼性とセキュリティの向上のため、ネットワーク機能や一部の基本的なデバイスドライバのみ特権モードで動かすようになってきている。
WindowsVistaは従来全てカーネルモード(特権モード)で動かしていたデバイスドライバをカーネルモードドライバとユーザーモードドライバに分離。64ビット版のドライバをカーネルモードで動かすにはデジタル署名を必須とした。また、Windows NT4.0でカーネルモードに移されたウィンドウマネージャおよびグラフィックデバイスインターフェイス (GDI) の大半をユーザーモードに戻した。
macOSは特権モードで動くカーネル機能拡張(kext)とユーザーモードで動くシステム機能拡張の2通りの機能拡張モジュールを持つが、macOS Big Sur以降はサードパーティによるkextの使用は推奨されていない。
関連項目
脚注
- 6
- 0pt