総合手引 | セクション 9 | English | オプション |
#include <sys/param.h>
#include <sys/proc.h>
mi_switch() はプロセス構造体の中に現在のプロセスが実行された時間量を記録して、 そのスレッドに割当てられている CPU の時間リミット ((getrlimit) 2 を参照) に照らしてこの値を検査します。 ソフトリミットの超過はそのプロセスに SIGXCPU シグナルが配信される結果を招き、一方ハードリミットの超過は SIGKILL を引き起こします。 これらの管理上の仕事が完了した後で、 mi_switch() は実際にプロセスコンテキストスイッチを行なうマシン依存ルーチン cpu_switch() に制御を引き渡します。
cpu_switch() は優先度キューデータ構造において、 実行準備のできているプロセスの中から選択します。 優先度キューは、キュー先頭構造体である配列 qs[NQS] で構成されます。 個々のキュー先頭構造体により、 同じ優先度の実行可能なプロセスのリストを識別します (, <sys/proc.h> を参照)。 単一の語 whichqs は、空ではないキューが分かるビットマスクを含み、 素早くプロセスを選択することを助けます。 cpu_switch() は最も高い優先度を持つキュー上のリスト ( qs の中の低いインデックスが高い優先度を示す ) から最初のプロセスを削除しなければならず、グローバル変数 curproc にそのプロセス構造体のアドレスを割当てなければなりません。 実行キュー上に利用可能なプロセスがない場合には、 cpu_switch() は "idle" ループに移行することになっています。 idle ループは割り込みを許可する必要があります。 これにより、やがてプロセスが実行キュー上に再び現れます。 cpu_switch() がこの発生を待っている間は変数 curproc は NULL であるべきです。
mi_switch() および当然 cpu_switch() は splhigh() で呼び出されるべきであることに注意してください。
MI_SWITCH (9) | November 24, 1996 |
総合手引 | セクション 9 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | If you have an emergency I'm great at running around and flailing my arms | ” |
— Artur Bagyants |