kernel/memo/scheduling

Last-modified: 2009-01-12 (月) 01:50:27

●タスクスイッチ
コンテキストスイッチでアドレス空間やカーネルスタックが変わっても
レジスタの内容は明示的に変更しない限り変更されない.
そういう意味では(当然ながら)CPUの挙動の連続性は失われない.

●カーネルスタック
プロセス(タスク)ごと1つカーネル領域に存在.
thread_infoと(デフォルト)8Kを共有する.
もちろんプロセスのスタックとは別.

●TSS
Linuxでは以下の場合にTSSを利用する.
・ユーザモード<->カーネルモードの移行の際のスタック切り替え
・I/O許可マップの参照
タスク数分のTSSは必要とせず、プロセッサに1つあればよい.

カーネルスタックはタスク数分あるのにTSSはCPU分なのはなぜ???
⇒タスクを切り替える際にTSSにそれぞれのtask_structの値を設定するから.
 load_esp0関数(include/asm-i386/processor.h)

●カーネルスレッド
テキストやデータ領域すべてがカーネル領域内にあるプロセス

●メモリ空間関連
mmがNULLの場合はカーネルスレッド.
active_mmには間借りしているprevの仮想アドレス空間

一般プロセス mm(自空間)/active_mm(mmと同値)
カーネルスレッド mm(NULL)/active_mm(間借りしている一般プロセスのmm、NULLでない場合は実行中を意味する)