Как работает байтовая адресация?


2

Я новичок в компьютерной архитектуре. Так что поправьте меня, если я ошибаюсь.

Если модуль памяти состоит из 8 микросхем памяти и если каждая микросхема хранит 4 бита на адрес, то, применяя адрес к контакту адреса модуля, я могу получить (8 x 4 =) 32 бита с этого адреса в модуле. Но адресация байтов говорит о том, что у каждого байта есть адрес. Но здесь я получаю доступ к 32битам по адресу. Так как это возможно?

Я думаю, что если каждый чип хранит 1 бит на адрес, то, применяя адрес к модулю, я могу получить доступ к 8 битам или одному байту.


Современные процессоры оптимизированы для общего случая (например, выборка команд в полных словах), а не для нечетного байта данных. Современная память, как правило, адресуется в байтах, но аппаратная реализация часто предназначена для более широких данных. Вы путаете реализацию с возможностями; они не должны быть идентичными. Может быть, компьютер Гарвардской архитектуры может сделать это по-вашему.
опилки

Ответы:


2

Ну, во-первых, организация памяти на DIMM действительно прозрачна для программ и даже для процессора. Но ... во всех современных системах, использующих обычные процессоры и модули DIMM, модули DIMM фактически реализуют "слова" шириной 64 бита (не 32, даже на 32-битных процессорах).

В те времена, когда у обычных (x86) процессоров были отдельные адреса и выводы данных, если вы посмотрите на обозначения на адресных выводах, вы обнаружите, что они не начинаются с A0 (наименее значимый бит адреса), но скорее на А3. Таким образом, хотя адреса, заявленные программами, идут «до конца» до адреса бита 0, и после преобразования адреса результирующий физический адрес также переходит на бит 0, три младших бита физического адреса никогда не выходят из процессора , Процессор читает и записывает ОЗУ в 8-байтовые (64-битные) слова, и они всегда выровнены по 8-байтовым границам. То же самое верно и сегодня, даже несмотря на то, что сигналы адреса и данных мультиплексируются на шине (т.е. они используют одни и те же контакты на процессоре).

Например, адресация меньше 8-байтовых слов

MOV AL, [EBX] 

(переместите байт, адрес которого находится в EBX, в младший байт A-регистра), все это реализовано в процессоре и в кэш-памяти памяти. Контроллер памяти извлекает 64-битное слово, которое содержит нужный байт, и сохраняет все это в кэше. (На самом деле кеш организован в «строках кеша» по 64 байта каждая, поэтому восемь последовательных 64-битных слов читаются из модулей DIMM в кеш, но это не важно ...) Затем это слово помещается на внутреннюю шину данных. в ЦП, из которого ЦП получает доступ к байтам, которые ему необходимы, на основе младших трех битов адреса. Или, возможно, интерфейс кеша делает это - мне это не понятно.

(Конечно, если нужное слово уже было в кеше, доступ к DIMM вообще отсутствует).

Аналогично, для записи отдельного байта ЦП (или интерфейс кеша) должен прочитать содержащее 8-байтовое слово из кеша, изменить его в соответствии с тем, какие байты должны быть затронуты, а затем отправить полученное 8-байтовое слово обратно в кеш. В конце концов он сбрасывается в оперативную память.


На самом деле мой вопрос о тех процессорах, когда были отдельные адреса и контакты данных. Но я не могу понять, когда адрес в модуле памяти хранит больше байта, похож на байтовую адресацию, где байтом хранится конкретный адрес?
Kaustav

Поправь меня, если я ошибаюсь. Мой вопрос относится к этой точке, как байтовая адресация реализована в 32-битной или 64-битной DIMM?
Kaustav

«В те времена, когда у процессоров были отдельные адреса и выводы данных ...» - это очень неточная спецификация, тем более что вы также ограничиваете свой поиск по истории современным x86, но используете универсальный «CPU» .
опилки

@ Опилки: хорошая точка, исправлено.
Джейми Ханрахан

@Kaustav: Я хочу сказать, что он вообще не реализован в модулях памяти . Модули DIMM только чтение и запись в 64-битных размера слов, которые всегда (с точки ЦПУ зрения) выровнены по границам восемь байт. Если процессору требуется один байт, то есть один из байтов от (скажем,) физических адресов от 0x41F00 до 0x41F07 - это восьмибайтовый интервал - адрес, который идет к модулям DIMM, равен 0x83E1, то есть 41f07 смещен вправо на три бита. Младшие три бита адресов вообще никогда не попадают в модули DIMM, и в этом нет необходимости. Если это все еще не ясно, пожалуйста, LMK.
Джейми Ханрахан
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.