Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Системное программное обеспечение. Учебник
.pdf
71
Глава 2. Планирование и диспетчеризация
вместно с системой прерывания. Диспетчер процессов обслуживает две очереди: очередь готовности и очередь ожидания.
Супервизор процессов осуществляет функции по созданию,
уничтожению и переводу процессов из состояния в состояние.
Кроме того, он поддерживает механизмы синхронизации параллельных процессов и механизмы статического и динамического назначения приоритетов процессам, учитываемых при
распределении главного ресурса системы – центрального процессора.
Супервизор памяти выполняет распределение оперативной
памяти между процессами в соответствии с принятой в данной
операционной системе дисциплиной.
Супервизор таймера обеспечивает управление интервальным таймером системы, исходя из требований параллельных
процессов, обслуживаемых системой.
В некоторых операционных системах в отдельную подсистему выделяют супервизор ресурсов, задачей которого является
распределение ресурсов (в первую очередь внешних устройств)
между процессами.
Алгоритмы управления задачами на уровне внешнего
планирования имеют следующие особенности.
Все алгоритмы внешнего планирования, применяемые в ОС,
имеют эвристический характер. При разработке этих алгоритмов стараются улучшить качество планирования, показатели
которого зависят от режимов использования вычислительной
системы. Планирование может осуществляться с использованием любых дисциплин и режимов обслуживания заявок (с учетом
приоритетов и без их учета, с неизменными и динамическими
приоритетами и т.п.).
В системах с разделением времени внешнее планирование
осуществляется одним из двух алгоритмов [9, 10, 11]: либо алгоритмом бесприоритетного планирования; либо алгоритмом
приоритетного планирования.
Алгоритм бесприоритетного планирования предусматривает постановку заданий в очередь в порядке их поступления в систему. Выбор заданий на обработку из очереди может
быть организован либо по принципу FIFO, либо по принципу
LIFO.

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
Алгоритм приоритетного планирования предусматривает
занесение заданий в очередь на обслуживание в соответствии
с их приоритетами. Выборка заданий из очереди осуществляется из непустой очереди с наивысшим приоритетом.
В системах с пакетной мультипрограммной обработкой внешнее планирование осуществляется с применением одного из следующих критериев [9, 10, 11]:
• минимизация простоя оборудования;
• максимизация пропускной способности вычислительной
системы;
• минимизация времени реакции системы на задания поль-
зователей.
Внешнее планирование в других режимах может выполняться, например, по следующим алгоритмам:
• алгоритм минимизации простоя оборудования;
• алгоритм упорядочивания по требованиям на ресурсы;
• алгоритм упорядочивания по требованиям на загрузку
центрального процессора.
Алгоритм минимизации простоя оборудования включает
в рабочий набор только те задачи, которые обеспечивают равномерную нагрузку на все устройства системы.
72
2.4. Стратегии планирования
и диспетчеризация
При рассмотрении стратегий планирования обычно идет
речь о краткосрочном планировании, то есть о диспетчериза-
ции. Суть же долгосрочного планирования состоит в подборе
таких вычислительных процессов, которые не конкурируют
между собой за ресурсы системы [4]. Стратегии планирования
определяют, какие процессы должны быть выбраны на выполнение, то есть каким процессам предоставлять процессор.
Наиболее известны следующие стратегии [4, 5]:
• стремиться заканчивать процессы в том же порядке, в ка-
ком они были начаты;
• отдавать предпочтение более коротким процессам;
• предоставлять процессам пользователей одинаковые ус-
луги и одинаковое время ожидания.

73
Глава 2. Планирование и диспетчеризация
В стратегиях обслуживания рассматривается понятие именно процесса, а не задачи, которая является только частью процесса. Напротив, когда говорят о диспетчеризации, то всегда
имеют в виду понятие задачи.
Существует множество правил, по которым формируются
списки или очереди готовых к выполнению процессов. Эти правила называют дисциплинами диспетчеризации или дисциплинами обслуживания [4, 5]. Различают два больших класса таких
дисциплин: бесприоритетные и приоритетные. При бесприоритетном обслуживании выбор задачи производится в заранее
установленном порядке без учета их относительной важности
и времени обслуживания. В случае приоритетных дисциплин
обслуживания преимущественное право на выполнение предоставляется отдельным задачам. Приоритет, присвоенный задаче, может являться величиной постоянной или же может изменяться в процессе решения задачи (динамические приоритеты).
Считается, что диспетчеризация с динамическими приоритетами требует дополнительных расходов на вычисление приоритетов выполняющихся задач [4, 5]. Самой простой в реализации
является дисциплина FCFS (first come – first served), которая
заключается в том, что процессор передается тому процессу, который раньше всех других его запросил.
Существующие дисциплины диспетчеризации процессов
могут быть разбиты на два класса: вытесняющие и невытесняющие. В большинстве современных ОС реализована вытесняющая многозадачность, о которой мы говорили выше, в подразделе 1.1.
Таким образом, диспетчеризация без перераспределения процессорного времени (невытесняющая многозадачность) – это такой способ диспетчеризации процессов, при котором активный
процесс выполняется до тех пор, пока сам не отдаст управление
диспетчеру задач для выбора из очереди другого процесса, готового к выполнению. Диспетчеризация с перераспределением
процессорного времени между задачами (вытесняющая многозадачность) – это такой способ, при котором решение о переключении процессора с выполнения одного процесса на выполнение
другого процесса принимается диспетчером задач, а не самим активным процессом [4, 5].

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
74
2.5. Диспетчеризация прерываний
Операционная система играет активную роль в организации обработки прерываний. Прерывания выполняют полезную функцию – они позволяют реагировать на асинхронные
по отношению к вычислительному процессу события. В то же
время прерывания создают дополнительные трудности для ОС
в организации вычислительного процесса. Эти трудности
связаны с непредвиденными переходами управления от одной процедуры к другой, возникающими в результате прерываний. Прерывания вызываются различными причинами,
как уже упоминалось выше, например:
1) сигналами от контроллеров внешних устройств;
2) ошибками во время выполнения инструкций;
3) запросами на выполнение системных функций (системные вызовы от пользовательских приложений, выполняемые
с помощью программных прерываний).
Системный вызов позволяет приложению обратиться к операционной системе с просьбой, выполнить то или иное действие,
оформленное как процедура (или набор процедур) кодового сегмента ОС. Для прикладного программиста операционная система выглядит как некая библиотека, предоставляющая некоторый набор полезных функций, с помощью которых можно
упростить прикладную программу или выполнить действия, запрещенные в пользовательском режиме, например обмен данными с устройством ввода-вывода [4, 6, 7].
Операционная система не должна терять контроль над ходом выполнения системных процедур, вызываемых по прерываниям. Она должна упорядочивать их во времени так же, как
планировщик упорядочивает многочисленные пользовательские потоки. Кроме того, сам планировщик потоков является
системной процедурой, вызываемой по прерываниям (аппаратным – от таймера или контроллера устройства ввода-вывода,
или программным – от приложения или модуля ОС). Поэтому
правильное планирование процедур, вызываемых по прерываниям, является необходимым условием правильного планирования пользовательских потоков. В противном случае в системе
могут возникать, например, такие ситуации, когда операцион-

75
Глава 2. Планирование и диспетчеризация
ная система будет длительное время заниматься не требующей
мгновенной реакции задачей управления стримером, архивирующим данные в то время, когда высокоскоростной диск будет
простаивать и тормозить работу многочисленных приложений,
обменивающихся данными с этим диском.
Для упорядочения работы обработчиков прерываний
в операционных системах применяется тот же механизм,
что и для упорядочения работы пользовательских процессов, – механизм приоритетных очередей. Все источники прерываний обычно делятся на классы, причем каждому классу
присваивается приоритет. В операционной системе выделяется программный модуль, который занимается диспетчеризацией обработчиков прерываний. Этот модуль в разных ОС называется по-разному, но для определенности можно назвать
его диспетчером прерываний. При возникновении прерывания диспетчер прерываний вызывается первым. Он запрещает
ненадолго все прерывания, а затем выясняет причину прерывания. После этого диспетчер сравнивает назначенный данному источнику прерывания приоритет и сравнивает его с текущим приоритетом потока команд, выполняемого процессором.
В этот момент времени процессор уже может выполнять инструкции другого обработчика прерываний, также имеющего
некоторый приоритет. Если приоритет нового запроса выше
текущего, то выполнение текущего обработчика приостанавливается, и он помещается в соответствующую очередь обработчиков прерываний. В противном случае в очередь помещается обработчик нового запроса [4, 6, 7].
Приоритет обработчиков прерываний не совпадает в общем
случае с приоритетом потоков, выполняемых в обычной последовательности, определяемой планировщиком потоков.
По отношению к обработчикам прерываний любой поток, который назначен на выполнение планировщиком, имеет самый
низкий приоритет, так что любой запрос на прерывание всегда
может прервать выполнение этого потока.
Диспетчеризация прерываний является важной функцией
ОС, и эта функция реализована практически во всех мультипрограммных операционных системах. В общем случае в операционной системе реализуется двухуровневый механизм пла-

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
76
нирования работ. Верхний уровень планирования выполняется
диспетчером прерываний, который распределяет процессорное время между потоком поступающих запросов на прерывания различных типов – внешних, внутренних и программных.
Оставшееся процессорное время распределяется другим диспетчером – диспетчером потоков, на основании принципов кванто-
вания.
В соответствии с алгоритмами, основанными на квантовании, смена активного процесса происходит, если:
1) процесс завершился и покинул систему;
2) произошла ошибка;
3) процесс перешел в состояние «ожидание»;
4) исчерпан квант процессорного времени, отведенный дан-
ному процессу.
Процесс, который исчерпал свой квант, переводится в состояние «готовность» и ожидает, когда ему будет предоставлен
новый квант процессорного времени, а на выполнение в соответствии с определенным правилом выбирается новый процесс
из очереди готовых. Таким образом, ни один процесс не занимает процессор надолго, поэтому квантование широко используется для управления процессами.

ГЛАВА 3.
Управление памятью
3.1. Функции ОС по управлению памятью
Память является важнейшим ресурсом, определяющим построение операционной системы и требующим тщательного
управления, особенно со стороны мультипрограммной операционной системы. Распределению подлежит вся оперативная память, не занятая операционной системой. Обычно ОС располагается в самых младших адресах, однако может занимать и самые
старшие адреса. Функциями ОС по управлению памятью являются [1, 4, 6]:
• отслеживание свободной и занятой памяти;
• выделение памяти процессам и освобождение памяти при
завершении процессов;
• вытеснение процессов из оперативной памяти на диск, когда размер основной памяти недостаточен для размещения в ней
всех процессов;
• возвращение процессов в оперативную память, когда в ней
освобождается место;
• настройка адресов программы на конкретную область физической памяти.
3.2. Основные виды памяти
Основная, или первичная, или физическая (реальная),
память вычислительной машины в технической литературе обозначается английским термином memory или storage.
Для непосредственного выполнения программ или обращения
к данным необходимо, чтобы они размещались в основной памяти.
Вторичная, или внешняя, память – это накопители на магнитных дисках, которые имеют большую емкость, стоят дешевле и позволяют хранить множество программ и данных,
которые должны быть готовы для обработки. Но по сравнению
с первичной памятью внешняя память является более «медленной», то есть имеет более низкую скорость доступа.

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
78
Размер программ в обычном случае ограничивается емкостью
имеющейся основной памяти, однако существует возможность
выполнения программ, превышающих по размеру основную память, благодаря использованию так называемых оверлейных
структур.
В этом случае часть программного кода находится постоянно во время выполнения программы пользователя в основной памяти. Другие же модули этой программы, которые работают не весь период выполнения программы, загружаются
по очереди в порядке необходимости в специальную оверлейную область памяти. С проблемой размещения в памяти программ, размер которых превышал имеющуюся в наличии свободную память, пользователи столкнулись уже достаточно
давно. Решением было разбиение программы на части, называемые оверлеями.
Оверлеями называются части кода программы, совместно
использующие общую область памяти. Одновременно в памяти находятся только те части программы (оверлеи), которые
в текущий момент нужны данной функции [4]. Когда нулевой
оверлей, расположенный в основной памяти, заканчивал свое
выполнение, он вызывал другой оверлей и т.д. Все оверлеи
хранились на диске и перемещались между памятью и диском
средствами операционной системы. Однако разбиение программы на части и планирование их загрузки в оперативную
память должен был осуществлять программист. Поэтому ручная реализация оверлейного режима требует продуманного
и трудоемкого планирования.
Развитие методов организации вычислительного процесса
в этом направлении привело к появлению метода, известного
под названием виртуальная память. Благодаря появлению
систем виртуальной памяти проблема оверлейных сегментов,
контролируемая самим программистом, отпадает.
Виртуальным называется ресурс, который пользователю
или пользовательской программе представляется обладающим
свойствами, которыми он в действительности не обладает. Так,
например, пользователю может быть предоставлена виртуальная оперативная память, размер которой превосходит всю
имеющуюся в системе реальную оперативную память. Поль-

79
Глава 3. Управление памятью
зователь пишет программы так, как будто в его распоряжении
имеется однородная оперативная память большого объема, но
в действительности все данные, используемые программой,
хранятся на одном или нескольких разнородных запоминающих устройствах, обычно на дисках, и при необходимости частями отображаются в реальную память.
Таким образом, виртуальная память – это совокупность
программно-аппаратных средств, позволяющих пользователям писать программы, размер которых превосходит имеющуюся оперативную память; для этого виртуальная память
решает следующие задачи:
• размещает данные в запоминающих устройствах разного
типа, например, часть программы в оперативной памяти, а часть
на диске;
• перемещает по мере необходимости данные между запоминающими устройствами разного типа, например, подгружает нужную часть программы с диска в оперативную память;
• преобразует виртуальные адреса в физические.
Все эти действия выполняются автоматически, без участия
программиста, то есть механизм виртуальной памяти является прозрачным по отношению к пользователю.
Память вычислительной машины представляет собой иерар-
хию запоминающих устройств (внутренние регистры процессора, различные типы сверхоперативной и оперативной памяти,
диски, ленты), различающихся средним временем доступа и
стоимостью хранения данных в расчете на один бит (рис. 3.1)
[6]. Пользователю хотелось бы иметь и недорогую, и быструю
память. Кэш-память представляет собой некоторое компромиссное решение этой проблемы.
Системе с несколькими уровнями иерархии памяти свойственна высокая интенсивность челночных обменов программами и данными между устройствами памяти различных
уровней. Такие обмены отнимают системные ресурсы, например дорогое время центрального процессора, которое в противном случае можно было бы использовать более продуктивно.
В этом случае большое значение имело использование принци-
па кэширования данных.

СИСТЕМНОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
Рис. 3.1. Иерархия ЗУ
80
В 1960-е годы память была увеличена еще на один уровень.
Этот дополнительный уровень – кэш-память, которая обладает большим быстродействием, чем основная. Скорость доступа увеличилась. Программы, хранящиеся в основной памяти,
при выполнении передаются в сверхскоростную кэш-память,
что обеспечивает значительный выигрыш во времени.
Кэш-память – это способ организации совместного функционирования двух типов запоминающих устройств, различающихся временем доступа и стоимостью хранения данных,
который позволяет уменьшить среднее время доступа к данным за счет динамического копирования в «быстрое» ЗУ наиболее часто используемой информации из «медленного» ЗУ.
Кэш-памятью часто называют не только способ организации работы двух типов запоминающих устройств, но и одно
из устройств – «быстрое» ЗУ. Оно стоит дороже и, как правило,
имеет сравнительно небольшой объем. Важно, что механизм
кэш-памяти является прозрачным для пользователя, который
не должен сообщать никакой информации об интенсивности
использования данных и никак не должен участвовать в перемещении данных из ЗУ одного типа в ЗУ другого типа. Все
это делается автоматически системными средствами. Например, рассмотрим частный случай использования кэш-памяти
для уменьшения среднего времени доступа к данным, хранящимся в оперативной памяти. Для этого между процессором
и оперативной памятью помещается быстрое ЗУ, называемое
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
