Иерархическая структура памяти. Модели памяти

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

Память обычно состоит из двух регистров для управления запоминающими ячейками и из поля самих этих ячеек. Процессор технически не может прямо обращаться к отдельным ячейкам памяти. Ячейки памяти управляются процессором косвенно, через канал. Для этого адрес требуемой ячейки пересылается через канал в запоминающее устройство и заносится в регистр адреса памяти. С помощью этого регистра выбирается соответствующая ячейка, и ее содержимое переносится в регистр памяти. Аналогично производится и запись значения из процессора в ячейку памяти. Объем памяти, которую можно использовать для программ и данных, определяется числом микросхем памяти, физически присутствующих в компьютере.

Объем памяти можно наращивать с помощью плат расширения, вставляемых в специальные разъемы. Для процессора память – это не более чем несколько тысяч ячеек, каждая из которых имеет уникальный адрес. Таким образом, память – это максимальное количество различных адресов и, следовательно, максимальное количество байт данных, к которым может обратиться процессор.

Адресное пространство обычно делят на блоки. Так для компьютеров фирмы IBM семейства РС адресное пространство делится на 16 блоков по 64Кбайта. Каждый из этих блоков обозначается шестнадцатеричной цифрой, совпадающей со старшей цифрой адреса.

Разбиение на блоки носит отчасти условный характер, однако это удобно для объяснения общей схемы распределения памяти.

Схема распределения памяти в компьютерах фирмы IBM семейства РС представлена на рис. 3.1.

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

Блок B используется в качестве видеопамяти, а блок A оставлен для ее расширения.

Блок С используется для расширения встроенных в ПЗУ программ базовой системы ввода-вывода (BIOS).

Блок F обычно используется для постоянно установленных программ ПЗУ.

F0000 ПЗУ: ПЗУ-BIOS, диагностика
E0000 Область кассет ПЗУ
D0000 Область кассет ПЗУ
C0000 Расширения BIOS
B0000 Обычная память дисплея
A0000 Расширение памяти дисплея
Рабочее ОЗУ, до 640 К
Рабочее ОЗУ, до 576 К
Рабочее ОЗУ, до 512 К
Рабочее ОЗУ, до 448 К
Рабочее ОЗУ, до 384 К
Рабочее ОЗУ, до 320 К
Рабочее ОЗУ, до 256 К
Рабочее ОЗУ, до 192 К
Рабочее ОЗУ, до 128 К
Рабочее ОЗУ, до 64 К; обычно используется для программного обеспечения системы.

Рис. 3.1 Схема блока памяти

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

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

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

Слово в памяти хранится в двух соседних байтах. Младший байт образующий слово, имеет меньший адрес, а старший – на единицу больший. Это следует четко помнить.

При записи шестнадцатеричного значения числа мы сначала выписываем старшие цифры, а затем – младшие, а в памяти хранятся сначала две младшие, а затем – две старшие. Например, мы записываем число E69C, а в памяти – 9CE6 (рис. 3.2).

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

Слово 9 C Младший байт Слово
    E 6 Старший байт E69C
Старшие        
адреса Слово 4 A Младший байт Слово
    5 B Старший байт 5B4A

Рис. 3.2

Процессор делит адресное пространство на произвольное количество сегментов, каждый из которых содержит не более 64 Кбайт. Адрес первого байта сегмента всегда кратен 64 байтам и называется адресом сегмента или параграфом. Таким образом, сегментом называется область, которая начинается на границе параграфа. Хотя сегмент может располагаться в любом месте памяти и иметь размер до 64 Кбайт, он требует столько памяти, сколько необходимо для выполнения программы.

Для компьютеров семейства IBM PC имеется три главных сегмента:

Сегмент кодов содержит машинные команды, которые будут выполняться. Обычно первая выполняемая команда находится в начале этого сегмента и операционная система передает управление по адресу данного сегмента для выполнения программы. Регистр сегмента кодов (CS) адресует данный сегмент.

Сегмент данных содержит определенные данные, константы и рабочие области, необходимые программе. Регистр сегмента данных (DS) адресует данный сегмент.

Сегмент стека содержит адреса возврата как для программы при возврате в операционную систему, так и для вызовов подпрограмм при возврате в главную программу. Данный сегмент адресуется регистром стека (SS).

Еще один сегментный регистр предназначен для специального использования – регистр дополнительного сегмента (ES).

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

Так как смещение задается всегда относительно начала сегмента, мы часто используем термин относительны1й адрес или относительное смещение.

Адрес образуется с помощью объединения 16-разрячдного параграфа сегмента и 16-разрядного относительного смещения. Если параграф сегмента сдвинуть влево на 4 бита, дополнив справа нулями, мы получим 20-разрядный адрес байта (рис. 3.3).

1 0 1 1 1 0 1 1 1 0 1 0 0 0 1 1 0 0 0 0 Относительный адрес смещения
  1 0 1 1 1 0 1 0 0 1 1 0 0 1 1 1 20-разрядный адрес сегмента
1 1 0 0 0 1 1 1 0 1 0 0 1 0 0 1 0 1 1 1 Адрес параграфа сегмента
       

Рис. 3.3. Формирование 20-разрядного физического адреса

Параграф сегмента записывается в виде пятизначного шестнадцатеричного числа, причем последняя цифра этого числа всегда 0, например FFE40 или D8120. Последний 0 получается в результате умножения четырехзначного шестнадцатеричного числа на 16. Такой же эффект сдвига цифр получается при умножении десятичных чисел на 10. Смещение записывается в виде четырехзначного шестнадцатеричного числа. Сумма смещения и параграфа сегмента дают пятизначное шестнадцатеричное число, соответствующее 20-разрядному адресу.

Например, если параграф сегмента 1234, то, умножив его на 16, получим 12340. Если байт имеет смещение 4321, то сумма сегментной части и смещение будет пятизначным числом:

12340 –адрес сегмента

+ 4321 –смещение

16661 –20-разрядный адрес

Обычно сегменты перекрываются или совпадают. Чаще всего они не используются полностью, например, сегмент кода: программа может занимать лишь 16 из 64 Кбайт. Пример характерного размещения сегментов в памяти приведен на рис. 3.4.

Сегменты могут включать 64К или перекрывать друг друга.

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

Например, инструкция MOV, относящаяся к коду программы, использует регистр сегмента кодов.

При использовании сегментных регистров интерпретатором Бейсик регистр сегмента кодов всегда указывает на код самого интерпретатора. Программа и ее данные размещаются в сегменте данных, адресуемом регистром сегмента данных. По этой причине общий размер программы и данных не может быть больше 64 Кбайт. Оператор Бейсика DEF SEG позволяет изменить сегмент данных для некоторых операторов (например, PEEK и POKE), но не меняет значения регистра сегмента данных.

  Свободная память  
64К для сегментов Сегмент кодов 30 К Занятая область
кода или стека Сегмент стека 15К Занятая область
     
  Сегмент данных 64К  
     
  Дополнительный сегмент 64К  
  Свободная память  

Рис. 3.4. Размещение сегментов в памяти

Бейсик позволяет нам устанавливать наше собственное значение сегмента данных, используя предположение DEF SEG = «значение». Смещение задается с помощью функций POKE или PEEK. Мы можем также переустановить сегмент данных в его исходное состояние, используя предположение DEF SEG без фрагмента «значение».

Изменения сегмента данных можно добиться, воспользовавшись простой программой:

DEF SEG = 0

DATA.SEGMENT = PEEK (&H511)*256 + PEEK(&H510).

Важным ресурсом является оперативная память, ее необходимо уметь распределять быстро и эффективно и использовать без простоев. Самый простой алгоритм распределения памяти состоит в том, чтобы каждой программе, выбранной их входной очереди, выделить всю необходимую ей память одним сплошным куском, в каждом куске целое число страниц. Чтобы избежать ошибок при выполнении некоторых программ (например, искажение текста одной программы при выполнении другой) каждой странице сопоставляется специальная ячейка – ключ защиты страниц. Перед началом выполнения программы этой ячейке присваивается уникальный код. Данная ячейка недоступна программисту. Этот же код записывается в ключе тех последовательных страниц памяти, которые отведены программе для выполнения (рис. 3.5). Аппаратура ЭВМ следит за тем, чтобы все ячейки памяти, к которым происходят обращения, располагались в страницах с этим ключом. При нарушении этого правила исполнение программы прерывается.

Иерархическая структура памяти. Модели памяти - student2.ru

Рис. 3.5

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

Это отображение выполняется механизмом переадресации – специальной аппаратурой процессора. Суть его заключается в следующем. Для каждой программы перед началом исполнения заводится таблица переадресации (рис. 3.6, а). В ее первом столбце – номера математических страниц, второй пуст – физические страницы еще не отведены. Кроме того, операционная система ведет таблицу (рис. 3.6, б), в которой перечислены свободные физические страницы и страницы, занятые программами. На рис. 3.6, б физические страницы 0 и 4 заняты программой В; 2 и 6 – программой С; страницы 1, 3, 5, ..., N-я свободны.

Приняв решение начать исполнение А, ОС ищет в таблице физических страниц свободную, нашла, например 5-ю, и записывает в 5-ю физическую страницу нулевую математическую страницу программы (т.е. команды, которые должны содержаться я ячейках 00000–00999). В таблицу переадресации во второй столбец нулевой строки записывается 5 (рис. 3.6, в), а в таблицу физических страниц в пятую строку во второй столбец – имя программы А, занявшей пятую страницу памяти (рис. 3.6, г). После этого ОС назначает один из свободных процессоров и А начинает исполняться с первой команды. Если при этом встречается команда СЛОЖИТЬ 00743 00520, то она выполняется так:

Вначале формируются физические адреса. В адресах 00743 и 00520 последние три цифры есть адрес ячейки внутри страницы, а первые две – номер математической страницы. По таблице переадресации процессор заменяет номер математической страницы на физический (в данном случае 00 на 05) и получает команду СЛОЖИТЬ 05743 05520 в физических адресах. После этого команда выполняется. Но в программе может встретиться и такая команда: ПЕРЕЙТИ-НА 04270. Однако четвертая математическая страница программы А еще не загружена в память, по этой причине произойдет прерывание, ОС его отработает следующим образом.

Если в таблице физических страниц найдется свободная страница (в нашем случае это может быть третья), она отдается А, четвертая математическая страница А загружается в третью физическую, вносятся изменения в таблицу переадресации и таблицу физических страниц (рис. 3.6, д, е), после чего начинает выполняться команда, которую процессор выберет из математической ячейки 04270, а фактически, после переадресации, из физической ячейки 03270.

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

Полный адрес байта памяти формируется из адреса начала сегмента размером 64 Кбайт, и смещения байта относительно начала этого сегмента. Четыре сегментных регистра, обозначаемых CS, DS, SS, ES, хранят начальные адреса четырех сегментов размером 64 Кбайт. Пять регистров – указатели и индексы хранят смещения данных внутри сегментов.

Из четырех сегментных регистров три имеют вполне определенное назначение: CS хранит адрес сегмента кода выполняемой программы; DS указывает на сегмент данных, используемых программой; SS указывает на сегмент стека – область данных, предназначенную для временного хранения параметров и адресов, используемых программой.

Четвертый сегментный регистр ES позволяет программе работать более чем с 64 Кбайт памяти одновременно. Этот регистр также участвует в межсегментных пересылках данных.

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

Регистр – указатель инструкции (IP – Instruction Pointer) называемый также программным счетчиком (PC – Program Counter), указывает на следующую выполняемую инструкцию в сегменте кода, адресуемом с помощью сегментного регистра CS.

Программа не может явно получить или изменить значение этого регистра. Однако имеются инструкции, например JMP и CALL, которые неявно изменяют значение IP, а также сохраняют его значение со стека.

Регистры, называемые указатель стека (SP – Stack Pointer) и указатель базы (BP – Base Pointer), содержат смещения в сегменте стека. SP указывает на вершину стека и в некотором смысле аналогичен IP. BP используется для того, чтобы зафиксировать положение стека в какой-то момент времени и в дальнейшем адресоваться к данным, расположенным в стеке. Этот регистр играет существенную роль в ассемблерных подпрограммах к языкам высокого уровня. Регистры индекс источника (SI – Source Index) и индекс приемника (DI – Designation Index) в основном используются для формирования сложных адресов, состоящих из смещения начала блока данных в сегменте и относительного смещения элемента данных внутри блока. При этом смещение начала блока обычно хранится в регистре BX или непосредственно в инструкции, а регистр SI или DI задает смещение внутри блока. Кроме этого, индексные регистры участвуют в выполнении инструкций, работающих со строками байтов или слов. Например, при пересылке строки байтов из одного места памяти в другое используются оба регистра SI и DI, причем оба автоматически увеличиваются на единицу после пересылки каждого байта.

Иерархическая структура памяти. Модели памяти - student2.ru

а) б)

Иерархическая структура памяти. Модели памяти - student2.ru

в) г)

Иерархическая структура памяти. Модели памяти - student2.ru

д) е)

Рис. 3.6

Задание для выполнения работы

1. Адресное пространство. Схема распределения памяти в компьютерах семейства IBM PC.

2. Методы обращения к памяти. Приведите примеры.

3. Представление данных в памяти.

4. Перечислите сегментные регистры компьютеров семейства IBM PC.

5. Размещение сегментов в памяти.

6. Что такое смещение.

7. Образование адреса. Привести пример.

8. Использование сегментных регистров.

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

10. Схема распределения ресурсов ЭВМ. Объяснить на примере.

11. Алгоритмы распределения оперативной памяти.

12. Страничная организация и защита памяти по ключу.

13. Виртуальная память. Математические и физические страницы.

14. Формирование таблицы переадресации.

15. Сегментные регистры и регистры смещения. Их использование.

16. Что такое сегментная организация памяти?

17. Что такое сегмент?

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

19. Какую структуру имеет логический адрес при сегментной организации памяти?

20. Что такое таблица сегментов?

21. Какая информация хранится в элементе таблицы сегментов?

22. Что такое регистр базы таблицы сегментов?

23. Что такое регистр длины таблицы сегментов?

24. На какой фазе (во время загрузки или исполнения) осуществляется перемещение при сегментной организации?

25. Какие стратегии распределения памяти применяются при сегментной организации?

26. Какие признаки защиты хранятся в элементе таблицы сегментов?

27. Какое условие для номера сегмента проверяется при адресации?

Лабораторная работа № 4

Наши рекомендации