2016-05-03 12 views
1

現在、カーネルコードが実行中であることをハードウェアがどのように認識しているのか理解できません。いくつかのレジスタにメモリアドレス範囲を設定する必要があるかどうかは、これらのメモリアドレスの間のCPU、それがカーネルを実行していることを示します。x86プロセッサでハードウェア特権レベルを操作する方法

+0

どのCPU /アーキテクチャですか?それはハードウェア関連の問題です。 – Devolus

+1

正確なタイトルを検索すると、「約206,000件の検索結果」が表示されます。 –

+0

stackoverflowの質問をグーグルで検索すると、多くの結果が得られます。@MartinJames –

答えて

2

x86アーキテクチャでは、これはディスクリプタテーブルで実現されます。起動コードは、どのメモリ領域にどの特権があるかをCPUに知らせるテーブルをインストールします。メモリがアクセスされると、ハードウェアは、命令および/またはアクセス方法がアドレスの所定の記述子に対して有効であるかどうかをチェックする。

これは非常に基本的な説明です。これはかなり広い質問です。

いくつかの投稿とリンクはあなたが始めるために:

What are Ring 0 and Ring 3 in OS

http://duartes.org/gustavo/blog/post/cpu-rings-privilege-and-protection/

を私はまた、これはそこにも詳細に記載されているように(無料で)インテルのマニュアルをダウンロードすることをお勧めします。

http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html

+0

短い答えが好きだった。 –

0

CPUは、例外や割り込みのいずれかを介して上位モードに入ることができます。 CPUは、割り込みからの復帰命令を使用して下位モードに戻ります。

CPUは、プロセスステータスレジスタから実行中のモードを認識します。 オペレーティングシステムは、例外または割り込みのハンドラを実行しているときにカーネルモードであることを認識します。

オペレーティングシステムは、カーネルのアドレス範囲を定義するためにページテーブルを設定します。これらのテーブルは、CPUがカーネルモードでないときにアクセスから保護されるように設定されています。