Содержание

Слайд 2

Нити исполнения (threads)

Ввести массив a
Ввести массив b
a = a + b
c

Нити исполнения (threads) Ввести массив a Ввести массив b a = a
= a + c
Вывести массив а

Ввести массив a
Ожидание окончания операции ввода
Ввести массив b
Ожидание окончания операции ввода
Ввести массив с
Ожидание окончания операции ввода
a = a + b
c = a + c
Вывести массив с

Слайд 3

Нити исполнения (threads)

Ввести массив A

Ввести массив C

A=A+B

C=A+C

Ожидание ввода A

Ввести массив B

Ожидание ввода

Нити исполнения (threads) Ввести массив A Ввести массив C A=A+B C=A+C Ожидание
B

Ожидание ввода C

Процесс 1

Процесс 2

Ожидание ввода A и B

Создание процесса 2

Создание общей памяти

Создание общей памяти

Переключение контекста

Переключение контекста

Переключение контекста

Переключение контекста

Вывести массив C

Ожидание вывода C

Слайд 4

Нити исполнения (threads)

Системный
контекст

Регистровый контекст

Код Данные вне стека

Процесс

Стек

Системный контекст нити

Системный контекст

Код Данные вне стека
Стек

Нить исполнения

Нить исполнения

Системный

Нити исполнения (threads) Системный контекст Регистровый контекст Код Данные вне стека Процесс
контекст нити

Регистровый контекст

Стек

parent

child

Слайд 5

Нити исполнения (threads)

Процесс

Готовность

Готовность

Исполнение

Готовность

Ожидание

Закончила исполнение

Готовность

Исполнение

Ожидание

Ожидание

Ожидание

Ожидание

Ожидание

Закончила исполнение

Закончила исполнение

Закончила исполнение

Закончила исполнение

Закончила исполнение

Закончил исполнение

Нити исполнения (threads) Процесс Готовность Готовность Исполнение Готовность Ожидание Закончила исполнение Готовность

Слайд 6

Нити исполнения (threads)

Ввести массив A

Ввести массив C

A=A+B

C=A+C

Ожидание ввода A

Ввести массив B

Ожидание ввода

Нити исполнения (threads) Ввести массив A Ввести массив C A=A+B C=A+C Ожидание
B

Ожидание ввода C

Нить 1

Нить 2

Ожидание ввода A и B

Создание нити 2

Переключение контекста

Переключение контекста

Переключение контекста

Переключение контекста

Вывести массив C

Ожидание вывода C

Слайд 7

Активности и атомарные операции

Отрезать ломтик хлеба
Отрезать ломтик колбасы
Намазать хлеб маслом
Положить колбасу

Активности и атомарные операции Отрезать ломтик хлеба Отрезать ломтик колбасы Намазать хлеб
на хлеб

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

Активность : приготовление бутерброда

Атомарные или неделимые операции

Слайд 8

Interleaving

Активность P: a b c

Активность Q: d e f

Последовательное выполнение PQ: a

Interleaving Активность P: a b c Активность Q: d e f Последовательное
b c d e f

Псевдопараллельное выполнение (режим разделения времени) :

?

a b c d e f

a b d c e f

a b d e c f

a b d e f c

. . .

d e f a b c

Слайд 9

Детерминированные и недетерминированные наборы активностей

Недетерминированный набор – при одинаковых начальных данных

Детерминированные и недетерминированные наборы активностей Недетерминированный набор – при одинаковых начальных данных
возможны разные результаты
Детерминированный набор – при одинаковых начальных данных всегда один результат

P:

x=2

y=x-1

Q:

x=3

y=x+1

(x, y):

(2, )

(2, 1)

(3, 1)

(3, 4)

(2, )

(3, )

(3, 4)

(3, 2)

(2, 3)

(2, 1)

Слайд 10

Условия Бернстайна (Bernstain)

P:

1) x=u+v

2) y=x*w

Входные переменные R1 = {u, v}
R2 =

Условия Бернстайна (Bernstain) P: 1) x=u+v 2) y=x*w Входные переменные R1 =
{x, w}

Выходные переменные W1 = {x}
W2 = {y}

R(P)={u, v, x, w}

W(P)={x, y}

Если:

W(P) ∩ W(Q) = {ø}

2) W(P) ∩ R(Q) = {ø}

3) R(P) ∩ W(Q) = {ø}

то набор активностей {P, Q} является детерминированным

Q:

Слайд 11

Критическая секция

Приходит в комнату

Приходит в комнату

Приходит в комнату

Уходит за пивом

Уходит за

Критическая секция Приходит в комнату Приходит в комнату Приходит в комнату Уходит
пивом

Уходит за пивом

Покупает 6 бут. пива

Покупает 6 бут. пива

Покупает 6 бут. пива

Приносит пиво

Приносит пиво

Приносит пиво

Достает 6 бут. пива

Приходит в комнату

Приходит в комнату

Слайд 12

Структура процесса, участвующего во взимодействии

while (some condition) {

entry section

critical section

exit section

remainder

Структура процесса, участвующего во взимодействии while (some condition) { entry section critical
section

}

Слайд 13

Программные алгоритмы организации взаимодействия

Требования, предъявляемые к алгоритмам

Программный алгоритм должен быть программным
Нет предположений

Программные алгоритмы организации взаимодействия Требования, предъявляемые к алгоритмам Программный алгоритм должен быть
об относительных скоростях выполнения и числе процессоров
Выполняется условие взаимоисключения (mutual exclusion) для критических участков
Выполняется условие прогресса (progress)
Выполняется условие ограниченного ожидания (bound waiting)

Слайд 14

Программные алгоритмы организации взаимодействия

Запрет прерываний

while (some condition) {

запретить все прерывания

critical section

разрешить все

Программные алгоритмы организации взаимодействия Запрет прерываний while (some condition) { запретить все
прерывания

remainder section

}

Обычно используется внутри ОС

Слайд 15

Программные алгоритмы организации взаимодействия

Переменная-замок

while (some condition) {

while (lock);

critical section

lock = 0;

remainder section

}

Нарушается

Программные алгоритмы организации взаимодействия Переменная-замок while (some condition) { while (lock); critical
условие взаимоисключения

Shared int lock = 0;

lock = 1;

while (some condition) {

while (lock);

critical section

lock = 0;

remainder section

}

lock = 1;

|

Слайд 16

Программные алгоритмы организации взаимодействия

Строгое чередование

while (some condition) {

while (turn != i);

critical section

turn

Программные алгоритмы организации взаимодействия Строгое чередование while (some condition) { while (turn
= 1-i;

remainder section

}

Нарушается условие прогресса

Shared int turn = 0;

while (some condition) {

while (turn != 1);

critical section

turn = 0;

remainder section

}

while (turn != 0);

turn = 1;

Pi

P1

P0

Shared int turn = 1;

Условие взаимоисключения выполняется

Слайд 17

Программные алгоритмы организации взаимодействия

Флаги готовности

while (some condition) {

while (ready[1-i]);

critical section

ready[i] = 0;

remainder

Программные алгоритмы организации взаимодействия Флаги готовности while (some condition) { while (ready[1-i]);
section

}

1-я часть условия прогресса выполняется

Shared int ready[2] = {0, 0};

while (ready [1]);

ready[0] = 0;

Pi

P1

P0

Условие взаимоисключения выполняется

ready[i] = 1;

2-я часть условия прогресса нарушается

while (some condition) {

critical section

remainder section

}

while (ready [0]);

ready[1] = 0;

ready[1] = 1;

ready[0] = 1;

Shared int ready[2] = {1, 1};