#freeze ●タスクスイッチ コンテキストスイッチでアドレス空間やカーネルスタックが変わっても レジスタの内容は明示的に変更しない限り変更されない. そういう意味では(当然ながら)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でない場合は実行中を意味する)