3

CPU のワード サイズにより、メモリ内のすべてのバイトをアドレス指定できるとします。
また、PAE CPU を使用すると、アドレス指定にワード サイズよりも多くのビットを使用することもできます。

CPU がアラインされていないワードを 1 ステップで読み取れない理由は何ですか?

たとえば、32 ビット マシンでは、位置 0 から始まる 4 バイトのチャンクを読み取ることができますが、位置 1 から始まるチャンクを読み取ることはできません (可能ですが、いくつかの手順が必要です)。
なぜCPUはそれができないのですか?

4

2 に答える 2

5

問題は、メモリ内の任意の 1 バイトをアドレス指定する CPU の機能にはありません。しかし、同じ粒度を持たないのはメモリです。Oli が言ったように、これは非常にアーキテクチャ固有のものですが、メモリ チップは多くの場合、データ バスの幅によって対処されます。特定のアドレスがデータバスの完全な「ワード」を表すことを意味します。

メモリ デバイスに接続された 32 ビット幅のデータ バスを備えた 32 ビット CPU の例を見てみましょう。CPU がアドレス のワードにアクセスしたい場合、0x00000000実際にはバイト012およびにアクセスしたいと考えています3。ただし、メモリ チップの場合、これは 1 つのアドレスで表されます0x00000000

ここで、CPU がアドレス のワードにアクセスしたい場合、0x00000001実際にはバイト123およびにアクセスしたいと考えています4。ただし、メモリ チップの場合、これは address の単語0x00000000の一部と address の単語の一部で表されます0x00000001

したがって、2 つのバス サイクルが必要です。

編集:いくつかの配線図を追加

これを説明するために、反対の両方のアドレス指定スキームを次に示します。

RAM_CPU_バス

RAM チップのアドレスのビット シフトに注意してください。

アドレスは次のようになります。

// From the RAM point of view
@0x00000000: Bytes 0x00000000 to 0x00000003
@0x00000001: Bytes 0x00000004 to 0x00000007

dword@0x00000001にアクセスするには、直接アドレス指定ができないことがわかります。0x00000000アドレスとの両方の dword を RAM チップに要求する必要があります0x00000001

于 2014-06-16T21:28:49.223 に答える