Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЭВУ 2 семестр / Презентации ЭВУ в пдф / метода моховикова

.pdf
Скачиваний:
43
Добавлен:
31.05.2015
Размер:
4.4 Mб
Скачать

предназначено для хранения кодов инструкций и данных, для доступа к ко-

торым имеется богатый выбор режимов адресации (24 режима). Память про-

цессоров разделяется на байты (8 бит), слова (16 бит), двойные слова (32 би-

та), учетверенные слова (64 бита). Слово (word) записывается в двух смеж-

ных байтах, начиная с младшего. Адресом слова является его младший байт

(Low byte). Следующий байт (адрес на единицу больше) содержит старший

(High) байт слова. Слово может размещаться в памяти как по четному (Even),

так и по нечетному (Odd) адресу. Выравнивание по границе слова означает,

что адрес четный (младший бит адреса у адресуемого элемента – нулевой).

Двойное слово (double word) записывается в четырех смежных байтах, опять-

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

графы – области из 16 смежных байтов, начиная с нулевого адреса. Вырав-

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

равнивания операндов по границе своего класса. Выровненные элементы пе-

редаются по внешней шине за минимальное число тактов. Обращение к не-

выровненным элементам в ряде случаев вызывает исключение. Идейно па-

мять можно разделить на две категории (рис. 17). Более крупными единица-

ми организации памяти являются страницы и сегменты. Память может логи-

чески организовываться в виде одного или множества сегментов переменной длины (в реальном режиме – фиксированной). Кроме сегментации, в защи-

щенном режиме возможно разбиение (Paging) логической памяти на страни-

цы размером 4 Кбайт (размер может меняться), каждая из которых может отображаться на любую область физической памяти. Сегментация и разбие-

ние на страницы могут применяться в любых сочетаниях.

Сегментация является средством организации логической памяти на прикладном уровне. Разбиение на страницы применяется на системном уров-

51

не для управления физической памятью. Сегменты и страницы могут выгру-

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

ется виртуальная память.

Организация памяти

Основная (главная, оперативная, физиче-

ская)

Основная память представляет собой упорядоченный массив однобайтовых ячеек, каждая из которых имеет свой уникальный адрес (номер).

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

Для выполнения команды могут потребоваться обращения еще к нескольким ячейкам основной памяти.

Обычно основная память изготавливается с применением полупроводниковых технологий и теряет свое содержимое при отключении питания.

 

Вторичная

 

(внешняя)

Вторичную память (это главным образом

 

диски) также можно рассматривать как

 

одномерное линейное адресное простран-

 

ство, состоящее из последовательности

 

байтов.

В отличие от оперативной памяти, она

 

является энергонезависимой, имеет суще-

 

ственно большую емкость и используется

 

в качестве расширения основной памяти.

Рис. 17. Организация памяти

Применительно к памяти различают три адресных пространства: логиче-

ское, линейное и физическое. Основным режимом работы современных про-

цессоров считается защищенный режим, в котором работают все механизмы преобразования адресных пространств (рис. 18).

5.1. Логическая память

Аппаратная организация памяти в виде линейного набора ячеек не соответствует представлениям программиста о том, как организовано хра-

нение программ и данных. Большинство программ представляет собой на-

бор модулей, созданных независимо друг от друга.

Иногда все модули, входящие в состав процесса, располагаются в па-

мяти один за другим, образуя линейное пространство адресов. Однако ча-

ще модули помещаются в разные области памяти и используются по-

52

разному. Схема управления памятью, поддерживающая этот взгляд поль-

зователя на то, как хранятся программы и данные, называется сегментаци-

ей.

Сегмент – область памяти определенного назначения, внутри которой поддерживается линейная адресация.

Сегменты содержат процедуры, массивы, стек или скалярные величины,

но обычно не содержат информацию смешанного типа. При использовании

сегментированной модели (Segmented Model) для программы память пред-

ставляется группой независимых адресных блоков, называемых сегментами.

Сегментация позволяет эффективно управлять пространством логических адресов и используется для объединения областей памяти с общими атрибу-

тами.

5.2. Адресация операндов

Большая часть команд процессора работает с кодами данных (операн-

дами). Одни команды требуют входных операндов (одного или двух), другие выдают выходные операнды (чаще один операнд). Входные операнды назы-

ваются еще операндами-источниками, а выходные называются операндами-

приемниками. Все эти коды операндов (входные и выходные) должны где-то располагаться. Они могут находиться во внутренних регистрах процессора

(наиболее удобный и быстрый вариант). Они могут располагаться в систем-

ной памяти (самый распространенный вариант). Наконец, они могут нахо-

диться в устройствах ввода-вывода (наиболее редкий случай). Определение места положения операндов производится кодом команды. Причем сущест-

вуют разные методы, с помощью которых код команды может определить,

откуда брать входной операнд и куда помещать выходной операнд. Эти ме-

тоды называются методами адресации. Эффективность выбранных методов адресации во многом определяет эффективность работы всего процессора в целом.

53

Рис. 18. Формирование адреса памяти 32-разрядных процессоров в за-

щищенном режиме

Логический адрес, также называемый виртуальным, состоит из селекто-

ра сегмента (в реальном режиме – просто адреса сегмента) и эффективного адреса, называемого также смещением.

Рассмотрим в деталях компоненты схемы, представленной на рис. 18.

Селектор сегмента хранится в старших 14 битах сегментного регист-

ра (CS – выборка команд, DS – любые другие ссылки на память, кроме тех,

что используют в качестве базового регистр BP, EBP, ESP; ES – строка-

приемник, FS, GS – ссылки на память, использующие в качестве базового ре-

гистр BP, EBP, ESP), участвующего в адресации конкретного элемента памя-

ти.

Смещение (Displacement или Disp) 8-, 16или 32-битное число,

включенное в команду.

База (Base) – содержимое базового регистра. Обычно используется для указания на начало некоторого массива.

Индекс (Index) – содержимое индексного регистра. Обычно использу-

ется для выбора элемента массива.

54

Масштаб (Scale) – множитель (1, 2, 4 или 8), указанный в коде инст-

рукции. Этот элемент используется для указания размера элемента массива,

доступен только при 32-битной адресации.

Эффективный адрес формируется суммированием компонентов base, index, displacement с учетом масштаба scale. Поскольку каждая задача может иметь до 16 Кбайт селекторов (214), а смещение, ограниченное размером сег-

мента, может достигать 4 Гбайт, логическое адресное пространство для каж-

дой задачи может достигать 64 Тбайт. Все это пространство виртуальной па-

мяти в принципе доступно программисту (при условии поддержки со сторо-

ны операционной системы).

Блок сегментации транслирует логическое адресное пространство в 32-

битное пространство линейных адресов. Линейный адрес образуется сложе-

нием базового адреса с эффективным адресом. Базовый адрес сегмента в ре-

альном режиме образуется умножением содержимого используемого сег-

ментного регистра на 16. В защищенном режиме базовый адрес загружается из дескриптора, хранящегося в таблице, по селектору, загруженному в ис-

пользуемый сегментный регистр.

32-битный физический адрес памяти образуется после преобразования линейного адреса блоком страничной переадресации. Он выводится на внешнюю шину адреса процессора. В простейшем случае (при отключенном блоке страничной переадресации) физический адрес совпадает с линейным.

Включенный блок страничной переадресации осуществляет трансляцию ли-

нейного адреса в физический страницами размером 4 Кбайт (для современ-

ных процессоров также возможны страницы размером 2 или 4 Мбайт, по-

следний из размеров удобен тем, что совпадает с размером кластера на жест-

ком диске). Кроме того, блок обеспечивает расширение разрядности физиче-

ского адреса и может включаться только в защищенном режиме.

5.3. Режимы адресации

Система команд 32-разрядных процессоров предусматривает 11 режи-

мов адресации. При этом только в двух случаях операнды не связаны с памя-

55

тью. Это операнд-содержимое регистра, которое берется из любого 8-, 16-

или 32-битного регистра процессора, и непосредственный операнд, который содержится в самой команде. Остальные девять режимов (табл. 1) так или иначе обращаются к памяти.

5.4. Методы адресации

Рассмотрим несколько типичных методов адресации операндов, исполь-

зуемых сейчас в большинстве микропроцессоров.

Непосредственная адресация предполагает, что операнд (входной) на-

ходится в памяти непосредственно за кодом команды (рис. 19).

Операнд обычно представляет собой константу, которую надо куда-то переслать, к чему-то прибавить и т. д. Например, команда может состоять в том, чтобы прибавить число 6 к содержимому какого-то внутреннего регист-

ра процессора. Это число 6 будет располагаться в памяти, внутри программы в адресе, следующем за кодом данной команды сложения.

Рис. 19. Непосредственная адресация

Таблица 1

Режимы адресации

 

 

Режим

Адрес

 

 

Прямая адресация (Direct Mode)

EA=Disp

 

 

Косвенная регистровая адресация(Register Indirect

EA=Base

Mode)

 

 

 

Базовая адресация (Base Mode)

EA=Base+Disp

 

 

Индексная адресация (Index Mode)

EA=Index+Disp

 

 

Масштабированная индексная адресация (Scaled Index

EA=Scale*Index+Disp

Mode)

 

 

 

56

Базово-индексная адресация (Based-Index Mode)

EA=Base+Index

 

 

Масштабированная базово-индексная адресация (Based

EA=Base+Scale*Index

Scaled Index Mode)

 

 

 

Базово-индексная адресация со смещением (Based-

EA=Base+Index+Disp

Index Mode with Displacement)

 

 

 

Масштабированная базово-индексная адресация со

EA=Base+Scale*Index+Disp

смещением (Based Scaled Index Mode with Displacement)

 

 

 

Прямая адресация (она же абсолютная) предполагает, что операнд

(входной или выходной) находится в памяти по адресу, код которого нахо-

дится внутри программы сразу же за кодом команды. Например, команда может состоять в том, чтобы очистить (сделать нулевым) содержимое ячейки памяти с адресом 1000000. Код этого адреса 1000000 будет располагаться в памяти, внутри программы в следующем адресе за кодом данной команды очистки.

Регистровая адресация предполагает, что операнд (входной или выход-

ной) находится во внутреннем регистре процессора (рис. 20).

Рис. 20. Регистровая адресация Например, команда может состоять в том, чтобы переслать число из ну-

левого регистра в первый. Номера обоих регистров (0 и 1) будут определять-

ся кодом команды пересылки.

Косвенно-регистровая (она же косвенная) адресация предполагает, что во внутреннем регистре процессора находится не сам операнд, а его адрес в памяти (рис. 21). Например, команда может состоять в том, чтобы очистить ячейку памяти с адресом, находящимся в нулевом регистре. Номер этого ре-

гистра (0) будет определяться кодом команды очистки.

57

Рис. 21. Косвенно-регистровая адресация

Реже встречаются еще два метода адресации. Это автоинкрементная и автодекрементная адресации, в соответствии с выбранным направлением по содержимому выбранного регистра.

Автоинкрементная адресация очень близка к косвенной адресации, но отличается от нее тем, что после выполнения команды содержимое исполь-

зуемого регистра увеличивается на единицу или на два. Этот метод адреса-

ции очень удобен, например, при последовательной обработке кодов из мас-

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

зовании косвенной адресации в данном случае пришлось бы увеличивать со-

держимое этого регистра отдельной командой.

Автодекрементная адресация работает похоже на автоинкрементную,

но только содержимое выбранного регистра уменьшается на единицу или на два перед выполнением команды. Эта адресация также удобна при обработке массивов данных. Совместное использование автоинкрементной и автодек-

рементной адресаций позволяет организовать память стекового типа.

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

Выбор того или иного метода адресации в значительной степени опре-

деляет время выполнения команды. Самая быстрая адресация – это регистро-

вая, так как она не требует дополнительных циклов обмена по магистрали.

Если же адресация требует обращения к памяти, то время выполнения ко-

58

манды будет увеличиваться за счет длительности необходимых циклов об-

ращения к памяти. Чем больше внутренних регистров у процессора, тем чаще и свободнее можно применять регистровую адресацию, и тем быстрее будет работать система в целом.

5.5. Сегментирование памяти

Говоря об адресации, нельзя обойти вопрос о сегментировании памяти,

применяемой в некоторых процессорах, например в процессорах IBM PC-

совместимых персональных компьютеров. Более подробно об этом будет рассказано в главе 7. В процессоре Intel 8086 сегментирование памяти орга-

низовано следующим образом.

Вся память системы представляется не в виде непрерывного пространст-

ва, а в виде нескольких кусков – сегментов заданного размера (по 64 Кбайт),

положение которых в пространстве памяти можно изменять программным путем.

Для хранения кодов адресов памяти используются не отдельные регист-

ры, а пары регистров:

сегментный регистр определяет адрес начала сегмента (т. е.

положение сегмента в памяти);

регистр указателя (регистр смещения) определяет положение рабочего адреса внутри сегмента.

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

Рис. 22. Формирование физического адреса в реальном режиме работы процессора

Рассмотрим формирование физического адреса памяти из адреса сег-

мента и смещения. Например, сегмент в шестнадцатеричном виде равен

1200, а смещение – 3АВЕ (см. рис. 23).

Сегмент

(1200)

Смещение

(3АВЕ)

Адрес

(15АВЕ)

Рис. 23. Пример формирования физического адреса

60