読者です 読者をやめる 読者になる 読者になる

by shigemk2

当面は技術的なことしか書かない

V6 itrunc #ikebin

UNIX

itrunc

ストレージ領域のブロック番号をフリーリストに戻す

  • ファイルサイズ 0
  • inode.i_addrも0
  • ただしデータは上書きされるまでストレージ領域に残る

コード

itruncはあいとらんく、brelseはびーりりーすと読む

  • itrunc() ken/iget.c
  • 引数はipの配列
  • 二重参照のときは1つずつなめてfree()でフリーリストに戻す
  • 最後にフラグをたてたりi_addrも0にしたりする
  • brelse…breadしたときに生成されるバッファを解放する
  • だーてぃ

ブロックデバイスの割り当て

  • inodeとブロックの管理はそれぞれスーパーブロックのinodeフリーリストとストレージフリーリストで管理
  • バッファじゃなくてブロックのはなし
  • cの配列は要素数を調べるメソッドとかないので、格納数を別変数でもってる

ialloc()

inode領域の未割り当てinodeを割り当てる関数

filsysは「ふぁいるしす」と読む

  • filsys.s_ninodeからfilsys.s_inodeの要素をとり、デクリメントしていく(スタック構造のよう)
  • 「割り当て」て、「減らし」ていく
  • filsys.s_inode[]が空になったら、というか空だったら、再度補充していく

コード

  • ialloc() (ken/alloc.c)
  • 引数はデバイス番号
  • filsys構造体の説明はP263
  • 未使用で、使用できるinodeを返す
  • forで0クリア
  • 空のリストに100補充する
  • 補充終わったからループを抜ける
  • メモリ上のinodeとディスク上のinodeは微妙に構造体が違う
  • インデントがおかしいし、breakの使い方も変
  • 黒魔術がふんだんに使われている

その他

  • ブロックデバイス
  • オフセット