Алгоритм банкира
Презентацию к данной лекции Вы можете скачать здесь.
Введение
В данной лекции продолжается изложение темы, начатой в "Тупики (deadlocks), методы предотвращения и обнаружения тупиков" , - методы и алгоритмы борьбы с тупиками при распределении ресурсов операционной системой. Рассмотрены следующие вопросы:
- Определение безопасного состояния системы
- Алгоритм построения графа распределения ресурсов
- Алгоритм банкира для безопасного распределения ресурсов (с избежанием тупиков)
- Принципы обнаружения тупиков
- Граф wait-for
- Алгоритм обнаружения тупиков и его использование
- Восстановление после тупика
- Комбинированный подход к обработке тупиков.
Безопасное состояние системы
Безопасным состоянием назовем такое состояние, перевод системы в которое не приведет к появлению тупиков.
Общий принцип избежания тупиков состоит в следующем. Когда процесс запрашивает доступный ресурс, система должна определить, приведет ли немедленное выделение данного ресурса к безопасному состоянию системы.
Система находится в безопасном состоянии, если существует безопасная последовательность, состоящая из всех процессов в системе.
Безопасной последовательностью процессов называется последовательность процессов <P1, … Pn>, такая, что для каждого процесса Pi ресурсы, которые он может еще запросить, могут быть выделены из текущих доступных ресурсов и ресурсов, удерживаемых процессами Pj , где j < i.
Если последовательность процессов безопасна, то система может придерживаться следующей безопасной стратегии, с точки зрения распределения ресурсов и исполнения процессов:
- Если потребности процесса Pi в ресурсах не могут быть немедленно удовлетворены, то процесс может подождать, пока завершатся процессы Pj (где j < i ), удерживающие требуемые ресурсы;
- Когда процессы Pj завершены, процесс Pi может получить требуемые ресурсы, выполниться, вернуть удерживаемые ресурсы и завершиться;
- После завершения процесса Pi , процесс Pi+1 может получить требуемые им ресурсы, и т.д.
Таким образом, справедливы следующие утверждения:
- Если система в безопасном состоянии, тупиков нет;
- Если системы в небезопасном состоянии, тупики возможны;
- Для того, чтобы избежать тупиков, необходимо проверять перед выделением ресурсов, что система никогда не придет в небезопасное состояние.
Модифицированный вариант графа распределения ресурсов для стратегии избежания тупиков
Граф распределения ресурсов рассмотрен в "Тупики (deadlocks), методы предотвращения и обнаружения тупиков" . Для реализации стратегии избежания тупиков к данному графу необходимо добавить информацию не только о фактических, но и о возможных в будущем запросах ресурсов со стороны процессов. Для этого, в дополнение к дугам запросов и присваиваний, введем в рассмотрение дугу потребности (claim edge), которая ведет из вершины-процесса Pi в вершину-ресурс Rj, обозначается пунктирной линией и означает, что процесс Pi может потребовать ресурс Rj.
Когда процесс фактически запрашивает данный ресурс, дуга потребности преобразуется в дугу запроса (пунктирная линия заменяется сплошной).
Когда процесс освобождает ресурс, дуга присваивания преобразуется обратно в дугу потребности.
Цель данной модификации графа – обеспечить, чтобы потребность в ресурсах была априорно известна системе.
Пример графа распределения ресурсов для стратегии избежания тупиков приведен на рис. 14.1.
Легко видеть, что небезопасные состояния системы отображаются циклами в модифицированном графе распределения ресурсов. Пример небезопасного состояния на графе распределения ресурсов приведен на рис. 14.2.
Принципы алгоритма банкира
Алгоритм банкира для безопасного распределения ресурсов операционной системой (с избежанием тупиков) был предложен Э. Дейкстрой и впервые реализован в операционной системе THE в конце 1960-х гг. Происхождение названия связано с тем, что поведение алгоритма напоминает осторожную стратегию банкира при проведении банковских операций. Принципы алгоритма банкира следующие.
- Каждый процесс должен априорно обозначить свои потребности в ресурсах по максимуму.
- Когда процесс запрашивает ресурс, ему, возможно придется подождать (выделение ресурсов по запросу не всегда может произойти немедленно).
- Когда процесс получает требуемые ресурсы, он должен их вернуть системе за ограниченный период времени.