PDP-11/40で動作したUNIX V6のカーネルを理解するには、UNIX云々の理解も必要ですが、PDP-11の理解も必要です。カーネルが(旧いスタイルの)C言語で書かれているから、ソースを読めば何をしているか見当をつけることができるとしても、その前提にはPDP-11を深く理解していることが必要です。
PDP-11について深い理解が必要だとしても、いきなり全てを理解するのは無理ですから、まずはメモリ管理から勉強することにしました。PDP-11のメモリ管理は、11/40、11/45、11/70で違いがあるものの、11/40が基本のようです。『PDP-11/40 processor handbook』の「Chapter 6 Memory Management」を理解できるようにしたいと思います。
2024年現在主流のx86などのメモリ管理に比べれば、PDP-11/40のメモリ管理はシンプルです。わざわざ勉強なんかしなくても、理解できるだろうと言われてしまうかもしれません。それはその通りだとは思います。概念的な理解ならば、別に「勉強する」と意気込むほどのことではありませんが、UNIX V6のカーネルを読んでいく為に必要な理解をするには、それなりの勉強が必要だと思います。
PDP-11/40のメモリ空間は、仮想アドレス空間が16ビットなので、64Kバイトです。PDP-11は2バイトをワードとして扱うことを基本としているようなので、64Kバイトは32Kワードです。物理アドレス空間は、PDP-11/40や11/45では18ビットあるので、256Kバイト(128Kワード)あります。PDP-11/40のメモリ管理機構により、仮想アドレスが物理アドレス空間のどこかに対応されることになります。まず上位3ビットにより、8セットあるActive Page Registerの何れかが選択されることになります。64Kバイトが8分割されることになるので、8Kバイト(4Kワード)を単位として管理されています。
Active Page Register(APR)は、Page Address Register(PAR)とPage Description Register(PDR)の組み合わせで構成されています。仮想アドレスの上位3ビットによってAPRが特定され、そのPARによって物理アドレス空間における領域がPARによって指定されます。ここでPARで指定できるのは12ビットなので、18ビットある物理アドレス空間をバイト単位で指定することができません。PDP-11のメモリ管理では、6ビットで表現できる領域として64バイト(32ワード)を最小管理単位としています。これを「ブロック」と呼んでいるようです。PARによって物理アドレス空間上の位置が特定されますが、それは先頭位置であり、そこから確保されている範囲はPDRで指定されています。最小1ブロック(すなわち32ワード)で、最大128ブロック(つまり4Kワード)です。
このようにして仮想アドレスが物理アドレスにAPRにより変換されます。『PDP-11/40 processor handbook』の「Figure 6-4 Construction of a Physical Adress」に概念図が掲載されていますが、別に複雑ではありません。UNIX V6としては、カーネルがメモリ管理できるようにするために、ブートストラップ処理の中で初期設定をおこなっています。ブートストラップ処理の最初の段階では、メモリ管理が無効状態なので、仮想アドレスとは言っても現実の物理アドレスと一致しています。しかし初期設定が済めば、直ちにメモリ管理が有効となり、仮想アドレス空間が現実の物理アドレス空間の何処に割り当てられることになるのか、きちんと理解しておかないとカーネルを勉強したことにはならないでしょう。
0 件のコメント:
コメントを投稿