みかん本輪読会_17

-- Views

August 17, 25

スライド概要

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

みかん本輪読会 17章 ファイルシステム

2.

ファイルとは p.396 - 任意のバイト列に名前等をつけたもの ちなみに授業では - 大量の情報を保持できること - 情報は使用したプロセスが失われても残ること - 他の複数のプロセスからも利用できること → 上記3つの要求に応える具体的な解答

3.

ブロックデバイス p.396 - データの記録にはファイルは必須ではない - SSDやUSBメモリはデータ領域が固定の大きさをもつブ ロックに分割されて、ブロック単位で読み書き → ブロックデバイスと呼ぶ - 1ブロックで足りないデータは複数個繋げれば良い - データの大きさが変化しなければうまく機能する → データが大きすぎても小さすぎてもダメ柔軟性なし

4.

ファイルシステム p.396 - 管理データの置き方やブロックの割り当て方によって 様々なファイルシステムがある → linuxだとext4やbtrfs windowsだとFAT16/32やNTFS、exFAT macだとHFS、HFS+、APFS 他にもZFSやColossusなど - UEFI規格ではFATが標準的に用いられる

5.

ファイル方式のメリット p.396 - データに名前をつけて管理 - 名前とブロック番号の対応表を使用する - 対応表のおかげで複数の区画でデータを記録可能 - 動的にブロックの割り当てが可能 → 名前とブロック番号の対応表を管理する機能を中心と した仕組みをファイルシステムと呼ぶ

6.

FATのボリュームイメージを作る p.396~397 - ddコマンドはifで指定したファイルからofで指定したファ イルにコピーする - /dev/zeroはゼロが無限に読み出せる - bsはddが1度にコピーする大きさ(ブロックサイズ) - countはコピーするブロックサイズ - 結局は128MiBだけifからofにコピーされる - mkfs.fatはFAT形式でフォーマットするコマンド

7.

ボリュームイメージを見てみる p.397

8.

ボリュームイメージに書き込み p.397~398 - ボリュームをマウントして適当なテキストファイルをコ ピー - hexdumpする

9.

更にボリュームイメージに書き込み p.398~399 - 大文字小文字混合の8文字以上のファイル名にする - ファイル名がOSAKAI~1DATになっている 中身はそのまま

10.

BIOS パラメータブロック p.400 - これまでに作成したボリュームイメージは1つのパー ティションを表している → ブロックデバイスを複数に分割した1つの領域 - パーティションの先頭1ブロックをPBRと呼ぶ → パーティションの大きさやどこから始まるかの情報 - PBRの中でもBPBと呼ばれる領域が特に重要 表17.2

11.

ディレクトリ p.402 - ファイルシステムの構成を管理するためのファイル で、複数のファイルやディレクトリを格納可能 - FATでは特殊なファイルとして表現 - ディレクトリエントリという32バイトのデータ構造が配 列状に並んだ構造

12.

FATファイルシステムでのディレクトリエントリ

13.

ボリュームを読み出す p.403 - BPBの値からルートディレクトリの位置を取得し、その 中身をディレクトリエントリの構造に従って読めばボ リュームイメージ内のファイルの一覧を得られる - しかしボリュームイメージをメモリに読み出す方法が まだ分からない → 具体的にはブロックデバイスからの読み出し方法

14.

ブロックデバイスからの読み出し p.403 - 一般的なOSではドライバが準備されている - ドライバを開発するのはすごく大変 → UEFIにあるBlock I/O Protocolを使う - OSが起動する前にブロックデバイスのデータをまとめ て読み出す - OSはブートローダーがメモリ上に読み出したデータを読 み込む

15.

ボリュームイメージの読み込み p.404 - リスト17.1はボリュームイメージを読み出す処理 - 前半は起動メディアにfat_diskがあるか調べる - なければ全体を読み込みボリュームイメージを探す - ファイルはkernel.elfを読み込む処理と同じ - ReadFileにファイルを渡すとvolume_imageに戻す - fat_diskがない場合はBlock I/O Protocolを用いて起 動メディアの先頭ブロックから読み込む

16.

Block I/O Protocol p.404~410 - OpenBlockProtocolForLoadImage()でBlock I/O Protocolを取得しblock_io変数に設定 - block_io->Mediaにはブロックデバイスの各種情報 - BlockSizeとLastBlockで最大サイズ(byte)を求める - volume_byte(全体のサイズ)は16MB → 全体を読み込むとメモリがなかったり時間がかかる - ReadBlocks()でデータを読み込む

17.

lsコマンド p.410~414 - OSがボリュームイメージを受け取れるようになったので lsコマンドが作れる → ボリュームに含まれるファイルの一覧を出す - リスト17.10で実装 → ルートディレクトリの先頭ポインタを取得しforでルート ディレクトリの中身を順に表示する