オペレーティングシステム - stwww

オペレーティングシステム
ファイルシステムその2
ファイルシステムの構造
「オペレーティングシステム」(第6回目)
今井慈郎([email protected])
ファイルシステムの構造
1.
2.
3.
4.
5.
補助記憶装置(ディスク)の構造
ボリュームとファイルの管理
ディレクトリとネーミング関数
領域割当(外部断片化と内部断片化)
領域管理( UNIXとMS-DOS(Windows)で
の実際)
補助記憶装置(ディスク)の構造
ファイルの格納~磁気ディスク装置(その1)
„ 樹脂製の薄い円盤(ディスク)に磁性体を塗った記憶
媒体.
„ 磁性体の磁化状態を電気的に変化させることにより,
データを記憶・消去.
„ 読み書きを行なう際には,ディスクを高速回転(毎秒
数千回転)させ,磁気ヘッドを近づけて表面の磁界
を制御.
„ 光ディスクなどに比べ,高速アクセス可能.
ファイルの格納~磁気ディスク装置(その2)
„ ハードディスクでは大容量化が進み,直径3.5イン
チのディスク片面に最大30GB程度の記録が可能.
„ (注)磁気ヘッドとディスク表面は1000分の1mm以下
と非常に接近するため,振動に弱い.
振動に弱い
„ 回転速度:例)7200rpm
„ 1分間あたりの回転数 RPM (revolutions per minute)
ファイルの格納~磁気ディスク装置(その3)
3つのキーワード:トラック,セクタ,シリンダ
トラック: データを記録する線状に連なった部分.
「トラック(track)」とは,(車などが通っ
た後の)「轍」(わだち) という意味.トラッ
クの上をデータを読み書きするための
ヘッド機構部がなぞることにより記録・
再生.
トラックの形状は,同心円状,らせん状
に配置.
ファイルの格納~磁気ディスク装置(その4)
3つのキーワード:トラック,セクタ,シリンダ
同心円状: ハードディスクなど接触型の磁気ヘッドを
使う記録装置に多い.目的のトラックまで一気にヘッ
ドを移動(seek)し,その下にあるトラックのデータを読
み書き.連続してデータを読み書きするためには,ヘッ
ドをシークして次のトラックへ移動する必要あり.
らせん状: CDなど,光学的な記録方式を使うメディ
アに多い.光をトラック上に正確に収束させるため,
細かく光軸を微調整する「トラッキング」という操作を
常に行っている.らせん状トラックにすればトラック間
をシークしなくても連続的にデータを読み書き可能.
ファイルの格納~磁気ディスク装置(その5)
3つのキーワード:トラック,セクタ,シリンダ
セクタ: データを読み書きする単
位.「セクタ(sector)」とは
領域とか区画という意味.
一般にトラック内には複
数のセクタが配置.
ファイルの格納~磁気ディスク装置(その6)
3つのキーワード:トラック,セクタ,シリンダ
シリンダ: 同じ位置にあるトラックヘッドを動
かさずにアクセスできるトラックの
集合.概念的には筒状と考えられ,
「シリンダ(cylinder )と呼称.ハー
ドディスクなどの補助記憶装置で
は,データを読み書きするために
はヘッドを目的のトラックへ移動す
る必要あり.同じシリンダ上にある
トラックならばシークせずに連続し
て高速にアクセス可能.
ファイルの格納~磁気ディスク装置(その7)
3つのキーワード:トラック,セクタ,シリンダ
セクタ(sector)
メモリ
磁気ヘッド
トラック
(track)
セクタ: データ転送の単
位
シリンダ
(cylinder)
計算問題のための情報を・・・
但し,情報処理技術者試験などには頻出の
問題かもしれないので対策を・・
ハードディスクドライブの記憶容量計算
記憶容量=1トラックの記憶容量×1シリンダあたりのトラック数(磁気ヘッド
の個数)×シリンダ数
例)記憶容量を求める計算
・1トラックの記憶容量=20,000バイト
・1シリンダあたりのトラック数=30トラック
・シリンダ数=600シリンダ
記憶容量=20,000×30×600=360,000,000バイト=360Mバイト
1トラックあたりの記憶容量=1セクタの記憶容量×1トラックあたりのセクタ数
例)1トラックあたりの記憶容量を求める計算
・1セクタの記憶容量=512バイト
・1トラックあたりのセクタ数=40セクタ
・1トラックあたりの記憶容量=512×40=20,480バイト
磁気ディスク装置へのアクセス手順(その1)
1)ディスク上の情報の物理アドレス:
(Cylinder No, Head No(or Track No), Sector
No) で一意に決定
2)ディスク上の情報へのアクセス:
1. 指定されたシリンダにヘッドを移動(ヘッドアームを
移動).この操作をシークと呼び,その所要時間を
シーク時間(seek time)と呼ぶ.
2. 指定されたヘッドを選択(電気的に切替).所要時
間はゼロと近似
磁気ディスク装置へのアクセス手順(その2)
4. ヘッドが位置するトラック上の指定された物理レコー
ド(ブロック)がヘッドまで回転するのを待つ.その
所要時間を回転待ち時間(latency)と呼ぶ.
5. 指定の物理レコード内の情報を転送する.その所
要時間をデータ転送時間(transfer time)
アクセス時間=
「平均シーク時間+平均回転待ち時間
+データ転送時間」
磁気ディスク装置へのアクセス手順(その3)
ディスク上のアドレスを任意に指定することで,
所定の物理レコード(ブロック)にアクセス可能
このような性質を有する補助記憶装置をランダ
ムアクセス記憶装置(random access storage
device)あるいは直接アクセス装置(direct
access storage device)と呼ぶ
計算問題のための情報を・・・
但し,情報処理技術者試験などには頻出の
問題かもしれないので対策を・・
次のハードディスクドライブから2000
バイトのデータを,メモリに読み込む
時間は,次のように計算する・・
【仕様】
回転速度:3000回転/分
トラック容量:20000バイト/トラック
平均シーク時間:50ミリ秒
データのメモリ転送時間計算(その1)
① 平均回転待ち時間の計算
1回転:60秒÷3000=0.02秒=20ミリ秒
半回転:20÷2=10ミリ秒 ・・・・平均回転待ち時間
② データ転送時間の計算
1回転(20ミリ秒)間に1トラック分の情報(20000バ
イト)が転送される
従って,1バイトの転送に要する時間:20÷20000
=0.001ミリ秒
指定された2000バイトの転送時間:2000×0.00
1=2ミリ秒
データのメモリ転送時間計算(その2)
③ 合計の所要時間は
「平均シーク時間+平均回転待ち時間+データ転送
時間」なので
50+10+2=62ミリ秒
答) 所要時間は 62ミリ秒
ファイルシステムの構造
1.
2.
3.
4.
5.
補助記憶装置(ディスク)の構造
ボリュームとファイルの管理
ディレクトリとネーミング関数
領域割当(外部断片化と内部断片化)
領域管理( UNIXとMS-DOS(Windows)で
の実際)
ボリュームとファイルの管理(その1)
情報を記憶する媒体:storage medium 「ボリューム(volume)」とは媒体の総称 ファイルシステムの役割には
■ ボリュームの管理
■ボリューム内での領域割当の実施
などがある
ボリュームとファイルの管理(その2)
各ボリュームには次のような情報が含まれる,
¾ 初期プログラムローダ(IPL): システム立ち上げ
IPL)
時に起動されるプログラム.最初に起動される装
置の固定領域に配置.起動後は使用されない.
¾ ボリューム管理情報: ボリューム名,ボリューム
ボリューム管理情報
構成情報,領域割当状況,不良ブロック情報など,
ボリューム管理に必要な諸情報
¾ ファイル管理情報: ファイル名,型,ファイルサイ
ファイル管理情報
ズなど個々のファイルに関する情報
¾ ファイルデータ: ファイルの内容
ファイルデータ
ボリュームとファイルの管理(その3)
UNIX:論理ボリューム
UNIX
ブートブロック
スーパーブロック
シリンダブロック
MS-DOS:物理ボリューム
DOS
IPL
FAT
ルートディレクトリ
iノードリスト
データ領域
データ領域
UNIXとMS-DOS(Windowsの前身)との比較
ボリュームとファイルの管理(その4)
UNIXの場合:
„ 1つの物理ボリュームをいくつかの区画(パーティ
ション)に区切り,これを論理的なボリュームとし
て扱う.
„ 論理ボリュームの管理情報は,スーパーブロッ
クと呼称.
„ ファイルの管理情報は,iノードリストに配置.
ボリュームとファイルの管理(その5)
UNIXの場合(つづき):
„ iノード(i
ノード node )は,ファイルごとの管理情報
を記録する一定サイズのデータ構造であり,
その配列がiノードリスト.
„ 各のiノードはiノード番号によって指定.
„ ファイルを論理ボリュームとiノード番号の対
によって識別.
ボリュームとファイルの管理(その6)
MS-DOSの場合:
„ 各物理ボリュームごとにFAT(File
Allocation
FAT
Table)と呼ばれる管理表を有し,ボリューム内の
領域管理に使用.
„ フォーマット処理により,使用に先立ち,トラックや
セクタのような構造を磁気的に作成する必要あり
(不良箇所を記録し,トラック/セクタ単位で隔離).
„ ファイルを作成するためのデータ構造(IPLからデー
タ領域まで)を磁気的に作成する必要あり(フォー
マット処理の後半).
ボリュームとファイルの管理(その7)
= FATファイルシステム VS NTFSファイルシステム =
„ FATファイル・システムは,MS-DOSにおけるファイ
ル管理方式として広く普及.
Windows 9x系列のWindows(Windows 95/Windows
98 SE/Windows Me) ファイル・システムとして,
このFATのみが利用可能.
MS-DOSの時代に開発されたFAT16から進化した
FAT32では,大容量ディスクへの対応,ロング・ファイ
ル名への対応などの機能追加
基本的構成は従来通り.
ボリュームとファイルの管理(その8)
= FATファイルシステム VS NTFSファイルシステム =
„ Windows NTでは,FATに代わる新しいファイル・
システムとしてNTFSが開発.
FAT16/32はあくまで個人利用を前提として設計
NTFSでは,よりミッション・クリティカルな用途にも
耐えるように,セキュリティ強化や信頼性向上など
を目的とした新機能を追加.
WindowsXPにも踏襲
ボリュームとファイルの管理(その9)
= FATファイルシステム VS NTFSファイルシステム =
„ NTFSでは,アクセス制御機能を強化.
FATファイル・システムの問題点:集中管理を前提
とする企業用途に耐えるアクセス制御機能の提供
が不可能.
NTFSでは,完全な強制力を持ったファイル・アクセ
ス制御機能を提供.
ドメインなどを単位として,ファイル・アクセスを集中
管理可能.
ボリュームとファイルの管理(その10)
= FATファイルシステム VS NTFSファイルシステム =
„ Windows NT,Windows 2000,Windows XP,
XP
Windows Server 2003でNTFSが利用可能.
上記OSを搭載した業務用途のコンピュータ(パソコン
ではない位置づけ)
通常,NTFSファイル・システムの利用が前提
但し,これらのOSからも,以前のFATボリューム利用
は可能.
ファイルシステムの構造
1.
2.
3.
4.
5.
補助記憶装置(ディスク)の構造
ボリュームとファイルの管理
ディレクトリとネーミング関数
領域割当(外部断片化と内部断片化)
領域管理( UNIXとMS-DOS(Windows)で
の実際)
ディレクトリとネーミング関数(その1)
= Windows VS UNIX =
■ Windows(含むMS-DOS)でのファイル管理:
¾ ファイル管理はボリューム単位.
¾ ファイルの識別はボリューム名+パス名.
ボリューム名は装置名(ドライブ名)であり,省略時
(default)ドライブ指定可能(ドライブ名:ファイルの
パス名).
パス名
¾ ディレクトリ: 以下の情報などが登録
ファイル名,ファイル型,ファイル作成・変更時刻,
領域を管理するFATのインデックス,ファイルサイズ
ディレクトリとネーミング関数(その2)
= Windows VS UNIX =
■ Windows(含むMS-DOS)でのファイル管理(続き):
¾ ルートディレクトリ
ディスクの固定領域に割り当てられる.
サイズも固定.
ボリュームラベル(ドライブを表すボリューム名)など
を登録.
¾ 他の(サブ)ディレクトリ
ディスクの任意の領域に割当可能.
ディレクトリとネーミング関数(その3)
= Windows VS UNIX =
■ UNIX(Linux)でのファイル管理:
¾ 典型的な木構造ディレクトリでのファイル管理(論理
ボリューム単位で,階層型ディレクトリを構成し,ファ
イルを登録).
¾ ディレクトリもファイルとして実装.ファイル(含むディ
レクトリ)名と iノード番号との対が登録.・・・1つの
ファイルと1個のiノード(i-node)が対応
¾ 論理ボリューム単位で個別のファイルシステムが存
在し,それを1本の木構造に統合・管理.
ディレクトリとネーミング関数(その4)
= Windows VS UNIX =
■ UNIX(Linux)でのファイル管理(続き):
¾ 「ルートファイルシステム」はシステムブート時に起
動される論理ボリュームのファイルシステムの呼称.
このルートファイルシステムの既存ディレクトリに,
他のファイルシステムの個別のルートを結合し,シ
ステムで1本の論理的階層(木構造)ディレクトリを
構成.
¾ 「マウント(mount)」はディレクトリの結合操作の呼
称.逆操作は「アマウント(umount)」
UNIX:論理ボリューム
UNIX
ブートブロック
スーパーブロック
UNIX:物理ボリューム
UNIX
ルート
パーティション
シリンダブロック
iノードリスト
データ領域
ブートブロック
スーパーブロック
シリンダブロック
iノードリスト
データ領域
1本の木構造
ブートブロック
スーパーブロック
シリンダブロック
iノードリスト
データ領域
マウント
UNIXにおけるiノード(リスト)とデータ(領域)の関係
iノードリスト
ファイル名(パス名:
/home/imai/test.c
)へのアクセス手順
ネーミング関数の実体
1.
2.
2
4
iノードの検索とデ
ータブロックの決
定:ネーミング関
数で物理レコード
のアドレスを確定 8
前述の方法を用い
て,当該物理レコ
ードへアクセス
11
データブロック(データ領域)
ルート
ディレクトリ
2
・
2
3
・・
bin
4
home
4
/home
ディレクトリ
8
・
・・
imai
8
・
4
・・
test.c
/home/imai
ディレクトリ
2
11
test.c
main(){・・}
目的のファ
イル
UNIXのファイルシステムの特徴
„ UNIXでは1つのファイルに複数の名前を設定可
能.同じiノード番号を有する複数のディレクトリエ
ントリが作成.「リンク(ハードリンク)」はこれらの特
殊エントリの呼称.ファイルシステムを横断すること
は不可.
„ 他のファイルのパス名を保持するファイルを作成
可能.「シンボリックリンク(ソフトリンク)」がこのよう
なファイルの呼称.異なるファイルシステムをまた
いでリンク可能.
„ 各ディレクトリには,「・」(自身のディレクトリ)と「・・」
(1つ上位の,親のディレクトリ)が登録可能
ファイルシステムの構造
1.
2.
3.
4.
5.
補助記憶装置(ディスク)の構造
ボリュームとファイルの管理
ディレクトリとネーミング関数
領域割当(外部断片化と内部断片化)
領域管理( UNIXとMS-DOS(Windows)で
の実際)
領域割当(外部断片化と内部断片化~その1)
外部断片化とは
ファイルをデータ領域に割り当てる場合,
連続領域への割当が最も簡単な方法
データを編集する場合,ファイルサイズ
が動的に伸縮することになる.
その結果,予め割り当てた領域に対し
て,(小さくなれば隙間が生じ,大きくな
れば本体全体が移動するので)空き領
域が発生する.
縮小
伸張のため移動
領域割当(外部断片化と内部断片化~その2)
外部断片化とは
このようにディスクのデータ領域のあちこちに断片化
した空き領域が発生
領域全体の使用効率が低下
「外部断片化(external fragmentation)」と呼ぶ.
空き領域
外部断片化
領域割当(外部断片化と内部断片化~その3)
内部断片化とは
連続した領域を割り当てる方式
外部断片化により,分散した空き領域が発生.
これらを1つの大きな空き領域にまとめれば,再利用も
容易.
その操作は「詰め直し(compaction)」と呼び,多大な所
要時間を要する(メモリ内での大量データ移動のため) .
領域割当(外部断片化と内部断片化~その4)
内部断片化とは
ブロックなど固定サイズの領域を単位として,割り当て
る方式が有効(ブロック割当方式).
連続割当方式と比較し,ファイルの伸縮に対応でき,外
部断片化を回避可能.
◆連続割当(1つのファイルに関するデータ領域が集約)
VS ブロック割当方式(1つのファイルに対する
データ領域がディスク全体に散在)
アクセス効率の低下(シリンダをまたいだ場合,毎
回のアクセスにシーク時間まで含まれることになる).
領域割当(外部断片化と内部断片化~その5)
内部断片化とは
一般には,いくつかのブロックをクラスタ(cluster)として
まとめ,散逸を回避する.
しかし,この方法で領域を割り当てても,最後のブロック
内には基本的に無駄な空き領域が発生する可能性あり.
「内部断片化(internal fragmentation)」と呼ぶ.
一般に,内部断片化は避けにくく,ブロックサイズを調
整し(初期設定時に),システムの最適化を図ることが
必要.
領域割当(外部断片化と内部断片化~その6)
内部断片化とは
各ファイルの領域
割当後のイメージ
ファイル
ブロック割当で各ファイルの領域
割当を行う:確かに,外部断片化
は発生しないが・・・
ブロック内に未使用部分:内部断片化
の発生
ファイルシステムの構造
1.
2.
3.
4.
5.
補助記憶装置(ディスク)の構造
ボリュームとファイルの管理
ディレクトリとネーミング関数
領域割当(外部断片化と内部断片化)
領域管理( UNIXとMS-DOS(Windows)で
の実際)
領域管理(その1)
領域割当とその管理(領域管理)の基本的考え方
領域割当で最も簡単な手法は連続領域割当である.
しかし,以下のような問題点も発生
„ ファイルの大きさを事前に宣言 事前確定は困難
„ 領域の外部断片化の発生 ファイルを編集する
ことで(領域割当と解放を繰返すことで)ディスク領
域などに空き領域が発生
„ 連続領域割当の使用効率を改善 詰め直し
(Compaction)が必要 ブロック割当の妥当性
内部断片化の発生は不可避 どれだけ効率化するかが問題
領域管理(その2)
(主流である)ブロック割当方式での領域管理方式
使用(中の)領域管理と空き(未使用の)領域管理
使用領域の管理:使用中である領域の効率的管理
„ リスト方式 リストであれば頭からサーチ
„ 索引(インデックス)方式
空き領域の管理:未使用である領域の効率的管理
„ リスト方式 リストであれば頭からサーチ
„ ビットマップ方式
使用領域の管理(その1):リスト方式
特徴:
ファイル名
T ファイルを構成するブロック
を先頭から順にリストして保
持
T 各ブロックには次のブロック
へのポインタが存在
ポインタ
・・ ディレクトリに格納
2
5
0
1
2
7
3
10
4
5
6
7
8
9
10
11
12
13
14
15
T ディレクトリには先頭ブロッ
クへのポインタが登録
T 途中のポインタが破壊され
ると修復が困難
T 順アクセスには効果的だが,
直接アクセスには不向き
データブロック
使用領域の管理(その2):索引方式
特徴:
・・ ディレクトリに格納
ファイル名
T 索引が存在.各ブロッ
クへのポインタを表形
式で保持(これを索引
indexと呼称)
T ファイル事に索引が生
成,ディレクトリに索引
(or索引へのポインタ)
が格納
T 直接アクセスも容易(リ
スト方式の改善).但し,
索引のための領域が
別途必要
2
5
7
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
10
索引
データブロック
空き領域の管理(その1):リスト方式
空き領域の先頭
特徴:
T 空き領域を構成するブロック
群を順にリストして保持
T 各未使用ブロックには次の
ブロックへのポインタが存在
ポインタ
T 1つの空きブロックを得るの
に1回のディスクアクセスが
必要
0
1
3
0
1
6
4
2
3
8
4
5
9
11
8
9
6
7
10
11
データブロック
但し,空き領域管理には複雑なアクセス手順は不要で,必要
なブロックだけリストを手繰って確保すればリストの更新は容
易・・ディスクアクセスを低減するためキャッシュなどを活用
空き領域の管理(その2):ビットマップ方式
特徴:
T ディスク中のブロックを1ビットに
対応させ,対応するブロックが使
用中なら「0」に,未使用なら「1」
にセット
T ビットマップ用のデータを1つの
領域に確保
1
1
0
1
1
0
1
0
1
1
0
1
Bitmap
0
1
2
3
4
5
6
7
8
9
10
11
データブロック
UNIXの領域管理(その1):索引方式
■UNIXでは,ブロックを単位
に領域割当
i-node
■ファイル領域は索引で保持
直接
■巨大なファイルの総てのブ
ロックを一元的な索引で登録
するのは非常に大きな索引
を必要とするので効率が悪い
■間接ブロック(単一,二重,
三重)を活用してブロックを管
理 ・・・ 巨大なファイル容量
を実現(使用頻度は多くないが)
単一間接
二重間接
三重間接
UNIXの領域管理(その2):索引方式
×1024
×1024 ×1024
i-node
ブロック容量×12
×1024
×1024 ×1024
理論上のファイル容量は・・・
×1024 ×1024×1024
MS-DOSの領域管理(その1):FAT方式
■MS-DOSでは,ディスクをクラスタに分割し,クラ
スタ単位に領域割当
■ディスク領域の管理はFATを利用.FATのエントリ
は各クラスタ(のインデクッス)に対応
■ディスク領域のクラスタには順に番号が付与.FAT
でその番号をインデックスとする表を管理
■1つのファイルに使用されるクラスタをポインタで繋
ぎ,保持.使用中のクラスタに対応するFAT上のイン
デックスには,次のクラスタ番号が記載
■FATが欠損すればファイルへのアクセスは不能
MS-DOSの領域管理(その2):FAT方式
FAT
ディレクトリ
A
1
B
4
3
Free
5
ファイル 位置
ファイルごとにリスト化
されたブロック群
6
A:
1
3
5
B:
4
6
7
9
END
7
9
Free
END
Free
FATが欠損すればファイ
ルを構成するブロック間
の接続情報が失われ,
OSなどがファイルにアク
セスできない状況に陥る