Тема 8. Мультизадачные операционные системы




8.1. Преимущество мультизадачных ОС

Применение мультизадачных ОС позволяет повысить коэффициент использования всех возможностей ЭВМ за счет исключения простоев ЦП при завершении активной задачи, либо перехода ее в состояние ожидания по любой причине. Большинство представленных на рынке в настоящее время ОС – мультизадачные. Наиболее распространены следующие из них: семейство UNIX, семейство Windоws, OS/2, семейство NetWare.

 

8.2. Проблемы параллельного выполнения задач

Появление квази-параллельно выполняющихся задач в однопроцессорной ЭВМ требует решения ряда проблем, наиболее существенными из которых являются следующие:

- Распределение ресурсов ЭВМ между задачами.

- Средства коммуникации и координации задачами своих действий, т.е. средства синхронизации.

Большая часть вопросов, связанных с решением перечисленных проблем, была обсуждена ранее.

 

8.2.1. Распределение ресурсов ЭВМ

Параллельно выполняемые прикладные задачи не должны иметь самостоятельного доступа к распределению ресурсов, что приводит к появлению привилегированных и непривилегированных команд. Привилегированные команды, напрямую использующие разделяемые ресурсы (например команды ввода-вывода), могут исполняться только операционной системой, т.е. ОС должна работать в привилегированном режиме. Переход управления от прикладной задачи к ОС сопровождается контролируемой сменой режима

Проблема распределения ресурсов имеет много аспектов и вариантов их решения. Некоторые из них перечислены далее.

 

8.2.1.1. Защита памяти

Защита памяти должна изолировать конкурирующие пользовательские задачи друг от друга, а ОС от за­дач пользователей, исключая опасность затирания задачами не принадлежащих им областей ОП.

Вариантами решения этой проблемы являются статическая модель управления ОП и модель виртуаль­ной памяти.

 

8.2.1.2. Мультипрограммирование.

Организация очереди из готовых задач и выделение процессора для одной из них потребовали планирования задач. Планирование задач, как правило, базируется на приоритетном подходе и использует некоторый алгоритм для вычисления текущих приоритетов задач. Планировщики ОС общего назначения используют алгоритмы диспетчеризации, нацеленные на достижение наивысшей суммарной производительности ЭВМ и небольшое количество приоритетов. Планировщики специализированных ОС РВ используют либо статические алгоритмы диспетчеризации с большим количеством приоритетов (для хорошо детерминированных систем), либо оптимальные алгоритмы диспетчеризации.

Для переключения процессора с одного задачи на другую возникла потребность в сохранении контекста (содержимого регистров и структур данных задачи), для обеспечения правильного продолжения ее работы.

 

8.2.1.3. Распределение ресурсов ОС

В мультизадачной системе разделяемым ресурсом является также само ядро ОС. Предположим, две независимые прикладные задачи используют общий программный модуль (например, некоторую системную функцию). Пусть одна из этих задач вызвала эту функцию, но до завершения ее работы произошло переключение задач, и вторая задача обращается к той же функции. Для обеспечения корректной работы системной функции в интересах обеих прикладных задач необходимо реализовать реентерабельность (reenterability – повтоpная входимость) разделяемых программ.

Существует техника реализации этого модуля, состоящая в том, что все данные, с которыми работает разделяемая программа, хранятся в ее локальных переменных. Для каждой загрузке такой (реентерабельной) программы создается собственная копия динамических данных. Такое требование легко выполняется для функций, не имеющих побочного эффекта, таких как вычисление синуса или поиск символа в текстовой строке. При других техниках программирования могут возникнуть серьезные проблемы, вплоть до развала системы. Типичный пример нереентерабельной программы - ядро дисковой ОС MS DOS. Легко понять, что программы, управляющие внешними устройствами, не могут быть реентерабельными.

Во многих случаях оказывается выгодно рассматривать нереентерабельную программу как разделяемый ресурс и распределять доступ к нему теми же способами, что и к физическому устройству. Так поступает большинство средств организации параллельной работы под MS DOS.

Другое решение этой проблемы состоит в запрете переключения задач во время работы нереентерабельных модулей ОС. При этом все нереентерабельные модули ОС собираются в конгломерат, называемый ядром (kernel). В системах с виртуальной памятью код и данные ядра обычно расположены в едином виртуальном адресном пространстве, которое отличается от адресных пространств пользовательских задач. Ядро можно назвать привилегированной задачей, но оно не является процессом в полном смысле этого слова, потому что планировщик не может отобрать у ядра процессор. В ядре собраны все нереентерабельные модули системы, а часто и многие реентерабельные. Планировщик также является частью ядра.

В ОС RT-11 обращения к нереентерабельным модулям, например к подсистеме ввода/вывода, реализованы не как вызовы, а как установка запроса в очередь. Т.е., обработка запроса начинается не сразу же после вызова, а, возможно, через некоторое время. Поэтому можно поставить запрос в очередь практически в любой момент, в том числе и во время исполнения обработчика запросов.

В ОС на основе микроядра многие модули системы являются отдельными процессами, и взаимодействуют между собой при помощи сообщений (выполняемых микроядром операций send и receive). Если пользовательскому процессу нужно открыть файл, он посылает запрос соответствующему системному процессу и ждет ответа. Если системный процесс в это время был активен – запрос ставится в очередь. Такая архитектура снимает все проблемы с реентерабельностью ядра системы, и позволяет процессам реального времени и даже обработчикам прерываний исполнять системные вызовы без ограничений.

 

8.2.2. Синхронизации при взаимодействии нескольких программ

Очень широкий класс проблем - проблемы синхронизации, возникающие при попытках организовать взаимодействие нескольких программ. Например, если одна задача производит данные, а вторая их потребляет, то как задача-потребитель узнает, готова ли очередная порция данных? Типичный случай такого взаимодействия – асинхронное чтение с диска. Механизм прерываний в этом случае не годится, т.к. прерывания только сообщают программе, что какое-то событие произошло, но не указывают, что события еще не происходило? Для решения этих проблем используются разнообразные средства синхронизации (мютексы, критические секции, семафоры, события,…), функции ожидания и пр. Теория синхронизации была разработана в 60-70 года ХХ века Деккером (Dekker) и Дейкстра (Dijkstra).

8.2.2.1. Объект событие

Event (событие) - извещает один или несколько ожидающих потоков о наступлении некоторого событияz:\CorvDoc\lektsiiorg1\synchro_8ann.htm. Объект событие может находиться в отмеченном (событие произошло) и неотмеченном состоянии (событие еще не случилось). Его состояние может быть явно установлено в отмеченное (неотмеченное) состояние посредством вызова специальных функций.

Объект события используется при посылке сигнала потоку, указывающего, что определенное событие произошло. Например, при асинхронном вводе/выводе система устанавливает определенный объект события в отмеченное состояние, когда была завершена асинхронная операция.

8.2.2.2. Объект mutex

Mutex - объект синхронизации, состояние которого отмеченное, когда он не принадлежит никакому потоку, и неотмеченное, в другом случае. Только один поток одновременно может владеть mutex объектом, координируя взаимно-исключающий монопольный доступ к общедоступному ресурсу. Например, чтобы предотвратить одновременную запись от двух потоков в совместно используемую область памяти, каждый поток ждет монопольное использование mutex объекта перед выполнением кода, который обращается к этой области памяти. После записи в общедоступную область памяти, поток отпускает объект. Таким образом, mutex в любой момент времени может принадлежать только одному потоку, обеспечивая нескольким потокам взаимоисключающий доступ к разделяемому ресурсу.

8.2.2.3. Семафор Дейкстры

Semaphore (семафор Дейкстры) - объект синхронизации, который поддерживает счетчик со значением от нуля до определенного максимального значения. Счетчик уменьшается на 1 каждый раз, когда в потоке завершается ожидание для объекта семафора и увеличивается каждый раз, когда поток освобождает семафор. Когда счетчик достигает нуля, то ожидание объекта семафора не завершится успешно более ни в одном потоке. Состояние семафора отмеченное, когда счетчик больше нуля, и неотмеченное, когда счетчик - нуль. Таким образом, семафор ограничивает число потоков, которые одновременно обращаются к общедоступному ресурсу. Объект семафора используется при управлении общедоступным ресурсом, который может обслуживать ограниченное число пользователей. Он ограничивает число потоков, совместно использующих ресурс, до определенного максимального количества. При создании семафора поток определяет начальное значение счетчика и максимальное его значение для объекта. Начальное значение счетчика не должен быть меньше нуля и больше максимального значения. При доступе к нескольким различным ресурсам с использованием семафоров (и других объектов синхронизации) может возникнуть специфическая проблема, называемая мертвой блокировкой (dead lock) - первая программа никогда не освободит sem1, потому что стоит в очереди у sem2, занятого второй программой, которая стоит в очереди у sem1, занятого первой.

8.2.2.4. Таймер ожидания

Waitable timer (таймер ожидания) - извещает один или несколько ожидающих потоков об наступлении заданного момента времени. Таймер переходит в отмеченное состояние, когда наступает заказанное время.

Дополнительные объекты синхронизации (т.е. используемые и для других целей):

8.2.2.5. Уведомление об изменении

Change notification (уведомление об изменении) - объект, чье состояние становится отмеченным, когда определенный тип изменения происходит внутри заданного каталога или дерева каталогов.

 

8.2.2.6. Объект консольного ввода

Console input (объект консольного ввода) - его состояние отмеченное, когда во входном буфере консоли имеются непрочитанные данные, и неотмеченное, когда входной буфер пуст.

 

8.2.2.7. Объекты процесса и потока

Объект процесса связывается с запускаемым процессом. Его состояние неотмеченное в то время, когда процесс выполняется и переходит в отмеченное состояние, когда процесс завершается.

Объект потока - связывается с запускаемым потоком.. Его состояние неотмеченное в то время, когда поток выполняется и переходит в отмеченное состояние, когда поток завершается.

8.2.2.8. Критическая секция

Критические секции обеспечивают синхронизацию наподобие объектов mutex, за исключением того, что критические секции могут использоваться потоками только одного процесса. События, mutex и семафоры могут также использоваться для синхронизации в рамках одного процесса, но критические секции обеспечивают более быстрый, эффективный механизм для синхронизации типа взаимного исключения. Подобно mutex-объекту, критическая секция может одновременно принадлежать только одному потоку, который использует ее для защиты разделяемого ресурса от одновременного доступа.

8.2.2.9. Средства ожидания событий

Средства ожидания событий - набор функций ожидания, использующихся для блокирования потоком собственного выполнения. Функции ожидания не завершаются, пока не будут выполнены определенные критерии. Тип функции ожидания определяет набор используемых критериев. Когда функция ожидания вызывается, она проверяет, были ли выполнены критерии ожидания. Если критерии не были выполнены, то вызывающий поток переходит в состояние ожидания. При ожидании выполнения критерия процессорное время не используется.

 

8.2.3. Обмен данными

Еще одна группа вопросов в мультизадачных ОС связана с межзадачным информационным взаимодействием. В разных ОС реализованы следующие виды IPC: сообщения, сигналы, конвейеры, разделяемая память

8.2.3.1. Сообщения

Сообщение – это набор байт, передаваемых от одной задачи к другой с помощью системных вызовов (Send, Receive, Reply). Существуют синхронные (блокирующие) и асинхронные (неблокирующие) виды сообщений.

 

8.2.3.2. Сигналы

Сигналы сообщают процессам о возникновении асинхронных событий. Посылка сигналов производится процессами - друг другу или ядром. Сигналы посылаются в следующих случаях (неполный перечень):

-при завершении выполнения процесса;

-при возникновении вызываемых процессом особых ситуаций, таких как обращение к некорректному адресу, попытка исполнения привилегированной команды, а также различные аппаратные ошибки;

-при возникновении неисправимых ошибок, таких как исчерпание системных ресурсов;

-произвольные сигналы, которыми обмениваются процессы.

В некоторых ОС (Neutrino) вместе с сигналом можно передать несколько байт информации

 

8.2.3.3. Конвейер

Конвейер - сегмент общедоступной памяти, которую процессы (потоки) используют для связи. Один процесс записывает информацию в конвейер, затем другой процесс читает информацию из конвейера.

Взаимодействие через конвейер может производиться в синхронном или асинхронном режимах.

 

8.2.3.4. Разделяемая память

Разделяемая память использует механизм виртуальной ОП и позволяет задачам обмениваться данными без реальной их пересылки (как блок памяти в адресном пространстве задачи.).

======================================================================================

ВОПРОСЫ:

1.Преимущества мультизадачных ОС

2.Распределение ресурсов ОП и ЦП в мультизадачных ОС

3.Распределение ресурсов ОС

4.Понятие реентерабельности

5.Средства синхронизации в мультизадачных ОС

6.IPC в мультизадачных ОС




Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-05-16 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: