• 検索結果がありません。

基本的な記憶管理 と その手法2

N/A
N/A
Protected

Academic year: 2021

シェア "基本的な記憶管理 と その手法2"

Copied!
23
0
0

読み込み中.... (全文を見る)

全文

(1)

基本的な記憶管理 と

その手法2

前回のまとめ

• メモリ上にプロセスを並べて置く

• その結果、スペースの割当て管理が必要

• プロセスの⼤きさに合わせて(可変⻑)割当てると 生成・消滅(=確保・解放)を繰り返すうち

切れ切れの無駄な空き地が溜まる

(外部)フラグメンテーションと呼ぶ

• (外部)フラグメンテーションの起きる要因は

①可変⻑割当て(⻑さいろいろ)であることと

(2)

2

外部フラグメンテーションの要因を 取り除くことを考える

• (要因1)可変⻑割当てであること

• 可変⻑でなく、固定⻑割当てはできるか

• (要因2)移動して集められないこと

• 何とかプロセスを移動する⼯夫は出来ないか︖

固定⻑割当ては出来るか︖

• 固定⻑割当ては、⼗分に可能

• 要するに、最初にN個と決めておいて、

メモリ全体をN等分すればよい

スペース2

スペース4 スペース1

スペース3

(3)

4

固定⻑割当ては出来るか︖

• 固定⻑割当ては、⼗分に可能

• 要するに、最初にN個と決めておいて、

メモリ全体をN等分すればよい

• 管理は簡単 (⻑さを気にしなくていい)

スペース2

スペース4 スペース1

スペース3 プロセスA

プロセスB

プロセスC

固定⻑割当ては出来るか︖

• 固定⻑割当ては、⼗分に可能

• 要するに、最初にN個と決めておいて、

メモリ全体をN等分すればよい

• 管理は簡単 (⻑さを気にしなくていい)

スペース2

スペース4 スペース1

スペース3 プロセスA

プロセスB プロセスC

• だが、プロセスが小さいと、区画内に 余りのスペースができて無駄になる

(内部フラグメンテーション)

(4)

6

区画(プロセス)は移動できるか︖

• 移動して詰めることは可能

• コンパクション(圧縮)とか

ガベージコレクション(ごみ集め) とか呼ぶ

空き地M プロセスA

プロセスB 空き地N

空き地M プロセスA

プロセスB

空き地N

くっつける Mの分移動

区画(プロセス)は移動できるか︖

• 移動して詰めることは可能

• コンパクション(圧縮)とか

ガベージコレクション(ごみ集め) とか呼ぶ

• プロセスの移動作業はやっかい

空き地M プロセスA

プロセスB 空き地N

空き地M プロセスA

プロセスB

空き地N

くっつける Mの分移動

(5)

8

区画(プロセス)は移動できるか︖

• 移動して詰めることは可能

• コンパクション(圧縮)とか

ガベージコレクション(ごみ集め) とか呼ぶ

• プロセスの移動作業はやっかい

• メモリ内容をコピーする

(手間はかかるが、やればできる)

空き地M プロセスA

プロセスB 空き地N

空き地M プロセスA

プロセスB

空き地N

くっつける Mの分移動

区画(プロセス)は移動できるか︖

• 移動して詰めることは可能

• コンパクション(圧縮)とか

ガベージコレクション(ごみ集め) とか呼ぶ

• プロセスの移動作業はやっかい

• メモリ内容をコピーする

• プログラム(命令)中の参照アドレスを 移動に合わせて修正する必要

空き地M プロセスA

プロセスB 空き地N

空き地M プロセスA

プロセスB

空き地N

くっつける Mの分移動

(6)

10

区画(プロセス)は移動できるか︖

• 移動して詰めることは可能

• コンパクション(圧縮)とか

ガベージコレクション(ごみ集め) とか呼ぶ

• プロセスの移動作業はやっかい

• メモリ内容をコピーする

• プログラム(命令)中の参照アドレスを 移動に合わせて修正する必要

非常にやっかいで、

実⾏開始後の移動はほとんど非現実的

空き地M プロセスA

プロセスB 空き地N

空き地M プロセスA

プロセスB

空き地N

くっつける Mの分移動

(脱線)命令中のアドレスの書換えはやっかい

命令中のオペランド (覚えていますか) OPコード オペランド

命令

この内容はアドレス

(7)

12

(脱線)命令中のアドレスの書換えはやっかい

• 命令中のオペランド (覚えていますか)

• 操作される対象を指定

例えば、演算命令の対象の変数

正確にはメモリ中の変数のアドレス

OPコード オペランド 命令

この内容はアドレス

(脱線)命令中のアドレスの書換えはやっかい

• 命令中のオペランド (覚えていますか)

• 操作される対象を指定

例えば、演算命令の対象の変数

正確にはメモリ中の変数のアドレス 例えば、ジャンプ命令の⾶び先アドレス

OPコード オペランド 命令

この内容はアドレス

(8)

14

(脱線)命令中のアドレスの書換えはやっかい

• 命令中のオペランド (覚えていますか)

• 操作される対象を指定

例えば、演算命令の対象の変数

正確にはメモリ中の変数のアドレス 例えば、ジャンプ命令の⾶び先アドレス

• プログラムのメモリ内の位置を動かす

OPコード オペランド 命令

この内容はアドレス

ADDA GR3, 123番地

123 データ

ADDA GR3, 789番地

789 データ アドレス移動

(脱線)命令中のアドレスの書換えはやっかい

• 命令中のオペランド (覚えていますか)

• 操作される対象を指定

例えば、演算命令の対象の変数

正確にはメモリ中の変数のアドレス 例えば、ジャンプ命令の⾶び先アドレス

• プログラムのメモリ内の位置を動かす

• 変数の置いてあるアドレスが変わる

OPコード オペランド 命令

この内容はアドレス

ADDA GR3, 123番地

123 データ

ADDA GR3, 789番地

789 データ アドレス移動

(9)

16

(脱線)命令中のアドレスの書換えはやっかい

• 命令中のオペランド (覚えていますか)

• 操作される対象を指定

例えば、演算命令の対象の変数

正確にはメモリ中の変数のアドレス 例えば、ジャンプ命令の⾶び先アドレス

• プログラムのメモリ内の位置を動かす

• 変数の置いてあるアドレスが変わる

⇒ 演算のオペランドを修正する必要

OPコード オペランド 命令

この内容はアドレス

ADDA GR3, 123番地

123 データ

ADDA GR3, 789番地

789 データ アドレス移動

(脱線)命令中のアドレスの書換えはやっかい

• 命令中のオペランド (覚えていますか)

• 操作される対象を指定

例えば、演算命令の対象の変数

正確にはメモリ中の変数のアドレス 例えば、ジャンプ命令の⾶び先アドレス

• プログラムのメモリ内の位置を動かす

• 変数の置いてあるアドレスが変わる

⇒ 演算のオペランドを修正する必要

命令の置いてあるアドレスが変わる

⇒ ジャンプのオペランドを修正必要

OPコード オペランド 命令

この内容はアドレス

ADDA GR3, 123番地

123 データ

ADDA GR3, 789番地

789 データ アドレス移動

(10)

18

(脱線)命令中のアドレスの書換えはやっかい

• 命令中のオペランド (覚えていますか)

• 操作される対象を指定

例えば、演算命令の対象の変数

正確にはメモリ中の変数のアドレス 例えば、ジャンプ命令の⾶び先アドレス

• プログラムのメモリ内の位置を動かす

• 変数の置いてあるアドレスが変わる

⇒ 演算のオペランドを修正する必要

命令の置いてあるアドレスが変わる

⇒ ジャンプのオペランドを修正必要

OPコード オペランド 命令

この内容はアドレス

で、何が難しいのか︖

ADDA GR3, 123番地

123 データ

ADDA GR3, 789番地

789 データ アドレス移動

(脱線)命令中のアドレスの書換えはやっかい

命令の位置を⾒つけるのがやっかい OPコード オペランド OPコード オペランド

オペランド OPコード オペランド OPコード オペランド

OPコード オペランド オペランド OPコード オペランド

オペランド OPコード オペランド

データ データ 16ビット

(11)

20

(脱線)命令中のアドレスの書換えはやっかい

• 命令の位置を⾒つけるのがやっかい

命令は(普通は)⻑さがいろいろ

OPコード オペランド OPコード オペランド

オペランド OPコード オペランド OPコード オペランド

OPコード オペランド オペランド OPコード オペランド

オペランド OPコード オペランド

データ データ 16ビット

(脱線)命令中のアドレスの書換えはやっかい

• 命令の位置を⾒つけるのがやっかい

命令は(普通は)⻑さがいろいろ

⻑い命令も短い命令もある

例︓1年⽣で使ったCOMET IIの命令は 2バイト命令と4バイト命令が混在

OPコード オペランド OPコード オペランド

オペランド OPコード オペランド OPコード オペランド

OPコード オペランド オペランド OPコード オペランド

オペランド OPコード オペランド

データ データ 16ビット

(12)

22

(脱線)命令中のアドレスの書換えはやっかい

• 命令の位置を⾒つけるのがやっかい

命令は(普通は)⻑さがいろいろ

⻑い命令も短い命令もある

例︓1年⽣で使ったCOMET IIの命令は 2バイト命令と4バイト命令が混在

で、⾒かけは単なる2進数で、

OPコードが特殊な形をしていたりしない

OPコード オペランド OPコード オペランド

オペランド OPコード オペランド OPコード オペランド

OPコード オペランド オペランド OPコード オペランド

オペランド OPコード オペランド

データ データ 16ビット

(脱線)命令中のアドレスの書換えはやっかい

• 命令の位置を⾒つけるのがやっかい

命令は(普通は)⻑さがいろいろ

⻑い命令も短い命令もある

例︓1年⽣で使ったCOMET IIの命令は 2バイト命令と4バイト命令が混在

で、⾒かけは単なる2進数で、

OPコードが特殊な形をしていたりしない

• 同じメモリ上にデータも混在してよい

OPコード オペランド OPコード オペランド

オペランド OPコード オペランド OPコード オペランド

OPコード オペランド オペランド OPコード オペランド

オペランド OPコード オペランド

データ データ 16ビット

(13)

24

(脱線)命令中のアドレスの書換えはやっかい

• 命令の位置を⾒つけるのがやっかい

命令は(普通は)⻑さがいろいろ

⻑い命令も短い命令もある

例︓1年⽣で使ったCOMET IIの命令は 2バイト命令と4バイト命令が混在

で、⾒かけは単なる2進数で、

OPコードが特殊な形をしていたりしない

• 同じメモリ上にデータも混在してよい

ぱっと⾒て命令の区切りは分からない どこにオペランドがあるのか分からない

OPコード オペランド OPコード オペランド

オペランド OPコード オペランド OPコード オペランド

OPコード オペランド オペランド OPコード オペランド

オペランド OPコード オペランド

データ データ 16ビット

(脱線)命令中のアドレスの書換えはやっかい

• 命令の位置を⾒つけるのがやっかい

命令は(普通は)⻑さがいろいろ

⻑い命令も短い命令もある

例︓1年⽣で使ったCOMET IIの命令は 2バイト命令と4バイト命令が混在

で、⾒かけは単なる2進数で、

OPコードが特殊な形をしていたりしない

• 同じメモリ上にデータも混在してよい

ぱっと⾒て命令の区切りは分からない どこにオペランドがあるのか分からない

OPコード オペランド OPコード オペランド

オペランド OPコード オペランド OPコード オペランド

OPコード オペランド オペランド OPコード オペランド

オペランド OPコード オペランド

データ データ 16ビット

(14)

26

ハードウェア支援によるリロケーション

命令⾃⾝を書き変えるのではなくて

ハードウェア支援によるリロケーション

• 命令⾃⾝を書き変えるのではなくて

命令はそのままで

• CPUから出てからハードで書き直す

(15)

28

ハードウェア支援によるリロケーション

• 命令⾃⾝を書き変えるのではなくて

命令はそのままで

• CPUから出てからハードで書き直す

• つまりCPU (命令) にとっては 変換前のアドレスのつもりだが

メモリ上は変換後のアドレスでアクセス

ハードウェア支援によるリロケーション

• 命令⾃⾝を書き変えるのではなくて

命令はそのままで

• CPUから出てからハードで書き直す

• つまりCPU (命令) にとっては 変換前のアドレスのつもりだが

メモリ上は変換後のアドレスでアクセス

⇒ ベース(基底)アドレッシング

(16)

オペランド アドレス

30

ハードウェア支援によるリロケーション

• 命令⾃⾝を書き変えるのではなくて

命令はそのままで

• CPUから出てからハードで書き直す

• つまりCPU (命令) にとっては 変換前のアドレスのつもりだが

メモリ上は変換後のアドレスでアクセス

命令

オペ OP ランド コード

ベースレジスタ

メモリ上の アドレス

オペランド

CPU メモリ

ベース (基底) アドレッシング

オペランドアドレスに

オペランド アドレス

ハードウェア支援によるリロケーション

• 命令⾃⾝を書き変えるのではなくて

命令はそのままで

• CPUから出てからハードで書き直す

• つまりCPU (命令) にとっては 変換前のアドレスのつもりだが

メモリ上は変換後のアドレスでアクセス

命令

オペ OP ランド コード

メモリ上の アドレス

オペランド

CPU メモリ

ベース (基底) アドレッシング

オペランドアドレスに

ベースレジスタ Br を足して

(17)

オペランド アドレス

32

ハードウェア支援によるリロケーション

• 命令⾃⾝を書き変えるのではなくて

命令はそのままで

• CPUから出てからハードで書き直す

• つまりCPU (命令) にとっては 変換前のアドレスのつもりだが

メモリ上は変換後のアドレスでアクセス

命令

オペ OP ランド コード

ベースレジスタ

メモリ上の アドレス

オペランド

CPU メモリ

ベース (基底) アドレッシング

オペランドアドレスに

ベースレジスタ Br を足して メモリへアクセスする

オペランド アドレス

ハードウェア支援によるリロケーション

• 命令⾃⾝を書き変えるのではなくて

命令はそのままで

• CPUから出てからハードで書き直す

• つまりCPU (命令) にとっては 変換前のアドレスのつもりだが

メモリ上は変換後のアドレスでアクセス

命令

オペ OP ランド コード

ベースレジスタ

メモリ上の アドレス

オペランド

CPU メモリ

ベース (基底) アドレッシング

オペランドアドレスに

ベースレジスタ Br を足して メモリへアクセスする

||

オペランド

CPU メモリ

オペランド Br 分足される

(18)

オペランド アドレス

34

ハードウェア支援によるリロケーション

• 命令⾃⾝を書き変えるのではなくて

命令はそのままで

• CPUから出てからハードで書き直す

• つまりCPU (命令) にとっては 変換前のアドレスのつもりだが

メモリ上は変換後のアドレスでアクセス

命令

オペ OP ランド コード

ベースレジスタ

メモリ上の アドレス

オペランド

CPU メモリ

ベース (基底) アドレッシング

オペランドアドレスに

ベースレジスタ Br を足して メモリへアクセスする

||

Br 分だけずらす変換になる

オペランド

CPU メモリ

オペランド Br 分足される

アドレスを移すという意味でリロケーション(再配置)と呼ばれる

(脱線)プロセス・スワッピングと再配置

プロセスのスワッピング(入替え)とは

(19)

36

(脱線)プロセス・スワッピングと再配置

• プロセスのスワッピング(入替え)とは

• 例︓ プロセスが事象待ちなどでしばらく

走らないことが分かっているとき、メモリから 追出して、他のプロセスにメモリを使わせる

(中断時のメモリのイメージをディスクに退避)

プロセスX

しばらく走らないので メモリ内のプロセスを ディスクに退避

メモリ

(脱線)プロセス・スワッピングと再配置

• 問題点︓ 実⾏に戻すときどうする︖

• 前のときと同じメモリ区画は誰かが使っている 違う区画に戻して再開したい

プロセスX

しばらく走らないので メモリ内のプロセスを ディスクに退避

メモリ

誰か別の プロセスが 使っている

メモリ

再開するのでプロセス をメモリに戻したい

プロセスX

異なる場所へ 戻さざるを

得ない

(20)

38

(脱線)プロセス・スワッピングと再配置

• 問題点︓ 実⾏に戻すときどうする︖

• 前のときと同じメモリ区画は誰かが使っている 違う区画に戻して再開したい

⇒ リロケーションが必要

プロセスX

しばらく走らないので メモリ内のプロセスを ディスクに退避

メモリ

誰か別の プロセスが 使っている

メモリ

再開するのでプロセス をメモリに戻したい

プロセスX

異なる場所へ 戻さざるを

得ない

リロケーション 必要

ここまでのまとめ

• 固定⻑割当ては、

使えるが

• 内部フラグメンテーションが起きる

• 可変⻑割当ては、

• 無駄は少ないが外部フラグメンテーション起きる

(21)

40

ここまでのまとめ

• 固定⻑割当ては、

使えるが

• 内部フラグメンテーションが起きる

• 可変⻑割当ては、

• 無駄は少ないが外部フラグメンテーション起きる

• プロセスの命令を書き換えて移動するのは、

• かなり難しくて、現実的ではない

• 基底アドレッシングのハードを使って

• 移動(リロケーション)が可能

⇒ 空き地を詰めたりスワッピングもできる

ここまでのまとめ

というわけで、何とか

複数プロセスが生成・消滅するシステムの

メモリの区画管理ができる

(22)

42

ここまでのまとめ

• というわけで、何とか

複数プロセスが生成・消滅するシステムの メモリの区画管理ができる

• しかし、

もう1つの⼤きな問題があった︓

メモリサイズより⼤きなプログラムを 走らせたい

ここまでのまとめ

• というわけで、何とか

複数プロセスが生成・消滅するシステムの メモリの区画管理ができる

• しかし、

もう1つの⼤きな問題があった︓

メモリサイズより⼤きなプログラムを 走らせたい

メモリが⾼価だったので、小さな物理メモリでも

⼤きなプロセスを、たくさん同時に(多重に)

(23)

44

ここまでのまとめ

• というわけで、何とか

複数プロセスが生成・消滅するシステムの メモリの区画管理ができる

• しかし、

もう1つの⼤きな問題があった︓

メモリサイズより⼤きなプログラムを 走らせたい

⇒ 次回の「⼤きなメモリ」問題

記憶管理の考え⽅が 掴めましたか︖

次へ

〇 ×

参照

関連したドキュメント

中村   その一方で︑日本人学生がな かなか海外に行きたがらない現実があります︒本学から派遣する留学生は 2 0 1 1 年 で 2

身体主義にもとづく,主格の認知意味論 69

 基本的人権ないし人権とは、それなくしては 人間らしさ (人間の尊厳) が保てないような人間 の基本的ニーズ

そればかりか,チューリング機械の能力を超える現実的な計算の仕組は,今日に至るま

⑴ 次のうち十分な管理が困難だと感じるものは ありますか。 (複数回答可) 特になし 87件、その他 2件(詳細は後述) 、

適正に管理が行われていない空家等に対しては、法に限らず他法令(建築基準法、消防

おそらく︑中止未遂の法的性格の問題とかかわるであろう︒すなわち︑中止未遂の