X86_64ロングモード(64bit)はセグメンテーションセレクターが不要です。32 ビットではセグメンテーションが必要なのに、64 ビットでは役に立たないのはなぜですか? ありがとう、
2 に答える
X86_64ロングモードのCPUは、PAE(物理アドレス拡張)テクノロジを使用してメモリを制御します。
したがって、セグメントセレクターは必要ありません。
このPDFマニュアルを読むことをお勧めしますAMD64 Architecture Programmer’s Manual Volume 2: System Programming
。
グーグルamd64 volume 2
、最初の結果はPDFマニュアルです。
5.3章を参照してくださいLong-Mode Page Translation
。そうすれば理解できます。
セグメント セレクターは、メモリがセグメントごとに実際にロードおよびアンロードされる場合に役立ちました。これは、x86 が最初に開発されたときのオプションでした。ただし、最新のオペレーティング システムはすべてページングを使用します。ページングは後で x86 に導入され、(いくつかのトレードオフにもかかわらず) そのシンプルさが最終的にセグメンテーションに取って代わりました。
32 ビット x86 では、16 ビット OS が新しいプロセッサ アーキテクチャに移行している間もセグメンテーションを利用できましたが、64 ビット x86 の設計中に、一部のレガシー機能 (セグメンテーションを含む) が削除されました。OS の教科書で一般的に説明されているが、実際には使用されていないもう 1 つの機能は、さまざまなアクセス許可の「リング」の概念です。古典的には 4 つのリング (番号 0-3) がありますが、実際には 0 (カーネル) と 3 (ユーザー空間) 以外は誰も使用しないため、x86-64 ではリング 1 と 2 が削除されました。ただし、新しいハイパーバイザーのサポートを追加するには-関連の命令、x86-64 は -1 と呼ばれる 0 未満の新しいリングを導入しました。
セグメンテーションにより、メモリのキャッシュ エイリアスの検出がより困難になるため、セグメンテーションをサポートすると、x86-64 チップの設計もより複雑になります。