- •Адресация памяти в защищенном режиме.
- •Привилегии и защита памяти защищенного режима
- •Сегментно-страничная адресация памяти
- •Вызов процедур и задач
- •Прямой вызов подпроцедур
- •Вызов задач (многозадачность)
- •Обработка прерываний в защищенном режиме
- •Кэширование в м/п Intel
- •История ос
- •Функции ос
- •Классификация ос
- •Мультипрограммирование и мультипроцессирование
- •Структуры ос
- •Средство межпроцессорных взаимодействий ipc
- •Очередь
- •Средства синхронизации
- •Планирование и диспетчеризация потоков(процессов)
- •Алгоритмы планирования для систем разделения:
- •Приоритетное планирование:
- •3. Системы реального времени.
- •Алгоритмы замещения страниц
- •Учет свободного и занятого пространства памяти.
- •Системы управления ввода-вывода.
- •Отказоустойчивые системы хранения
Привилегии и защита памяти защищенного режима
В защищенном режиме м/п может работать на одном из 4х уровней привилегий: 0й – наиболее привилегированный, 3й – менее привилегированный. Пользовательские программы работают как правило на 3м уровне, а ОС на 0м.. Различия этих уровней состоят в следующем:
1) на 3м уровне запрещено выполнять команды ввода-вывода (работа с портами In, Out), команды установки и очистки флагов прерываний Sti,Sli, программы команды прерываний (Int), кроме того жизненно важных для м/п команд, таких как остановка, команды работы с управляющими регистрми – можно выполнить только на 0м уровне привилегий, все команды MOV, в которых приемником является какой-либо управляющий регистр, также могут бытть выполнены только на 0м уровне.
2) привилегии используются для доступа к сегментам памяти. Для этого м/п оперирует следующими величинами:
- DPL – приоритет сегмента задан в его дескрипторе
- CPL – текущий уровень выполнения процесса (обычно равен DPL), код сегмента, из которого будет загружена выполняющаяся в данный момент процедура
- RPL – уровень приоритета адреса в селекторе
- EPL=max{CPL,RPL} (Effective Priority Level)
В зависимости от того, к какому типу сегмента осуществляется обращение, эти величины используются по-разному:
1) сегмент данных: при доступе к сегменту данных м/п выполняется следующая процедура EPL<=DPL
2) сегмент стека: для каждого уровня привилегий в системе существует свой стек, поэтому каждая процедура может обращаться только к стеку своего уровня CPL=DPL
3) сегмент кода: самые сложные проверки осуществляются к доступу сегмента кода, при это учитывается является ли код сегмента подчиненным или нет. Если код сегмента является подчиненным, то выполняется проверка: C=0:CPL=DPL, т е процедура может вызвать другую процедуру из другого сегмента, только если их уровни привилегий равны; C=1: CPL>=DPL, но вызываемая процедура будет выполнена на уровне CPL.
Т е с помощью подчиненных сегментов прикладной процедуры можно вызвать процедуры ОС, но выполнятся они будут на текущем уровне. В регистре флагов появляются 3 бита, определяющие на каком уровне привилегий разрешается выполнять операции ввода-вывода. (рис)
Сегментно-страничная адресация памяти
Сегменты имеют произвольную длину (до 4Мб). Виртуальная память реализуется на уровне сегментов. Это приводит к 2м проблемам: большое время загрузки и выгрузки сегмента. Фрагментация памяти (рис)
Сегменты стали разбивать на небольшие страницы фиксированной длины. В больших системах сегмент имеет различные ??? и виртуальная память реализуется уже не на уровне целого сегмента, а на уровне отдельных страниц. Но для того, чтобы учитывать какие страницы выгружены из памяти, а какие размещены в памяти, по каким адресам не нужно дополнительной структуры данных – дескрипторы страницы ???
Дескриптор страницы занимает 4Кб (рис)
20 бит – под адрес начала страницы, 12 бит – под атрибуты страницы.
Р определяет расположена страница в памяти или нет
А используется для оценки частоты обращаемых страниц
U/S определяет какая это страница (пользовательская или системная)
R/W определяет предназначена страница только для чтения
D – грязная страница или нет. При загрузке страниц в память этот бит обнуляется, а при каждой записи устанавливается в 1цу. Т о показывается была ли изменена страница за время нахождения в памяти. Если страница ??? выгрузке, то ОС сначала проверяет бит D. Если D=1, значит страница изменена и эти изменения требуется сохранить на диск, если за время нахождения страницы в памяти нет изменений, тои перезаписывать не надо.
В Intel принята 2хуровневая структура таблиц страниц. Каждая таблица страниц занмает размер в 1 страницу, т е содержит 1024 дескриптора. И таких страниц 1000. (рис)
CR3 – адрес начала страницы, т е здесь – в управляющем регистре – при страничной организации хранится адрес начала каталога страниц.
Преобраз??? Виртуальный адрес физически при страничной организации, адрес полученный путем сложения базового адреса начала сегмента и дескриптора сегмента и смещения уже не является физическим адресом и называется линейным. (рис)
???
Трансляция линейного адреса физически осуществляется следующим образом: из управляющего регистра CR3 считывается адрес начала каталога, к этому адресу добавляется N элемента каталога из линейного адреса *4, в результате получается адрес дескриптора каталога, описывающего нужную таблицу страниц. Из этого дескриптора извлекается адрес начала страницы, содержащей таблицу страниц, и к этому адресу добавляется N элемента таблицы страниц*4, в результате получаем адрес дескриптора в таблице страниц, описывающего требуемую нам страницу. Из этого дескриптора извлекается адрес начала страницы (или байта???). При чтении дескриптора страницы проверяется находится ли страница в памяти. Т о при страничной организации памяти используется уже не 2, а 3 адресных пространства:
ВА: селектор смещения – линейный адрес пространства
LA: ВА + смещение – физический адрес пространства
FA: 32р адрес