4

Мои вопросы касаются связи между размером фактического / физического адреса и размером адресной шины.

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

Заметка

  • Я не говорю о размере слова (то есть о размере, который процессор может обрабатывать за один раз), который может отличаться как от фактического / физического размера адреса, так и от размера шины адреса.
  • Я не говорю об использовании адресов сегмента и смещения для представления физического адреса.

2 ответа2

3

Ширина в битах шины физического адреса может быть больше или меньше, чем ширина в конкретном адресе памяти, так как есть все виды аппаратных взломов, которые вы можете создать в системе, чтобы разрешить странные режимы адресации. Например, в некоторых 32-битных системах адресная шина имеет ширину 52 бита. В качестве другого примера, некоторые инструкции ЦП могут декодировать более длинный адрес, используя комбинацию базового адреса и таблицы поиска.

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

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

Наконец, чтобы дать еще больше преимуществ аппаратным хакам, о которых я упоминал выше, одним хорошим примером является ввод-вывод с отображением в памяти (для краткости MMIO). Это позволяет ЦП получать доступ как к периферии, так и к ОЗУ через саму адресную шину. Обычно это делается через адреса памяти более высокого порядка, чтобы избежать конфликтов адресов более низкого порядка. Однако это привело к появлению общеизвестного барьера памяти объемом 3 ГБ во всех пользовательских вариантах 32-разрядных операционных систем Windows. Опять же, это просто, чтобы показать вам, что возможно на аппаратном уровне.


С точки зрения программиста высокого уровня, это не имеет ничего общего с переменными-указателями. Они всегда имеют одинаковый размер данных, поскольку эти расширения адресов обрабатываются для вас операционной системой и / или самим оборудованием. Размеры, адреса и смещения указателей устанавливаются / вычисляются компилятором.

1

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

В дополнение к вышеперечисленному (и особенно в микропроцессорах, где контакты ограничены), адресная шина, которая выходит из процессора в банк памяти, может быть "мультиплексирована", так что адреса отправляются в двух отдельных циклах, сначала в старшей половине. Например, нижняя половина. Фактически, некоторые модули памяти построены с учетом этого, так как они также вводят "мультиплексные" адреса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .