-2

ユーザーモードからカーネルモードに移行すると、どのレジスタが変更されますか?! カーネルモードに移行する理由は何ですか?

これらの理由がカーネル モードに移行しない理由:

  1. root で新しい管理者を作成 (スーパーユーザーまたは管理者)
  2. TLB ミスが発生した場合、カーネル モードに移行しない理由
  3. ページテーブルで変更されたビットページに書き込むとき
4

3 に答える 3

0

「ユーザーモードからカーネルモードに移行すると、どのレジスタが変更されますか?!」

Linux カーネルを実行する典型的な x86 ベースのアーキテクチャでは、次のようになります。

  1. ソフトウェア プログラムは、次の命令によって割り込み 0x80 をトリガーする必要があります: int $0x80
  2. CPU はプログラム カウンター レジスタとコード セレクターを変更して、Linux システム コール ハンドラーがメモリ内に存在する場所を参照します (Linux は仮想メモリの概念を適用します)。
  3. これまでに影響を受けたレジスタは、CS、EIP、および EFLAGS レジスタです。CPU は、スタック セレクター (SS) とスタック ポインター (ESP) も変更して、カーネル スタックのトップを参照します。
  4. 最後に、カーネルはデータ セレクターとエクストラ データ セレクター (DS & ES) を変更して、カーネル モード データ セグメントを選択します。
  5. カーネルはプログラム コンテキストをカーネルのスタックにプッシュし、実行中のカーネル コードにより汎用レジスタ (アキュムレータなど) が変更されます。

ご覧のとおり、すべてオペレーティング システムとアーキテクチャに依存します。

「そして、カーネルモードに移行する理由は何ですか?」

CPU はデフォルトでカーネル モードで動作します。質問は「ユーザー モードの必要性は何ですか?」ということです。ユーザー モードは、実行中のソフトウェアにすべてのアクセス許可を提供するわけではないため、必要です。ブラウザー/ファイル マネージャー/シェルをユーザー モードで問題なく実行できます。アプリケーション ソフトウェアに完全なアクセス許可が与えられると、カーネル データにアクセスして破損するだけでなく、ハードウェアにもアクセスして、たとえば、ハード ディスクに保存されているデータを破壊する可能性があります。

もちろん、カーネルはカーネル モードで動作する必要があります (少なくともカーネルのコア)。たとえば、アプリケーション ソフトウェアでは、ディスク上のファイルにデータを書き込む必要がある場合があります。アプリケーション ソフトウェアはディスクにアクセスできません (ユーザー モードで実行されているため)。これを実現する唯一の方法は、カーネル (カーネル モードで実行されている) を呼び出してジョブを実行することです。そのため、ユーザー モードからカーネル モードに、またはその逆に移行する必要があります。

于 2013-07-08T04:51:29.627 に答える