記 憶 管 理(1)

40
記 記 記 記(1) 記記記記記記記記記記記記

description

記 憶 管 理(1). オペレーティングシステム 第8回. 記 憶 管 理 と は(1). プログラムを実行するには,メモリに格納 メモリのどこに格納するのか? プログラムの実行が終わったら,格納場所(メモリ)はどうするのか?. 記 憶 管 理 と は(2). プログラムに必要なメモリを 割り当てる 格納する場所を決める 不要になったメモリを 解放する 終了したら,別のプログラムを格納できるようにする ⇒ 別のプログラムを実行できるようにする という OS の機能( メモリの割当て・解放 )を“ 記憶管理 ”. 記 憶 管 理 と は(3). - PowerPoint PPT Presentation

Transcript of 記 憶 管 理(1)

Page 1: 記 憶 管 理(1)

記 憶 管 理(1)

オペレーティングシステム第8回

Page 2: 記 憶 管 理(1)

記 憶 管 理 と は(1) プログラムを実行するには,メモリに格納

メモリのどこに格納するのか?

プログラムの実行が終わったら,格納場所(メモリ)はどうするのか?

Page 3: 記 憶 管 理(1)

記 憶 管 理 と は(2) プログラムに必要なメモリを割り当てる

格納する場所を決める 不要になったメモリを解放する

終了したら,別のプログラムを格納できるようにする ⇒ 別のプログラムを実行できるようにする

という OS の機能(メモリの割当て・解放)を“記憶管理”

Page 4: 記 憶 管 理(1)

記 憶 管 理 と は(3) 同時に実行するプログラムが一つなら,常に

同じ場所でよい

では,実行するプログラムが複数ならどうするか?

Page 5: 記 憶 管 理(1)

スワッピング(1) 三つのプログラム A , B , C A を実行する時は, A をメモリに B を実行する時は, A を外部記憶装置

( HDD など)に退避し, B をメモリに C を実行する時は, B を退避し, C をメモ

リに A を実行する時は, C を退避し,外部記憶装

置に退避した A をメモリに …

Page 6: 記 憶 管 理(1)

スワッピング(2) コンテクストスイッチの時に,プログラムを

入れ替える 入れ替えに時間がかかる

メモリの容量が増えて,複数のプログラムが同時に格納できるようになった(とする)

Page 7: 記 憶 管 理(1)

単純な方式(1) メモリの最初から,

順に格納する

三つのプログラム A ,B , C が格納されている

B が終了( B が格納されていたメモリを再利用)

Page 8: 記 憶 管 理(1)

単純な方式(2) メモリの空いている場所(使える領域)が,

散らばる メモリの断片化

今の場合, C の格納場所をずらせば, D は格納できる

しかし,メモリの大きさより,大きなプログラムは格納(つまり,実行)できない

Page 9: 記 憶 管 理(1)

固定区画方式(1) メモリをあらかじめ

区切る

各区画にプログラムを格納し,実行する

Page 10: 記 憶 管 理(1)

固定区画方式(2) 二つのプログラムを

格納

区画に空きが生じる

メモリには余裕があっても,区画の大きさより大きなプログラムは実行できない

Page 11: 記 憶 管 理(1)

大 き な 問 題 プログラムを実行するためには,メモリに格

納する

メモリの大きさよりも,大きなプログラムを実行することはできない

メモリを大きくしても,それより大きなプログラムを実行したくなる

実行するプログラムが複数の場合は,合計

より多くのプログラムを実行したくなる

Page 12: 記 憶 管 理(1)

よ く 考 え て み る と プログラム全体をメモリに格納する必要はな

プログラムを分割し,実行するのに必要な部分のみをメモリに格納 必要ない部分はディスクなどの補助記憶装

置に格納 実際には,全体をディスクに格納しておき,

必要になった部分だけをメモリに格納する

Page 13: 記 憶 管 理(1)

二つの方法(1) 実際のメモリの大きさよりも,大きなプログ

ラムを実行できるようにする二つの方法 オーバーレイ 仮想記憶

Page 14: 記 憶 管 理(1)

二つの方法(2) いずれの方法であっても

プログラムをどのように分割するのか 分割した部分のどれを,メモリのどこに格

納するのか ということなどを決めなければならない

Page 15: 記 憶 管 理(1)

オーバーレイ

重ね割付け

Page 16: 記 憶 管 理(1)

オ ー バ ー レ イ(1) プログラムの分割方法や,実行に必要な部分

の指示を利用者(プログラマ)が行う

overlay 重ね割付け

どちからかというと古典的手法

Page 17: 記 憶 管 理(1)

オ ー バ ー レ イ(2) A , B , C , D

の 4 つの部分(モジュール)にプログラムを分割

プログラムの実行開始→ A から

A が B を呼び出す

B が終了→ A に戻る( B は不要になる)

A が C を呼び出す C が終了→ A に戻る

( C は不要になる) A が D を呼び出す D が終了→ A に戻る A が終了→プログラムの終了

Page 18: 記 憶 管 理(1)

オ ー バ ー レ イ(3) 今の関係を図式化すると

上のモジュールが,下のモジュールを呼び出す   ↓同時にメモリに格納

横に並んでいるモジュールは,同時にメモリに格納する必要はない

Page 19: 記 憶 管 理(1)

オ ー バ ー レ イ(4) A が B を呼び出すときに, B をメモリに格

納する A はメモリに残しておく

メモリを読み込む単位をオーバーレイセグメントと呼ぶ 先の例では,モジュール=オーバーレイセ

グメント いくつかのモジュールをひとつのオー

バーレイセグメントとする場合もある

Page 20: 記 憶 管 理(1)

オ ー バ ー レ イ(5)この大きさのメモリが

あれば,実行できる

B , C と D は同時にメモリに格納されない“B が C を呼び出す”というようなことは不可

Page 21: 記 憶 管 理(1)

オ ー バ ー レ イ(6) プログラムの分割と必要な部分の指示はプロ

グラマが行わなければならない

プログラムのことは,プログラムを作った者がよく知っているはず

しかし,易しいことではない

Page 22: 記 憶 管 理(1)

仮 想 記 憶

Page 23: 記 憶 管 理(1)

仮 想 記 憶(1) プログラムの分割,メモリへの読み込みを自

動的に行う OS 行う

プログラム全体がメモリに格納されているものとする ただし,そのメモリは実際のメモリでは

なく,仮想メモリ(仮想記憶)

Page 24: 記 憶 管 理(1)

仮 想 記 憶(2) プログラムが格納さ

れている仮想記憶を一定の大きさのページに分割 ここでは,ページ

の大きさを 4096バイトとする

プログラムの内容ではなく,大きさで分割

Page 25: 記 憶 管 理(1)

仮 想 記 憶(3) 実際のメモリ(実記

憶)も,ページと同じ大きさのページ枠(ブロック)に分割

Page 26: 記 憶 管 理(1)

仮 想 記 憶(4) 仮想記憶はディスク

などの補助記憶装置

プログラムの実行に伴い,必要なページのみを実記憶のページ枠に格納

Page 27: 記 憶 管 理(1)

仮 想 記 憶(5) 以上のことを, OS が行う

仮想記憶の大きさ > 実記憶の大きさであってもかまわない

プログラマにメモリの大きさを意識させない

Page 28: 記 憶 管 理(1)

仮 想 記 憶(6) 各ページには,ペー

ジ番号

各ページ枠(ブロック)には,ページ枠番号(ブロック番号)

Page 29: 記 憶 管 理(1)

仮 想 記 憶(7) ページ表 仮想記憶の各ページに対して

実記憶に格納されている ページ枠の番号又はページ枠の先頭番地

実記憶に格納されていない そのことが分かるような印

ここでは省略しているので注意!

Page 30: 記 憶 管 理(1)

仮 想 記 憶(8) ページ表の例

ページ枠の最初の番地の場合もある

1 ならば,実記憶にあり0 ならば,なし

Page 31: 記 憶 管 理(1)

仮 想 記 憶(9) プログラム中でデー

タや命令を参照 データや命令の番地

は 格納されている

ページ番号 そのページの先頭

からの相対番地( 0 ~ 4095 )

前提ページの大きさを

4096としている

ページ 1 の先頭からの相対番地

Page 32: 記 憶 管 理(1)

仮 想 記 憶(10) 仮想記憶の 4098 番地

ページ番号が 1 で,相対番地が 2 である(相対番地は 0 ~ 4095 : 12 ビット)

Page 33: 記 憶 管 理(1)

仮 想 記 憶(11) 仮想記憶のページ 1

が, 65536 番地から始まるページ枠に格納

仮想記憶の 4098 番地の実記憶での番地

4098 番地は

ページ1の2番地

Page 34: 記 憶 管 理(1)

仮 想 記 憶(12) ページ番号 1 のページ

ページ表を調べると 65536 番地から始まるページ枠

実記憶での番地は 65536 + 2 = 65538 番地 ページ枠の先頭からの番地は,ページの先

頭からの番地と同じ(相対番地)

Page 35: 記 憶 管 理(1)

仮 想 記 憶(13) プログラムの実行に伴いある番地を参照 その番地のページ番号 ページ番号をページ表で調べる 該当ページが実記憶にない

ページフォールトという割込み 該当ページの実記憶への読み込みと

ページ表更新

Page 36: 記 憶 管 理(1)

仮 想 記 憶(14) 空いているページ枠がない

使用中のページ枠を空けて,そこに読み込む

空けるページ枠の決め方 ページ置換えアルゴリズム 次回

Page 37: 記 憶 管 理(1)

仮 想 記 憶(15) あるページがいつも,同じページ枠に格納

されるとは限らない 格納されるたびに変わると考えるべき

番地を参照するたびに,番地の計算を行う 動的番地変換

Page 38: 記 憶 管 理(1)

仮 想 記 憶(16) 仮想記憶や実記憶を同じ大きさに分割する

方式をページ方式

セグメント方式と呼ばれるものもある

Page 39: 記 憶 管 理(1)

ま と め 実際のメモリよりも,大きなプログラムを実

行したい 実行に伴い,その時,その時で必要な部分だ

けがメモリにあれば良い オーバレイ

どこが必要なのかの指示をプログラムが行う

仮想記憶 必要になった部分を OS がメモリに格納す

Page 40: 記 憶 管 理(1)