Почему невозможно прочитать одно слово без знака за один шаг?

Учитывая, что размер слова процессора позволяет ему адресовать каждый отдельный байт в памяти.
И учитывая, что через PAE ЦП могут даже использовать больше бит, чем размер слова для адресации.

В чем причина того, что ЦП не может прочитать неизмененное слово за один шаг?

Например, на 32-битной машине вы можете прочитать 4-байтовый кусок, начиная с позиции 0, но вы не можете прочитать тот, который начинается с позиции 1 (вы можете, но нужно несколько шагов).
Почему процессоры не могут этого сделать?

Ответы

Ответ 1

Проблема не в том, что CPU может обращаться к одному байту в памяти. Но это память не имеет одинаковой детализации. Как сказал Оли, это очень специфично для архитектуры, но чипы памяти часто обращаются к их шине данных. Это означает, что данный адрес представляет собой полное "слово" их шины данных.

Давайте рассмотрим пример 32-битного ЦП с шиной данных шириной 32 бита, подключенной к запоминающему устройству. Когда CPU хочет получить доступ к слову по адресу 0x00000000, он действительно хочет получить доступ к байтам 0, 1, 2 и 3. Однако для микросхемы памяти это один адрес 0x00000000.

Теперь, когда CPU хочет получить доступ к слову по адресу 0x00000001, он действительно хочет получить доступ к байтам 1, 2, 3 и 4. Однако для микросхем памяти это изображается частью слова по адресу 0x00000000 и фрагментом слова по адресу 0x00000001.

Следовательно, требуется два цикла шины.

EDIT: Добавление иллюстрации проводки

Чтобы проиллюстрировать это, здесь противоположная схема адресации:

RAM_CPU_Bus

Обратите внимание на сдвиг бит в адресах чипа RAM.

Адреса будут выглядеть следующим образом:

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

Для доступа к dword @0x00000001 вы можете видеть, что прямой адресации не существует. Вам нужно запросить чип RAM для обоих слов в адресах 0x00000000 и 0x00000001.

Ответ 2

Простой ответ: они не могут, потому что они предназначены не для.

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

Простая аналогия, скромный Контейнер доставки. До дней контейнера для перевозки грузы с различными формами и размерами были упакованы настолько эффективно, насколько это возможно, в корпуса судов. Из-за бесконечно изменяющихся размеров груза, начиная от ящиков, до мешков кофе, до тюков сена и хлопка, способность этих кораблей была ужасно и неэффективно использована.

Транспортный контейнер изменил все это, теперь, если вы хотите отправить что-то на международном уровне, оно должно быть в контейнере стандартного размера. Дело не в том, что вы не можете просто отправить свою сумку с кошачьей едой своему другу в Гонконге на контейнерном корабле, это просто невероятно неэффективно, чтобы сделать это просто не сделано.

Вы хотите быстро получить эту кошачью еду своему другу, не покупая целый контейнер для перевозки? Ну, вы можете оплатить экспресс-транспортную компанию, такую ​​как FedEx, чтобы пролететь ее на 747, но вы наверняка, черт возьми, заплатите за эту способность.