PowerPoint

計算機システム概論・4回目
本日のトピック:メモリの管理と仮想記憶
メモリ管理におけるOSの役割
メモリの割当方法について
ページングと補助記憶
仮想記憶について
1
メモリ管理におけるOSの役割
メモリ(主記憶装置):
プロセッサと情報をやりとりできる唯一の装置
プログラムや計算の途中経過,結果などを格納
プロセスに何かをさせようとすると,必ずメモリが必要
有限の容量しかない
複数のプロセスに対し,メモリを配分する仕組みが必要
...OSのお仕事
2
実現したい仕組み
OS とプロセスの間で,「メモリの貸し借り」を行う仕組みが必要
プロセスは,OS からメモリを借りる
メモリを「割当て」てもらう
借りたメモリが不要になったとき,OS にメモリを返す
メモリを「解放する」
メモリ
要求
プロセス
OS
割当 メモリ
管理
機構
プロセス
解放
3
メモリ管理機構の仕事
メモリ管理機構が行うべき仕事:
メモリの貸し出し状況把握
どのプロセスに,メモリのどの部分を貸し出しているか
メモリの中で,利用可能な部分(未使用領域)はどこか
割当要求への対処
未使用領域のどこを切り取って,プロセスに貸し出すか
プロセス(仮想計算機)のアドレス解決
プロセスから見える仮想的な住所(アドレス)と,
実メモリのアドレスとの対応付けを行う
4
メモリの使用状況
メモリの貸し出し状況把握とは...
どのプロセスに,メモリのどの部分を貸し出しているか
メモリの中で,利用可能な部分(未使用領域)はどこか
を管理,把握すること
OS
プロセス1
プロセス4
プロセス3
プロセス5
プロセス2
貸出中の領域
未使用の領域
5
状況把握の方法
どのプロセスに,メモリのどの部分を貸し出しているか
プロセスごとに,どの領域を使っているか記録しておく
プロセス
• レジスタ状態
• メモリの開始アドレス
• 使用メモリサイズ
:
メモリの中で,利用可能な部分(未使用領域)はどこか
連結リスト,双方向リストなどを利用して記憶しておく
連結リスト:
...
双方向リスト:
...
6
未使用領域の管理方式例
未使用領域の最初の数バイトを用いて,リストを表現
200
30 -1
150
120
30 170
80
50 120
30
0
30
サイズ 次の未使用領域の場所
170
最初の未使用領域の場所
あらかじめ決められたアドレス
サイズの昇順(降順)で連結することも可能
上図は連結リストとしての実現.双方向リストも可
7
メモリの解放
プロセスからメモリが解放(返却)されたとき...
当該領域を「未使用」扱いに
必要に応じて,他の未使用領域と併合
解放
併合
使用中
未使用
8
メモリの割当
プロセスからメモリの割当を要求されたとき...
未使用領域の一部を切り出して,プロセスに貸し出す
どの未使用領域から切り出すか ... いくつかの戦略あり
使える未使用領域がない場合の対応は?
要求サイズ
A
B
基本的には,
すし屋のカウンターに
グループ客を座らせる問題...と同じ
9
メモリ割当の戦略
要求サイズより大きな未使用領域の中で...
(A) 最初に見つかったところから切り出す (first-fit)
(B) もっとも大きな未使用領域から切り出す (worst-fit)
細かな未使用領域が多数発生することになり,損
(C) もっとも小さい未使用領域から切り出す (best-fit)
大きな領域を後に残しておけるので,全体的には得
要求サイズ
A
C
B
10
戦略の違い
要求:
の後に
が来る場合
worst-fit戦略
割当不能!
best-fit戦略
割当可能!
11
割当不能時の対処法
要求されたメモリ割当に使える未使用領域がないときは...
未使用領域ができるまで待つ
小さな要求が先に処理され,いつまでも空かないかも
使用中の領域を移動して,大きなスペースを作りだす
メモリ内部の他の場所に移動
補助記憶装置等,メモリの外部に,一時的に追い出す
要求サイズ
12
領域の再配置について
使用中領域の再配置(移動,追い出し):
配置場所の変更を,プロセスには意識させたくない
プロセス(プログラム)による「メモリの使い方」を十分理解し,
その視野の外で動作する仕組みを作りだす必要アリ
コンピュータのプログラム:
抽象化された仮想計算機上で動作するよう作成される
メモリは,第 0番地から順番にすべて利用可能,と想定
仮想的なアドレスを使って,データ等の場所を指示
実動作時には,メモリ内のどこかに配置される
13
仮想計算機上のプログラム
仮想計算機内でのプログラム
000:
100:
200:
JMP 100
:
LOAD B, 200
:
2Ah
100番地に配置
400番地に配置
100 JMP 200
:
200 LOAD B, 300
:
300 2Ah
400 JMP 500
:
500 LOAD B, 600
:
600 2Ah
仮想アドレスを実アドレスに変換する必要アリ
14
アドレス解決の仕組み
方式1) メモリ割当時に,どのラベルが何番地になるか計算する
配置場所の移動はきわめて困難になる
方式2) メモリベースレジスタ(MBR)をプロセスに持たせる
アドレスの参照は,MBRの値により補正
MBRの値を変えれば,配置場所の移動は比較的容易
仮想計算機内
000:
100:
200:
JMP 100
:
LOAD B, 200
:
2Ah
400番地に配置
MBR
400
400 JMP 100 (+ MBR)
:
500 LOAD B, 200 (+ MBR)
:
600 2Ah
15
ここまでのまとめ
計算機のメモリは,OSのメモリ管理機構が管理する
メモリ管理機構は,プロセスからの動的な要求に対応する
未使用領域の管理には,リスト構造の利用が便利
best-fitting戦略を使えば,割当の効率がよい
MBRを用いてアドレス解決を行えば,再配置が容易
ここからのおはなし
ページ単位でのメモリ管理にすれば,もっと効率アップ
MBR方式を拡張する必要あり
仮想記憶方式との整合性も良い
16
メモリの「ページ」
ページ:メモリを管理するときの1ブロック
典型的な1ページ=4096バイト分のメモリ
基本的なアイデア:
メモリ全体を多数のページに分割する
プロセスの持つメモリも,ページに分割して管理
プロセスは,ページ変換表を使ってページの対応を管理
(MBRは使わない)
この方式の良いところ:
必ずしも連続したページを割り当てる必要がない
17
ページの管理
使用中ページ
未使用ページ
実際のメモリ
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
プロセスの持つ
ページ変換表
内部番号 実ページ番号
0
14
1
6
2
9
3
2
14 6 9 2
ページ変換表を利用することで,
連続したメモリ領域を保持して
いる場合と同等に扱える
18
プロセス内でのアドレス管理
ページサイズを S とする
プロセスが,自分のメモリの先頭から M 番目にアクセスする:
1. M = PS + Q となる P と Q を計算する
P...プロセス内で何ページ目にあたるか
Q ...そのページ内で,先頭から何番目か
2. ページ変換表の P 行目を参照し,実ページ番号 R を得る
3. メモリの RS + Q 番地が,アクセスすべき番地
実際のメモリ番地への変換は,OSが行う
(プロセスは,OSに対して M 番地の内容を問い合わせるだけ)
19
アドレス変換の例
ページサイズを S = 1000h バイトとする
3000
0000
3.
2000
2.
1000
1.
プロセス内の 28F4h 番地にアクセスしたいとき...
28F4h = 2x1000h + 8F4h
実ページ番号は 9
内部番号 実ページ番号
メモリ 9 ページ目の 8F4h 番地
0
14
= 98F4h番地を参照
1
6
2
9
3
2
14 6 9 2
13000
12000
11000
10000
F000
E000
D000
C000
B000
A000
9000
8000
7000
6000
5000
4000
3000
2000
1000
0000
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
20
ページ単位でメモリ管理をする利点
使い道のない,小さな未使用領域の発生を抑制
「断片化の問題」が少ない
一つのプロセスに,連続したメモリを割当てる必要がない
割当場所の違いは,ページ変換表を使ってOSが吸収
2番目の利点をもっと積極的に利用すると...
ページの場所を移動しても,比較的簡単に対応可能
(プロセスのページ変換表を書き換えるだけ)
ページを,メモリ以外の場所に一時退避することも可能
実際のメモリ容量以上のページを確保することも可能
⇒仮想記憶
21
主記憶装置と補助記憶装置
準備:
メモリのページを一時退避するための補助記憶装置を用意
(スワップ領域:ハードディスク等の高速装置を利用)
アドレス変換表を拡張
(退避中か否か,退避場所に関する情報を持たせる)
メモリ(主記憶装置)
アドレス変換表
ディスク(補助記憶装置)
22
ページアウト
主記憶上の未使用ページが少なくなってくると...
OSが,補助記憶装置に掃出すページを選択する
掃出すページの内容を補助記憶装置へ転送
掃出された跡地を未使用扱いに
掃出されたページを指していたアドレス変換表を更新
ページアウト
スワップアウト
23
ページイン
ページアウトされていたページが参照されると...
割込み(ページフォルト,アドレス変換例外)が発生
主記憶の未使用ページへ,補助記憶からデータ転送
アドレス変換表を更新
ページイン
スワップイン
24
ページアウトの戦略
ページイン:参照されたページを読み込むだけ
ページアウト:どのページを掃出すか,選択の余地あり
参照される確率が低そうなページをページアウトしたい
「メモリ参照の局所性」を利用
プログラム実行中のある時点でA番地のメモリを参照
⇒A番地付近のメモリも参照される可能性が高い
メモリのページ毎に,「最近いつ参照されたか」を記録しておく
「近々には使われなさそうなメモリページ」をページアウトする
25
LRU法
LRU法 (Least Recently Used)
「最近最も使われなかった」ページを掃き出す戦略
グローバルLRU法:
対象ページがどのプロセスに属するか無関係に,
とにかく最近使われていないものを掃き出す
ローカルLRU法:
優先度の低いプロセスを特定し,そのプロセスに
属するページをLRUで掃き出す
26
仮想記憶
ページイン,ページアウトが可能であれば,
プロセスの全てのページが,主記憶上にある必要はない
仮想記憶:
プロセスに「見せる」アドレス空間を,実際のメモリの
アドレス空間とは分離して管理する仕組み
プロセスに対し,実際のメモリサイズよりも大きな
メモリサイズを提供することが可能
ただし,頻繁にページイン・ページアウトを繰り返すようだと,
実行効率は大幅に悪化する
27
メモリ管理に関連するその他の概念
デマンドページング,プリページング
実際に参照されたページのみページインする(デマンド–)
ページ参照を予測し,事前にページインを行う(プリ–)
スラッシング
メモリの割当要求が過剰で,プロセッサがページイン,
ページアウトにばかり時間をとられて仕事が進まない様子
近年の計算機...巨大なメモリを持つようになった
⇒ スラッシング,ページングが発生する機会も少なくなった
28
本日のまとめ
メモリ管理について
未使用領域の管理と割当戦略
ページング
仮想記憶
次回の講義:ファイルシステムについて
課題(結果の提出不要):
UNIXベースのOSで vmstat を実行し,メモリ使用状況や
ページイン・アウトの様子を観察せよ
29