2012-02-28 5 views
1

オペレーティングシステムのカーネルモードとユーザーモードの切り替えが、ハードウェアまたはOS自体によって行われているかどうかは疑問でした。 私は、ユーザプロセスがカーネルモードに入るためには、システムコールを行い、いくつかのカーネルコードを実行できることを理解しています。システムコールが行われると、プロセスはカーネルモードに入り、すべてのメモリがアクセス可能になります。これが起こるためには、割り込みハンドラがページテーブルを切り替えるか変更する必要があると思います。これは本当ですか?そうでない場合、CPUはカーネルモードで動作しており、制限された(ユーザープロセスにアクセスできない)メモリにアクセスするときにページ違反する必要はないと、どのように認識していますか?カーネル/ユーザーモード間の変更は、ハードウェアまたはソフトウェアによって行われますか?

ありがとうございます!

答えて

2

これは、広範な問題の一種である - などの各ハードウェア・プラットフォームが若干異なることを行うために起こっているが、私は基本的な答えは、それがメモリ保護のためのハードウェアの機能を活用するソフトウェア/ wは完了だということだと思い、

+0

にいたとき、それが設定された方法により、ハードウェアが応答することを、ソフトウェアコマンドを実行する必要!私はまた私がそれを非常にうまく説明すると思うこのサイトを見つけた:http://www.codinghorror.com/blog/2008/01/understanding-user-and-kernel-mode.html ページフォールトかどうかCPUのように思えるまたはCSレジスタに格納されている値に基づいていない(これはx86固有の可能性があります)。 – user1096294

2

ユーザプロセスがシステムコールを行いたい場合、CPUは特別なCPU命令を実行し、CPUは仮想モード(ユーザプロセスの場合はプロセス固有のページテーブル)からリアルモード(カーネルの場合)に切り替え、OSにジャンプしますsyscallハンドラ。カーネルは好きなことをすることができます。

このためのCPUサポートが必要です。 CPUは、どのモードにあるか、ページテーブルがどこにあるか、命令ポインタのジャンプなどを追跡します。これは、システムソフトウェアを実行しているユーザソフトウェアによってトリガされ、試行しているものをサポートするカーネルに依存します行う。すべての計算と同様に、常にハードウェアとソフトウェアの両方です。しかし、私はソフトウェアだけではできません。それは、システムが、それが得たprivelagesを悪用するプロセスを防ぐ方法がないからです。/etc/shadowの読み込みを開始する可能性があります。

最新のx86コンピュータには、システムコールを行うための特別な指示があります。以前のx86プロセッサと現在のRISCプロセッサの中には、割り込みをトリガする命令があります。古いアーキテクチャでは、制御を切り替える他の方法がありました。

3

最後の答えは実際には真ではありません.... カーネルモードへの変更は「リアルモード」を経由しません。実際には、ブートプロセスが終了した後、コンピュータは決してリアルモードに戻りません。

通常のx86システムでは、カーネルモードに変更すると、(CPUのMISRレジスタに保存されている)あらかじめ定義されたアドレスをジャンプさせる「sysenter」(一部のレジスタにパラメータを設定した後)これはカーネルモード(「特権」コマンド)からのみ実行できるため、起動されています。

だから、基本的にありがとう、それはカーネルモード

関連する問題