- •Реальный и защищенный режим работы мп.
- •Характеристики api /os/2
- •Реальная и виртуальная память большого объема.
- •Определение физического адреса, формируемого I 80286, в реальном режиме
- •Определение физического адреса в защищенном режиме
- •Защита памяти и приоритеты программного обеспечения в защищенном режиме
- •Обработка прерываний
- •Структура пк системы.
- •В состав системного блока входят:
- •Системная шина пк.
- •Главная шина fsb
- •Шина isa
- •Шина vlb
- •Шины pci
- •Интерфейс agp
- •Мультиядерная технология amd
- •Память системы
- •Озу системы
- •Интерфейс кпдп с системной шиной данных
Определение физического адреса, формируемого I 80286, в реальном режиме
Физический адрес состоит из двух компонентов: 16-бит значения регистра сегментов и 16-бит значения смещения. Эти компоненты обрабатываются по-разному в зависимости от того, в каком из режимов – реальном или защищенном, находится МП. В реальном режиме он формирует физические адреса также как i 8088 или i 8086 и должен выполнять следующие действия:
1) Взять 16-бит значение регистра сегментов (диапазон от 0 до 65535 в десятичной или от 0000H до FFFFH в шестнадцатеричной записи) и умножить его на 16, т.е. сделать 20-бит (добавить справа к значению регистра четыре нулевых бита).
2) Полученное после выполнения первого шага значение будет находиться в диапазоне от 00000H до FFFF0H, т.е. от 0 до 1048650 в десятичной записи. Поскольку четыре младших бита всегда остаются нулевыми, это значение всегда кратно 16 в десятичной системе счисления (!).
3) Добавить к полученному 20-бит значению регистра сегментов 16-бит смещение.
4) После выполнения указанных действий формируется окончательный 20-бит физический адрес в диапазоне от 00000H до FFFFFH (переполнения не учитываются).
Схема формирования физического адреса представлена на рис. 2.
Регистр сегмента
а) 16-бит значение регистра
0000
б) 20-бит представление
Смещение
в) 16-бит значение смещение
Физический адрес
г) 20-бит физический адрес
Рисунок 2 – Формирование физического адреса в реальном режиме
Зная значение регистра сегментов, можно точно определить, где расположен данный сегмент в физической памяти. Поскольку прикладная программа записывает в сегментный регистр адрес текущего рабочего сегмента, она может непосредственно управлять разделами физической памяти, к которым ей необходимо обратиться.
При работе в среде реального режима микропроцессора 80286 виртуальные адреса памяти совпадают с реальными. Виртуальным здесь называется адрес, с которым имеет дело программа пользователя, а реальным — физический адрес, используемый системой для доступа к физической памяти.
При такой схеме организации адресации может показаться, что увеличение на единицу значения регистра сегментов для перехода к следующему сегменту памяти оказывается эквивалентным обращению к тому же сегменту при увеличении значения смещения на 16 (предполагая, что переполнения не будет!). Такие коллизии постоянно возникают при выполнении программ, написанных для среды DOS. Поэтому программы DOS не могут выполняться в среде защищенного режима микропроцессора 80286.
Определение физического адреса в защищенном режиме
При формировании адресов в защищенном режиме микропроцессора 80286 учитываются следующие моменты: система может адресоваться к памяти объемом до 16 Мбайт; виртуальные адреса не эквивалентны реальным (физическим) адресам памяти; программы могут работать с разделами, которые в момент обращения к ним не находятся в физической оперативной памяти (для этого их необходимо перебросить в память); различные прикладные программы могут обращаться к различным виртуальным адресным пространствам; существует защита памяти между операционной системой и прикладными программами.
Сущность организации памяти в защищенном режиме состоит в том, что содержимое регистра сегментов не определяет базовое значение физического адреса сегмента памяти, как это было в реальном режиме работы микропроцессора 80286.
Значение регистра сегментов в защищенном режиме — является указателем (селектором) для специальной таблицы. Эта таблица содержит полную информацию о распределении сегментов памяти в системе. Элемент таблицы, относящийся к одному сегменту, называется дескриптором сегмента.
На рис. 3 изображена схема, интерпретирующая значение селектора, которое содержится в регистре сегментов. Два младших бита селектора не играют роли при формировании физического адреса. Они используются только при реализации механизма защиты памяти (об этом будет сказано позже).
Регистр сегментов (селектор)
15 3 2 1 0
16-бит значение селектора
2 бита приоритета (уровень приоритета запроса-RPL)
Бит выбора таблицы глобальных дескрипторов (GDT)
Или таблицы локальных дескрипторов (LDT)
13-бит значение, которое служит для выбора одного из 8 Кbyte (8192) различных дескрипторов сегментов в соответствующей таблице дескрипторов (GDT или LDT)
Рисунок 3 – Cтруктура селектора
В системе имеются две различные таблицы для дескрипторов сегментов. Это таблица глобальных дескрипторов (GDT) и таблица локальных дескрипторов (LDT). Второй бит селектора определяет ту таблицу, к которой система должна обращаться по значению дескриптора сегмента. Напомним, что дескриптор сегмента содержит всю необходимую информацию для указания раздела физической памяти, к которому система будет обращаться.
На рис. 4 показано, как отыскивается дескриптор сегмента.
Индекс в таблице дескрипторов Второй бит значения селектора
Биты 15 ÷3: значение
селектора ооо
Выбор соответствующей
Таблицы дескрипторов
32
32 }элемент таблицы дескрипторов сегментов
24 (длина каждого элемента – 8 байт) –
24 дескриптор сегмента
16
16
8
8
0 0
GDT LDT
Таблица глобальных Таблица локальных
Дескрипторов дескрипторов
Рисунок 4 – Схема обращения к дескриптору сегмента
После того как выбрана соответствующая таблица, по значению 3÷15 бит селектора выбирается один из 8192 возможных дескрипторов сегментов. Длина дескриптора сегмента составляет 8 байт.
Таблица глобальных дескрипторов (GDT) обычно содержит информацию о сегментах памяти, которые используются всей системой вне зависимости от того, какая программа выполняется. Программные сегменты (сегменты, содержащие последовательность команд) операционной системы и сегменты данных операционной системы отыскиваются с помощью GDT. Дескрипторы тех программных сегментов, которые должны быть защищены друг от друга, обычно содержатся в различных таблицах локальных дескрипторов (LDT). МОС (например, операционная система OS/2) обычно создает отдельные элементы таблицы локальных дескрипторов для каждого набора программных сегментов, который необходимо изолировать от других наборов программных сегментов. В МОС для каждого процесса создается своя таблица локальных дескрипторов (LDT).
В защищенном режиме OS формируется 24-бит физический базовый адрес. Это 24-бит значение указывает адрес начала сегмента в физической памяти (???034 + жесткий диск) и содержит следующую информацию:
1. 24-битовое значение, определяющее базовый адрес физического сегмента и дающее возможность доступа к 16 Мбайт реальной физической памяти.
2. 16 бит значение, задающее смещение в сегменте (вплоть до 64 Кбайт).
3. Наличие или отсутствие в данный момент сегмента в физической памяти.
4. Было ли записано в регистр сегментов значение (селектора), соответствующее данному дескриптору. Если было записано, то к данному сегменту уже обращались.
5. Указание на вид сегмента, т.е. на программный сегмент, сегмент данных или специальный сегмент.
6. Если это программный сегмент (содержащий выполняемые команды), то содержится информация:
- может ли процессор считывать содержимое этого сегмента;
- является ли этот программный сегмент подчиненным.
7. Если это сегмент данных, то:
- может ли процессор записывать в него информацию;
- является ли его размер возрастающим или убывающим.
8. Информация о приоритете (DPL – уровень приоритета дескриптора).
Значение 16-бит смещения, являющегося второй составляющей полного 24-бит физического адреса, формируемого из текущего 24-бит значения дескрипторов, служит для определения окончательного реального (физического) адреса информации в памяти. Если считать, что размер сегмента увеличивается (в отличие от уменьшения размера сегмента, что характерно для стека), когда значение смещения превышает текущий размер сегмента, то процессор будет обращаться к области памяти, которая на самом деле не является частью данного сегмента. Так возникает особая ситуация, указывающая на то, что в программе возникла ошибка. В операционной системе есть возможность защиты от особой ситуации при обращении из программы к памяти.
Для этого в селекторе и дескрипторе сегмента содержится необходимая защитная информация. Для повышения эффективности работы системы необходимо сделать так, чтобы адресация выполнялась по упрощенной схеме. Для этого служат кэш-регистры (рис. ?) Процессор запоминает в своей вспомогательной памяти значение дескриптора текущего сегмента, выбранное с помощью селектора из соответствующей таблицы дескрипторов (GDT или LDT)). При такой организации адресации к памяти процессору не надо каждый раз обращаться к таблицам дескрипторов до тех пор, пока не изменится значение регистра сегментов, т. е. не произойдет смена текущего сегмента памяти.
Во вспомогательной памяти процессор хранит также текущие адреса и размеры таблиц GDT и LDT.
Каждому процессу, работающему со своим виртуальным адресным пространством, операционная система OS/2 в защищенном режиме выделяет свою часть таблицы локальных дескрипторов (LDT). Адрес, по которому программа обращается к памяти через регистр сегментов, в данном случае не имеет абсолютно никакого соответствия с реальным адресом используемых данных.
Если необходимый сегмент отсутствует в памяти, то система может узнать об этом по содержимому дескриптора этого сегмента. В том случае, когда программа использует регистр сегментов, значение селектора которого указывает на отсутствующий в памяти сегмент, процессор обрабатывает это событие как особую ситуацию с помощью операционной системы. При этом система определяет, где на диске находится необходимый сегмент, переписывает его в реальную память и изменяет содержимое дескриптора данного сегмента, чтобы система знала, что теперь этот сегмент находится в реальной памяти. Если процессору требуется освободить место в памяти для размещения сегмента, то он может перебросить некоторые сегменты на диск. Выбор сегмента, подлежащего удалению из реальной памяти, осуществляется операционной системой, как правило, по алгоритму LRU (Least Recently Used). При поиске наиболее долго не используемого сегмента операционная система использует информацию, содержащуюся в таблице дескрипторов.
Другое отличие реального и защищенного режимов работы системы состоит в том, что в защищенном режиме сегменты могут быть различного размера. В реальном режиме размер всех сегментов составляет 64 Кбайт. В защищенном режиме программы могут определять такой размер каждого сегмента памяти, какой необходим для их работы. Это позволяет экономно использовать реальную память системы и виртуальную память на диске. Кроме того, если в программе возникает ошибка и она адресуется при этом к памяти вне адресного пространства текущего сегмента, то генерируется особая ситуация и операционная система сразу узнает об этом.