0

IntelセグメンテーションはLinuxでは使用されていませんが、コードセグメントセレクターデータセグメントセレクターに保護またはモード情報があることをチュートリアルで読みました。そして、仮想メモリチュートリアルで、モードに応じてページテーブルを使用したページの保護について読みました駆け込んでいます。

これら2つのメカニズムがどのように関連しているか知りたいですか?

ページの保護情報がページ テーブルに追加されるのはどの段階ですか?CPU はコード セグメント セレクターをチェックし、それに応じてページ テーブル フラグが設定されますか?

4

1 に答える 1

0

セグメンテーションは Linux では (ほとんど) 使用されていませんが、x86 ではセグメンテーションをオフにできないため、セグメンテーションは保護されたフラット メモリ モデルを通じてバイパスされるだけです。

実際にはセグメンテーションは必須であり、カーネルを作成するときにコードとデータ セグメント セレクターをセットアップする必要があります。これは、これらのセグメント セレクターが実行の現在の特権レベル (CPL) をセットアップするためです: 基本的にリング 0 (スーパーバイザー モード) またはリング 3 (ユーザーランド)。セレクター (レジスター CS、DS、...) は、GDT へのオフセットをホストします。このオフセットが指す記述子に応じて、システムは特定のレベルの特権で実行されます。セグメントの使用に関する詳細については、Intel マニュアル 3A の第 3.2.2 章を参照してください。

ご覧のように、保護されたフラット メモリ モデルでは、メモリへのアクセス時に属性を直接チェックすることはありません (コードまたはデータのいずれでもありません)。そして、あなたはそれを正しく推測しました!MMU (むしろpagingと呼びます) は、システムの CPL とページの U/S 属性に応じてアクセスをチェックします。

関連するページの属性を使用してページディレクトリをセットアップするのは、カーネル (したがってリング 0で実行) 次第です。

于 2012-07-30T13:32:14.217 に答える