Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Системное программное обеспечение. Учебник

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
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-е годы память была увеличена еще на один уровень. Этот дополнительный уровень – кэш-память, которая облада­ет большим быстродействием, чем основная. Скорость досту­па увеличилась. Программы, хранящиеся в основной памяти, при выполнении передаются в сверхскоростную кэш-память, что обеспечивает значительный выигрыш во времени.
Кэш-память – это способ организации совместного функ­ционирования двух типов запоминающих устройств, разли­чающихся временем доступа и стоимостью хранения данных, который позволяет уменьшить среднее время доступа к дан­ным за счет динамического копирования в «быстрое» ЗУ наи­более часто используемой информации из «медленного» ЗУ.
Кэш-памятью часто называют не только способ организа­ции работы двух типов запоминающих устройств, но и одно из устройств – «быстрое» ЗУ. Оно стоит дороже и, как правило, имеет сравнительно небольшой объем. Важно, что механизм кэш-памяти является прозрачным для пользователя, который не должен сообщать никакой информации об интенсивности использования данных и никак не должен участвовать в пе­ремещении данных из ЗУ одного типа в ЗУ другого типа. Все это делается автоматически системными средствами. Напри­мер, рассмотрим частный случай использования кэш-памяти для уменьшения среднего времени доступа к данным, храня­щимся в оперативной памяти. Для этого между процессором и оперативной памятью помещается быстрое ЗУ, называемое
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]