Operating System Lecture 6/13

Operating System Lecture 6/13

今週の宿題

問4は宿題にします。レポートはメールで
    Subject: Operating System Lecture 6/13
というように、課題を出した日付をサブジェクトに入れたメールで 提出して下さい。しめきりは、2週間後(6/27)とします。

授業に出なかった人は、問題を提出するのを忘れないこと。ちゃんと 出していれば出席扱いにします。Subject は以下のようにしてね。

     Subject: Practice on Operating System Lecture 6/13



先週の復習 -- Memory Management

論理メモり空間(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 )





問1

Page size = 4096 の時に、メモリアドレス 0x01234321 の frame 番号と、 offset を16進数で計算せよ。0xfffffecc はどうか?

問2

0x01234321 と 0xfffffecc に対応するアドレス変換テーブル(page entry table)の offset はいくつか? それぞれに対応するoffset のアドレス変換テーブルの内容は、それぞれ0x1344と、0x1233 で あった。それぞれのアドレスはどのように物理アドレスに変換され るか。



Segmentation

もし、CPUが16bitデータしか扱う能力がない時に、32bitアドレスを扱いたい 時にはどうすればよいだろうか? 80x86 architecture などでは、segmentation という技術が使われている。これは、CPUから出力されるアドレスをCPUの アドレスレジスタだけでなく、Segment Register との組で表すものである。 通常は単なるshift + 加算で処理が行われる。

Paging を行う場合は、Segment RegisterにはPage Entry Tableそのものを 使っても良い。この場合は、Segment Register の数値にはさまざまな意味が 与えられる。

8086 では、Segment register は4つ(CS,DS,ES,SS)あり、アドレス を指示できるアドレスレジスタは6つである(BX,SI,DI,BP,SP,IP)。 それぞれ16bit幅であり、Segment register は 4bit shiftされて アドレスレジスタに加算される。CS:IP で CS segemnet を使って、 segment の中で IP のoffset を持つアドレスを指示することになる。


問3

8086 で表すことのできる最大のメモリ空間の大きさはいくつか? CS の内容は、0x1234, IP の内容は、0x0ffe であった。CS:IP で 表される論理アドレスはいくつか?

問4

Segmentation に対して、一つのレジスタでアドレスを指示する方法を Linear address (線形アドレス)という。Paging をおこなうシステム において、Segmentation と Linear address の優劣を比較して論ぜよ。 (ヒント: アドレス空間が大きい時、小さい時を比較しよう。プログラム のしやすはどうか? システムプログラムはどちらが書きやすいか? 効率は? )

仮想記憶 Virtual Memory

メモリはいくらあっても足りないものだが、そのメモリはいつも使われている わけではない。一方、メモリと磁気ディスクのような大容量外部記憶を比較すると、 常に外部記憶の方が安価である。そこで、paging されたメモリの一部を 磁気ディスクに移すという方法が考えられる。これは、メモリ上にはない メモリ空間を作ることになる。これを仮想記憶(Virtual Memory)という。

技術的には、Page Entry Table に、そこが実際にメモリが割り当 てられているかどうかを示すbitを付けるだけでよい。もし、CPUが メモリの割り当てられていないPage Entry Tableをアクセスすると、 CPUは割り込みを発生する。その割り込みにより、OS がそのPageを 実際のメモリに割り当て、ディスクから内容を複写する。 これをPage in, Swap in という。この時に、 CPU は割り込みを起こした命令を正確に再実行する必要がある。 メモリで使う確率が少ないものをディスクに追い出すことをSwap out またはPage outという。

ディスク上には、 仮想メモリの内容をとって置く場所を確保する 必要がある。これをSwap領域という。Swap 領域は、特別なDisk 領域を取る場合もあるし、普通のファイルとして実現する場合もある。 さらに、Network を経由してSwapしてもよい。