ファイルの 記憶空間管理
追加削除ができるために
今回は
ファイルの記憶空間管理 を考えます
要するにディスク上の スペースの管理です
2
ファイル内容領域(スペース)管理
• 問題1)
ディスクはブロック (セクタ) 単位でアクセスする ファイルをブロックに分けて記憶させ、
管理しなければならない
ファイル内容領域(スペース)管理
• 問題1)
ディスクはブロック (セクタ) 単位でアクセスする ファイルをブロックに分けて記憶させ、
管理しなければならない
• 問題2)
ファイルを編集すると⻑さが伸びることがある 編集後ファイルへ書き戻すときに、ファイルを 伸ばすのか︖ 後ろが詰まっているときは︖
逆に短くなると、小さい空き地ができる。使え ない空き地が増える(フラグメンテーション)
4
領域管理の考え⽅
• ブロックの「論理アドレス」と 物理アドレス間をマッピング
• ブロックの順番が変っても
(途中追加など) OK
• 縮んでも隙間が(断片化)
出来ない
論理アドレス(ファイル名+内部論理位置) (セクター番号)物理アドレス
0 1 ファイルA 0
ディスク
1 2 3 4 5 6 7 2
3
マッピングマッピング
領域管理の考え⽅
• ブロックの「論理アドレス」と 物理アドレス間をマッピング
• ブロックの順番が変っても
(途中追加など) OK
• 縮んでも隙間が(断片化)
出来ない
• 仮想記憶と似たような発想
– アドレスをブロック単位でマップ
⇒上記の問題解決
論理アドレス(ファイル名+内部論理位置) (セクター番号)物理アドレス
0 1 ファイルA 0
ディスク
1 2 3 4 5 6 7 2
3
マッピングマッピング
6
領域管理の考え⽅え⽅
• ブロックの「論理アドレス」と 物理アドレス間をマッピング
• ブロックの順番が変っても
(途中追加など) OK
• 縮んでも隙間が(断片化)
出来ない
• 仮想記憶と似たような発想
– アドレスをブロック単位でマップ
⇒上記の問題解決
論理アドレス(ファイル名+内部論理位置) (セクター番号)物理アドレス
0 1 ファイルA 0
ディスク
1 2 3 4 5 6 7 2
3
マッピングマッピング
マッピング テーブルの 書き方を どうする︖
リンクでスペース管理
ファイル名
test1.txt 先頭ブロックへ のポインタ 23
ブロック23 次は44
ブロック44 次は71
ブロック71 終り
(名前管理・ディレクトリ)
(スペース管理)
8
リンクでスペース管理
ファイル名
test1.txt 先頭ブロックへ のポインタ 23
ブロック23 次は44
ブロック44 次は71
ブロック71 終り
(名前管理・ディレクトリ)
(スペース管理)
次を指すリンク
リンクでスペース管理
ファイル名
test1.txt 先頭ブロックへ のポインタ 23 ファイル名
kadai.doc 先頭ブロックへ のポインタ 12 ファイル名
word.exe 先頭ブロックへ のポインタ 62
ファイル名
work.java 先頭ブロックへ のポインタ 21
ブロック23 次は44
ブロック44 次は71
ブロック71 終り
ブロック12 終り
ブロック62 次は11
ブロック11 終り
ブロック21 次は58
ブロック58 次は14
ブロック14 終り
(名前管理・ディレクトリ)
(スペース管理)
10
リンクでスペース管理
ファイル名
test1.txt 先頭ブロックへ のポインタ 23 ファイル名
kadai.doc 先頭ブロックへ のポインタ 12 ファイル名
word.exe 先頭ブロックへ のポインタ 62
ファイル名
work.java 先頭ブロックへ のポインタ 21
ブロック23 次は44
ブロック44 次は71
ブロック71 終り
ブロック12 終り
ブロック62 次は11
ブロック11 終り
ブロック21 次は58
ブロック58 次は14
ブロック14 終り
• 単純なアイデア
(名前管理・ディレクトリ)
(スペース管理)
リンクでスペース管理
ファイル名
test1.txt 先頭ブロックへ のポインタ 23 ファイル名
kadai.doc 先頭ブロックへ のポインタ 12 ファイル名
word.exe 先頭ブロックへ のポインタ 62
ファイル名
work.java 先頭ブロックへ のポインタ 21
ブロック23 次は44
ブロック44 次は71
ブロック71 終り
ブロック12 終り
ブロック62 次は11
ブロック11 終り
ブロック21 次は58
ブロック58 次は14
ブロック14 終り
• 単純なアイデア
• 「次」はそのブロック を読まなければ
わからない
(名前管理・ディレクトリ)
(スペース管理)
12
リンクでスペース管理
ファイル名
test1.txt 先頭ブロックへ のポインタ 23 ファイル名
kadai.doc 先頭ブロックへ のポインタ 12 ファイル名
word.exe 先頭ブロックへ のポインタ 62
ファイル名
work.java 先頭ブロックへ のポインタ 21
ブロック23 次は44
ブロック44 次は71
ブロック71 終り
ブロック12 終り
ブロック62 次は11
ブロック11 終り
ブロック21 次は58
ブロック58 次は14
ブロック14 終り
• 単純なアイデア
• 「次」はそのブロック を読まなければ
わからない
(名前管理・ディレクトリ)
(スペース管理) 後ろのブロックに行き着かない チェーン型は途中のブロックを全部読まないと
リンクでスペース管理
ファイル名
test1.txt 先頭ブロックへ のポインタ 23 ファイル名
kadai.doc 先頭ブロックへ のポインタ 12 ファイル名
word.exe 先頭ブロックへ のポインタ 62
ファイル名
work.java 先頭ブロックへ のポインタ 21
ブロック23 次は44
ブロック44 次は71
ブロック71
ブロック12 終り
ブロック62 次は11
ブロック11 終り
ブロック21 次は58
ブロック58 次は14
ブロック14
• 単純なアイデア
• 「次」はそのブロック を読まなければ
(名前管理・ディレクトリ)
(スペース管理)
• 「空き」の管理も
終り
終り
14
スペース管理⽤の情報を集める
test1.txt 先頭 16
ブロック23
ブロック44
ブロック71
(ディレクトリ)
(スペース管理)
ブロック23 インデックスブロック16
ブロック44 ブロック71
それぞれのデータブロックへのリンクを 1つのブロックに集める
スペース管理⽤の情報を集める
test1.txt 先頭 16 kadai.doc 先頭 18 word.exe 先頭 33
work.java 先頭 31
ブロック23
ブロック44
ブロック71 ブロック12
ブロック62
ブロック11
ブロック21
ブロック58
ブロック14
(ディレクトリ)
(スペース管理)
ブロック23 インデックスブロック16
ブロック44 ブロック71
ブロック12 インデックスブロック18
空き 空き
ブロック62 インデックスブロック33
ブロック11 空き
ブロック21 インデックスブロック31
ブロック58 ブロック14
16
スペース管理⽤の情報を集める
test1.txt 先頭 16 kadai.doc 先頭 18 word.exe 先頭 33
work.java 先頭 31
ブロック23
ブロック44
ブロック71 ブロック12
ブロック62
ブロック11
ブロック21
ブロック58
ブロック14
• ブロック71へ至るのも早い
インデックスブロック16を1つ読めば23も44も71もアクセスできる
(ディレクトリ)
(スペース管理)
ブロック23 インデックスブロック16
ブロック44 ブロック71
ブロック12 インデックスブロック18
空き 空き
ブロック62 インデックスブロック33
ブロック11 空き
ブロック21 インデックスブロック31
ブロック58 ブロック14
リンクリストや
インデックスノードによる 記憶空間管理の⽅法が
理解できましたか︖
次へ
〇 ×