「はじめてのOSコードリーディング」9.6 ブロックデバイスのブロック割り当て一度読んでもあまりにもやっとしていたのでもう一度読み直したらある程度納得できました。しかし細部はあちこち理解できていないし、特にp.300のbadblock()の判定方法がp.262の図9.3と整合しない気がしますので、勉強会の質問ネタにしたいと思います。
「はじめてのOSコードリーディング」9.5 inodeからストレージ領域へのマッピングinodeからストレージ領域へのマッピングには直接参照、間接参照、二重間接参照の3種類の方法がある。ファイルに書き込みをしていて直接参照で管理できないサイズになると間接参照に切り替えるためinode.i_addr[0]を書き換えるが、間接参照で管理できないサイズになって二重間接参照にする場合はinode.i_addr[7]が最初から二重間接参照に使うためのものであるからinode.i_addr[7]を使い始めれば良い=書き換えは発生しない。
「はじめてのOSコードリーディング」9.4 inodeの取得・解放ディスク上ではなく、メモリ上のinodeの話です。・メモリ上にしかない情報は何か・inodeエントリを取得する際、それがマウントポイントであればマウント情報の配列を探索してデバイス番号とinode番号(1に固定)を置き換えて再取得することによりマウントの機能が実現されている。・inodeエントリの解放処理で、プロセスからの参照数がデクリメントした結果0になる場合に更にディレクトリからの参照数も調べ、0ならファイルを削除している。この仕組みがあるからアプリケーションプログラム内でテンポラリファイルを使う時にファイルを作って即アンリンクしておけばプログラム終了時に自動的にファイルが削除されるというテクニックが使えるのだと思われる。