Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Механизмы аппаратной поддержки операционных систем. Учебное пособие
.pdf
Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Алгоритмы диспетчеризации
Существует множество алгоритмов диспетчеризации, то есть
методов принятия решений о выборе очередного процесса для
исполнения. Эти алгоритмы учитывают квант времени исполнения и
приоритет процесса.
«Приоритет процесса» – это присвоенный процессу числовой код,
характеризующий «значимость» процесса. Чем выше приоритет
процесса, тем меньше времени он должен проводить в очереди Готовых
процессов
Специфика алгоритмов с квантованием может состоять в
следующем:
- кванты могут быть одинаковыми или различными для разных
процессов;
- кванты могут быть фиксированными или переменными в течение
жизни процесса. Процессы, не использовавшие выделенный квант,
получают или не получают временную компенсацию при последующем
исполнении.
В современных многозадачных операционных системах Диспетчер
процессов может оперировать не только с процессами
(«многопроцессность»), но и с «потоками» внутри них
(«многопоточность»).
«Потоком» называют некоторый участок кода процесса, который
можно включить самостоятельно в многозадачность. По умолчанию,
любой процесс – это один поток.
Разработчик приложения под многозадачную ОС имеет
возможность в исходной программе выделить в своей задаче участки
кода («потоки»), выполнение которых можно распараллелить.
21

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
4. Принципы управление памятью
Управление ресурсом памяти выполняет модуль диспетчер
(менеджер) памяти. В функции диспетчера памяти входит выделение
оперативной памяти процессам и учет свободной и занятой памяти.
При управлении памятью могут применяться статические или
динамические методы управления. Статические методы просты и могут
быть реализованы полностью программно. Для реализации
динамических методов управления требуется наличие аппаратной
поддержка от процессора.
Статические методы управление памятью
Суть статических метод состоит в том, что загружаемые
программы полностью размещаются в памяти, пока хватает
оперативной памяти. Память освобождается только при полном
завершении исполнения программы.
Методы статического управления памятью можно
классифицировать так: «фиксированные разделы», «переменные
разделы» и «переменные перемещаемые разделы».
Метод фиксированных разделов. Операционная система
предварительно делит часть оперативной памяти, предназначенную для
загрузки программ, на участки - «разделы» фиксированного размера.
Рис.8 – Фиксированные разделы памяти
В каждом разделе размещается только один процесс и занимает
его до своего завершения, тогда раздел освобождается. Разделы
заполняются загружаемыми программами, пока есть свободные (рис.8).
Достоинством метода является крайняя простота реализации. Все
остальное можно отнести к недостаткам:
22

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
- количество загружаемых в память задач ограничено количеством
разделов
- неэффективное использование памяти, поскольку любая малая
по объему программа занимает весь раздел
- фиксированный размер раздела ограничивает предельный размер
загружаемой программы.
Метод переменных разделов. Предварительное деление памяти на
разделы одинакового размера не производится. «Раздел» памяти
выделяется программе при загрузке по ее фактическому размеру.
Кажется, что при таком подходе память используется более
эффективно, поскольку каждой программе выделяется раздел
соответствующего размера (рис.9а). Однако, после завершения
исполнения нескольких программ и их выгрузки в памяти будет иметь
место чередование занятых и свободных разделов (рис.9б).
Это называется «фрагментация памяти».
Рис.9 – Фрагментация памяти после завершения исполнения
программ
Степень фрагментации будет с течением времени все
увеличиваться. Фрагментация памяти создает большие проблемы с
выбором места в памяти для загрузки очередной программы. В
совокупности свободного места в памяти может быть много, а загрузить
программу некуда – нет достаточного по размеру свободного раздела.
Метод переменных перемещаемых разделов. Представляет собой
тот же способ выделения памяти для загружаемых программ, но с
мерами борьбы с фрагментацией памяти.
23

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Периодически операционная система будет организовывать
дефрагментацию памяти. Это потребует временной приостановки
исполнения программ процессором.
Для дефрагментации сначала производится объединение смежных
свободных разделов в один (рис.10а), и затем перемещение текущих
процессов в другое подходящее место памяти, так чтобы по
возможности создать единый непрерывный участок свободной памяти
(рис.10б).
Рис.10 – Борьба с фрагментацией памяти
Перемещение разделов с исполняемыми программами в одно
место памяти называют «сборкой мусора». Этот процесс потребует
приостановки исполнения программ на некоторое время.
Решение проблемы нехватки оперативной памяти при
статическом управлении.
Как размещать программу при статическом управлении памятью,
если она превышает размер раздела? Часть решения этой задачи
возлагается на программиста. Он должен спланировать исходную
структуру программы, как оверлейную (overlay) структуру.
Суть «оверлейной» структуры программы состоит в следующем.
Программа должна состоять из Главного модуля и нескольких простых
модулей. Каждый модуль должен иметь размер не более 1/2 размера
раздела. Данные надо размещать только в Главном модуле и передачу
управления между простыми модулями надо организовать только через
Главный модуль (рис.11).
24

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Тогда при загрузке операционной системой программы
оверлейной структуры в памяти всегда можно держать только два
модуля: Главный модуль и один из простых модулей.
Остальные простые модули операционная система будет
последовательно загружать на место исполненного простого модуля.
Рис.11 – Оверлейные методы
Динамические методы управления памятью
Современный способ динамического управления памятью
операционной системой реализуется только при наличии аппаратной
поддержки управления памятью со стороны процессора.
Динамические методы управления памятью снимают основные
проблемы статических методов и создают возможность реализации в
операционной системе многозадачного режима исполнения программ.
Становится возможным организовать исполнение практически
любого количества программ в условиях ограниченного объема
оперативной памяти. При этом, не накладывая ограничений на размер
программы.
Суть динамического управления памятью состоит в следующем.
1) Любая программа должна быть изначально «сегментирована»,
то есть, представлена в виде одного или нескольких отдельных блоков.
В этом случае появляется возможность загрузки в память не
монолитной программы, а отдельных ее блоков - независимо друг от
друга. Это создает для операционной системы свободу маневра при
поиске места размещении программного кода в памяти.
2) В оперативную память ограниченного размера можно будет
загружать лишь небольшое количество блоков от разных процессов.
При необходимости исполнять код из других программных блоков
программы, их загрузку в память выполнять только в обмен на выгрузку
какого-либо программного блока из памяти в файл на жестком диске.
25

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
Такую операцию называют «свопинг» (swapping) или «подкачка»
программных блоков.
Реализация механизма подкачки программных блоков создает
основу для многозадачного режима исполнения с неограниченным
количеством программ.
Динамические методы управления памятью реализуются в
основном, тремя вариантами решений. Они называются «модели»
управления.
Сегментная модель
Суть сегментного метода управления памятью сводится к
следующему.
1) Загружаемый в память программный объект должен быть
представлен, как один или нескольких блоков («сегментов»)
произвольного размера.
Сегментную структуру исходной программы планирует сам
программист или система программирования, в которой программа
создается. Обычно, планирование сегментной структуры программы
делает программист, если он пишет низкоуровневую программу на
языке ассемблера. При программировании на языках высокого уровня
это решение по умолчанию принимает компилятор, но позволяет влиять
на эти решения через настройки.
2) Для обращения к ячейке памяти процессор требует
программного указания адреса памяти в виде двух величин: указателя
на сегмент и внутрисегментного смещения в байтах.
Рис.12 – Сегментная адресация памяти
26

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
По значению указателя сегмента процессор определит адрес
загрузки сегмента в памяти и прибавит к нему внутрисегментное
смещение. Это будет физический адрес памяти, куда должно
происходит обращение. Он будет выставлен на шину адреса процессора
перед обращением.
Способ, которым процессор определяет адрес размещения
программного сегмента в памяти по его «указателю» зависит от режима
работы процессора.
Деление программы на сегменты позволяет операционной
накладывать на программные сегменты различные ограничения доступа
в режимах процессора, поддерживающих механизмы защиты.
Недостаток у сегментного способа управления один – это разные
размеры программных сегментов. Что приводит к следующим
последствиям:
- подкачка памяти сегментами усложняет операционной системе
поиск подходящего по размеру сегмента для выгрузки из памяти;
- подкачка сегментов разных размеров приводит к росту
фрагментации памяти.
Эти проблемы решаются, если унифицировать размер
программных блоков, на которые должна делиться программа. Именно
это и предусмотрено при страничном управлении памятью.
Страничная модель
Суть страничного управления памятью – возможность
манипулировать с программными блоками одинакового размера.
Поскольку ни сам программист, ни компилятор на уровне исходного
текста программы не смогут разделить ее на блоки одинакового объема
в байтах, эта задача возлагается на операционную систему.
Суть страничного управления состоит в следующем.
1) Исходный текст программы сегментироваться не должен. Это
всегда один сегмент. Программный адрес байта – это только
внутрисегментное смещение: 0, 1, 2. …и т.д.
2) Операционная система «делит» всю наличествующую
оперативную память на небольшие блоки одинакового размера –
«страницы» (page). Размер страницы выбирается, исходя из объема
оперативной памяти. Типовые размеры страницы – 4 Кб или 4 Мб.
«Страницы» физической памяти принято называть «страничный кадр»
(page frame).
27

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
3) Исполняемый код программы при загрузке в память
операционная система делит на «программные страницы» (code page)
аналогичного размера. Каждая программная страница кода размещается
в некоторой свободной физической странице памяти.
4) Для процессора операционная система ведет Таблицу
дескрипторов программных страниц. В дескриптор программной
страницы она записывает номер физической страницы, где код
программной странички размещен.
5) При включенной страничной адресации процессор будет
рассматривать программный адрес, как состоящий из двух полей: «№
страницы» и «смещение в странице (в байтах)». Размер этих полей
будет зависеть от разрядности программы и унифицированного размера
страницы.
Пример. Допустим, программы 16-разрядные и размер страницы
составляет 1 Кб. Как должен интерпретироваться 16-разрядный
программный адрес процессором?
Диапазон «смещений» в странице размером 1 Кб составляет от 0
до 1023. Следовательно, необходимый размер поля «смещение в
странице» должно быть 10 бит, тогда на «№ страницы» остается 6 бит.
Рис.13 - Пример интерпретации 16-разрядного адреса
28

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
На рисунке 13 показаны внутрисегментные адреса 16-разрядной
программы. Старшие 6 бит программного адреса будут являться
номером страницы, а младшие 10 бит – байтовым смещением в ней.
6) Определение процессором физических адресов памяти из
программных адресов.
По номеру программной страницы (Р) процессор найдет в Таблице
страниц ее дескриптор. В дескрипторе записан номер физической
страницы, где размещена данная программная страничка.
По номеру физической страницы процессор вычисляет ее адрес в
памяти: № физической страницы * размер страницы. К вычисленному
адресу начала страницы прибавляет смещение в странице.
В результате получается физический адрес байта в памяти, по
которому процессор будет производить обращение (рис.14).
Рис.14 - Страничная адресация
Страничная адресация позволяет преодолеть недостаток
сегментной адресации, однако порождает собственные недостатки.
Чем меньше размер унифицированной страницы, тем чаще
операционной системе придется инициировать «подкачку» страниц
между дисковым файлом и памятью. Что нагружает систему и снижает
ее производительность.
29

Ларина Т.Б. Механизмы аппаратной поддержки операционных систем
При увеличении размера страницы будут возникать ощутимые
потери памяти на последней странице каждой программы. Для любого
программного кода в памяти будет выделяться целое количество
страниц. Следовательно, его последняя физическая страница памяти не
будет использована полностью, в среднем только на 50%.
Сегментно-страничная модель
Сложный способ управления памятью, позволяющий соединить
преимущества сегментной и страничной модели. Идеология сегментностраничного управления памятью такова.
1) Исходная программа должна делиться на сегменты и
программный адрес, очевидно, это две величины для процессора:
«указатель сегмента» и «смещение в сегменте». Сегментирование
программы создает условия для наложения ограничений на различные
сегменты процесса.
2) Операционная система должна делить код каждого сегмента
перед загрузкой в память на страницы. Деление на страницы будет
использовано при подкачке.
3) Усложняются информационные структуры, которые
операционная система должна готовить для процессора.
Теперь она должна вести Таблицу дескрипторов сегментов,
загружаемых в память, и для каждого сегмента - Таблицу дескрипторов
его страниц.
4) Вычисление физического адреса памяти процессором при сегментно-
страничной адресации происходит в два этапа (рис.15).
Внутрисегментное смещение в программном адресе
разбиваются процессором на два поля: «№ программной страницы»
сегмента и смещение в ней.
По значению указателя сегмента (S) процессор находит
дескриптор сегмента в Таблице дескрипторов сегментов. В нем
операционной системой записан адрес размещения в памяти Таблицы
дескрипторов страниц этого сегмента.
По номеру страницы (D) процессор находит дескриптор
страницы в Таблице, считывает из него № физической страницы и
вычисляет ее адрес в памяти: № физической страницы * размер
страницы.
К вычисленному адресу страницы добавляет смещение в байтах
и получает физический адрес байта для обращения.
30
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
