🐧

原稿用紙からはじめるファイルシステム超入門【演習編】

2023/07/30に公開

はじめに

以下の記事に対する理解度のチェック+αの内容の演習です。
演習としてトライしても、演習形式の読み物だと思って読んで頂いても良いと思います。

https://zenn.dev/lightgreenface/articles/4d40b3698659b6

演習Ⅰ

空欄①~⑥にあてはまる言葉を選択肢から埋めよ。

ファイルシステムはHDDやSSD上のデータ構造とそれを読み書きする( ① )から構成される。
UNIX系OSのファイルシステムではファイルのデータ構造は主に( ② )と( ③ )からなる。
( ② )に基本的なファイルの属性や( ③ )の位置情報が記録されており、実際のファイルの内容は( ③ )に記録されている。
iノードが枯渇すると( ④ )が作れない。これは( ⑤ )も( ⑥ )の一種だからである。

【選択肢】
a. ハードウェア     b. ソフトウェア     c. ファイル     d. ディレクトリ
e. ファイルとディレクトリ  f. シンボリックリンク  g. データブロック  h. iノード
i. スーパーブロック

回答

ファイルシステムはHDDやSSD上のデータ構造とそれを読み書きする( b. ソフトウェア )から構成される。
UNIX系OSのファイルシステムではファイルのデータ構造は主に( h. iノード )と( g. データブロック )からなる。
( h. iノード )に基本的なファイルの属性や( g. データブロック )の位置情報が記録されており、実際のファイルの内容は( g. データブロック )に記録されている。
iノードが枯渇すると( e. ファイルとディレクトリ )が作れない。これは( d. ディレクトリ )も( c. ファイル )の一種だからである。

演習Ⅱ

一般的なファイルシステムにあって簡易ファイルシステム(その3)に実装されていないファイルのパラメータをあげよ。


簡易ファイルシステム(その3)

  • 管理領域の1マス目~9マス目はデータ領域の位置を指し、10マス目にはそのファイルがファイルかディレクトリかの識別子を持つ
  • 例として、所有者(ユーザ / グループ)が実装されていない。
回答

所有者(ユーザ / グループ)、パーミッション、タイムスタンプ、ファイルサイズ、リンク数 など

演習Ⅲ

簡易ファイルシステム(その3)を改善し、最大ファイルサイズを大きくする方法を述べよ。

  • ただし、最大ファイル数(10個)を減らさないこと。
回答
  • データ領域をひと塊1行 ⇒ ひと塊2行に拡大する(ブロックサイズの拡大)
    • 1ファイル最大180文字 ⇒ 280文字になる(分割損で1行余る)

  • 管理領域を1ファイル10マス ⇒ 1ファイル20マスに拡大する(iノードサイズの拡大)
    • 1ファイル最大180文字 ⇒ 200文字(最大ファイル数を減らさない条件のため、データ領域が300マスから200マスに減ることがネックとなりあまり大きくならない)

演習Ⅳ

簡易ファイルシステム(その3)を更に改善し、最大ファイル数20個以上、かつ、最大ファイルサイズ260文字以上を満たす方法を述べよ。

ヒント

演習Ⅲの回答にある管理領域・データ領域のサイズ見直しに加えて、間接参照という仕組みを取り入れる必要がある。

回答

以下、3点を取り込むとこれを達成できる。

  • 管理領域を1ファイル10マス ⇒ 4マスにする
    • 最大ファイル数10個 ⇒ 20個に拡大(管理領域の合計サイズが80文字に減る)
  • データ領域をひと塊1行(20マス) ⇒ ひと塊16マスに縮小する
    • 20個のデータ領域を確保(合計320文字)
  • 関節参照方式(1段)を採用する
    • 管理領域の3マス目(4マス目はファイルかディレクトリかの識別子)を間接ブロックへのアドレスとすると、2マス(直接参照)+16マス(間接参照)で18個のデータ領域を指せる ⇒ 288文字

1つのデータ領域を持つファイルを20個作れる、また、1つのファイルは最大288文字の情報を記録できる。


  • ファイルシステムは限られた容量を効率よく便利に使うために様々な工夫とトレードオフの上に成り立っている
    • 世の中には様々な特性を持つファイルシステムがたくさん存在する

Discussion