Почему невозможно прочитать слово без выравнивания за один шаг?
Учитывая, что размер слова процессора позволяет ему адресовать каждый байт в памяти.
И учитывая, что через PAE процессоры могут даже использовать больше битов, чем его размер слова для адресации.
По какой причине процессор не может прочитать слово без выравнивания за один шаг?
Например, в 32-разрядной машине вы можете прочитать 4-байтовый блок, начиная с позиции 0, но вы не можете прочитать тот, начиная с позиции 1 (вы можете, но это требует нескольких шагов).
Почему процессоры не могут этого сделать?
2 ответа
Проблема не в способности ЦП обращаться к какому-либо одному байту в памяти. Но это память, которая не имеет той же степени детализации. Как сказал Оли, это очень специфично для архитектуры, но микросхемы памяти часто обращаются к их шинам данных. Это означает, что данный адрес представляет собой полное "слово" их шины данных.
Давайте возьмем пример 32-битного процессора с 32-битной шиной данных, подключенной к устройству памяти. Когда процессор хочет получить доступ к слову по адресу 0x00000000
действительно хочет получить доступ к байту 0
, 1
, 2
а также 3
, Для чипа памяти, однако, это представлено одним адресом 0x00000000
,
Теперь, когда процессор хочет получить доступ к слову по адресу 0x00000001
действительно хочет получить доступ к байту 1
, 2
, 3
а также 4
, Для чипов памяти, однако, это представлено частью слова по адресу 0x00000000
и кусок слова по адресу 0x00000001
,
Отсюда необходимость в двух автобусных циклах.
РЕДАКТИРОВАТЬ: Добавление иллюстрации проводки
Чтобы проиллюстрировать это, вот обе схемы адресации:
Обратите внимание на битовый сдвиг в адресах чипа RAM.
Адреса будут выглядеть так:
// From the RAM point of view
@0x00000000: Bytes 0x00000000 to 0x00000003
@0x00000001: Bytes 0x00000004 to 0x00000007
Чтобы получить доступ к мечу @0x00000001
Вы можете видеть, что прямая адресация невозможна. Вы должны спросить чип RAM для обоих мечей по адресам 0x00000000
а также 0x00000001
,
Простой ответ: они не могут, потому что они предназначены не для этого.
Основная причина, по которой они разработаны таким образом, заключается в производительности и масштабируемости. Мы потеряли бы слишком много невероятно важных функций, чтобы поддержать это.
Простая аналогия, скромный транспортный контейнер. До дней отгрузки контейнеров груз самых разных форм и размеров был как можно более эффективно упакован в корпуса судов. Из-за бесконечно изменяющихся размеров груза, начиная от ящиков, до пакетов с кофе и тюков сена и хлопка, вместимость этих кораблей использовалась ужасно и неэффективно.
Транспортный контейнер изменил все это, теперь, если вы хотите отправить что-либо на международном уровне, он должен быть в стандартном размере. Дело не в том, что вы не можете просто отправить свою сумку корма для кошек своему другу в Гонконге на контейнеровозе, а в том, что сделать это настолько невероятно неэффективно, что это просто не сделано.
Вы хотите быстро доставить эту кошачью еду своему другу, не покупая целый контейнер? Что ж, вы можете заплатить компании по экспресс-доставке, такой как FedEx, за перелет на 747, но вы точно так же заплатите за эту способность.