Lions本読書会#16
v6 の端末管理は、initが/etc/tty を見て、gettyをを呼ぶ。gettyがloginを呼ぶ。 てな感じでその後のUNIXと同じでした。
2012-04-22 22:01:02v6のputchar()の挙動を忘れていた。インタプリタを作った時に引っ掛かったことがいくつかあったけど、まとめなかったから忘れている。ちょっと見直そう。 #readLions
2012-04-22 22:10:45パイプはオンメモリで処理されると思い込んでいたから、inodeを確保しているのに違和感を持っていた。そんなことをしたらディスクI/Oが発生してしまうのではないかと。しかし、オンメモリで処理されるべきという思い込みが間違っていた。 #readLions
2012-04-22 22:23:25パイプがinodeを持っていれば、他のプロセスが大量にI/Oを処理してバッファが不足したとき、普通の非同期I/Oと同じ枠組みでディスクに退避できる。非同期書き込みが発生する前に処理が終わればオンメモリで処理できる。ここまで見るととても合理的で感心した。 #readLions
2012-04-22 22:27:11@koie はい、UNIX V6ではどう見てもディスクI/Oが発生しそうなコードになっていて、違和感を持ちました。その点を今日のLions本読書会で議論した結果、当時のメモリ事情ではそれが合理的な構造だというのが分かりました。
2012-04-22 22:30:26@7shi progSrc|progSink と動かしたときにパイプがいっぱいになるのはthruput(Src)>thruput(Sink)のときで、thruput(Sink)>thruput(IO)だとIOしないでprogSrcをブロックするのが有利?
2012-04-22 22:35:20@koie 誤解を招いたかもしれないので補足します。V6ではパイプのバッファは4KB決め打ちで、Srcからそれ以上書き込もうとするとsleepしてSinkの処理を待ちます。バッファ不足と書いたのは、無関係な他のプロセスが大量にI/Oして、そちらでキャッシュが消費されるケースです。
2012-04-22 22:41:06@koie というわけで、V6ではSrcの速度が上回ったときにディスクに退避するわけではないです。スループットについては比較できないため、ちょっと分かりません。
2012-04-22 22:42:22実はもう次回の Lions 本読書会の atnd を用意してあるのです。http://t.co/amForEhn もしかしたら最終回になるかも回ですね。よろしくお願いします。 #readLions 概要: 05/27(日)13-18ルノアール西日暮里第一店2号室
2012-04-22 23:02:22@gokou___ruri V6が動いていたPDP-11はメモリ最大256KBです。V6にはバッファが512バイト×15個の7.5KBしかなく、パイプもディスクキャッシュもそのバッファを共用するため、複数プロセスが同時に動いているとすぐにバッファを使い切ってしまうみたいです。
2012-04-22 23:25:24@gokou___ruri はい、そうです。バッファはユーザー側ではなくカーネル側のメモリ空間に置かれていて、全プロセスで共用されています。そのためユーザー側のメモリ空間は圧迫しません。
2012-04-22 23:34:36putchr.sを読んでも要領を得なかったけど、トレースを眺めてようやく仕様が分かった。foutが2以下ならバッファリングされない。一度理解したはずが完全に忘れていた。放置するとまた忘れてしまうので、今のうちにまとめよう。 #readLions
2012-04-23 00:22:21UNIX V6のputchar()内部でのバッファリングをまとめました。昨日の読書会で説明に詰まって保留にした箇所です。 http://t.co/oOLXRNUM #readLions
2012-04-23 01:53:49パイプの凄いところの一つ。パイプって機能を追加するために書かれたコードがたったの200行くらいだってこと。ファイルシステムの上にパイプって仕組みを持ってきたことの利点の一つ #readLions
2012-04-23 07:00:34v6以降も、既存の仕組みの上に載っかって新しい仕組みを追加するっていうことをよくやっているようで(例:ネットワーク)、やはりv6に搭載されている仕組みがどの時代にもコアとなる部分なんだなぁと思った #readLions
2012-04-23 07:03:04パイプ通信を開始するときには、オープン済みのファイル(u.u_ofile[])がforkで子プロセスに継承され、execで変更がないという仕様を利用するのだけれど #readLions
2012-04-23 07:04:39v7では、ioctlシステムコールを使うと、ファイル単位でexecのときにオープン済みのファイルをクローズすることができるっぽい。つまり、子プロセスにオープン済みファイル情報を継承させなくすることができるっぽい。関連した話題として思い出した #readLions
2012-04-23 07:07:50