V7リターンず を視聴したメモです。

・ディスクの空き領域管理は最初リストだったがBSDでビットマップに。
・UNIXではファイルを最初に作る時点で領域を確保しないという思想であり、その時点ではサイズが分からないのでどこに割り当てるのがベストか分からないので仮に割り当てる。実際に書き出すのは少し後なのでその時点でサイズを見てremap機能により連続領域をなるべくとるように後に改良された。
・ファイルシステムは、数(ファイル名文字数等?)の拡大と、長期間使用してフラグメント化が進み速度低下することへの対策がずっととられていく。当初のファイルシステムは速度低下が激しく、バックアップ→newfs→リストアが必要だった。
・BSDのinodeには、初期UNIXからの機能がi_commonに残る。inodeがさす対象がfileだけでなくsocketにも拡大。
・nameiは元は線形サーチでnameが一致したらinodeを返すだけだったが、名前が可変長になり実装が複雑化。可変長は、inode+長さ+名前の文字列で表現。
・BSDではアクセス速度を上げるためシリンダーグループ内にできるだけ1つのファイルを割り当てる。
・V7のファイルシステムとMINIXFS、BSDとext2は近い感じ。
・ディレクトリは自分と親ディレクトリ2つからリンクされてるのでディスクに2度書かれる。片方だけ書いた時に落ちると矛盾が発生する脆弱性あり。そのため初期UNIXではboot時に必ずfsckをかけていた。
・ジャーナルとはディスク処理のトランザクションの記録。上記脆弱性への対策。ext3から。データは失われてもファイルシステムに矛盾は起きない。
・アプリは1バイトで読み書きしたいがディスクIOは512バイト単位。結局一旦は512バイト読むしかなくバッファに入る。そこが変化しなければclean、変化すればdirty、ファイルが削除されればn。それらの状態管理をする。

5.2.2 ELF形式の構造 まで読みました。

オブジェクトファイルにはセクション情報しかない。
リンカがそれを使ってセクション毎にまとめ実行ファイルを作る。
その際にローダが使うセグメント情報を追加する。
ローダはセグメント情報に従って、実行ファイル内の各部をメモリ展開する。
セクションとセグメントは独立した概念であり、包含関係や領域は互いに独立ではあるが、1つのセグメントに複数のセクションが含まれることが多い。

5thステップは自分が全く知らなかった領域です。ここが分かれば今までとは大分違って来そう。