第6章 メモリ管理
2002/06/28 第11回
メモリ管理については、すでに歴史のところで触れているので思い出しながらやってください。
<<大原則>>
・ノイマン型のコンピュータはメインメモリ上にプログラムを置いておかなければいけません。
・CPUが遊ばないで動く可能性が高くなるから、たくさん置いておきたい(多重プログラミング)
では、どうやって割付けるのでしょうか?と、いうことで↓
メモリ割付け(memory allocation)の方法(6-1)
・メインメモリのスペースの一部をカーネル(OSのプログラム)が占有して使っています。
・残りの空きの部分にユーザはプログラムを割付けることができます。
・その際、(user)プログラムはカーネルに対してアクセス(access)することができないようにしたい。
(カーネルを壊される可能性があるので)
・そこで、「記憶保護(memory protection)」という垣根を作って、
下(user)から上(kernel)には越えられないようにする。(上から下にはいける)
カーネル(kernel)…OSの核になる部分。スーパーバイザ(supervisor)ともいう。
- この割付け方法は、どのような場面に使われるか。
- 初期の段階(昔のパソコンのOS)で使われた。(昔は1つしかプログラムを置けなかった)
|
ほんでは、数を増やしましょう!ってことで↓
メインメモリの中に境界(垣根)を作り、(図でいうと)カーネルを除いて3つのエリアで区切りました。
その際、境界(垣根)は固定してあったので簡単には動かせませんでした。
それで問題になったのが
・大きいプログラムを入れることができない(スペースに入らない)
・多重度を3で固定すると、4つ以上は入れることができない
*多重度…メインメモリに入れるプログラムの数(今だと「3」に固定)
ほんでは、垣根をとっぱらっちゃおう!ってことで↓
プログラムを置いたときに、「記憶保護(垣根)」ができるようにした。
なので、いくつでもプログラムが置けるようになりました。
しかし、問題になったのが
・プログラム1と4が終わってその部分が空いている場合、ちょうどよく入るプログラムがあれば
問題ナッシングですが、大きいプログラムしかない場合にさてどうしよう。
ほんで、できたのが↓
(6-4の図の続き)
1と4の容量を合わせれば入るプログラム(仮に6とする)があるとき、プログラム5を上に動かして
空いたところにプログラム6を置けるようにした(再配置)
つまり、再配置ってのは、「メモリ上のプログラムを動かす」ってことですね。
ほんじゃあ、どうやって再配置するのさ?ってことで↓
ロードと再配置(6-5-A)
1)大元のプログラム(自分で書いたプログラム)があります。
☆ここで重要なのはJUMP命令があるということ。早い話がループ(繰り返し)です。
ここでは、「38番地にJUMPしなさい」っていう命令があったとします
2)プログラムをロード(load)します。
☆つまり「メインメモリに入れる」ってことです。空いているところならどこでもOKです。
その際に問題になるのが、
・大元のプログラムはアドレスが0から始まるのに対して
・ロードしたあとのプログラムは、空いているところに適当に入れたので0から始まっていません。
・なので、例えばメインメモリの100番地から始めたら38番地を138番地にしないとだめ。
200番地から始めたら238番地にしないといけない。
・それって、めんどくさい(変えてはだめなやつと、変えなくてはいけないやつがあるので)
3)そこで、再配置レジスタを使いましょう。
再配置レジスタに100を入れておけば、プログラムはいじらなくてすみます。
200番地に再配置するときには、再配置レジスタを200にするだけ!
そうすれば、ハードが自動的に38に100を足してくれる。
- 再配置レジスタを使うと、どのような利点があるか。
- (再配置があるから)メモリ上で簡単にプログラムを動かすことができる!
でも、本当はメインメモリの中でプログラムは動かしたくないんだよね。ってことで↓
ページ割付けについては、プリント3-2-E-3でやってるで、各自復習しておきましょう。
・プログラムを、同じ大きさ(だいたい4KB)に分割します。
(☆プログラムはページに。メインメモリはフレームに分割する。もちろんフレームもページと同じ大きさだよ)
・メインメモリの空いているフレームに、1ページずつ入れていく(連続していなくていい)
・そのとき、どのページがどのフレームに置かれているかの対応表が必要だからPT(page table)がある。
・メインメモリのPTは、(CPUにある)PBR(page base register)がPTの先頭のアドレスを指している。
つまり、ページ方式を使うと再配置をしないで済むわけなのです。
仮想記憶(6-7)
仮想記憶については、第2章2-3-Aでもやっているのでそっちでまとめて勉強しましょっか