Адрес памяти указывает на байт информации?

Ниже приводится выдержка из файла DTS. Linux/ арка / PowerPC / загрузки / DTS / [board_name].dts

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

Встроенное устройство имеет 1 ГБ памяти.

0x40000000 =1073741824 в десятичном виде.

Единственный способ получить 1 ГБ - вычислить 1073741824 в байтах.

Что означает 1073741824 байта =1 ГБ.

Значит ли это, что 0x00000000 указывает на байт данных в оперативной памяти? Другими словами, каждый байт в оперативной памяти имеет адрес.

Почему это так? Что мы читаем блок из 8 бит? Почему не слово?

2 ответа

Решение

TL; DR: доступ к ОЗУ НЕ производится в блоках размером в байт, даже если каждый байт независимо адресуется (имеет свой собственный адрес) в ОЗУ.


Первые по-настоящему успешные микропроцессоры, получившие широкую популярность "цифровой революции", были 8-битными, и, следовательно, наследие основной части данных в 8-битном формате сохраняется до сегодняшнего дня. В первом поколении микропроцессоров с 8-битными процессорами каждый байт из ОЗУ считывался / записывался по отдельности.

Следующее поколение было разработано с внутренними регистрами процессора, которые были больше, чем 8 бит. Обычно они были кратны 8 битам (16/32/64), поскольку это позволяло им считывать несколько полных байтов одновременно из ОЗУ. Любая попытка чтения адреса X из ОЗУ приведет к извлечению 2/4/8 байт (на 16/32/64-битных ЦП), то есть слово в ОЗУ, содержащее адрес X и только соответствующий байт, будет сохранено и сохранено во внутренних регистрах ЦП. как требуется.

Затем, с появлением процессорных кешей, оперативная память начала считываться (и записываться) в блоках с размером строки кэша. Они даже больше, чем размер регистра. Это уменьшит задержку при чтении данных из ОЗУ из-за локальности данных.

За подробностями обращайтесь к этой исчерпывающей статье Ульриха Дреппера о процессорах и памяти.

Вы также можете заметить, что адреса для памяти (Arm DDR, PRU DDR, Shared PRU DDR и т. Д.) Плюс смещения памяти - это байты, а не инструкции процессора. Бит толкатель

Другие вопросы по тегам