「9.5 inodeからストレージ領域へのマッピング」をもう1度読んでみました。

完全ではないですが、前回よりも細部まで理解できてきました。少しほっとしています。

本節では関数の引数にinode[]エントリを持つものがいくつか出てきますが、その引数の型を struct inode *ip; としている関数と int *ip; としている関数があります。

関数の中身を見ると引数の型に関わらず同じように使われているようですので、当時のC言語ではどっちでもいいので何となくこうしただけみたいです。フラグの特定ビットが立っているかどうかの判定も特定ビットだけを立てた定数とandをとったものをif文の条件部に直接書いたり0と比較したりと統一されていません。

と言うことで表記の統一に関してはそれほど厳密には行われていないようですね。ちょっぴり人間味を感じました。

p.283にbmap()に直接参照だったファイルが書き込み処理によってファイルサイズが大きくなり間接参照に変える処理がありますが、逆にファイルの中身を編集して減らして行って間接参照だったのが直接参照できるようになった時の処理はありません。

と言うことは1度間接参照になったファイルはその後サイズが縮んでもずっと間接参照になるのかな?

p.287のitrunc()の12行目の
if((rp->i_mode&(IFCHR&IFBLK) != 0)

if((rp->i_mode&(IFCHR|IFBLK) != 0)
の間違いのような気がします。

9章は一度読みましたが、完全に理解できなければ先に行かない方針をとるとギブアップしそうな気がしたので多少意図的に読み飛ばしたところがありましたので、再挑戦中です。

9.4の途中まで来ました。ここまでは理解できているつもりですが、ここから9.6までが山場だと思います。前回読んだ時も次第に理解できないことが増えてきてもや~っとしてきたので今回はどうなるか。

2度目ですので今回はもう1段丁寧に読んでみようと思います。理解が進むと良いのですが。

「はじめてのOSコードリーディング」3章を 3.4 プログラムの実行 まで読みました。

前回は 3.3実行プロセスの切り替え の途中まで読んだところで勉強会があって 3.5プロセスの終了 へとんでそれっきりになっていました。

ある程度は理解できましたがハードの話も沢山出てくるので分からない個所も多々あります。ここら辺がプロセス処理の山場だと思われるのでいずれ再チャレンジしようと思います。

1つ気付いた事として、p.103の説明に、exec()処理中のプロセス数がNEXEC未満になる場合はexec()処理に入るのを待っているプロセスを起こす、と書かれているのですが、p.99のソースコードを見ると不等号が逆でバグのような気がしています。