以下の書籍を読んで行きます。
結構いい本みたいですねこれ(ステマ)。
なんかいろんな人がマサカリを投げてくれるので勉強になります。
というか、Linuxカーネル本は、ひたすら読んで行ってもわけがわからないし、読書会開いてもわけがわからないし、カーネルについては隠蔽されている部分が多いので、Ubuntu Linux使っててもわからないし、Linux Cross Reference読んでても巨大すぎて意味がわからないし、このようにひたすら舐めるようにして翻訳してコメント付け加えていくしか勉強法がないんですよね。
では今日も始めます。
これらのコンテキストは、広い範囲のカーネルの活動を表す。
前の記事で、「文脈」ではなく、「コンテキスト」だとの指摘を受けたので、今後はコンテキストを使用します。これらのコンテキストとは、プロセスのコンテキストと、割り込みのコンテキストのことだと思います。
事実、Linuxにおいては、任意の瞬間において、それぞれのプロセッサが、3つのうちの一つのことを実行していると一般化できる。
1、ユーザースペースにおいては、プロセスにおいて、ユーザーコードを実行する
2、カーネルスペースにおいては、プロセスのコンテキストにおいて、特定のプロセスを代表して実行する
3、カーネルスペースにおいては、割り込みのコンテキストにおいて、プロセスに関連せず、割り込みを操作する。
ええとつまり、ここで重要なのは、ある瞬間においては、一つのプロセッサにおいては、上に並べている3つのうちのただ一つが実行されていて、一つのプロセッサにおいては同時には2つ以上のことは実行されていないということだと思います。プロセスのコンテキストと、割り込みのコンテキストが同時に成り立つことはないと思います。ただ、同時になることはあるようには思います。なぜなら、マルチコアだった場合などがあるからです。
割り込みのコンテキストにおいては、プロセスには関連しないんですね。
このリストは包括的である。たとえ、例外的なケースにおいても3つのうちの一つに当てはまります。例えば、アイドリング状態の時、カーネルにおいてのプロセスのコンテキストにおいての、Idle processが実行しています。
僕自身のイメージとしては、アイドリング状態の時は、CPUが動作を止めているイメージです。
次の章に続きます。
##Linux Versus Classic Unix Kernels
共通の先祖と同じAPIを持つため、モダンなUnixカーネルは、たくさんの設計においての性質を共有している。
Mac OSもUnixだと思いますが、Mac OSのカーネルの性質をあんまり知らないため、ここら辺のことはよくわからないです。コマンドなどについては、LinuxもMac OSも同じことは知ってますが、コマンドはもしかしたら、カーネルとはあんまり関係ないかもしれないです。
いくつかの例外はあるが、Unixカーネルはモノリシックの静的なバイナリである。
モノリシック出てきましたね。他の言葉に、マイクロカーネルという言葉があるようです。モノリシックとは、システム全体が一枚岩で動いていることを表現しているようです。
それは、システムが一つのアドレススペースにおいて、一つの、大きな、実行可能なイメージとして存在することである。
まさに一枚岩の記述ですね。対して、マイクロカーネルにおいては、複数の部分に動的に分割できるようです。
Unixのシステムは典型的にはページングメモリ管理ユニット(paged memory-management unit)を必要とします。このハードウェアはシステムに、メモリ保護とそれぞれのプロセスにユニークな仮想アドレス空間を提供します。
メモリ管理ユニットというハードウェアが存在するんですね。メモリ保護はセキュリティ上は重要な機能かもしれません。それぞれのプロセスに特有の仮想アドレス空間ということは、プロセスごとにアドレス空間は分けられているということでしょうか。
Linuxは歴史的には、MMU(メモリ管理ユニット)を必要としていました。しかし、特別なバージョンにおいては、それなしで、実行できる。それは、きちんとした機能で、Linuxが、MMUがないとても小さい組み込みシステムで実行することを可能にする。しかし、そうでなければ、実用的というより学術的なものである。今日においては、シンプルな組み込みシステムでさえ、MMUのような進んだ機能を持っている。この本では、我々はMMUに基づいたシステムについて語る。
メモリ保護機能は、セキュリティ上は重要な機能だと思うので、小さいIoT機器でも付いてて欲しいですね。最近はIoT機器に関するセキュリティも叫ばれてますから。学術では、MMUなしとか研究されていると書いてますね。
では、また次回