Процессы. Процессы и потоки. Процессы и потоки
Скачать 0.73 Mb.
|
Состояние состязания (2)Процессы находятся в состязательной ситуации. Пример №2. Студент в столовой. Основным способом предотвращения любой ситуации, связанной с совместным использованием памяти, файлов и чего-либо еще, является запрет одновременной записи и чтения разделенных данных более чем одним процессом. Взаимное исключение: один процесс использует разделенные данные, другому процессу это делать будет запрещено. Выбор подходящей примитивной операции, реализующей взаимное исключение, является серьезным моментом разработки операционной системы. Формулировка состояния состязания: Некоторый промежуток времени процесс занят внутренними расчетами и другими задачами, не приводящими к состояниям состязания. В другие моменты времени процесс обращается к совместно используемым данным или выполняет действие, которое может привести к состязанию. Часть программы, в которой есть обращение к совместно используемым данным, называется критической областью или критической секцией. Если удастся избежать одновременного нахождения двух процессов в критических областях, можно избежать состязаний. Критические областиДля правильной совместной работы параллельных процессов и эффективного использования общих данных необходимо выполнение четырех условий: 1. Два процесса не должны одновременно находиться в критических областях. 2. В программе не должно быть предположений о скорости или количестве процессоров. 3. Процесс, находящийся вне критической области, не может блокировать другие процессы. 4. Невозможна ситуация, в которой процесс вечно ждет попадания в критическую область. Критические областиВзаимное исключение использования критических областей Взаимное исключение с активным ожиданиемЗапрещение прерываний Переменные блокировки Строгое чередование Алгоритм Петерсона Команда TSL Семафоры Мьютексы Мониторы Передача сообщений Барьеры способы реализации Запрещение прерыванийЗапрет всех прерываний при входе процесса в критическую область и разрешение прерываний по выходе из области. Если прерывания запрещены, невозможно прерывание по таймеру. Поскольку процессор переключается с одного процесса на другой только по прерыванию, отключение прерываний исключает передачу процессора другому процессу. Запрещение прерываний (пример)Пример: процесс пользователя отключил все прерывания и в результате какого-либо сбоя не включил их обратно. Операционная система на этом может закончить свое существование. Пример: для ядра характерно запрещение прерываний для некоторых команд при работе с переменными или списками. Итак, запрет прерываний бывает полезным в самой операционной системе. Переменные блокировкиРассмотрим одну совместно используемую переменную блокировки, изначально равную 0. Если процесс хочет попасть в критическую область, он предварительно считывает значение переменной блокировки. Если переменная равна 0, процесс изменяет ее на 1 и входит в критическую область. Если же переменная равна 1, то процесс ждет, пока ее значение сменится на 0. Переменные блокировки (недостатки)Один процесс считывает переменную блокировки, обнаруживает, что она равна 0, но прежде, чем он успевает изменить ее на 1, управление получает другой процесс, успешно изменяющий ее на 1. Когда первый процесс снова получит управление, он тоже заменит переменную блокировки на 1 и два процесса одновременно окажутся в критических областях. Строгое чередованиеТретий метод реализации взаимного исключения. Строгое чередованиеПеременная turn=0 отслеживает, чья очередь входить в критическую область. Вначале процесс 0 проверяет значение turn, считывает 0 и входит в критическую область. Процесс 1 также проверяет значение turn, считывает 0 и после этого входит в цикл, непрерывно проверяя, когда же значение turn будет равно 1. Постоянная проверка значения переменной в ожидании некоторого значения называется активным ожиданием. Активное ожидание используется только в случае, когда есть уверенность в небольшом времени ожидания. Блокировка, использующая активное ожидание, называется спин-блокировкой. |