UNIX 6th code reading - virtual address

初めての方はこちらを参照 http://d.hatena.ne.jp/takahirox/20101024/1287923014

はじめに

今回は6章です。内容が重いので2回以上にわけます。
今回は本題に入る前の準備です。

仮想アドレス

本題に入る前に、仮想アドレスと物理アドレスの関係を把握しておくと理解が深まる。

メモリはページという単位で管理される。ページについての詳細は上記リンク先などを参考。

仮想アドレスから物理アドレスへのマッピング

物理アドレスを直接用いることは基本的になく、仮想アドレスを用いてメモリにアクセスする。
仮想アドレスは物理アドレスマッピングされる。それにより、物理メモリへのアクセスが実現される。

  • メリット
    • 仮想アドレスと物理アドレスのサイズが異なっていても、それを気にすることなく扱える
      • CPU&UNIBUSとPDP11ではそれぞれアドレッシングに用いるbit数が異なるようなのだが(下記の引用参照)、プログラム側でそれを気にする必要がない。
    • メモリに対するアクセス管理が実現できる。
    • カーネル用の空間とユーザ用の空間を分離できる。また、それをプログラム側で意識する必要がなくなる
    • 物理アドレスを直接用いた場合、連続した領域を確保するのは難しく、メモリの使用効率が下がる
    • どのプログラムでもアドレスを0から考えることができる。物理アドレスを直接扱っていたら、各プログラムの相対アドレスが必要になる
(PDP11 Handbookより引用)
Although the PDP-11 Family word length and operational logic is all 16-bit length,
the UNIBUS and CPU addressing logic actually is 18-bit length.

なお、上位4K wordはUNIBUS I/O device register用に用いられる。
なので、仮想アドレスの最上位4K wordは物理アドレスの最上位4K wordにマッピングされる。

絵で見てわかる、マッピングの仕組み

Active Page Register(APR)と呼ばれる、2つ1組のレジスタを用いてマッピングを実現している。
APRはPage Address Registers(PAR)とPage Descriptor Registor(PDR)の2つから成る。
PARは各ページの物理アドレス上の基底アドレスに関する情報を保持し、
PDRは各ページのブロック数やアクセス可 or 不可などの情報を保持する。


このAPRを用いて、仮想アドレスを物理アドレスへとマッピングする。
APRは8組あり、仮想アドレスの上位3bit([15:13])で選択される。


APRカーネルモード用とユーザーモード用の2セットが用意されている。
APRの切り替えはPS(Processor Status Word, 2章参照)の現モード(15, 14bit)で行われる。
これにより、カーネルモードとユーザーモードで使用する物理メモリの空間が分離される。


レジスタのフィールドはPDP11 Handbookを参考。

終わりに

必要を感じたら、ページについてのメモも書きます。

次回は6章の本題に入ります。