オペレーティングシステムがユーザースペースのプロセス/スレッドを制御する方法

オペレーティングシステムがユーザースペースのプロセス/スレッドを制御する方法

私の理解は次のとおりです

ユーザーコードは、プロセスアドレススペースのプロセス/スレッドコンテキストでユーザーモードで実行され、プロセス用に定義されたユーザーコード/データのみを処理できますが、特権コマンドにはアクセスできません。

オペレーティングシステムは、ユーザーが作成したプロセス/スレッドがカーネルスペースとカーネルモードではなく、ユーザースペースとユーザーモードにあることをどのように理解できますか?レジスタ/CPU/ハードウェア設定によって制御されますか?正確にはどのように機能しますか?

ベストアンサー1

プロセッサ(CPU)にはモードビット(bit)があります。特権モードring-0から起動すると、コンピュータはすべてのコマンドを実行してすべてのリソースにアクセスできます。カーネルはこのモードで実行されます。ユーザーモードリング-3(リング-1とリング-2なし)に変更するなど、モード変更の手順があります。

特権モードに移行するための指示はより複雑です。割り込みとトラップは次のとおりです。ハードウェア割り込みが発生した場合、またはユーザーモードプログラムがソフトウェア割り込みを実行すると、プロセッサは事前に登録されたアドレスを見つけてモードを変更し、戻りアドレスをスタックに入れてそのアドレスにジャンプします。特権モードでのみこれらのアドレスを登録できます(set-uidに似ています)。

メモリの場合:両方のモードでユーザーメモリとカーネルメモリがマッピングされます。ただし、ユーザーモードではカーネルメモリは無効になります。カーネル空間に移動すると、すばやく再度有効にできます。


これはリング(x86で使用されている)に言及する以外は特定のCPUに限定されません。 CPUの仕組みを理解したい場合は、ARMは最も単純な最新のプロセッサの1つです。 x86は最も複雑ですが、あまり良くありません。

おすすめ記事