こんにちは!
ナビゲータのEVEです。
本日は、前回一太郎がクラッシュしたことにより失われた、Ubuntuに関する調査報告をしようとしたのですが、調べているうちに、Ubuntuそのものを理解しようとした場合、カーネルを知らないと理解できないのではという結論になり、本日は、カーネルに関する調査結果をご報告します。
[カーネルって?]
カーネルという用語は、Linuxの文章を読んでいると、頻繁に出てくる非常に気になる単語です。
その機能は、
1)プロセス管理
2)メモリ管理
3)デバイス管理
4)システムコール
であり、OSの中核的な機能を有し、ソフトウェアとハードウェアの連携を管理します。
1)のプロセス管理は、アプリケーションの実行を許可し、ハードウェア操作を容易にすることです。
2)のメモリ管理は、すべてのメモリへのアクセス権を有し、すべてのプログラム、データの管理を行います。そのメモリには、ストレージ上に作成した仮想メモリも含まれます。
3)のデバイス管理は、ドライバが、カーネルの定めたインタフェースからデバイス固有のインタフェースに変換したものを、送受し制御することを指します。
最後のシステムコールは、例外処理や割り込み処理などを指し、よく情報処理技術者試験などに出題される機能になります。
[カーネルの種類]
カーネルといっても複数種類あります。その種類は大別して、
1)モノリシックカーネル
2)マイクロカーネル
3)ハイブリッドカーネル
があります。
1)のモノリシックカーネルは、全OSサービスはひとつのカーネル空間内に存在し、カーネルスレッド上で実行されます。文章だけで理解するのは私自身も難しいのですが、一つの空間でOSで管理すべき情報を保持し、OSまたはデバイスからの命令の都度スレッドという形で実行されるという事だと理解しました。
Unixは、この方式を採用しています。実装自体は容易であるそうなのですが、システム構成要素間の依存関係が複雑なため、デバイスドライバに問題があった場合、その影響が全システムに及びます。
2)のマイクロカーネルは、従来のカーネルから一歩進化し、最小化したカーネルだけをロードし、ハードウェアとのインタフェースは、ユーザ空間(OS空間ではない)に存在するサーバープログラムとのインターフェースにより実現しています。
但し、特権モードで実行した場合は、OS空間にロードされます。
このマイクロカーネルを導入することにより、
・保守は相対的に容易である
・パッチの評価が容易である
・すばやく開発でき、多くの場合カーネルを再起動しなくとも評価可能
・サーバで障害が発生しても、運用上のミラーで代行可能なことが多く、バグへの耐性が高い
というメリットがあります。
3)のハイブリッドカーネルは、WindowsNT系OSで用いられている方式で、説明を読むと、基本モノリシックカーネルなのですが、デバイスドライバなどの一部は、ユーザー空間においてサーバープログラムという形式で実行するという方式らしいです。但し、ウィッキペディアを読むと、モノリシックカーネルの特性を一部取り入れ、拡張したという記述となっています。
それ以外にも、ナノカーネル、エクソカーネルなどがあるらしいですが、実験段階または説明が不足しているため、ここでの紹介は差し控えたいと思います。
[カーネルのプログラミングの難易度]
カーネル開発はプログラミングの中でも複雑で難しいタスクのひとつと考えられています。オペレーティングシステムの中核部であるため、高い性能を要求されるため、高度なプログラミングテクニックが求められるのと同時に、正しく設計し実装しなければなりません。加えて、サードパーティから提供されるプログラムも考慮し設計しなければならないため、多様性に加え、制限されることもあり、設計、プログラミングを難しくしています。
[最後に]
カーネルについて、なんとなく理解していただきましたでしょうか?私も、なんとなく理解できたような気がします。
なんとなく理解した上で、明日以降Linuxについて調べて行きたいと思います。
では、また!
■カーネル(Wikipedia)
https://ja.wikipedia.org/wiki/%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image