Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
NewОтветыОС_1.doc
Скачиваний:
37
Добавлен:
07.02.2015
Размер:
2.67 Mб
Скачать
  1. Межпpоцессоpное взаимодействие: Тpи части пpоблемы. Состояние состязания.

Проблема: правильно организованное взаимодействие между процессами, по возможности не использующее прерываний. Проблема разбивается на 3 пункта: 1) передача информации от одного процесса другому. 2) контроль над деятельностью процессов: как гарантировать, что два процесса не пересекутся в критических ситуациях 3) согласование действий

процессов: если процесс А должен поставлять данные, а процесс В выводить их на

печать, то процесс В должен подождать и не начинать печатать, пока не поступят

данные от процесса А. 2,3 пункты относятся и к потокам.

Состояние состязания

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

Пример: спулер печати. Если процессу требуется вывести на печать файл, он помещает имя файла в специальный каталог спулера. Другой процесс, демон печати, периодически проверяет наличие файлов, которые нужно печатать, печатает файл и удаляет его имя из каталога.

Каталог спулера состоит из большого числа сегментов,пронумерованных 0, 1, 2, ..., в каждом их которых может храниться имя файла. Переменные : out - указыв на следующ файл для печати, и in - указывающая на следующий свободный сегмент. Одновременно процессы Аи В решают поставить файл в очередь на печать.

Возможна следующая ситуация

Проц А читает in=7 и сохраняет его в локальной переменной. Происходит прерывание по таймеру, и процессор переключается на проц В. Проц В, читает in=7 и сохраняет в своей локальной переменной. Оба проц считают, что следующий свободный сегмент =7. Проц В записыв имя файла в 7 сегмент и заменяет in: = 8. Управление переходит к проц А, и он обращается к своей локальн переменной, считывает ее значение и записывает в 7 сегмент имя файла (удаляя при этом имя файла, процесса В). Затем in=8(лок перем+1=8). Структура каталога спулера не нарушена, так что демон печати не заподозрит ничего плохого, но файл процесса В не будет напечатан. Ситуации, в которых два (и более) процесса считывают или записывают данные одновременно и конечный результат зависит от того, какой из них был первым, называются состояниями состязания.

  1. Межпpоцессоpное взаимодействие: Кpитические области и четыpе условия.

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

1. Два процесса не должны одновременно находиться в критических областях.

2. В программе не должно быть предположений о скорости или количестве процессоров.

3. Процесс, находящийся вне критической области, не может блокировать другие процессы.

4. Невозможна ситуация, в которой процесс вечно ждет попадания в критическую область.

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