主記憶管理(メモリ管理)

主記憶管理(メモリ管理)
z プログラムは主記憶上で実行される
z プログラムやデータはファイルとして補助記憶装置に格納されている
z 複数のプログラムを同時に主記憶上で実行する(マルチプロセス)
OSが管理すること:主記憶の効率的に使う
補助記憶装置
割当て済みの主記憶
主記憶
ファイル
未使用領域
プログラムC
プログラムA
プログラムB
プログラムB
プログラムC
プログラムA
プログラムD
プログラムD
主記憶の割当て方式
• 単一プロセスにおける主記憶割当て
– 単一連続割当て
: OSと一つのユーザプログラムが
主記憶領域を分割して使用する
: ユーザプログラムはOSが使用して
いる領域以外を使用する
主記憶
OS
プログラム
• マルチプロセスにおける主記憶割当て
– 固定区画方式
– 可変区画方式
(1) 再配置可能
(2) 再入可能
(3) アドレス変換
1
プログラムに
要求される性質
ハードウェアによる
支援
(1) 再配置可能(relocatable)であるということ
(主記憶のどの領域に配置されても実行可能なプログラム)
プログラム
プログラム
プログラムは主記憶のどの領域に
配置しても正しく動作しなければな
らない
プログラム
プログラム
→ データの参照やジャンプ先の
番地(アドレス)指定は主記憶の物
理的な番地(物理アドレス)で指定
しない(論理アドレスで指定する)
プログラム
主記憶
(2) 再入可能(reentrant)であるということ
プログラム部①
プロセスA
データ部①
プログラム部①
プログラム部①
プロセスB
データ部①
一つのプログラムが複数のプ
ロセスによって使用されるとき,
プログラムを個々に配置する
のは主記憶の無駄使いになる
プログラム部①
データ部①
主記憶
2
プロセスC
(2) 再入可能(reentrant)であるということ
(同時に複数のプロセスとして実行可能なプログラム)
プログラム部(手続き部)
は各プロセスで共有する
プログラム部①
プログラムが使用するデータ部
はプロセスごとに独立させる
プログラム部とデータ部が分離され,
プロセスごとに独立してデータ領域
を保持できる性質をもつプログラム
プログラム部①
プログラム部は
各プロセスに共通
データ部A
プロセスAのデータ
データ部B
プロセスBのデータ
データ部C
プロセスCのデータ
主記憶
= 再入可能プログラム / リエントラントプログラム
ソフトウェア開発技術者試験問題(平成16年度春期)
問:再入可能(リエントラント)プログラムの説明として,最も適切
なものはどれか。
ア 一度実行した後,ロードし直さずに再び実行を繰り返して
も,正しい結果が得られる。
イ 実記憶上のどこのアドレスに配置しても実行することが可
能である。
ウ 複数のセグメントに分割されており,セグメント単位にロー
ドして実行することが可能である。
エ 複数のプロセスで並行して実行しても,正しい結果が得ら
れる。
3
基本情報技術者試験問題(平成17年度春期)
問:処理が終了していないプログラムが,別のプログラムから再
度呼出されることがある。このプログラムが正しく実行され
るために備えるべき性質はどれか。
ア
イ
ウ
エ
再帰的(リカーシブ)
再使用可能(リユーザブル)
再入可能(リエントラント)
再配置可能(リロケータブル)
物理アドレスと論理アドレス
z マルチプロセスの環境では,OSがプログラムの主記憶領域中の
配置場所を決める
→ プログラム自身は実行時の物理アドレスを意識できない
◆ プログラム実行時の命令やデータの主記憶上の番地(アドレス):物理アドレス
◆ プログラムが想定する命令やデータの論理的な番地(アドレス):論理アドレス
z プログラムの実行時には,「論理アドレス」は「物理アドレス」に変換
されて実行される
主記憶
(物理アドレス)
プログラム
(論理アドレス)
0番地
命令・データ
論理アドレスから
物理アドレスへ変換
0番地
A番地
(ベースアドレス)
X番地
命令・データ
Y番地
X+A番地
Y+A番地
4
(3) アドレス変換(address mapping/translation)
: 論理アドレスから物理アドレスへの変換
• 静的再配置(static relocation)
– 補助記憶装置から主記憶へプログラムをもってくる時
(ロード時)に物理アドレスに変換する
– 実現が容易
• 動的再配置(dynamic relocation)
– 命令の実行時にハードウェア(ベースレジスタ)によって
論理アドレスを物理アドレスへ変換する(後述)
– コンパクション(後述)によって、主記憶の利用効率を向
上できる
主記憶の割当て方式
• 単一プロセスにおける主記憶割当て
– 単一連続割当て
: OSと一つのユーザプログラムが
主記憶領域を分割して使用する
: ユーザプログラムはOSが使用して
いる領域以外を使用する
主記憶
OS
プログラム
• マルチプロセスにおける主記憶割当て
– 固定区画方式
– 可変区画方式
(1) 再配置可能
(2) 再入可能
(3) アドレス変換
5
プログラムに
要求される性質
ハードウェアのよる
支援
固定区画方式
• 主記憶領域をサイズ固定の区画に分割
• 領域サイズを複数用意する
• 区画内に収まるプログラムを選んでロードする
150K
プログラム①
50K
プログラム②
50K
プログラム③
OS
区画A
300K
区画B
200K
区画C
100K
100K
• 一時にロードできるプログラム数,
大きさに制限がある
• あらかじめ設定された区画よりも
大きなプログラムを実行することができない
• 「内部断片化 」が発生する
→ 主記憶の使用効率が悪化
区画D
主記憶
内部断片化
• 割り当てられた領域内
で使用されない無駄な
空き領域が生じる
OS
150K
プログラム①
区画A(300K)
• 主記憶の利用効率を
下げる
空き領域
50K
プログラム②
区画B(200K)
区画C(100K)
空き領域が450Kあって
も,300Kのプログラムを 50K
実行できない
プログラム③
主記憶
6
区画D(100K)
可変区画方式
z メモリ領域を可変長の区画で管理する
z 主記憶に格納されるプログラム数,大きさは動的に定まる
z 新しいプログラムをロードするとき,そのプログラムを格納するの
に十分な空き領域を確保し,その領域に割り当てる
z 「外部断片化 」の発生
OS
150K
プログラム①
50K
プログラム②
50K
プログラム③
プログラム①
プログラム②
プログラム③
主記憶
可変区画割当ての例
(P1:200K
P2:100K
0
0
OS
50K
0
OS
50K
プロセス1
終了
未使用
P4:130K
0
OS
50K
プロセス
1
P3:160K
プロセス4
割付け
0
OS
50K
プロセス
4
プロセス
4
250K
プロセス
2
350K
プロセス
2
350K
プロセス
3
プロセス
3
未使用
550K
(a)
280K
350K
510K
未使用
未使用
550K
(c)
7
未使用
550K
550K
(b)
プロセス
3
プロセス
3
510K
510K
プロセス
5
未使用
350K
プロセス
3
未使用
550K
プロセス5
割付け
プロセス
2
350K
510K
510K
プロセス2
終了
未使用
250K
プロセス
4
180K
未使用
250K
OS
50K
180K
180K
P5:100K)
(d)
(e)
可変区画方式における
空き領域の割当てアルゴリズム
◆ 新しいプログラムをロードするための主記憶中に散在
する空き領域を探す
初適合(first-fit)... 最初に見つかった十分な空き領域を
割り当てる
– 探索が速く、実現が容易、利用効率はあまりよくない
2. 最適適合(best-fit) ... 十分な領域をもつ最小の空き領域
を割り当てる
– 利用効率はよい(空き領域は最小)が、空き領域を見
つけるオーバーヘッドが大きい
3. 最悪適合(worst-fit) ... 最大の空き領域を割り当てる
– 小さな空き領域が多くなり,領域の利用効率が悪い
1.
メモリ領域割当てアルゴリズム
30KB
割当て要求
(1) 初適合
OS
60KB
80KB
40KB
空き
検索方向
20KB
割当て
済み
(2) 最適適合
(3) 最悪適合
OS
OS
OS
20KB
20KB
20KB
60KB
60KB
30KB
80KB
80KB
40KB
10KB
8
50KB
40KB
空き領域の管理方法(1)
1. リスト方式
空き
0
150
② 150 150
空き 300 50
OS
④ 350 100
0
150K
空き 450 250
150
使用
大きさ
(Kバイト)
プロセス
開始アドレス(ユーザ
300
350
領域の先頭を0番地と
する,単位Kバイト)
プロセス②
150K
プロセス④
50K
100K
450
250K
主記憶
空き領域の管理方法(2)
2. ビットマップ方式
OS
0
0 0 0 0 0 0 1 1
1 1 1 1 0 0 1 1
150K
150
1 1 0 0 0 0 0 0
0 0 0 0
領域の未使用/使用を0と1に対
応させる(この例では25Kバイ
トを1ビットに対応させている)
300
350
プログラム②
150K
プログラム④
50K
100K
450
250K
主記憶
9
外部断片化
z ロードされたプログラムの実行が終了し,空き領域が断片的に存
在する。
z 全体としての空き領域が大きくても,一つ一つの空き領域が小さい
ため、新たなプログラムを割り当てられない。
OS
150K
プログラム①
150K
50K
100K
プログラム②
OS
150K
プログラム②
150K
プログラム④
50K
100K
プログラム③
プログラム④
250K
250K
主記憶
主記憶
外部断片化の解消:コンパクション
• 主記憶上のプログラムを移動することによって、散在す
る空き領域を1つの大きい空き領域にまとめる
→ 主記憶の利用効率が向上する
• プログラムの移動によるオーバーヘッドが大きい
• プログラムは動的再配置 可能でなければならない
OS
OS
プログラムF
プログラムF
プログラムH
プログラムH
プログラムD
プログラムD
10
コンパクションを行った場合の可変区画割当ての例
(P1:200K
0
P2:100K
0
50K
250K
プロセス4
割付け
350K
未使用
550K
180K
プロセス5
割付け
390K
390K
プロセス
3
プロセス
3
510K
プロセス
5
プロセス
2
プロセス
2
プロセス
3
プロセス
4
280K
290K
290K
350K
プロセス
3
プロセス
4
未使用
プロセス
2
OS
50K
180K
250K
プロセス
2
0
50K
プロセス1
終了
未使用
P5:100K)
OS
OS
プロセス
1
P4:130K
0
OS
50K
510K
P3:160K
未使用
550K
(a)
550K
(b)
550K
(c)
(d)
動的再配置(dynamic relocation)
– 各命令の実行時に,論理アドレスから物理アドレスへ変換する
10000
プロセスごとに用意する
ベースレジスタ
(再配置レジスタ)
+
10000
0
LOAD $R0, (500)
500
LOAD $R0, (500)
1234
10500
プログラム
(論理アドレス)
1234
主記憶(物理アドレス)
11
演習問題 5
1.
次の文に相当する方式・状況・現象を何というか。選択群から選べ。
(1)
(2)
(3)
(4)
(5)
複数のプロセスが互いに干渉することなく,同一のプログラムを同時に利用できること。
主記憶のどこに読み込まれても実行可能であること
命令が,命令やデータの記憶場所を識別するのに使用する論理的なアドレス
命令やデータの実体が存在する主記憶上の物理的なアドレス
プログラムの主記憶へのロード時に,論理アドレスを物理アドレスに変換して,主記憶に
配置する方式
(6) プログラムの実行時に,ハードウェアによって論理アドレスを物理アドレスに変換してプ
ログラムを実行する方式
(7) 割当てられた主記憶領域の中で無駄な領域が生じる現象
(8) 主記憶の空き領域が全体として大きくても,それらが主記憶内に散在しているため,プロ
グラムの実行に利用することができない現象
【選択群】
内部断片化 物理アドレス
外部断片化
動的再配置
再入可能
再配置可能
論理アドレス
静的再配置
2. 右表の 5 個のプロセスが順に主記憶にロードされて実行され
プロセス 大きさ
るときのメモリ内容の推移を(a),(b)の場合について図示し,すべて
P1
100kB
のプロセスの実行が終了するまでの時間を求めよ。ただし,プロ
P2
250kB
セス実行のために利用できる全メモリ容量は 500kB(OS の使用
P3
200kB
領域を除く 100kbyte~600kB の領域)とし,P1 から順番に処理
P4
150kB
を行うものとする。
P5
250kB
(a) 可変区画割付でコンパクションを行わない場合
(b) 可変区画割付で全体の実行時間が最小になるようにコンパクションを行う場合
実行時間
10 ミリ秒
20 ミリ秒
20 ミリ秒
25 ミリ秒
10 ミリ秒
(a) の場合
0
0
OS
OS
0
0
OS
0
OS
OS
0
100
100
100
100
100
100
200
200
200
200
200
200
300
300
300
300
300
300
400
400
400
400
400
400
500
500
500
500
500
500
600
600
t=0
600
t=10
600
t=
600
t=
OS
600
t=
t=
(b) の場合
0
0
OS
OS
0
0
OS
0
OS
OS
0
100
100
100
100
100
100
200
200
200
200
200
200
300
300
300
300
300
300
400
400
400
400
400
400
500
500
500
500
500
500
600
600
t=0
600
t=10
600
t=
600
t=
12
OS
600
t=
t=