Philosophers

34
Обедающие философы наносят ответный удар Алексей Фёдоров @23derevo

Transcript of Philosophers

Page 1: Philosophers

Обедающие философы наносят ответный удар

Алексей Фёдоров

@23derevo

Page 2: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.2

The following is intended to outline our general product

direction. It is intended for information purposes only, and may

not be incorporated into any contract. It is not a commitment to

deliver any material, code, or functionality, and should not be

relied upon in making purchasing decisions. The development,

release, and timing of any features or functionality described

for Oracle’s products remains at the sole discretion of Oracle.

Page 3: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.3

Агенда

Проблема обедающих философов

Проблемы с обедающими философами

Теория

Практика на Java

Page 4: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.4

Проблема обедающих философовDijkstra, 1965 Hoare, 1985

Page 5: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.5

Проблема обедающих философов

5 философов по кругу

– Тарелка с едой перед каждым

– Вилки между тарелками

Каждый может

– Размышлять

– Брать одну вилку

– Есть двумя вилками

– Класть одну вилку

Dijkstra, 1965 Hoare, 1985

Page 6: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.6

Проблемы с обедающими философами

Пусть каждый философ действует по

некоторому алгоритму

Могут ли все философы умереть с

голоду

Можно ли составить такой алгоритм,

чтобы все философы гарантированно

не умерли с голоду?

Page 7: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.7

Параметры задачи

Количество философов

Есть ли возможность положить вилку, не пожрамши

Сколько времени философ ест

– Фиксированное или случайная величина

Сколько времени философ размышляет

– Фиксированное или случайная величина

– Как это время соотносится с временем еды

Какие ещё инструменты/элементы есть в системе?

Что ещё?

Page 8: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.8

Фиксированное время и случайное время

Случайное время задаётся какой-то функцией распределения

Константа тоже задаётся функцией распределения

– А бывают ли вообще константы в реальном мире?

Page 9: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.9

Фиксированное время и случайное время

Случайное время задаётся какой-то функцией распределения

Константа тоже задаётся функцией распределения

– А бывают ли вообще константы в реальном мире?

200 40 60

Page 10: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.10

Фиксированное время и случайное время

Случайное время задаётся какой-то функцией распределения

Константа тоже задаётся функцией распределения

– А бывают ли вообще константы в реальном мире?

200 40 60

Page 11: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.11

Решение

Как только философ хочет есть, он делает следующие шаги:

1. Берёт левую от себя вилку

2. Берёт правую от себя вилку

3. Ест

4. Кладёт правую от себя вилку

5. Кладёт левую от себя вилку

И так по кругу

Page 12: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.12

Моделирование на Java

Page 13: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.13

Стенд

Dell Latitude E6420

– Intel Core i7

4 cores x 2 threads = 8 HW threads

2,2 GHz

– 16 Gb RAM

– Oracle JDK 8 update 5

Windows 7 SP1

Page 14: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.14

SMALL DEMO

Page 15: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.15

Теория

Page 16: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.16

Взаимоблокировка

Ресурс – объект, к которому предоставляется доступ.

Во время работы процесс может брать (захватывать) ресурсы.

Взаимоблокировка – такое состояние системы, при котором

два или более процессов не могут продолжать своё выполнение

из-за отсутствия необходимых для этого ресурсов.

Каждый ждёт другого, поэтому никто не может продолжить

Page 17: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.17

Выгружаемые и невыгружаемые ресурсы

Выгружаемые ресурсы – ресурсы, которые могут быть

безболезненно отобраны у процесса, который ими обладает

Невыгружаемые ресурсы – ресурсы, которые нельзя

отобрать у процесса, не вызвав при этом сбой в вычислениях

Мы будем говорить, в основном, о невыгружаемых ресурсах

Page 18: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.18

Операции над невыгружаемыми ресурсами

Запрос ресурса

– Берём ресурс или ждём (встаём в «очередь» ожидания)

– Виды блокирующих запросов

без таймаута

с таймаутом

с исключением (ошибкой)

Использование ресурса

Освобождение ресурса

Page 19: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.19

Условия возникновения взаимоблокировок

Коффман, 1971

1. Условие взаимного исключения ( ≤ 1 )

2. Условие удержания и ожидания ( 1 + )

3. Условие невыгружаемости ( < )

4. Условие циклического ожидания ( O )

Следствие:

любая стратегия упреждения/обнаружения/устранения

блокировок основана на нарушении какого-то из этих пунктов

Page 20: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.20

Моделирование взаимоблокировок

Граф ресурсов (Holt, 1972)

Page 21: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.21

Стратегии борьбы с блокировками

Игнорирование проблемы

Обнаружение и восстановление

Динамическое уклонение

Предотвращение за счёт структурного подавления любого

из четырёх необходимых для возникновения условий:

1. Условие взаимного исключения

2. Условие удержания и ожидания

3. Условие невыгружаемости

4. Условие циклического ожидания

Page 22: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.22

Игнорирование проблемы

Делаем вид, что проблема отсутствует

– Насколько часто возникает

проблема?

– Как часто возникают сбои в системе

по другим причинам?

– Насколько серьёзны могут быть

последствия?

Page 23: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.23

Обнаружение взаимоблокировок и восстановление работоспособности

Шаги

– Позволить блокировке произойти

– Пытаться обнаружить момент возникновения

– Попробовать восстановить работоспособность

В нашем примере можно просто перезапускать философов

Page 24: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.24

Выход из взаимоблокировки

Приоритетный захват ресурсов

– Приоритизировать (все) процессы

– Отобрать ресурс у менее приоритетного процесса

Откат

– Периодически создаются контрольные точки

– При обнаружении блокировки происходит откат

При откате часть работы (которая была выполнениа

после прохождания последней контрольной точки)

теряется

Уничтожение и перезапуск процессов

Page 25: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.25

Уклонение от взаимоблокировки

Траектории ресурса

Безопасное и небезопасное состояние

Алгоритм банкира

– Дейкстра, 1965

Page 26: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.26

Предотвращение взаимоблокировки

Атака условия взаимного исключения

Атака условия ожидания и удержания

Атака условия невыгружаемости

Атака условия циклического ожидания

Page 27: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.27

Атака условия взаимного исключения

Редко возможна: часто программа становится некорректной

Убирать ненужные локи

Иногда функциональность не страдает

Page 28: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.28

Атака условия ожидания и удержания

Запрашивать ВСЕ необходимые ресурсы не в процессе

работы, а до начала работы.

– Но не всегда ресурсы известны заранее

Вначале временно высвободить все удерживаемые ресурсы

Page 29: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.29

Атака условия невыгружаемости

Разрешить выгружать!

Page 30: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.30

Атака условия циклического ожидания

Нумерация ресурсов

Page 31: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.31

DEMO TIME

Page 32: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.32

Литература

Page 33: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.33

Литература

Page 34: Philosophers

Copyright © 2014, Oracle and/or its affiliates. All rights reserved.34

Q&A

@23derevo

[email protected]

https://bitbucket.org/23derevo/concurrency