Lions' Commentary on UNIX 読書会メモ#1

はじめに

Lions' Commentary on UNIX 読書会に参加してきました。
忘れないうちに、出た話題をメモしておきます。カフェで話した内容もあり。

自分の理解が足りず、うまく表現できていない部分もありますがご了承を。

今日の範囲

  • 第5章

メモ

  • shortの型ないよね
  • なんでmap構造体のm_addr, m_sizeはchar *? intじゃだめ?
  • coremap, swapmapの実体はどこにある? 宣言は202, 203行でされているが
    • unix/malloc.cは何のheaderもincludeしていない
  • 2391行目のSW->integのような書き方が非常に気持ち悪い。型のキャストもない
  • 2393行目 端末の準備が完了したことを示すデバイスレジスタ(KL->xsr)がセットされるまで待つ
    • メモリ上のデータにアクセスしているわけではない
    • KLについてはPDP11 Peripherals Handbookで確認する。24章にも簡単な説明が少しあるけど、弱い
    • シングルコアなので、二つ以上のプロセスがbusy waitingの先に入ることはない(ボケた発言してすみません)
  • なぜldivはアセンブリで書かれてる?
  • CMAPSIZ, SMAPSIZ 100というのは、当時の環境を考えると、きっとそれなりの値なんだろう
    • もし溢れたら、メモリ確保が失敗して、mallocを呼び出した側がpanicを呼び出して、となるんだろう
  • panicがidle()を呼び出して処理が止まっても、クロックは機能し続ける
  • mfreeは成否を示す返り値が何もないが、失敗することはないと思ってOK?
    • とりあえず最後尾に付け足す
  • printfの引数は何個でも受け付ける。x1からポインタをずらして引数にアクセスする
    • 引数はスタックで渡すから、何個でもOKなはず。
    • 可変長引数っていつから可能になったんだろう?
    • なんでxcまで書いている? コンパイルを通すため?
      • UNIXの次バージョンからはx1までしか書いていないらしい
  • first fitは、当時のようなメモリ容量も少なくシングルコア環境だからうまく機能しているんだと思う
    • 最近のマルチコア環境では、もっと別の割り当て方をしていると思われる
  • 2402, 2403行は、なぜdel(0177) ?
    • たぶん、他所に影響のないもの?を選んだだけ
    • この2行は、端末の改行処理時間を待つために入っている
  • 8進数なんて久々に見た
    • 当時のパンチカードが3単位だったから?


上記以外では、とにかくCの書き方が気持ち悪いという話題が多かった。

個人的宿題

次回

  • 11/28(Sun) 予定
  • 範囲は第6、7章

終わりに

自分が理解したつもりになっていた部分が、実は理解が足りていなかったりとか、
自分とは別の観点からの意見が聞けたりとか、参考になりました。

ところで、プロセスについて記述されている7, 8章は別の日にわけてやることになるんですね。