Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Answers.docx
Скачиваний:
25
Добавлен:
16.09.2019
Размер:
394 Кб
Скачать
☆

2. 34 Защита памяти. Уровни привилегий. Особенности защиты сегментов данных, стеки, кода и устройств ввода / вывода

2. 34 ЗАХИСТ ПАМ’ЯТІ. РІВНІ ПРИВІЛЕЇВ. ОСОБЛИВОСТІ ЗАХИСТУ СЕГМЕНТІВ ДАНИХ, СТЕКУ, КОДУ ТА ПРИСТРОЇВ ВВЕДЕННЯ/ВИВЕДЕННЯ.

   Под защитой памяти понимается система правил, которые на аппаратном уровне регламентируют доступ к данным и командам в памяти в зависимости от их уровня защищенности и уровня привилегированности.

В микропроцессоре реализовано 4 уровня привилегий:

-0 - высший; -1; -2; -3 - низший.

 

Защита памяти имеет дело с такими понятиями:

DPL (Descriptor Privilege Level) – уровень привилегированности сегмента. Находится в байте доступа дескриптора сегмента (биты 5-6). RPL (Request Privilege Level) – запрашиваемый уровень привилегий. Находится в сегментном регистре (биты 0-1). CPL (Current Privilege Level) – текущий уровень привилегий. Хранится в поле RPL регистра сегмента кода (CS).

 

Правила зашиты памяти:

1. Доступ к сегментам данных: max (CPL, DPL) <= DPL. Если принять CPL=RPL, то CPL <= DPL. Т.е. уровень привилегий текущей задачи должен быть не ниже уровня привилегий необходимого сегмента данных.

2. Доступ к сегментам стека: CPL=RPL=DPL. Т.е. можно обращаться только к стеку с таким же уровнем привилегий, как и у текущей задачи.

3. Доступ к сегментам кода: Для доступа к сегментам кода используются межсегментные команды JMP, CALL, RET. а). Всегда одна программа может вызвать другую, если они находятся в одном кольце защиты. б). Никогда программа с более высоким уровнем привилегий не может вызвать программу с более низким уровнем привилегий. Только в многозадачном режиме программа любого уровня может вызвать программу любого другого уровня. в). Кроме двух описанных ниже случаев, программа с более низким уровнем привилегий не может вызвать программу с более высоким уровнем привилегий: - вызов подчиненных программ (т.е. программ, которые имеют бит С=1 в байте доступа). Поле CPL не меняется. - вызов программ через шлюз вызова. Допускается доступ не ко всей программе, а только к определенной разрешенной точке программы. Эта точка называется шлюзом. При этом программа будет работать на более высоком уровне привилегий.

 

Правила доступа для шлюзов:

Max (CPL, RPL) <= DPL шлюза. Но CPL >= DPL вызываемой программы.

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

2.35. АПАРАТНІ ЗАСОБИ ПІДТРИМКИ БАГАТОЗАДАЧНОЇ РОБОТИ МІКРОПРОЦЕСОРА. СТРУКТУРА АБЛИЦІ СТАНУ ЗАДАЧ. АЛГОРИТМИ ТА МЕХАНІЗМИ ПЕРЕКЛЮЧЕННЯ ЗАДАЧ.

 

Многозадачность имеет следующие аппаратные средства поддержки:

1. Каждая задача должна иметь свой сегмент состояния TSS (Task State Segment):

31                                                            16

15                                                              0

0

Селектор возврата

ESP0

 

SS0

ESP1

 

SS1

ESP2

 

SS2

CR3

 

EIP

EFLAGS

EAX

ECX

EDX

EBX

ESP

EBP

ESI

EDI

0

ES

0

CS

0

SS

0

DS

0

FS

0

GS

0

Селектор LDT

Относительный адрес БКВВ

0

T

Информация ОС

Базовая карта ввода/вывода (БКВВ)

Минимальный размер TSS – 104 байта. Последние две строки – необязательная информация. Бит Т – бит трассировки. Селектор возврата содержит селектор той задачи, которая вызвала данную по команде CALL. Содержимое регистров МП, которое хранится в TSS данной задачи, называется контекстом задачи.

2. Каждый TSS должен иметь свой дескриптор.

Формат байта доступа дескриптора TSS:

7

6

5

4

3

2

1

0

P

DPL

0

1

0

B

1

Если задача была вызвана, то B(Busy)=1. Если B=1, то задачу вызвать нельзя. Поэтому рекурсивный вызов задач невозможен.

3. Регистр задач TR (Task Register): в нем хранится селектор TSS текущей задачи. Механизм переключения задач: Переключение задач осуществляется межсегментными командами JMP, CALL, IRET. JMP <селектор> <смещение> CALL <селектор> <смещение> 1. Микропроцессор (МП) из регистра TR определяет адрес TSS текущей задачи и переписывает в TSS содержимое регистров текущей задачи (контекст задачи). 2. Для команд JMP и CALL МП берет селектор из команды, а для команды IRET – селектор из поля возврата TSS. Селектор загружается в регистр TR => текущей становится новая задача. 3. По селектору МП находит в памяти TSS новой задачи. Из TSS МП загружает регистры новым содержимым. Это называется переключением контекста задачи. 4. Поле <смещение> не используется. 5. В новой задаче устанавливается бит B(Busy)=1. Если была команда JMP или IRET, то бит В предыдущей задачи сбрасывается. При CALL – не сбрасывается (т.к. задача не может вызвать саму себя). Рекурсия запрещена, т.к. каждая задача имеет только один TSS. При рекурсии мы потеряем старое содержимое TSS. Но внутри задачи рекурсия разрешена. 6. В регистре CR0 есть бит TS (Task Switched). При любом переключении задач бит TS устанавливается в 1. Если при этом встретится программа сопроцессора, то вызывается исключение №7 (FPU недоступен). Бит TS аппаратно не сбрасывается. Поэтому каждая задача должна сама сбрасывать бит TS. 7. При выполнении команды CALL устанавливается бит NT (Nesting Task) в поле регистра флагов TSS. Если NT=1, то команда IRET выполняет действия, описанные выше. Если NT=0, то IRET выполняется обычным образом.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]