- •2.1 Особенности алгоритмов управления ресурсами
- •2.2 Особенности аппаратных платформ
- •2.3 Особенности областей использования
- •2.4 Особенности методов построения
- •3. 2. Реализация процессов Внутреннее устройство процессов в ос Windows
- •Проблемы межпроцессного взаимодействия
- •Обмен информацией между процессами
- •Сигналы
- •3.4.3. Почтовые ящики
- •Разделяемая память
- •3.4.5. Мониторы Хоара
- •4.1. Реализация в Windows
- •7. Управление памятью
- •7.2. Методы распределения памяти без использования дискового пространства
- •7.1.1. Распределение памяти фиксированными разделами
- •7.1.2. Распределение памяти разделами переменной величины
- •7.1. 3. Перемещаемые разделы
- •7.3. Понятие виртуальной памяти
- •7.2.3. Страничное распределение
- •7.2.3 Сегментное распределение
- •7.2. 5. Странично-сегментное распределение
- •9. Вызов удаленных процедур (rpc)
- •9.1 Концепция удаленного вызова процедур
- •9.2. Базовые операции rpc
- •9.3. Этапы выполнения rpc
- •10. Синхронизация в распределенных системах
- •10.1. Алгоритм синхронизации логических часов
- •10.2. Алгоритмы взаимного исключения
- •10.2.2. Централизованный алгоритм
- •10.2.3. Распределенный алгоритм
- •10.2.4. Алгоритм Token Ring
- •10.2.5 Неделимые транзакции
- •11. Процессы и нити в распределенных системах Понятие "нить"
- •Различные способы организации вычислительного процесса с использованием нитей
- •Вопросы реализации нитей
- •Нити и rpc
3.4.5. Мониторы Хоара
Монитор – это пассивный набор разделяемых переменных и повторно входимых процедур доступа к ним, которым процессы пользуются в режиме разделения, прич¨м в каждый момент времени им может пользоваться только один процесс. Монитор можно представить как комнату, от которой есть только один ключ. Если какой-то процесс намеревается воспользоваться этой комнатой и ключ находится снаружи, то этот процесс может отпереть комнату, войти в не¨ и воспользоваться одной из процедур монитора. Если ключа снаружи нет, то процессу придется ждать, пока тот, кто пользуется комнатой в данный момент, не выйдет из не¨ и не отдаст ключ. Кроме того, никому не разрешается в комнате оставаться навсегда.
Рассмотрим, например, некоторый ресурс, который выделяет соответствующий планировщик. Каждый раз, когда процесс желает получить этот ресурс, он должен обратиться к планировщику. Процедуру планировщик разделяют все процессы, и каждый из них может обратиться к планировщику в любой момент. Но планировщик не в состоянии обслуживать более одного процесса одновременно. Такая процедура планировщик представляет собой пример монитора.
Таким образом, монитор – это механизм организации параллелизма, который содержит как данные, так и процедуры, необходимые для динамического распределения конкретного общего ресурса или группы общих ресурсов. Процесс, желающий получить доступ к разделяемым переменным, должен обратиться к монитору, который либо предоставит доступ, либо откажет в н¨м. Вход в монитор находится под ж¨стким контролем – здесь осуществляется взаимоисключение процессов, так как в каждый момент времени только один процесс может пользоваться монитором. Процессам, которые хотят войти в монитор, когда он уже занят, приходится ждать, прич¨м режимом ожидания управляет сам монитор. При отказе в доступе монитор блокирует обратившийся к нему процесс и определяет условие, по которому процесс жд¨т. Проверка условия выполняется самим монитором, который и деблокирует ожидающий процесс.
Внутренние переменные монитора могут быть либо глобальными (используемыми всеми процедурами монитора), либо локальными (используемыми только в своих процедурах). Обращение к этим переменным возможно только изнутри монитора. При первом обращении к монитору инициализируются начальные значения переменных. При последующих обращениях используются те значения переменных, которые остались от предыдущего обращения.
Если процесс обращается к некоторой процедуре монитора и обнаруживается, что соответствующий ресурс уже занят, эта процедура монитора выда¨т команду WAIT с указанием условия ожидания. В этом случае, процесс, переводящийся в режим ожидания, будет ждать момента, когда необходимый ресурс освободится. Со временем процесс, который занимал данный ресурс, обратится к монитору, чтобы возвратить ресурс системе. В этом случае монитор выда¨т команду извещения (сигнализации) SIGNAL, чтобы один из ожидающих процессов мог получить данный ресурс и войти в монитор. Если монитор сигнализирует о возвращении ресурса, и в это время нет процессов, ожидающих такого ресурса, то он вносится в список свободных ресурсов.
Чтобы гарантировать, что процесс, находящийся в ожидании некоторого ресурса, со временем его получит, считается, что ожидающий процесс имеет более высокий приоритет, чем новый процесс, пытающийся войти в монитор.
Единственный ресурс динамически запрашивается и освобождается процессами, которые обращаются к процедурам Request и Release. Если процесс обращается к процедуре Request в тот момент, когда ресурс используется, значение переменной busy будет true и Request выполнит операцию WAIT(free). Эта операция заблокирует обратившийся процесс, и он будет помещ¨н в конец очереди процессов, ожидающих доступа к монитору. Когда процесс, использующий ресурс, обратится к процедуре Release, операция монитора SIGNAL деблокирует процесс, находящийся в начале очереди, не позволяя исполняться никакой другой процедуре внутри того же монитора. Этот деблокированный процесс готов возобновить выполнение процедуры Request.
Использование монитора в качестве средства синхронизации и связи освобождает процессы от необходимости явно разделять между собою ресурсы, так как доступ к разделяемым переменным всегда ограничен телом монитора. Поскольку мониторы входят в состав ядра ОС, то разделяемые переменные становятся системными переменными. Этот факт автоматически исключает критические интервалы, так как в каждый момент монитором может пользоваться только один процесс.
Использование мониторов имеет ряд преимуществ по сравнению с низкоуровневыми средствами:
- локализация разделяемых переменных внутри тела монитора позволяет избавиться от малопонятных программных конструкций в синхронизируемых процессах;
- мониторы дают возможность процессам совместно использовать программные модули, представляющие критические секции (если несколько процессов совместно и одинаково используют некоторый разделяемый ресурс, то в составе монитора достаточно иметь одну копию соответствующей процедуры работы с этим ресурсом).
