0

こんにちは、私は、オペレーティング システムが拡張可能な RAM に使用するアドレッシング スキームと呼ばれるものについて疑問に思っていました。これに光を当てる例を考えてみましょう。

「コンピューターに 32 ビット アーキテクチャがある場合、これは 32 ビット長のコンピューター アドレスがあることを意味します。これは、2^32 のアドレス指定可能なメモリ位置に約 4 GB のデータになります。」

しかし、実際には 8GB の RAM である 4GB のメイン メモリをさらに追加すると、追加の量が 2^32 である 32 ビット アドレスの範囲を超えるため、コンピュータは余分なメイン メモリの場所をどのようにアドレス指定するのでしょうか。

誰でもこの質問に光を当てることができますか?

4

1 に答える 1

0

基本的に、32 ビットだけで 8GB をアドレス指定することはできません。32 ビットを使用する任意の時点で、4G メモリ ロケーションからのみ選択できます。

一般的な回避策は、ページ テーブルで 32 ビットより大きい物理アドレスを使用することです。これにより、オペレーティング システムは、プログラムがアクセスできる 8GB のサブセットを定義できます。ただし、このサブセットは 4GB を超えることはできません。x86 PAEは 1 つの例ですが、まったく同じことを行うものは他にもあります。

この回避策を使用すると、オペレーティング システム自体は、独自のページ テーブルを変更するだけで 8GB 全体にアクセスできます。たとえば、メモリ ロケーションにアクセスするには、まずページ テーブルを変更してメモリ ロケーションを独自のアドレス空間にマッピングする必要があります。その後で初めて、メモリ ロケーションへのアクセスを開始できます。もちろん、これは非常に面倒です (控えめに言っても)。オペレーティング システムの一部が、このタイプのメモリ拡張を考慮せずに作成された場合にも、問題が発生する可能性があります。デバイス ドライバは典型的な例です。

問題は新しいものではありません。Commodores C64 のような 8 ビット コンピュータは、16 ビット アドレスで 64KB 以上にアクセスするためにバンク スイッチングを使用していました。初期の PCは、640KB の制限を回避するために拡張メモリを使用していました。もちろん、Right Thing (TM) は、醜いソリューションに頼る前に、より大きなアドレスに切り替えることです。

于 2012-09-13T00:49:27.250 に答える