Управление памятью в микропроцессорах семейства Х86, страница 4

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

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 для дескрипторов таблиц не используется.