6

カーネルがすべてのハードウェアへの無制限のアクセスを許可する特権モードで実行されることが言及されている Linux デバイス ドライバーについて読んでいます。ユーザープログラムがこのモードで CPU を設定できないようにするにはどうすればよいですか?

4

2 に答える 2

6

このことを理解したい場合、それにアプローチするための最良の方法の 1 つは、Linux ブート プロセスのカーネル ブート プロセスに従ってコードを実行することです。たとえば、x86 アーキテクチャで実行されている Linux があるとします。ブート時に何が起こるかというと、BIOS がブート ローダーに制御を渡します。tern のブートローダーは、カーネルに制御を渡します。

次に、カーネルはプロセスを経て起動します。最初は、ほとんどのものはアセンブリ言語で書かれています - /arch/x86/boot/header.S を参照してください

次に、/arch/x86/boot/main.c に移動します。メイン関数の最後に呼び出しが表示されますgo_to_protected_mode()

その機能は /arch/x86/boot/pm.c で確認できます

したがって、カーネルを起動すると、それが CPU のゲートウェイになり、カーネルが提供する仮想マシンでコードが実行されます。ユーザー プログラムは、この仮想マシンを介してすべてを実行する必要があるため、他のモードで実行することはできません。

于 2012-07-05T15:18:06.113 に答える