06 後期勉強会一年の部【加藤】
- 1. 12章 仮想ファイルシステム
この章では、Linux において他のシステム(Windows など)と共存するために必要不可欠
である仮想ファイルシステム(VFS:Virtual File System)について述べられている。
12.1:VFS の役割
VFS は、仮想ファイルシステムスイッチともいわれるカーネル上のソフトウェア(レイ
ヤ)、である。要は、カーネル上にある便利な自動翻訳ソフトのようなもの。
・対応するファイルシステム
- ディスクベースのファイルシステム(Ext2 以外にも)
- ネットワークファイルシステム(ネット上のファイル)
- 特殊ファイルシステム(カーネルを見るとき)
12.1.1:VFS の中身
共通ファイルモデル=UNIX のファイルモデルを反映
一方で、UNIX 系ファイルでないと再構成される。(特に、FAT→ディレクトリが多い)
*オブジェクト=データ+メソッド(操作)と定義するとオブジェクト指向型であると考
えられる。C++は効率的でない。
・構成要素
- スーパーブロックオブジェクト(一個のファイルシステムに対して1つ)
それぞれのファイルシステムのメタデータを示す。ファイルシステムに対する情報が格納
される。
- i ノードオブジェクト
ファイルの位置やディスクの情報などを含む。
- ファイルオブジェクト
ファイルとメモリ間のやりとりした情報を保存。
- d エントリオブジェクト
・仕組み
(一例)
プロセス→ファイルオブジェクト→d エントリオブジェクト→i ノードオブジェクト→スーパ
ブロックオブジェクト+i ノード→ディスクファイル
- 2. 15 章 通常ファイルへのアクセス
15.1 read()と write()を用いた通常ファイルへアクセスする方法
15.2 メモリマッピング
15.1
・通常ファイルの読み取りは、ページを基本として行われる。
→カーネルでは常に一度にページのデータ全体を転送
15.2 メモリマッピング
メモリマッピング=先頭リニアアドレス、サイズ、アクセス権を示すメモリリージョンの
ページ内のバイトへのアクセスが、通常ファイルの対応するバイトで
の操作に変換されること(カーネル)
” ” ” ” 共有 と プライベート の 2 種類の方法がある。
共有:メモリリージョンが行う全ての操作は、ディス上のファイルを変更。
プライベート:読み取り専用ファイルで適応される。
・メモリマッピングのデータ構造
=ファイルの i ノード+メモリマッピング用ディスクリプタ+メモリリージョンに割り当
てられた各ページのページディスクリプタ+ファイルオブジェクト
・メモリマッピング
メモリの構造は、
- 3. 17章 Ext2 ファイルシステム
主に、i ノードブロックのディスク領域の確保とデータブロックのディスク領域の確保につ
いてのお話。
17.1 Ext2 の紹介
17.2 ディスク上に保存されるデータ構造(by Ext2)
17.3 17.2 で示された構造がどのようにしてメモリ内にコピーされるのか。
17.4 Ext2 をディスクパーティション内に作成する方法。
17.1 Ext2 の紹介
歴史:Minix ファイルシステム→Ext FS→Ext2(→Ext3)
主な効率化の要因・特色
・ファイルの長さに応じたブロックサイズの選択
ディスクブロック内の使用率の問題が解決。
→たとえファイルサイズが 1 バイトでも、1 ブロック分を消費するので小さいファイルがた
くさんあるときはブロックサイズを小さくすればディスクの容量を効率的に使用できる。
+ブロックのフラグメント化(他のファイルに割り当てる)
【フラグメント:本来連続した情報であるファイル・空ブロックがディスク内で分断され
た状態。現在はディスクが情報を探す時間の延長を引き起こす原因の一つ】
・1 つのディスクブロック内にあるファイルに短時間でアクセス可能
ディスクブロック⇒複数のグループ と分割されている。
(グループ=スーパブロック+グループディスクリプタ+・・+i ノード+データブロッ
ク:データと i ノードが隣接)
・ファイルの断片化の防止
ファイルサイズが増加しても、先行割り当て(先行予約)によって、ファイルの隣接した位
置のブロックを予約することになっているので問題ない。
・不変ファイルと追記専用ファイルの実装
スーパーユーザーも従わせる。
・・・etc
17.2 ディスク上に保存されるデータ構造(by Ext2)
Ext2 パーティションはブートブロックと、いくつものブロックグループによって構成され
ている。同じファイルに属すデータブロックは、できるだけ同じブロックグループ内に入れ
るようにカーネルがはたらくので、ファイルの断片化はおこりにくくなる。
【ブロックグループの構成】
スーパブロック(コピー)←管理情報
ブロックグループディスクリプタ(コピー)←グループ内の要約(目次)
- 4. データブロックビットマップ←データブロックが使用中(1)or 空き(0)を示す
i ノードビットマップ←i ノードが使用中(1)or 空き(0)を示す
一個以上の i ノードの集合(テーブル)
データブロック
<ファイルの種類>
・通常ファイル
ほとんどが該当する普通のファイル。
作成時は空であり、データブロックは必要としない。
・ディレクトリ
☆Ext2 では、ディレクトリもファイル(ディレクトリエントリ)として扱われる。
構成は ディレクトリエントリ=
i ノード番号+ディレクトリエントリ自身の長さ+ファイル名の長さ+ファイルの種類
+ファイル名(常に 4 の倍数になるよう null 文字/0 で調節)
*ディレクトリを消す動作の内訳
1.i ノード番号が 1→0
2.ひとつ前のディレクトリエントリの中のディレクトリエントリ自身の長さに
消すディレクトリエントリの長さを加算。
・シンボリックリンク
パス名が 60 バイト以内→データブロック不必要(i ノードに記載されている)
パス名が 60 バイト超え→1 つデータブロック必要
・データファイルを要求しないファイル(デバイスファイル・パイプ・ソケット)
→i ノードに記載
17.3 17.2 で示された構造がどのようにしてメモリ内にコピーされるのか。
ほとんどの情報は、ファイルシステムのマウント時に RAM へとコピーされる。
非常に頻繁に更新されるデータ(スーパブロックやグループディスクリプタ)はバッファ
キャッシュ内にある。
キャッシュのモードとしては、常にキャッシュ・一定量キャッシュ・動的にキャッシュ・
キャッシュされない、がある。(一定量:特定の数のみ、動的:メモリが不足すると順次開
放、キャッシュされない:空きブロック)