Lions本読書会#8
注意なのは、当時は「ページング」ではなくて「プログラムスワッピング」なこと。前者は必要なデータだけを出し入れするが、後者はプログラム単位で出し入れする #readLions
2011-06-19 13:46:57前者はメインメモリ以上の容量を持つプログラムを動かせるが、後者は(たぶん)無理。後者はメインメモリ以上にたくさんの(小さい)プログラム群を動かせるってこと #readLions
2011-06-19 13:48:23詳しい人がいたら、ページングとの対比をもっと語ってほしいな。TLBとか階層ページング?とかと絡めて。自分は概要をなんとなく知ってるだけなんで #readLions
2011-06-19 13:49:37つづいてテキストセグメントの話。テキストセグメントはプログラムとか普遍な情報が格納されているテキストセグメント。だからプロセス間で共有できる。たぶんシェルとか考えると共有できるポイントはたくさんあるはず #readLions
2011-06-19 13:52:38スワッピングでも、スワップインしようとしているプロセスが欲するテキストセグメントがコア内にあるかどうかでコアメモリの確保の流れが少し変わってくる #readLions
2011-06-19 13:53:30逆にスワップアウトするとき、テキストセグメントを参照しているプロセスがいなくなったら、そのテキストセグメントもスワップアウトする(だったはず)。まだ見ているプロセスがいるならスワップアウトさせない #readLions
2011-06-19 13:54:25スティッキービットっていうフラグ?があって、そいつが立っていると参照しているプロセス(スワップ領域にいるやつも含む)が全ていなくなっても、スワップ領域に残る。よく使うやつはフラグ立てておいて残しておく。効率化の仕組み #readLions
2011-06-19 13:58:13そのフラグがたってないと、一つも参照しているプロセスがない場合、ディスクスワップ領域からも解放しちゃう #readLions
2011-06-19 13:59:49なんで、テキストセグメントには参照しているプロセスをカウントする変数がある。4306行目のtext構造体に注目。x_countとxx_count。総数とコア内にいるやつだけの違いだったはず #readLions
2011-06-19 14:01:35テキストセグメントはtext構造体の配列で管理する。プログラムはproc構造体のp_textpポインタで使うテキストセグメントを指すようにする #readLions
2011-06-19 14:02:59スタックとかデータ(ヒープ)はどこで管理しているんだっけな……。7章のセグメントの絵を参照。セグメンテーションアドレスレジスタから変換して各プロセスの適切なアドレスにアクセスしているはず。たしか。詳細は少し忘れてしまったw #readLions
2011-06-19 14:06:13続いてスケジューラ(スワッパと言ったほうが誤解が少ないかも)の話。Lions本372Pのrunout, runinに注目。この状態になるまで、sched( )は延々とスワッピングを繰り返す(はず) #readLions
2011-06-19 14:07:25基本的な発想は、スワッピング処理したばかりのプロセス、もしくは生成したばかりのプロセスまでスワッピングしてしまうと、スワッピング処理時間ばかりがかかってしまい非効率なので、そういうプロセスはスワッピング対象から外す。所謂スラッシング対策 #readLions
2011-06-19 14:08:51気になるのは、sched( )が起こされたときに、スワッピング対象がたくさんいた場合。runin, runoutの状態になるまで延々とスワッピングが繰り返されるので、ユーザ(人)がだいぶ待たされてしまう #readLions
2011-06-19 14:10:02ただし、clock( )だったかでruninかrunout状態をチェックしていた気がするので、プロセスがたまらないようになっているのかも? #readLions
2011-06-19 14:12:11ちょっと自己紹介タイム ( #readLions live at http://ustre.am/zaFV)
2011-06-19 14:12:1114章の議論開始 ( #readLions live at http://ustre.am/zaFV)
2011-06-19 14:20:02声はちゃんと聞こえているのかな? ( #readLions live at http://ustre.am/zaFV)
2011-06-19 14:24:14喋りすぎごめんなさいw ( #readLions live at http://ustre.am/zaFV)
2011-06-19 14:36:303秒とかハードコーディングされてる値を変えて動かしてみるとおもしろいんだろうけど、普通にエミュレートすると早すぎて効果がわからないかも? ( #readLions live at http://ustre.am/zaFV)
2011-06-19 14:40:33今の話でちょっと気になったのが、プロセスはスワップ処理完了(ディスクアクセス完了)を待つのか?ってことなんだけど、待つね。swap( )までコードを追った ( #readLions live at http://ustre.am/zaFV)
2011-06-19 14:44:07待たないならバッファにB_ASYNCフラグを立てるんだけど、立ててない ( #readLions live at http://ustre.am/zaFV)
2011-06-19 14:49:13