Кроме того, сегмент с запрещенной записью не нужно передавать на диск (если его все же нужно удалить из памяти), так как после передачи его с диска в оперативную память он не изменялся. Следовательно, ограничения на доступ по записи повышает эффективность системы виртуальной памяти, сокращая дисковые передачи.
P (Present) – бит присутствия сегмента в оперативной памяти: (P = 1 ® присутствует, P = 0 ® отсутствует).
В первом случае проверяются: условие нахождения задаваемого адреса в пределах выбираемого сегмента, т.е., что бы смещение в сегменте (эффективный адрес) было меньше значения предела сегмента, указанного в дескрипторе, а также соответствие выбранного сегмента (исполнительный, исполнительный считываемый, данных только считывания, данных считывания и записи, стека) запрашиваемому сегменту. Так, например, при загрузке селектора в сегментный регистр данных (т.е. в DS, ES, FS, и GS) тип дескриптора должен разрешать считывание из сегмента. Только исполняемые сегменты для этих регистров не допускаются, но сегменты с разрешенными операциями исполнения и считывания допустимы. В случае загрузки селектора в сегментный регистр SS в дескрипторе соответствующего сегмента должны быть разрешены операции считывания и записи. При загрузке регистра CS сегмент должен быть обязательно исполняемым. Кроме этого проверяются и некоторые другие условия. Если же хотя бы одна из этих проверок не удовлетворяется, то формируется запрос прерывания (особый случай) и загрузка селектора не производится.
После этого формируется линейный (физический) адрес путем сложения базового адреса выбранного сегмента со смещением в сегменте, формируемом в соответствии с типом адресной части команды.
Если же P = 0, в дескрипторе выделяется базовый адрес сегмента и вызывается внешняя память (винчестер). Затем, по этому базовому адресу выбирается требуемый сегмент, расположенный на винчестере, и перезаписывается на свободное место в оперативной памяти. После этого адрес, по которому этот сегмент записан в оперативную память, заносится в дескриптор на место, предназначенное для хранения базового адреса, атрибуту P присваивается значение 1 и этот дескриптор инициируется заново. Если же свободного места в оперативной памяти в данное время нет, то по атрибуту А определяется сегмент, к которому было меньше всего обращений, и он передается во внешнюю память (винчестер) на свободное место. После этой передачи, адрес, по которому данный сегмент записался на винчестер, заносится в дескриптор данного сегмента на место размещения базового адреса сегмента, а его атрибут P устанавливается в нулевое состояние. Затем на освободившееся место оперативной памяти считывается с диска требуемый сегмент по алгоритму, описанному выше.
При включенной страничной организации памяти, линейный адрес формируется аналогично, но свопинга (т.е. обмена информацией между ОЗУ и внешней памятью) на уровне сегментов не происходит. В элементе таблицы страниц также есть бит P, который определяет наличие страницы в оперативной физической памяти. При обращении к странице, в элементе которой P = 0, реализуется особый случай (исключение) страничного нарушения, при котором операционная система осуществляет:
- Копирование в ОЗУ запрашиваемой страницы из внешней
памяти (винчестера);
- Установку P = 1 и запись в элемент таблицы страниц нового адреса
страницы в ОЗУ;
- Стирание копии старого элемента в таблице страниц в буфере TLB;
- Рестарт команды, вызвавший особый случай.
Таким образом, байт прав доступа сегментов кодовых отличается от байта прав доступа сегментов данных и стека 1 и 2 битом, которые имеют для того и другого типов сегментов принципиально различное значение. Остальные же биты байта прав доступа сегментов этого типа выполняют одинаковые функции.
Дескрипторы системных сегментов.
К этому типу дескрипторов относятся:
· Дескрипторы LDT (LocalDescriptorTable – локальные таблицы дескрипторов).
· Дескрипторы TSS (TaskStateSegment) – сегменты состояния задач.
Общий вид структуры дескрипторов этого типа представлен на рисунке III.6.
63 Байт 7 Байт 6 48 47 Байт 5 Байт 4 32
Базовый адрес сегмента (биты 31…24) |
G D 0 U |
Предел сегмента (биты 19…16) |
Байт прав доступа (AR) |
Базовый адрес сегмента (биты 23…16) |
Базовый адрес сегмента (биты 15…0) |
Размер (предел) сегмента (биты 15…0) |
31 Байт 3 Байт 2 16 15 Байт 1 Байт 0 0
Рис.III.6 Формат дескриптора системных сегментов МП семейства х86
Дескрипторы системных сегментов отличаются от дескрипторов кода и данных только байтом прав доступа, а именно, его четырьмя младшими битами. Остальные биты выполняют те же функции. Формат байта прав доступа этих дескрипторов приведен на рисунке III.7.
7 6 5 4 3 2 1 0
P |
DPL |
S |
T Y P E |
Рис.III.7 Формат байта прав доступа системных сегментов.
Заметим сразу же, что поскольку описываются системные сегменты, то бит S (System), всегда будет равен нулю. Отметим также, что поскольку все системные объекты должны всегда находиться в физической оперативной памяти, то бит A у них отсутствует.
Поле уровня привилегий DPL используется только в дескрипторах сегментов состояния задач. Поскольку обращение к дескрипторам LDT возможно только по привилегированным командам, поле DPL для дескрипторов таблиц не используется.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.