未来のいつか/hyoshiokの日記

hyoshiokの日々思うことをあれやこれや

Intel Manualの読み方

昨日に引き続いてLinux Kernelがらみのお話を。カーネルを読むための基礎知識としてプロセッサーアーキテクチャの詳細な理解が必要である。ページングがどーだとか、例外処理がどうだとか、もうちょっと細かいところになるとキャッシュがどうだとか、スーパーパイプラインだ、スーパースカラーだ、ハイパースレッディングがどうだとか。アーキテクチャが変わってもデータ型の概念とかメモリ階層とか例外処理、割り込みなどの概念はある意味共通である。そーゆー概念の正しい理解が必須である。その理解を得るために、マニュアルを読まなければいけない。(当たり前だけど)

そこでインテルのマニュアルである。カーネルを読むための基礎知識として下記を読む。 The IA-32 Intel(R) Architecture Software Developer's Manual, Volume 3: System Programming Guide *1http://developer.intel.com/design/pentium4/manuals/253668.htm 英語だけれど我慢して読む。読了すれば新しい地平線が見えてくる(はづだ)。PDFフォーマットのマニュアルは無料で読めるのでノートPCにでもコピーして読もう。通勤時間を有効に活用したいならば、マニュアルを印刷して片道10ページでも20ページでも読もう。

昨日話題にしたページングの話は第3章のProtected Mode Memory Managementの3.7.6 Page-Directory and Page-Tabele Entries のあたりを理解しないといけない。90ページの図3−14などをじっくり見よう。あるページの保護に関わるビットは、ビット1のRead/Writeおよびビット2のUser/Supervisorである。Read/Writeビットが0の場合、そのページ(ないしはページのグループ)は書き込みができない。(読み込みのみ許される)。1の場合は書き込みも許される。User/Supervisorフラグは0の場合Supervisorモードで1の場合はUserモードである。特権レベルによって許される操作も異なる。

あるページを実行禁止したり許可したりすることは当然このページテーブルのレベルで行われるべきだと思うが、残念ながらIntelのマニュアルにはまだ詳細の記述は見当たらない。*2

Linux Kernelプログラマになる第一歩はIntelの上記のマニュアルを隅から隅まで読むことである。http://itpro.nikkeibp.co.jp/members/NSW/ITARTICLE/20030619/2/なども参照のこと。

*1:http://itpro.nikkeibp.co.jp/members/NSW/ITARTICLE/20030619/2/ph3.html (インテルから送られてきたプロセッサのドキュメント。英文780ページ。ひたすら読みつづけたので、ボロボロである)

*2:64-bit Extension Technology Software Developer's Guide Volume 1 http://developer.intel.com/technology/64bitextensions/300834.htm