Дескрипторы и таблицы

Дескрипторы представляет собой 8-байтные структуры данных, содержащих параметры сегментов. Дескриптор определяет положение сегмента в памяти, величину сегмента в байтах (лимит), его назначение и характеристики защиты. Все дескрипторы хранятся в таблицах, обращение к которым поддерживается процессором аппаратно. Число элементов в таблице колеблется от 1 до 8192. Каждую таблицу адресует соответствующий регистр. Команды загрузки регистров таблиц LGDT, LIDT и LLDT являются привилегированными (выполняются только на уровне привилегий 0).

Глобальная таблица (GDT) содержит дескрипторы, доступные всем задачам. Она может содержать дескрипторы любых типов, кроме дескрипторов прерываний и ловушек. Нулевой элемент этой таблицы процессором не используется.

Локальная таблица (LDT) может быть собственной для каждой задачи и содержит только дескрипторы сегментов, шлюзы задач и вызовов. Сегмент недоступен задаче, если его дескриптора нет в текущий момент ни в GDT, ни в LDT.

Таблица дескрипторов прерываний, используемая в защищенном режиме, может содержать описания до 256 прерываний. Ссылка на элементы IDT происходит по командам INT, аппаратным прерываниям и исключениям процессора.

Дескрипторы сегментов кода и данных определяют базовый адрес, размер сегмента, права доступа (чтение, чтение/запись, только исполнение кода или исполнение/ чтение), а для систем с виртуальной памятью еще и присутствие сегмента в физической памяти (рисунок 3.10 и 3. 11)

31 13 12 0

Базовый адрес сегмента данных
Размер сегмента G B AVL P DPL E W A

Атрибуты сегмента

Рисунок 3.10– Дескриптор сегмента данных

 

В атрибутах сегментов поля имеют следующее назначение:

Ÿ A (Accessed) – обращение. А=0– к сегменту не было обращения, А=1– селектор данного сегмента загружался в регистр сегмента или для него выполнялась команда тестирования;

Ÿ W (Writeable) – разрешение (W=1) или запрет (W=0) записи данных в сегмент;

Ÿ Е (Expand Down) –направление расширения, Е=0– вверх, Е=1– расширение вниз (стек, у которого смещение должно превышать значение лимита);

Ÿ DPL (Descriptor Privilege Level) –привилегии сегмента;

Ÿ Р (Present) – присутствие в памяти. При Р=1 сегмент отображен в физической памяти, при Р=0 отображения нет;

Ÿ В – определяет верхнюю границу сегмента, при В=0 – 64 Кбайт, при В=1 максимальный размер сегмента 4 Гбайт.

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

Ÿ С (Conforming, подчиненность или конформность). при С=1 команда может исполняться, если уровень привилегий (CPL) не ниже уровня привилегий дескриптора (DPL), при С=0 (неподчиненный сегмент) управление к данному сегменту может передаваться только, если CPL=DPL;

Ÿ R (Readable) – разрешение (R=1) или запрет (R=0) чтения сегмента.

Ÿ Бит D (Default Operation Size) в предпоследнем байте определяет разрядность адресов и операндов при D=0 – 16 бит, D=1 – 32 бит.

Переключение задач

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

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

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

Дескриптор шлюза задачи содержит селектор, указывающий на дескриптор TSS.

Каждая задача имеет TSS. Сегменты TSS содержат образы регистров процессора, раздельные указатели стеков для уровней привилегий 0, 1 и 2, а также обратную ссылку на селектор TSS вызвавшей задачи. Свободное поле TSS может использоваться по усмотрению ОС. Последним элементом TSS должен быть байт OFFh

Карта разрешения ввода/вывода (I/O Permission Bit Map), расположенная в конце TSS имеет по одному биту на каждый адрес портов ввода/вывода. Разрешению обращения соответствует нулевое значение бита. Максимальный размер таблицы (2000h), соответствующий всем 64 Кбайт адресов. Порты с адресами, не попавшими в таблицу, считаются недоступными.

Текущий сегмент TSS идентифицируется специальным регистром задачи TR (Task Register). Этот регистр содержит селектор, ссылающийся на дескриптор текущего TSS. Программно-невидимые регистры базового адреса и лимита, связанные с TR, загружаются при загрузке в TR нового селектора.

Страничное управление памятью

Страничное управление (Paging) является средством организации виртуальной памяти с подкачкой страниц по запросу (Demand-Paged Virtual Memory) и оперирует с памятью, как с набором страниц одинакового размера. В момент обращения страница может присутствовать в физической оперативной памяти, а может быть выгруженной на внешнюю (дисковую) память. При обращении к выгруженной странице памяти процессор вырабатывает исключение #PF — отказ страницы, и программный обработчик исключений выполняет свопинга — «подкачку» отсутствующей страницы с диска. Страницы не имеют прямой связи с логической структурой данных или программ.

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

Рисунок 3.12 – Сегмент состояния задачи

В первых моделях 32-разрядных процессорах (начиная с 80386) размер страницы составлял 4 Кбайт, Начиная с Pentium, страницы увеличились до 2 Мбайт, а затем и до 4 Мбайт с 36-битной физической адресацией (режим PSE-36).

Базовый механизм страничного управления использует двухуровневую табличную трансляцию линейного адреса в физический (рисунок 3.13). и включается установкой бита PG=1 в регистре CRO. Механизм имеет три части: каталог страниц (Page Directory), таблицы страниц (Page Table) и собственно страницы (Page Frame).

Каталог страниц размером 4 Кбайт содержит 1024 32-битных строки PDE (Page Directory Entry), Каждая строка (рисунок 3.14, а) содержит 20 старших бит адреса таблицы следующего уровня (младшие биты этого адреса всегда нулевые) и признаки (атрибуты) этой таблицы. Индексом поиска в каталоге страниц являются 10 старших бит линейного адреса (А22-А31). Физический адрес каталога страниц (Page Directory Physical Base Address) хранит регистр CR3. Его младшие 12 бит всегда нулевые (каталог выравнивается по границе страницы) Каждая таблица страниц также имеет 1024 строки РТЕ (Page Table Entry) аналогичного формата (рисунок 3.14,б), содержащих базовый физический адрес (Page Frame Address) и атрибуты самих страниц. Индексом поиска в таблице являются биты А12-А21 линейного адреса.

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

процессор введен буфер ассоциативной трансляции TLB (Translation Look aside Buffer) который хранит интенсивно используемых строк таблиц.

 

 

Рисунок 3.13 – Базовый механизм страничной переадресации

 

В процессорах TLB представляет собой четырехканальный наборно-ассоциативный кэш на 32 строки таблиц трансляции. Такой размер позволяет хранить информацию о трансляции 128 Кбайт памяти, что дает коэффициент кэш-попаданий 98%, то есть только 2% обращений к памяти требуют дополнительных обращений к таблицам. В процессоре Pentium имеются раздельные TLB для инструкций и данных, а в Р6 буферы разделены еще и по размеру обслуживаемых страниц (4 Кбайт и 2 Мбайт/4 Мбайт).

31 12 11 9 8 7 6 5 4 3 2 1 0

  Базовый адрес таблицы страниц   OS Rez   G   Р S     А Р С D Р W Т U / S R / W   Р

а)

31 12 11 9 8 7 6 5 4 3 2 1 0

  Базовый адрес страницы (PFA)   OS Rez   G     D   А Р С О Р W Т U / S R / W   Р

в)

Рисунок 3.14. – Структура 32-битных элементов страничного преобразования: а – строка каталога (РDЕ), б – строка таблицы (РТЕ)

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

Обработчик исключения #PF, подкачивает страницы по запросу. Он копирует страницу с внешней памяти в оперативную, загружает адрес страницы в строку таблицы TLB и устанавливает бит присутствия Р.

 

 

Лекция 9








Дата добавления: 2016-02-24; просмотров: 3618;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.014 сек.