Обнаружение взаимоблокировок при наличии нескольких ресурсов каждого типа

В системе имеем наборы однотипный ресурсов (одного класса). Классов ресурсов m. Процессов n. Для обнаружения тупиков поддерживается несколько структур.

· E - вектор существующих ресурсов

· С - матрица текущего распределения

Элемент Cij - показывает, сколько экземпляров j-го класса ресурсов принадлежит i-му процессу.

· R - матрица запросов, показывает, сколько еще экземпляров ресурсов нужно процессу для благополучного завершения (j-го ресурса i-му процессу)

· A - вектор доступных ресурсов.

Алгоритм:

1) Ищем немаркированный процесс Pi, для которого i-я строка матрицы R <=A (запросы меньше возможностей)

2) Если так, процесс найдет, прибавляем i-ю строку матрицы С к вектору А и возвращаемся к 1. Если таких процессов не существует, то алгоритм заканчивается (если все процессы промаркированы, то тупика нет)

Предотвращение взаимоблокировки. Алгоритм банкира для одного вида ресурсов

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

Алгоритм банкира для 1 вида ресурсов (основан на избегании опасных состояний):

Алгоритм рассматривает запросы на предоставления ресурсов по мере их поступления. Каждый раз проверяет, приведет ли удовлетворение запроса к безопасному состоянию. Если да - запрос удовлетворяется, если нет - откладывается на более позднее время.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: