Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по лекциям.doc
Скачиваний:
29
Добавлен:
20.09.2019
Размер:
1.52 Mб
Скачать

9. Средства взаимодействия программных единиц

9.1. Абстрактные критические секции

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

Как известно, установка звена в начало очереди состоит из двух совершенно необходимых операций:

1) значение указателя top (на начало очереди) записывается в поле связи во вставляемом звене;

2) адрес вставляемого звена записывается в указатель начала очереди top.

Пусть в участок программы с этими действиями входят два процесса, причем процесс A успевает выполнить шаг 1, а затем диспетчер ОС отбирает у него процессор, и далее выполняется процесс B. После того как процесс B вставит свое звено в очередь, рано или поздно диспетчер даст возможность продолжить выполнение процессу A. Он, продолжая начатые ранее действия, выполнит шаг 2 установки в очередь своего звена. В результате в поле связи обоих вставленных звеньев будет одно и то же значение, бывшее до начала их вставки в служебной переменной top, т.е. оба вставленных звена показывают полем связи на звено, вставленное до них последним, а указатель начала очереди top показывает только на звено, вставленное процессом A. Таким образом, звено процесса B как бы "потерялось", к нему нет доступа, начиная со значения указателя top. (Читателю рекомендуется для четкого представления происходящего выполнить рисунки очереди запросов и описанных операций по вставке звеньев в изложенной последовательности действий.)

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

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

Для устранения состязаний процессов (или нитей) используют монополизацию ресурса. Монополизация ресурса – это временное предоставление его в исключительное использование одной нити. Как пояснялось в гл. 4 и 5, в современных ОС ресурсы являются собственностью процесса, а для нитей одного процесса – общими. Критический интервал нити поэтому ограничивают с начала и конца специальными управляющими конструкциями операционной системы, в абстрактном изложении называемыми прологом и эпилогом критического интервала. Назначение этих конструкций – обеспечить нахождение в критическом интервале только одной нити.