Linux Kernel(2.6)の実装に関するメモ書き

コンテキストスイッチ


コンテキストスイッチを行うswitch_to()(CPU依存部分)の処理。

switch_to(prev,next,last) - プロセスの切替えを行う
pushflでeflagをスタックに退避
prev->thread.espにesp退避
next->thread.espをespに復旧
(スタックが切り替わり、currentも切り替わったことになる)
1:のアドレスをprev->thread.eipに保存
(復旧時は1:から動作再開することになる)
next->thread.eipをpushしておく。
(__switch_toからの戻り時にこの値がリターンアドレスとして使用される)

__switch_to() (callではなくjmpで飛ぶ) - TSSの設定を行う
:
next->thread.espをTSSに保存
(ユーザモード->カーネルモード等の特権レベル変更時
スタックポインタはTSSから取得されるので設定が必要)
:

1:
popflでeflagを復旧



最終更新 2006/06/23 21:52:37 - kztomita
(2006/06/23 21:49:28 作成)


リンク
最近更新したページ
検索