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

Механизмы аппаратной поддержки операционных систем. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
2 Мб
Скачать
☆
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
На рисунке показан общий механизм определения процессором физического адреса памяти по его программным составляющим.
Рис.26 - Механизм вычисления физических адресов памяти при
страничной адресации
Процесс определения линейного адреса зависит от того, где находится дескриптор искомого сегмента - в Глобальной таблице дескрипторов (GDT) или в Локальной таблице дескрипторов (LDT).
Это процессор узнает по биту TI в селекторе сегмента.
Дескриптор сегмента находится в GDT
Признаком этого для процессора является значение бита TI= 0 в селекторе сегмента.
Смещение дескриптора сегмента от начала GDT вычисляется процессором так: адрес GDT + I (номер дескриптора) * 8 .
Адрес GDT процессор берет из регистра GDTR.
61
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
К прочитанному из дескриптора базовому адресу сегмента процессор прибавляет внутрисегментное смещение и получает линейный адрес (рис.26).
Рис.27 – Определение линейного адреса сегмента по дескриптору,
размещенному в GDT
Пример: В команде mov ax, ds:[2f00h] второй операнд находится в памяти.
Допустим, значение DS=0400h = 0000 0100 00000 0 002
i=80h бит TI=0
Бит TI=0 в регистре DS означает, что дескриптор искомого сегмента находится в GDT.
Линейный адрес операнда в памяти будет вычислен процессором следующим образом:
- из дескриптора сегмента, находящегося по адресу: адрес GDT +
80h *8 будет извлечено значение базового адреса сегмента;
- линейный адрес будет определен, как базовый адрес + 00002f00h
Дескриптор сегмента находится в LDT
Если бит TI в сегментном регистре равен 1, искомый сегмент «принадлежит» отдельной задаче и описан дескриптором в ее локальной дескрипторной таблице.
Определение линейного адреса в данном случае выполняется процессором в два этапа.
62
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
На первом этапе через регистр-селектор LDTR определяется адрес
сегмента Локальной дескрипторной таблицы. Значение i1 в регистре– селекторе LDTR – это номер дескриптора сегмента LDT. По этому номеру процессор вычислит местонахождение дескриптора сегмента LDT в Глобальной дескрипторной таблице.
На втором этапе происходит поиск дескриптора искомого сегмента в Локальной дескрипторной таблице. Номер дескриптора в сегментном регистре -i2 позволяет найти в сегменте LDT дескриптор искомого сегмента (его смещение в LDT равно 8 * i2) и извлечь из него базовый адрес сегмента.
Базовый адрес сегмента затем суммируется с внутрисегментным смещением, образуя линейный адрес ячейки памяти.
Рис.28 - Определение линейного адреса сегмента, дескриптор
которого размещен в LDT
Пример. В команде mov ax, ds:[2f00h] второй операнд находится в памяти.
Пусть, значение DS=0404h = 0000 0100 00000 1 002
i2=80h бит TI=1
Значение в регистре LDTR = 0048h= 0000000001001 0002
i1= 9h
63
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Бит TI=1 в регистре DS означает, что дескриптор искомого сегмента находится в LDT.
Линейный адрес операнда в памяти будет вычислен процессором следующим образом:
- по номеру дескриптора в регистре LDTR будет найден дескриптор сегмента локальной дескрипторной таблицы. Его адрес – это адрес GDT + 9h *8;
- из дескриптора сегмента LDT будет извлечен адрес сегмента LDT и вычислен адрес дескриптора искомого сегмента, как: базовый адрес сегмента LDT + 8 * 80h ;
- из дескриптора искомого сегмента будет извлечен его базовый
адрес и вычислен линейный адрес ячейки памяти: базовый адрес +
00002f00h.
Страничное управление памятью
Страничное преобразование линейного адреса выполняется
процессором, когда операционная система включила страничное преобразование адресов установкой бита 31 в системном регистре CR0.
Страничная адресация памяти наиболее эффективна, когда операционная система планирует поддерживать «виртуальную» память (программно адресуемую) существенно большего размера, чем имеющаяся физическая оперативная память.
Основой такой поддержки является механизм подкачки (свопинг).
Для размещения программных сегментов, которым не находится места в оперативной памяти, используется дисковые пространство (файл подкачки). При исполнении текущей задачи процессору может встретиться команда обращения в программный сегмент, которого нет в памяти. Затребованный сегмент должен немедленно быть загружен в обмен на выгрузку из памяти в файл другого сегмента.
Свопинг сегментов произвольного размера приводит к значительной фрагментации памяти и неэффективному ее использованию.
Использование в свопинге блоков одинакового размера (страниц) значительно оптимизирует процедуру подкачки и практически снимает проблему фрагментации памяти после подкачки. Подкачку, ведущуюся стандартными по размеру страницами, называют пейджинг (paging).
Прежде, чем включить страничное преобразование, операционная система должна выполнить необходимые подготовительные работы и
64
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
создать определенные информационные структуры для этого преобразования.
Все пространство физической оперативной памяти операционная система «делит» на страницы (page frame) и размещает информацию об адресах этих физических страниц в Таблицах страниц. Обычно, размер страницы составляет 4 Кб (2
12
байт = 4096 байт).
В результате страничного преобразования адресов процессором, программные сегменты будут также «делиться» на страницы. Это деление «невидимо» на программном уровне.
Каждая программная страница в дальнейшем будет размещена («отображена») в странице физической памяти либо отгружена в дисковый файл.
Информационные структуры для страничного преобразования
Рассмотрим информационные структуры для страничного преобразования, создаваемые операционной системой.
Максимальное физическое пространство памяти при 32-разрядной шине адреса составляет 4Гб. Если поделить пространство в 2 на страницы по 4 Кб, то получим количество страниц, равное 2
12
= 2
20
).
/2
32
байтов
20
( 232
Если создать одну таблицу с 4-байтными адресами страниц, получим линейную структуру размером 2
20
* 22 = 222 байт = 4 Мб.
Нетрудно представить себе, насколько долгим будет поиск адреса нужной страницы.
Поэтому, для размещения и определения адресов физических страниц памяти используется двухступенчатая схема. Смысл ее состоит в следующем.
1. Создается несколько Таблиц страниц.
Размер каждой таблицы не превышает размера страницы - 2
12
байт.
Каждый элемент таблицы содержит 4-байтной адрес, следовательно, количество записей в таблице будет не более 2 байт / 4 = 2
10
).
10 (212
2. Создается Каталог таблиц - таблица, в которой записаны 4-
байтные адреса всех Таблиц страниц.
Каталог таблиц, как и каждая таблица страниц, размещается в одной странице и состоит не более, чем из 2
10
элементов с адресами
Таблиц страниц.
65
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Адрес размещения Каталога таблиц в памяти операционная система записывает в системный регистр CR3. Оттуда его будет брать процессор.
Механизм страничного преобразования линейного адреса
После установки операционной системой в 1 старшего бита регистра CR0 ( CR031 = 1) включается аппаратный механизм страничного преобразования линейного адреса.
Теперь процессор интерпретирует линейный адрес, как состоящий из трех полей:
- 10-битный номер Таблицы страниц (К);
- 10-битный номер страницы в данной таблице (Р);
- 12-битное смещение ячейки памяти в данной странице.
На рисунке 29 показан процесс преобразования процессором линейных адресов в физические адреса в пространстве памяти размером 4 Гб.
По номеру Таблицы страниц (К) процессор находит в Каталоге запись с адресом К-й таблицы. Адрес этой записи – это адрес Каталога (из регистра CR3) + 4 * К.
Далее, процессор вычисляет адрес записи о странице номер Р в Таблице страниц. Эта запись находится по адресу: адрес Таблицы + 4 * Р. Из записи извлекается адрес Р-й страницы памяти.
К адресу страницы прибавляется смещение байта памяти на странице и получается физический адрес памяти, по которому будут происходить обращение.
Формат записи в Каталоге таблиц и Таблицах страниц
Формат информации в записях Каталога таблиц и Таблиц страниц практически одинаковый. Только запись Каталога содержит информацию о таблице, а запись в Таблице страниц – о странице.
Адреса Таблиц и страниц всегда кратны размеру страницы - 4096
12
(2
байт), следовательно, в двоичном коде младшие 12 бит адреса
всегда нулевые.
Это позволяет использовать под адрес только старшие 20 бит, а полное 32-разрядное значение адреса процессор вычисляет сам: логический сдвиг 20-битного кода влево на 12 бит.
66
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Адрес таблицы (страницы )
0 0 0
0 0 х х х х х х
х
Рис.29 - Механизм страничного преобразования линейных адресов
Младшие биты записи в Таблице страниц используются операционной системой для дополнительной информации о странице и наложения на нее ряда ограничений защиты:
- признак присутствия/отсутствия страницы в оперативной памяти;
- разрешение или запрещение кеширования страницы;
- ограничение доступа к странице по чтению/записи;
- уровень привилегий страницы для защиты доступа к ней по
привилегиям.
Формат записи Каталога таблиц и Таблицы страниц
31 12 11 10 9 8 7 6 5 4 3 2 1 0
Биты 32-12 – это старшие 20 разрядов физического адреса таблицы/страницы.
Биты 11-7 – зарезервированы (нули).
67
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Младшие биты (х) используются следующим образом:
Бит 6: 1 – признак обращения к таблице.
Бит 5: 1 – признак обращения к странице.
Биты 4-3: запрещение /разрешение кеширования страниц.
Бит 2: 0 – уровень привилегий ядра (операционной системы), 1 – уровень пользовательской программы.
Бит 1: 1 – разрешены чтение/запись, 0 – только чтение.
Бит 0: 1 – страница находится в памяти, 0 – на диске.
Поддержка виртуальной памяти
Оценка объема виртуальной памяти
Возможности программной адресации памяти («виртуальной памяти») при включении механизма страничного преобразования существенно превышают возможности физической адресации памяти процессором.
Максимальный объем физически адресуемой процессором памяти определяется разрядностью его адресной шины. Для 32-разрядной шины адреса – это 2
Оценим теперь максимальный объем программно адресуемой памяти (V):
max_seg_numb - максимально возможное количество программных сегментов, которое сможет адресовать процессор;
max_seg_size - максимальный размер одного сегмента
Указанные предельные значения следуют из уже известных механизмов адресации памяти процессором.
Максимальное количество программных сегментов, которые сможет адресовать процессор, ограничено предельным количеством дескрипторов сегментов в глобальной дескрипторной таблице – это 213 дескрипторов. Ограничение это вытекает из разрядности поля под номер дескриптора в селекторах – 13 бит.
Эту величину надо умножить на 2, так как для исполняемой программы операционная система может дополнительно создать отдельную локальную таблицу дескрипторов с таким же предельным количеством дескрипторов.
32
байтов (4 Гб).
V = max_seg_numb * max_seg_size , где
68
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Итак, max_seg_numb равно 2
13
* 2= 2
14
сегментов.
Максимальный размер программного сегмента зависит от формата поля «Предел» дескриптора сегмента и единицы измерения сегмента:
- при байтном измерении сегмента (бит G в дескрипторе сегмента
=0) max_seg_size равен 220 байтов (1 Мб);
- при страничном измерении ( бит G в дескрипторе сегмента=1)
max_seg_size составляет 220* 212 байтов = 2
32
байтов (4 Гб).
Таким образом:
1. При сегментной адресации максимальный объем
поддерживаемой процессором виртуальной памяти составит 16 Гб (2
13
220 = 234 байтов);
2. При страничной адресации объем поддерживаемой виртуальной
памяти составляет 64 Терабайт (2
14
* 232 = 2
46
байтов).
Механизм подкачки
«Поддержка виртуальной памяти» означает возможность загрузки в память и исполнения программ суммарного размера, превышающего существующую физическую память.
Часть виртуальных сегментов или страниц процесса будет отображена в участки реальной физической оперативной памяти, часть ­отгружена на диск в специальный «файл подкачки» (swapping file) .
Когда исполняемый процесс обращается к сегменту/странице, которого сейчас нет в памяти, операционная система отправляет из памяти в файл подкачки малоактивный программный сегмент/ страницу, а на его место загружает требуемый. Эта процедура называется «подкачка» (свопинг).
Рассмотрим алгоритм подкачки и его поддержку процессором на примере подкачки сегментами.
Учет местонахождения сегментов операционная система ведет с помощью бита присутствия сегмента - Р (Present) в байте доступа дескриптора сегмента.
Бит Р =1 означает для процессора, что сегмент размещен в памяти;
Бит Р= 0 означает, что сегмент находится на диске в файле подкачки.
*
69
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Допустим, исполняемый процесс обращается к сегменту, которого сейчас нет в памяти.
Процессор, вычисляя адрес обращения в команде, обнаруживает в дескрипторе сегмента бит Р=0 и генерирует системное прерывание «отсутствия сегмента».
По этому прерыванию вызывается программа-обработчик данного прерывания, которая собственно и будет реализовывать подкачку затребованного сегмента в память.
Содержимое некоторого другого сегмента из памяти будет сохранено в файле подкачки и бит Р в его дескрипторе сброшен в 0. По адресу удаленного сегмента будет загружен требуемый сегмент из файла подкачки и бит Р в его дескрипторе будет установлен в 1.
На этом процедура обработки прерывания завершится и процесс, обратившийся к сегменту, продолжит исполнение.
Следует заметить, что команда обращения в память, которая вызвала «прерывание отсутствия», будет повторно выполнена процессором.
Какой сегмент будет выбран операционной системой для отправки из памяти на диск вместо подкачиваемого сегмента? Очевидно тот, который редко используется.
Операционная система ведет специальную таблицу с номерами дескрипторов редко используемых сегментов. Однако, пополнение записей в этой таблице она ведет только на основании информации, полученной от процессора.
Операционная система не может знать, как часто процессы пользуются теми или иными сегментами. Об этом знает только процессор, который выполняет команды обращения к памяти в исполняемой программе.
В байте доступа дескриптора любого сегмента есть специальный бит обращения к сегменту - А (access). Бит А устанавливается процессором в 1 при каждом программном обращении к данному сегменту.
70
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]