CPUはセグメント/ページアクセス違反をどのように認識/強制しますか?

CPUはセグメント/ページアクセス違反をどのように認識/強制しますか?

x86IA-32

私が知っている限り、ユーザー空間プログラムからメモリにアクセスするためのオペレーティングシステムは含まれていません。それ以外の場合は非常に遅くなります。

したがって、ページングが有効または無効になると、CPUは現在実行中のコードがそのセグメント/ページにアクセスできることを知っておく必要があります。

ページングがオフになったとします。したがって、CPUが参照できる唯一のものは(アクセス権を決定するために)GDTのセグメント記述子です。しかし、セグメント記述子には、どのプロセスがどのセグメントを使用できるかについての情報が含まれていますか?

ページ付けがオンになっています。ページテーブルエントリに、この特定のページにアクセスできる人に関する情報が含まれていますか?

ビット2(U / S)ユーザー/スーパーバイザー、0の場合、このトピックで参照されている4 KBページへのユーザーモードアクセスは許可されません。

これには権限レベルが含まれていますが、現在のコードにその特定のページにアクセスする権限があるかどうかを判断するだけでは不十分です。

CPU + MMUは、すべてのメモリ読み取り/書き込みでオペレーティングシステムを介さずにメモリアクセスをどのように保護しますか?

一部の悪意のあるプロセスがセグメントセレクタに独自の値をロードした場合はどうなりますか?

MMUには、OSがプロセスの作成/コンテキスト切り替え時に満たすデータ構造がいくつかありますか?

ベストアンサー1

しかし、セグメント記述子には、どのプロセスがどのセグメントを使用できるかについての情報が含まれていますか?

はい、セグメント記述子のDPLビット必要な権限レベルを決定します。

ページテーブルエントリに、その特定のページにアクセスできる人に関する情報が含まれていますか?

はい、アメリカの部分に言及しました。

ただし、現在のコードがこの特定のページにアクセスできるかどうかを判断するだけでは不十分です。

x86では、現在の特権レベルはレジスタの下位ビットによって決まりますCSプロセスの現在の権限レベルを取得する(リング)

CPU + MMUは、すべてのメモリ読み取り/書き込みでオペレーティングシステムを介さずにメモリアクセスをどのように保護しますか?

オペレーティングシステムは、保護すべき項目をMMUに知らせるために適切なデータ構造を満たす。コードが「禁止された」操作を実行しようとする場合にのみ(実際には禁止されない可能性があります)例えば存在しないメモリへのアクセスを試みますが、アクセスが許可されている場合)。

一部の悪意のあるプロセスがセグメントセレクタに独自の値をロードした場合はどうなりますか?

プロセスは、権限レベルを超える値を持つセグメントセレクタをロードできません。

MMUには、OSがプロセスの作成/コンテキスト切り替え時に満たすデータ構造がいくつかありますか?

はい、すでにGDT、ページテーブルなどの一部に言及しています。

おすすめ記事