19

「Linux カーネルについて」を読んでいます。

64 ビット アーキテクチャのページング

前のセクションで説明したように、2 レベルのページングは​​ 32 ビット マイクロプロセッサで一般的に使用されています。ただし、2 レベルのページングは​​、64 ビット アーキテクチャを採用するコンピューターには適していません。その理由を説明するために、思考実験を使用してみましょう。

まず、標準のページ サイズを 4 KB と想定します。1 KB は 2 10アドレスの範囲をカバーするため、4 KB は 2 12 アドレスをカバーするため、オフセット フィールドは 12 ビットです。これにより、最大 52 ビットの線形アドレスが、テーブル フィールドとディレクトリ フィールドの間で分配されます。アドレス指定に 64 ビットのうち 48 ビットのみを使用することにした場合 (この制限により、快適な 256 TB のアドレス空間が得られます!)、残りの 48-12 = 36 ビットをテーブル フィールドとディレクトリ フィールドに分割する必要があります。これら 2 つのフィールドのそれぞれに 18 ビットを予約することにした場合、各プロセスのページ ディレクトリとページ テーブルの両方に 2 18エントリ、つまり 256,000 を超えるエントリが含まれるはずです。

  1. 「アドレス指定に64ビットのうち48ビットのみを使用することにした場合」。なんで?& なぜ 48 ビットだけなのですか? なぜ他の番号ではないのですか?

  2. まあ、私は普通の PC ユーザーであり、プログラマーです。32ビットのアドレッシング、つまりプロセスごとの4GB(より正確には2GB / 3GB)のアドレス空間が限界であるとは信じがたいです。本当にこの制限に遭遇した場合。例を教えてください。

  3. Windowsのこの制限は何ですか?

  4. 仮想メモリ != 物理メモリ & プロセッサ アドレス ピンは、仮想メモリとは何の関係もないことを知っています。これはまったく別の質問です。プロセッサのアドレス ピンの数 (= アドレス バスのサイズ) を知る方法。http://ark.intel.comプロセッサの仕様には、この仕様は含まれていません。

答え:

最初の質問に対する合理的な回答については、Paul Betts の回答を参照してください。

4

7 に答える 7

10

これらの答えはどれも正しくありません。OS が完全な 64 ビットを使用しない理由は、ページ テーブルがはるかに大きくなるためです (64 ビットは既にページ テーブルの 3 レベルまでです)。支払う理由はありません。追加の間接化が必要です。48 ビットで十分です。フラグを格納するための余分なビットを取得できるため、48 ビットも便利です (ポインターのタグ付け)。

于 2010-07-10T19:58:03.683 に答える
6

「アドレス指定に64ビットのうち48ビットのみを使用することにした場合」。なんで?& なぜ 48 ビットだけなのですか? なぜ他の番号ではないのですか?

システム アーキテクトはトレードオフを行います。256TB は、1 つのプロセスのアドレス空間に対して十分なスペースのようです。仮想アドレス != 物理アドレスを思い出してください。一般的に言えば、各プロセスには独自のアドレス空間があります。

ポインターが 64 ビットである限り、これは何よりもパフォーマンス機能の問題です。& 48 ビットが制限になる場合、アプリケーションの非互換性を損なうことなく、OS を微調整して 64 ビット アドレス空間のより多くのビットを使用できます。今のところ、建築家は非常に快適な時間を稼いでいるだけです。

現在、多くのプロセッサが仮想メモリから物理メモリへのマッピングを処理するためのメモリ管理ユニットを備えているため、プロセッサ側の仮想アドレッシング機能に関係している可能性があります。

プロセッサのアドレス ピンの数 (= アドレス バスのサイズ) を知る方法。http://ark.intel.comプロセッサの仕様には、この仕様は含まれていません。

これはほとんどの場合無関係です。これは、プロセッサがさまざまな物理アドレス指定スキームを実装する方法です。64 ビット プロセッサは、バスが同期しており、アドレス ビットが時間内に多重化される場合、64、32、16、8、4、2、または 1 つのアドレス ピンを使用して完全なアドレス空間の外部アドレス/データ バスを実現できます。ここでも、仮想アドレス != 物理アドレス; 64 ビットの仮想アドレッシングは、48 ビットまたは 32 ビットの物理アドレスで実装できます (2 48または 2 32ワードのメモリに制限されます)。

更新:本当に知りたい場合は、問題の各プロセッサのデータシートを確認する必要があります。たとえば、 Intel Core 2 Duo -- データシートのセクション 4.2 でシグナルについて説明されています -- アドレス バスは 36 ビット幅です (ただし、実際には 33 のシグナル ラインです。データ幅は 64 ビット = 8 バイトなので、他の 3 ラインは適切なデータ配置ではおそらく不要です)

まあ、私は普通の PC ユーザーであり、プログラマーです。32ビットのアドレッシング、つまりプロセスごとの4GB(より正確には2GB / 3GB)のアドレス空間が限界であるとは信じがたいです。本当にこの制限に遭遇した場合。例を教えてください。

2 つの言葉:メモリ マップト ファイル

于 2010-07-10T14:39:26.990 に答える
5

現在の x86-64 設計では、これに48 ビット以上を使用していません。したがって、選択するのに便利な数値であり、Windows でも自動的に同じ制限になります。

于 2010-07-10T14:43:24.847 に答える
2

32ビットのアドレッシング、つまりプロセスごとの4GB(より正確には2GB / 3GB)のアドレス空間が限界であるとは信じがたいです。本当にこの制限に遭遇した場合。例を教えてください。

ディスクからデータを取得するよりも、RAM からデータを取得する方が効率的 (高速) です。

SQL サーバーの速度は、ディスクではなく RAM に保持できるデータの量 (インデックスとデータ ページの数など) に部分的に依存します。

そのため、SQL データベース (たとえば) は、4GB を超える RAM を搭載したマシンでより高速になる場合があります。

同じことが他の種類のサーバー (ファイル サーバー、HTTP プロキシなど) にも当てはまり、より大きな RAM キャッシュを持つことができればより高速になる可能性があります。

于 2010-07-10T14:44:03.857 に答える
2

最も簡単な答えは、ムーアの法則だと思います。

ムーアの法則によると、IC のコストは 18 か月ごとに半減します。これを解釈するにはいくつかの方法があります。PC にインストールされているメモリの量は、18 か月ごとに 2 倍になる傾向があります。実効速度は 2 倍になります (少なくとも、単に MHz ではなくコア * MHz を使用する場合)。

とにかく、32 ビットのアドレス空間を使い果たしたので、32 から 48 へのジャンプは、ハードウェア側では、ムーアの法則の約 16 回の反復に拡張空間を割り当てたことを意味します。これは約 20 年になります。

一部の PC は 10 年のマークにプッシュされる可能性がありますが、20 年の拡張ヘッドルームは適切なトレードオフのように思えます: 20 年後のコンピューターは異なります。同じ CPU と RAM バスを使用していません。 20 年前とは違うように。インターフェイスに 20 年以上の余裕を持たせて設計することは、いずれにしても使用されることのないエンジニアリングよりもばかげています。

また、既存のハードウェアがすぐに陳腐化するという現実的なリスクを冒すほど短くはありません。

于 2010-07-10T19:52:53.520 に答える
1

32ビットのアドレッシング、つまりプロセスごとの4GB(より正確には2GB / 3GB)のアドレス空間が限界であるとは信じがたいです。本当にこの制限に遭遇した場合。例を教えてください。

もう存在しません (一部の古い従業員の個人用マシンを除いて) が、1990 年代後半から 2000 年代前半にかけて、私は RealiMation というソフトウェア スイートに取り組みました。これは、視覚化とシミュレーション用のリアルタイム 3D エンジンでした。当社の顧客の 1 人は、2 GB のメモリ制限に達する非常に詳細なモデルを定期的に作成しました。必要に応じてオンザフライでテクスチャをロードし、メモリ割り当ての失敗をチェックするコードを追加して、テクスチャなしでもモデルを表示し続けることができるようにする必要がありました。

于 2010-07-10T20:10:57.003 に答える
0

ハードウェアの観点から、もう 1 つの考慮事項はアライメントです。

4 バイトを超えるデータ型 (たとえば 6 バイト) が必要になったら、それらを 8 バイトの境界に配置して、1 つの命令でそれらを取得する必要があります。整列しない場合は、ビット マスキングとシフトを行い、(アセンブリ) コードでこれに対するチェックを追加する必要があります。

多くの人は、64 ビットへの切り替えでプログラムが大量のメモリを消費することに悩まされていました。彼らは48 ビットのポインターを望んでいたでしょう。アラインメントに関する制限がなければ、CPU メーカーはおそらく 48 ビット アーキテクチャを作成していたでしょう。

ポインタを 6 バイトにしたいほどメモリが不足している場合は、それを行う方法があることに注意してください。ただし、実行時間にはペナルティがあります。

于 2014-02-04T14:10:17.420 に答える