v6 UNIX vol.2 in Okinawa でのメモ

昨日の話を聞いたアタマで 15 章以降に目を通すと入ってくる具合が全然違うように感じます。ちなみに勉強会スライドおよびつぎゃったが以下となります。

ポイントを懸命にメモってたのですが

話が濃くてちゃんと残せていません。が列挙できそうなのを選って以下に。

  • 転送系の命令のパラメータは「方向と位置、そしてその量」
  • ブロック番号への変換手続き全般について再確認
  • 5092 から 5095 のマクロと devstart 手続き
  • ディスクアクセス関連手続きがこんなに簡潔に書ける実装はスデに無い
  • rk.c の 5363 から 5383 あたり
  • struct inode の属性、重複した名前があるが大丈夫なのか
    • ino.h のコメント参照
  • devstart 手続きの hbcom 引数は未使用とのこと
  • ディスク操作について
    • 上からは伝票を積むのみ
    • 取り出す側は処理が終わったら次のを取り出して云々
    • 上と下は非同期に動きます
  • ILARG はとりあえずスルーの方向
  • ディスク上の情報について
    • Boot block
    • Super block
    • Inode blocks
  • struct inode 型の i_addr 属性について
    • この属性の特徴として_小さいファイルの最大サイズ_は 4096bytes
    • 一ブロックあたり 512 bytes が 8 ブロック分
  • struct inode 型の i_dev 属性と i_number 属性
  • user space と kernel space 云々なあたりを忘れている件orz
  • iget 手続きでロックして iput 手続きでリリース
  • Linux における vnode について
  • falloc 手続き
    • file 配列の空きを捜して云々
  • rdwr 手続きにおけるオフセットの更新など
  • bmap 手続き
    • lbn がメモリ上、bn がディスク上のブロック番号
  • bread と breada 手続きの違いについて確認のこと
  • iomove はカーネル空間からユーザ空間へのメモリ転送
  • character device は通信系のソレ
  • i_flag 属性が IUPD の場合は後で書き戻してね
    • 「後で書き戻し」は要確認
  • dup の実装短くて凄い
  • struct devtab は queue header として全体を管理 (要確認)
  • buf の役割、操作
    • getblk、bread、breada (獲得)
    • bwrite、bdwrite、bawrite、brelse (解放)
      • bd は遅延、ba は非同期
  • getblk 4931 はカーネル側で名前なしの作業領域が欲しい場合 (?)

rkintr 手続き

ちょっと微妙な違和感? みたいなのがあったので別途確認の方向ってことで控え。
rkintr 手続きにて rktab.d_actf のリセットをしている部分で

  • 今のをのけといて
  • 次をいっちゃん上にして
  • 今のを iodone して
  • 次のを start

というメモが残っているのですが rkintr 手続きでは

5453    register struct buf *bp;

5457    bp = rktab.d_actf;

が代入されてます。この struct devtab 型の確認が必要な模様。