CPUスイッチからユーザーモードのカーネルモード:何なのか?どのようなのです。
-
21-09-2019 - |
質問
CPU スイッチからユーザーモードのカーネルモード:何なのか?どのようなのです。
編集:
でもアーキテクチャ依存のさく答えになります。建築は返却費用はかかりません。私は建築を知っています。
用していただきたいと思い、マーケティングなどの全てのものを担当していただくことを予定します。
解決
注意:これは主に関連するにはx86アーキテクチャ.こちらはやや簡易説明をします。
への移行が通常より、
- 断層などページの断層やその他の例外による実行を指示)
- 割り込みなどキーボード割り込みまたはI/O仕上げ)
- トラップなどシステムコール)
何が正常に起こるシステムチェックの割り込み記述子テーブル(IDT).各例外(割り込み、断層等) 多数の関連するインデックスに使用されるこの表に示す。
このテーブルのCPUを測定することができる割込みハンドラです。
の一環として、遷移の変化(一般に)の効力発生
- スイッチカーネルのスタック
- EFLAGS保存されます
- コードセグメントセレクター EIPが保存されます。
- スタックセグメントのセレクタスポインタが保存され
- 開始を実行する割込みハンドラ
- この汎用レジスタに保存されます(ハンドラの仕事)
- セグメントセレクタを変更のカーネルなどのハンドラの仕事)
間違えやすい箇所にカーネルモードになります。
こ:)
他のヒント
それはシステム依存ですが、通常のメカニズムは、いくつかのユーザランド操作はソフトウェア割り込みが発生しています。割り込みは、カーネルコードにプロセッサスイッチモードやジャンプをさせるプログラムが何をしようとしていたものを、次にどのチェック(システムコール?)して、要求されたアクションを行い、バックユーザーモードのコードにジャンプしています。同様の移行を引き起こす可能性があります割り込みソフトウェア以外の他のメカニズム。プリエンプティブマルチタスクシステムでは、たとえば、タイマ割り込みが実行するスケジューラをトリガすることがあります。
私の理解は、そのセグメントレジスタを有する2つのLSBがゼロそのセグメントレジスタ任意のプログラムは、2つのLSB = 1を有するがカーネルモードで実行される任意のプログラムがユーザモードで実行されることです。実際には、セグメントrgeistersの2つのLSBはPriviledgeレベルを定義する(0最高3に最低)
あなたは0010進(私は信じている)であることをセグメントレジスタを設定する必要があり、カーネルモードでprgramの実行を行うために、だから、。私はあなたが何かを上書きすることなく、そのメモリ空間にプログラムを置くことができる方法はないよ - 言い換えれば、どのようにリンカのことを確認しますか? 彼らは同じメモリsoaceを使用していないので、メモリ参照によってデータを渡すことはできません - あなたはユーザーモードのコードからカーネルモードのコードを呼び出したい場合にも、あなたはパラメータを渡す方法を見つけ出す必要があります。私はあなたがレジスタにそれを渡すことがあると思います。
anynodyは上記のギャップを埋めることができる場合、私は非常に感謝される。
でのWindowsは、ライブラリルーチンは、カーネルのエントリポイントは、オペレーティングシステムのアドレス空間に存在する呼び出します。これは、順番に、このようなのSYSENTER のように、この目的のための命令の特定を実行することにより、スーパーバイザーモードにCPUを取ります。何それがないことは、基本的にフラグレジスタのビットを設定しています。これは、特権命令を使用するようにOSを可能にします。