0

以下は、DTS ファイルからの抜粋です。linux/arch/powerpc/boot/dts/[ボード名].dts

memory {
    device_type = "memory";
    reg = <0x00000000 0x40000000>;  // 1GB at 0
};

組み込みデバイスには 1 GB のメモリがあります。

10 進数で 0x40000000=1073741824。

1 GB を取得する唯一の方法は、1073741824 をバイトとして計算する場合です。

つまり、1073741824 バイト = 1GB です。

これは、0x00000000 が RAM 内の 1 バイトのデータを指していることを意味しますか? つまり、RAM のすべてのバイトにアドレスがあります。

どうしてこんなことに?8 ビットのブロックを何と読むか? なぜ言葉ではないのですか?

4

2 に答える 2

7

TL;DR : RAM では各バイトが個別にアドレス指定可能 (独自のアドレスを持つ) であっても、RAM アクセスはバイト サイズのチャンクではありません。


「デジタル革命」の主流となった最初の本当に成功したマイクロプロセッサは8 ビットでした。そのため、データの基本的なチャンクが 8 ビットであるという遺産は今日まで続いています。8 ビット CPU を搭載した第 1 世代のマイクロプロセッサでは、RAM からの各バイトが個別に読み書きされていました。

次世代は、8 ビットを超える内部 CPU レジスタを使用して開発されました。RAM から複数の完全なバイトを一度に読み取ることができるため、通常は 8 ビット (16/32/64) の倍数でした。RAM からアドレス X を読み取ろうとすると、(16/32/64 ビット CPU では) 2/4/8 バイトがフェッチされます。つまり、アドレス X を含む RAM 内のワードであり、適切なバイトのみが保持され、内部 CPU レジスタに格納されます。要求に応じ。

次に、CPU キャッシュの出現により、RAM はキャッシュラインサイズのブロック単位で読み取られる (および書き込まれる) ようになりました。これらは、レジスタのサイズよりもさらに大きくなります。これにより、データの局所性により、RAM からデータを読み取る際のレイテンシが短縮されます。

詳細については、Ulrich Drepper によるCPU とメモリに関するこの包括的な記事をご覧ください。

于 2013-08-11T07:30:44.753 に答える