Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Презентации лекций по ТОИ / 18-Проблема взаимного исключения.pps
Скачиваний:
46
Добавлен:
02.06.2015
Размер:
1.72 Mб
Скачать

Развитие процессов в ИС

При выполнении процесса в ВС он проходит ряд дискретных состояний, связь которых можно представить с помощью графа:

Что, если параллельно с одними итеми же ресурсами работают несколько процессов, выполняющихся на разных процессорах?

Завершение

11

Проблема взаимного исключения: пример

В ВС существует несколько процессов P1, P2, ... , Pn, каждый из

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

Таким образом, в каждой из выполняющихся программ должны быть операторы вида

C := C + 1.

12

Проблема взаимного исключения: пример

Увеличение значения счётчика C выполняется с помощью последовательности из трёх (как минимум) операций: чтения (выборки из общей памяти или из общего файла) текущего значения переменной, увеличения значения этой переменной на 1 и сохранения (записи в память или в файл) увеличенного значения:

read(C); inc(C); write(C).

Эта последовательность операций выполняется каждым из процессов в ИС, причём процессы выполняются независимо друг от друга, поэтому неизвестен заранее порядок, в котором они

13 подойдут к выполнению этих действий.

Проблема взаимного исключения: пример

Таким образом возможна ситуация:

 

Порядок выполнения операций процессами

Процесс

1

2

3

4

Pi

read(C)

inc(C)

write(C)

...

Pj

...

read(C)

inc(C)

write(C)

14

Проблема взаимного исключения: пример

Таким образом возможна ситуация:

C = 100

C = 100

read(C); inc(C); write(C).

 

read(C);

 

 

read(C);

 

 

inc(C);

 

 

inc(C);

 

 

write(C).

 

 

 

write(C).

 

 

 

 

 

 

 

 

15

Проблема взаимного исключения: пример

Таким образом возможна ситуация:

read(C); inc(C); write(C).

C = 101

C = 100

C = 100

 

read(C);

 

 

read(C);

 

 

inc(C);

 

 

inc(C);

 

 

write(C).

 

 

 

write(C).

 

 

 

 

 

 

 

 

16

Проблема взаимного исключения: пример

Таким образом возможна ситуация:

C = 101

read(C); inc(C); write(C).

C = 101

 

 

 

 

 

read(C);

 

 

read(C);

 

 

 

 

inc(C);

 

 

inc(C);

 

 

 

write(C).

 

 

write(C).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

C = 101

17

Проблема взаимного исключения: пример

Таким образом возможна ситуация:

read(C); inc(C); write(C).

C = 101

C = 101

 

read(C);

 

 

read(C);

 

 

inc(C);

 

 

inc(C);

 

 

write(C).

 

 

 

write(C).

 

 

 

 

 

 

 

 

18

Проблема взаимного исключения: пример

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

C = 101

read(C); inc(C); write(C).

 

read(C);

 

 

read(C);

 

 

inc(C);

 

 

inc(C);

 

 

write(C).

 

 

 

write(C).

 

 

 

 

 

 

 

 

19

Понятие критической секции

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

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

20

Соседние файлы в папке Презентации лекций по ТОИ