私はメモリアドレッシングについてのみこの質問をしています。
PAEカーネルを使用すると、オペレーティングシステムが標準の32ビットカーネルよりも多くのメモリにアクセスできることがわかります。しかし、これはまた何を意味しますか? 64ビットカーネルと32ビットPAEカーネルの具体的な違いは何ですか?
Wikipediaによると、プロセスアドレス空間はまだ32ビットなので、最大4 GBのメモリにのみアクセスできます。ただし、オペレーティングシステムは64 GBのアドレス空間にアクセスでき、プロセスに4 GBのブロックを割り当てます。
これは私の考えには大きな違いですが、多くの人が見落とすようです。
答え1
カーネルは物理メモリを見てプロセスビューを提供します。マシン全体に512 MBのRAMしかない場合、プロセスがどのように4 GBのメモリスペースを持つことができるか疑問に思うなら、これがまさに理由です。各プロセスには独自の仮想メモリ空間があります。このアドレス空間のアドレスは物理ページまたはスワップ空間にマッピングされます。スペースを交換するには、プロセスがページにアクセスして変更する前に、スペースを物理メモリーに再交換する必要があります。
XQYZの答え(DOS highmem)のTorvaldsの例は、PAEが一般的に悪いという彼の結論に同意しませんが、あまりにもとんでもないわけではありません。特定の問題を解決し、利点もありますが、これらすべてが議論の余地があります。たとえば、ライブラリ実装者は実装が容易ではないと考えることができますが、ライブラリユーザーはライブラリが便利で使いやすいと考えることができます。 Torvaldsは実装者なので、ステートメントの内容を話す必要があります。エンドユーザーの場合、これはエンドユーザーが懸念する問題を解決します。
PAEは、32ビットシステムに残っている別の問題を解決するのに役立ちます。これにより、カーネルは4GBのメモリ全体をマップすることができ、PAEのない純粋な32ビットのカーネルで物理メモリが不足しているにもかかわらず、3.1GBまたは3.2GBのメモリしか「見る」ことができない多くのシステムに存在するBIOSメモリのバグを解決します。します。 4GB。
それにもかかわらず、64ビットカーネルの場合、物理ページと仮想ページの間の関係は対称です(スワップスペースやその他の詳細に関係なく)。ただし、PAEカーネルはプロセスアドレス空間内の32ビットポインタと物理メモリの36ビットアドレスをマッピングします。これにはより多くの簿記が必要です。キーワード:「拡張ページテーブル」。しかし、これはプログラミングの問題に近い。これが主な違いです。完全な線形アドレス空間よりも多くの記録が必要である。 PAEの場合は、前述のとおり4GBブロックです。
しかも両方PAEおよび64ビットは大容量ページを受け入れます(32ビットの標準4KBページではなく)。
1巻3枚インテルプロセッサーマニュアルいくつかの概要があり、読みたい場合は、3A巻(「保護モードメモリ管理」)の第3章に詳細があります。
これは私の考えには大きな違いですが、多くの人が見落とすようです。
あなたは正しいです。しかし、ほとんどの人は実装者ではないユーザーです。。だから彼らは気にしないでしょう。アプリケーションが多くのメモリを必要としない限り、多くの人は気にしません(特に互換性層があるため)。
答え2
Linus Torwaldsがこれについて何を言っているのか見たいかもしれません。ここ:
PAEはこの非常に単純な事実を裏返し、状況を台無しにします。このアイデアを思いついた人は完全に無能で、DOS HIGHMEMの痛みをすべて忘れてしまった人です。私たちがHIGHMEMに窓をより大きな物理空間に置くのではなく、286を捨てて386を使い始めたのはその理由です。
[...]
私の言葉に従ってください。 PAEは実際には何も解決しません。それは間違いです。これは完全な失敗であり、ハードウェアエンジニアがソフトウェアを理解していない結果でした。
答え3
CPUの観点からは、
- PAEは外部のもの:CPUにはメモリアドレスを指定するための36ピンしかありません。
- 64ビットにもかかわらず内側のもの:レジスタの上位32ビットを使用します。
システムの残りの部分の観点からは、PAEを使用しても64ビットカーネルを使用しても違いはありません。これはCPUピンからの信号のみを見ることができ、どちらの場合もCPUはメモリアドレスを指定するために36ビットです。
もちろん、(2)には(1)も自動的に含まれます。