Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОС_ответы_catsto.doc
Скачиваний:
14
Добавлен:
22.09.2019
Размер:
324.1 Кб
Скачать
  1. Процессы и потоки в ос. Необходимость синхронизации при работе с общими ресурсами. Способы синхронизации.

В многопоточной среде часто возникают проблемы, связанные с использованием параллельно исполняемыми потоками одних и тех же данных или устройств. Напр., передача инф от одного процесса к другому, контроль над деят-ю процессов(2 пр не пересекутся в критической ситуации, напр., когда они пытаются завладеть последним мегабайтом памяти ), согласование действий процессов. Для решения подобных проблем используются методы взаимодействия потоков:

Взаимоисключения (mutex, мьютекс) — это объект синхронизации, который устанавливается в особое сигнальное состояние, когда не занят каким-либо потоком. Только один поток владеет этим объектом в любой момент времени, одновременный доступ к общему ресурсу исключается. После всех необходимых действий мьютекс освобождается, предоставляя другим потокам доступ к общему ресурсу. Состояние описывается: владельцем и кратностью(целое >=0). Операции: Lock(), Unlock(). Достоинства: автоматич освобождение(если владелец «помер»),более быстр чем семафор.

Семафоры представляют собой доступные ресурсы, которые могут быть приобретены несколькими потоками в одно и то же время, пока пул ресурсов не опустеет. Тогда дополнительные потоки должны ждать, пока требуемое количество ресурсов не будет снова доступно. Семафоры очень эффективны, поскольку они позволяют одновременный доступ к ресурсам. Dec и Inc семафора. Если семафор=0 и нужно dec, то в очередь и ожидание inc. Поставщик: while(true){s1.dec();putdata(); s2.inc();}. Покупатель: while(true){s2.dec(); getdata(); s1.inc();}.

События. Объект, хранящий в себе 1 бит информации «просигнализирован или нет», над которым определены операции «просигнализировать», «сбросить в непросигнализированное состояние» и «ожидать». Ожидание на просигнализированном событии есть отсутствие операции с немедленным продолжением исполнения потока. Ожидание на непросигнализированном событии приводит к приостановке исполнения потока до тех пор, пока другой поток (или же вторая фаза обработчика прерывания в ядре ОС) не просигнализирует событие. Возможно ожидание нескольких событий в режимах «любого» или «всех». Возможно также создания события, автоматически сбрасываемого в непросигнализированное состояние после пробуждения первого же — и единственного — ожидающего потока (такой объект используется как основа для реализации объекта «критическая секция»). Активно используются в MS Windows, как в режиме пользователя, так и в режиме ядра.

Активно используются в MS Windows, нет в Unix (вместо него исп-ся семафор). Состояния: up/down or on/off or true/false… Операции: set()- установить в состояние up, reset()-сбросить, wait(), pulse()-делает up, пропускает очередь и затем сразу down.

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

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

Критическая секция – средство синхронизации нитей внутри одного процесса

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]