コンピュータにはメモりが付き物である。このメモリは、どのように使われている のだろうか? メモリは、
メモリは、OS下の複数のプロセス、ユーザから要求されている。この時に、
個々のプロセスでは、あたかも自分一人がCPUとmemoryを専用している下のように
見えた方が良い。これは仮想プロセッサと呼ばれるものであった。仮想プロセッサの
メモリと実際のメモリを結びつけるには、アドレス変換(Address Translation)
という技術を用いる。
論理メモり空間(Logical Address) を物理メモり空間(Physical Address)に 変換するメカニズムがアドレス変換である。これにより、メモリの割り当て、 返却によるメモリ使用の細分化(fragmentation)を防ぐことができるだけでなく、 複数のプロセスに対して、一つの物理メモリを、あたかも自分の固有のアドレス 空間(Memory Spcace)であるかのように割り当てることができる。 変換の単位は、frame (or page ) と呼ばれる。普通は、512byte - 4096byte 程度である。32bit CPU の場合、メモリのアドレスは、0x00000000 から 0xffffffff の16進数で表すことができる。Page size ごとに frame 番号 が振られていて、メモリのアドレスは、frame 番号と、frame の中の offset で表される。例えば、Page size = 0x10000 ならば、0x80000500 のアドレスのframe番号は 0x8000 で、offset は 0x0500 となる。 (0x80000500 = 0x8000 x page size + offset )
Page size = 4096 の時に、メモリアドレス 0x01234321 の frame 番号と、 offset を16進数で計算せよ。0xfffffecc はどうか?
0x01234321 と 0xfffffecc に対応するアドレス変換テーブル(page entry table)の offset はいくつか? それぞれに対応するpage のアドレス変換テーブルの内容は、それぞれ0x1344と、0x1233 で あった。それぞれのアドレスはどのように物理アドレスに変換され るか。
ただし、この表も、64bit/32bit のメモリ空間に対しては、かなり大きくなって しまう。
frame size を4kbyte とした時に、32bit memory spaceで必要なpage table の大きさを求めよ。 64bit ではどうか? 7Gbyte (Enterprise 3000のメモリのフル実装)ではどうか? 一つのpage table entry の大きさは32bitの時に16byte、64bitの時に32byteとする。
ただし、このテーブルが全部必要なわけではない。論理アドレス4Gの
プロセスでも実際に使われるのは1M程度なのが普通である。
そこで、この変換を2重3重にしてテーブルそのものを必要な
部分だけ割り当てるようにする。
また、この多重変換により、ページテーブル
自身を仮想記憶上に置くことができるので、変換テーブルが大きくなっても
実メモリを圧迫しなくなる。
32bit address に対して、 2重の変換を行った時に、frame size 2kbyte, p1 のbit幅8とする時に、 p2 のbit 幅はいくつか?
この変換はhardware にとっても重いので、このpage entry を
cache するという技術が使われる。これを、TLB (Traslation lookup
buffer) という。最近では、プロセスごとにTLBを持つTagged TLBという
機能も使われている。
今日できなかった残りの問題を以下のサブジェクトでE-Mailで、 kono@ie.u-ryukyu.ac.jp まで来週までに提出すること。
Subject: Report on Operating System Lecture 6/11来週はマルチメディア・フェアのため休講とします。参加は特に強制しませんが、 興味がある人は見にいくと良い。