Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Процессы-ресурсы - теория.doc
Скачиваний:
10
Добавлен:
20.08.2019
Размер:
894.46 Кб
Скачать

2.3.3. Модель системы для исследования проблемы тупика

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

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

Состояние системы представляется графом типа “процесс-ресурс”. Свойства графа, представляющего состояние системы, зависят от типов ресурсов, имеющихся в системе. Для простоты предположим, что множество процессов и множество ресурсов в системе постоянны.

Рассмотрим графовую модель для системы с повторно используемыми ресурсами.

Повторно используемый ресурс (ПИР или ресурс типа SR) - это ресурс, состоящий из конечного множества идентичных единиц со следующими свойствами:

  • число единиц ресурса постоянно;

  • отсутствует возможность разделения ресурса (параллельного использования одних и тех же единиц ресурса несколькими процессами) - ресурс захватывается процессом, которому он выделен, в монопольное использование;

  • процесс может освободить только те единицы ресурса, которые ему были ранее распределены по его запросам.

Состояние системы с повторно используемыми ресурсами может изменяться только тремя операциями:

  • request (Ri, k) - запрос процесса pj, выполняющего данную операцию, на k единиц ресурса Ri ;

  • приобретение ресурса (выделение ресурса процессу pj в соответствии с выполненным им ранее запросом);

  • release (Ri, k) - освобождение процессом pj k единиц ранее выделенного ему ресурса Ri .

Операции запроса на ресурс и освобождения ресурса выполняются процессом, а операция выделения ресурса - системой в ответ на запрос, сделанный процессом.

Граф ПИР (SR-граф) - ориентированный двудольный граф

SR = (N, E),

где N есть множество вершин:

N =   

( = { p1 , p2 , ..., pn}- конечное множество вершин, представляющих процессы в ВС,  = { R1 , R2 , ..., Rm} - множество вершин, соответствующих SR-ресурсам ВС;    = ), а E - множество дуг графа:

E  (    )  (  ),

причем элементы графа обладают следующими свойствами:

  • Ri - вершина, представляющая повторно используемый ресурс Ri  , имеет пометку - пару (ci, ti ), где ci - емкость данного ресурса, а ti - количество единиц ресурса, доступных для распределения (свободных) в данный момент;

  • pj - вершина, представляющая процесс pj   в системе;

  • pj k Ri - ребро ( pj , Ri ) с весом | ( pj , Ri ) | = k, представляющее вып олненный процессом pj  , но пока не удовлетворенный запрос на k единиц повторно используемого ресурса Ri   ;

  • R i k pj - ребро ( Ri, pj ) с весом | ( Ri, pj ) | = k, представляющее все распределения ресурса Ri   процессу pj   по его удовлетворенным запросам ;

  • к аждый запрос, выполняемый процессом pj   на ресурс Ri   должен удовлетворять ограничению:

| ( Ri, pj ) | + | ( pj , Ri ) |  ci,

т о есть сумма выполненных распределений и запросов конкретного ресурса относительно любого из процессов не может превышать количества единиц ресурса, имеющихся в системе для всех i и j (i = 1, m, j = 1, n ); в противном случае запрос считается ошибочным и не может быть выполнен;

  • в общей сложности в системе для каждого ресурса Ri   может быть сделано не более чем ci назначений, то есть

n

 | ( Ri, pj ) |  ci

j = 1

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

Пусть система находится в состоянии Sl. Процесс pj может запросить любое число ресурса Ri, удовлетворяющее приведенному выше ограничению, с помощью операции request(Ri, r). Выполнение процессом запроса приведет к появлению в SR-графе дополнительного ребра запроса с соответствующим весом r. Новый граф представляет состояние системы Sk, такое что

pj

Sl  Sk .

Операция приобретения процессом pj ресурса Ri по запросу, представленному ребром ( pj , Ri ), может быть выполнена, если

n

| ( pj , Ri ) | +  | ( Ri, ph ) |  ci

h = 1

или

| ( pj , Ri ) |  ti

n

(где ti = ci -  | ( Ri, ph ) | ).

h = 1

Выполнение этой операции для процесса, которому еще не был распределен ресурс Ri, приведет к удалению дуги ( pj , Ri ), представлявшей удовлетворенный запрос, и появлению новой дуги ( Ri, pj ) с весом, равным весу удаленной дуги запроса (дуга запроса “обращается” - меняется ее направление). В том случае, если данный ресурс уже был выделен процессу, увеличивается вес уже существующей дуги ( Ri, pj ), представляющей распределение данного ресурса этому процессу. При этом в любом случае уменьшается величина ti (то есть сокращается количество доступных для распределения единиц распределенного ресурса) на величину удовлетворенного запроса.

Операция освобождения release (Ri, r) процессом pj r единиц ресурса Ri может быть выполнена тогда и только тогда, когда процесс не имеет неудовлетворенных запросов (в графе ПИР нет дуг, исходящих из вершины, представляющей данный процесс) и имеет в своем распоряжении ресурс Ri (есть дуга с положительным весом не меньшим чем r: | ( Ri, pj ) |  r).

В результате освобождения ресурса новое состояние системы представляется графом ПИР, в котором изменилась пометка вершины, соответствующей ресурсу Ri (величина ti увеличилась на количество освобожденных процессом единиц ресурса: ti := ti + r), и либо изменился вес дуги (Ri,pj), показывающей распределение данного ресурса процессу pj (вес уменьшается на количество освобожденных единиц ресурса: |(Ri,pj)| := |(Ri,pj)| - r), либо (если процесс освободил ресурс полностью (вес |(Ri,pj)| равнялся r)) дуга (Ri, pj ) удаляется из графа.

Рассмотрим примеры.

Пример 1. Пусть в системе есть два процесса P1 и P2 и два единичных повторно используемых ресурса R1 и R2. Процессы имеют следующее описание:

Процесс 1

Процесс 2

process P1 ;

begin ...

request ( R1, 1) ;

...

request ( R2, 1) ;

...

release ( R2, 1) ;

...

release ( R1, 1) ;

...

end.

process P2 ;

begin ...

request ( R2, 1) ;

...

request ( R1, 1) ;

...

release ( R2, 1) ;

...

release ( R1, 1) ;

...

end.

Предположим, что процессы выполняют свои операции над ресурсами в порядке, который приводит к изменению состояний системы, показанному последовательно изменяемыми графами ПИР, приведенными на рис.2.10. Последний граф ПИР соответствует тупиковому состоянию системы S7 (процессы P1 и P2 взаимно блокируют друг друга). Другая последовательность выполнения операций могла бы позволить процессам успешно завершиться.

Пример 2. В системе выполняются n процессов и существует разделяемый повторно используемый ресурс R емкости m. Описание программы каждого процесса выглядит следующим образом:

process P1 ;

begin ...

request ( R, 1) ;

...

request ( R, 1) ;

...

release ( R, 1) ;

...

release ( R, 1) ;

...

end.

( 1, 1) (1, 1) (1, 0)

R 1 R1 R1

S1: S2: 1 S3: 1

p1 p2 p1 p2 p1 p2

R2 R2 R2

(1, 1) (1, 1) (1, 1)

( 1, 0) (1, 0) (1, 0)

R1 R1 R1

S4: 1 S5: 1 S6: 1

p1 p2 p1 p2 p1 p2

R2 1 R2 1 1 R2 1

(1, 1) (1, 0) (1, 0)

( 1, 0)

R 1

S7: 1 1

p1 p2

1 R2 1

(1, 0)

Рис.2.10. Изменение состояний системы при выполнении процессами

операций над ресурсами:

P1 P1 P2 P2 P1 P2

S1  S2  S3  S4  S5  S6  S7

S1 - начальное состояние системы до выполнения процессами запросов;

S2 - состояние системы после выполнения процессом P1 операции запроса ресурса request(R1,1);

S3 - состояние системы после выделения процессу P1 единицы ресурса R1;

S4 - состояние системы после выполнения процессом P2 операции запроса ресурса request(R2,1);

S5 - состояние системы после выделения процессу P2 единицы ресурса R2;

S6 - состояние системы после выполнения процессом P1 операции запроса ресурса request(R2,1);

S7 - состояние системы после выполнения процессом P2 операции запроса ресурса request(R1,1)

В случае, если m невелико (недостаточно для удовлетворения всех запросов от n процессов: m < n), система может попасть в тупиковое состояние, представленное графом ПИР на рис.2.11.

(m, 0)

R

1 1 1 1 1 1 1 1

p 1 p2 p3 ... pn-1 pn

Рис.2.11. Тупиковое состояние в системе с составным ресурсом

Для систем с потребляемыми ресурсами также можно ввести графовую модель для исследования проблемы тупика - граф потребляемых ресурсов (ПР).

Потребляемый ресурс (ресурс типа CR) - это ресурс, обладающий следующими свойствами:

  • число единиц потребляемого ресурса изменяется по мере того, как приобретаются (расходуются) процессами-потребителями и освобождаются (производятся) процессами производителями отдельные его элементы; потенциально число таких элементов неограниченно (но конечно в каждый момент времени);

  • процесс-производитель увеличивает число единиц ресурса, освобождая одну или более единиц этого ресурса, которые он создает;

  • процесс-потребитель уменьшает число единиц ресурса, запрашивая и приобретая одну или более единиц этого ресурса; приобретенные единицы ресурса не возвращаются в систему.

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

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

Системы с потребляемыми ресурсами также обладают свойствами, которые отличают их от систем с повторно используемыми ресурсами:

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

  • ни одно состояние системы с ПР не является безопасным, так как все незаблокированные процессы могут последовательно запросить количество ресурсов, превышающее имеющиеся их запасы.

В системах с потребляемыми ресурсами должны быть известны их производители. Допустим, что процессы-производители для каждого потребляемого ресурса известны априори. Это значит, что множество процессов, которые могут выполнять операции освобождения ресурсов, определено и фиксировано.

При сформулированных ограничениях можно ввести определение графа ПР (CR-графа), представляющего состояние системы с потребляемыми ресурсами.

Граф потребляемых ресурсов - это ориентированный двудольный граф

CR = (N, E),

где N есть множество вершин:

N =   

( = { p1 , p2 , ..., pn}- конечное множество вершин, представляющих процессы в ВС,  = { R1 , R2 , ..., Rm} - конечное множество вершин, соответствующих CR-ресурсам ВС;    = ), а E - множество дуг графа:

E  (    )  (  ),

причем элементы графа обладают следующими свойствами:

  • Ri - вершина, представляющая потребляемый ресурс Ri  , имеет пометку - неотрицательное целое число ti, обозначающее число доступных для распределения в данный момент единиц этого ресурса;

  • pj - вершина, представляющая процесс pj   в системе;

  • для каждого ресурса Ri   существует непустое множество процессов-производителей этого ресурса  (Ri)   и граф ПР содержит дугу производителя ( Ri, pj ) для каждого pj   (Ri) по всем Ri  ;

R i pj - обозначение ребра (дуги) производителя ресурса Ri ;

ребра производителя являются постоянными в графе потребляемых ресурсов и никогда не уничтожаются;

  • pj k Ri - дуга ( pj , Ri ) с весом | ( pj , Ri ) | = k, представляющая выполненный процессом pj  , но пока не удовлетворенный запрос на k единиц потребляемого ресурса Ri  .

Как уже было сказано, состояние системы изменяется только при выполнении запросов, приобретении процессом ресурсом и при освобождении процессом-производителем новых единиц ресурсов.

Пусть система находится в состоянии Sl. Процесс pj может запросить любое конечное число любого потребляемого ресурса Ri с помощью операции request(Ri, r). Выполнение процессом запроса приведет к появлению в CR-графе дополнительного ребра запроса ( pj , Ri ) с соответствующим весом r. Новый граф представляет состояние системы Sk, такое что

pj

Sl  Sk .

Операция приобретения процессом pj ресурса Ri по запросу, представленному ребром ( pj , Ri ), может быть выполнена, если

| ( pj , Ri ) |  ti

(то есть в системе есть достаточное количество единиц ресурса для удовлетворения запроса). При этом количество доступных единиц приобретаемого ресурса модифицируется (уменьшается на величину выполненного запроса):

ti := ti - | ( pj , Ri ) |.

Выполнение этой операции приведет к удалению дуги ( pj , Ri ), представлявшей удовлетворенный запрос.

Операция освобождения release (Ri, r) процессом pj r единиц ресурса Ri может быть выполнена тогда и только тогда, когда процесс не имеет неудовлетворенных запросов (в графе ПР нет дуг, исходящих из вершины, представляющей данный процесс) и процесс pj является производителем этого ресурса (pj  (Ri)). В результате выполнения этой операции число доступных единиц ресурса ti увеличивается на r: ti := ti + r. Таким образом, новый граф, представляющий состояние системы после освобождения производителем указанного количества единиц ресурса (r может быть любым неотрицательным целым числом), отличается только значением пометки вершины, представляющей произведенный ресурс.

Рассмотрим пример.

В системе есть два процесса P1 и P2 и два потребляемых ресурса R1 и R2. Процесс P1 является производителем ресурса R1 и для производства единицы ресурса R1 запрашивает единицу ресурса R2, процесс P2 - производитель R2, причем для освобождения единицы этого ресурса ему нужно потребить единицу ресурса R1. Первоначально в системе имеется k единиц ресурса R1 и ни одной единицы ресурса R2.

Описания процессов имеют вид:

Процесс 1

Процесс 2

process P1 ;

begin ...

while true do

begin ...

request ( R2, 1) ;

...

release ( R1, 1) ;

...

end ...

end.

process P2 ;

begin ...

while true do

begin ...

request ( R1, 1) ;

...

release ( R2, 1) ;

...

end ...

end.

Предположим, что процесс P1 первым подошел к выполнению операции запроса на единицу потребляемого ресурса R2. Так как в системе существует k единиц ресурса R1, но нет ни одной доступной единицы ресурса R2, то процесс P1 не сможет выполнить освобождение единицы ресурса R1, для которого он является производителем (условия выполнения операции освобождения ресурса требуют, чтоб у процесса-производителя не было неудовлетворенных запросов). Процесс P1 блокируется перед выполнением операции освобождения ресурса (по определению заблокированного процесса - он не может выполнить ни одной операции, изменяющей состояние системы). Процесс P1 будет заблокирован до появления в системе хотя бы одной единицы ресурса R2, который может быть произведен его производителем - процессом P2, то есть процесс P1 останется заблокированным в состоянии ожидания ресурса R2 до выполнения процессом P2 операции по освобождению единицы этого ресурса.

Процесс P2 не может быть заблокирован сразу, так как для его работы есть k единиц ресурса R1. Этот процесс, используя ресурс R1, может произвести k единиц ресурса R2, если за это время процесс P1 не использует ни одной единицы, процесс P2 перейдет в состояние ожидания (будет блокирован запросом на ресурс R1, производимый процессом P1) до освобождения процессом P1 хотя бы одной единицы запрошенного ресурса.

На рис.2.12 приведены графы потребляемых ресурсов, соответствующие следующей последовательности изменений состояния системы (S1 - начальное состояние):

P1 P2 P2 P2 P1 P1

S1  S2  S3  S4  S5  S6  S7

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

В приведенном примере операции, выполняемые процессами приводят к следующим изменениям состояния системы:

S1 - начальное состояние системы до выполнения процессами запросов;

S2 - состояние системы после выполнения процессом P1 операции запроса ресурса request(R2,1);

S3 - состояние системы после выполнения процессом P2 операции запроса ресурса request(R1,1);

S4 - состояние системы после выделения процессу P2 единицы ресурса R1;

S5 - состояние системы после выполнения процессом P2 операции освобождения единицы ресурса R2 операцией release(R2,1);

S6 - состояние системы после выделения процессу P1 единицы ресурса R2;

S7 - состояние системы после выполнения процессом P1 операции освобождения единицы ресурса R1 операцией release(R1,1).

k k k

R 1 R1 R1

S1: S2: S3: 1

p1 p2 p1 p2 p1 p2

1 1

R2 R2 R2

0 0 0

k -1 k-1 k-1

R1 R1 R1

S4: S5: S6:

p1 p2 p1 p2 p1 p2

1 1

R 2 R2 R2

0 1 0

k

R 1

S7:

p1 p2

R 2

0

Рис.2.12. Изменение состояний системы при выполнении процессами

операций над ресурсами

Таким образом, были введены математические модели для систем с повторно используемыми и потребляемыми ресурсами. Однако обычно в ВС используются оба типа ресурсов. Для представления таких систем можно объединить введенные выше модели.

Граф обобщенных ресурсов - это ориентированный двудольный граф

RG = (N, E),

где N есть множество вершин:

N =   

( = { p1 , p2 , ..., pn}- конечное множество вершин, представляющих процессы в ВС,  = { R1 , R2 , ..., Rm} - множество вершин, соответствующих ресурсам ВС, причем  = CR  SR, где CR - множество вершин, представляющих потребляемые ресурсы, SR - множество вершин, представляющих повторно используемые ресурсы (CR  SR = );    = ), а E - множество дуг графа:

E  (    )  (  ),

причем элементы графа обладают следующими свойствами:

  • Ri - вершина, представляющая повторно используемый ресурс RiSR, имеет пометку - пару (ci, ti ), где ci - емкость данного ресурса, а ti - количество единиц ресурса, доступных для распределения (свободных) в данный момент;

  • Ri - вершина, представляющая потребляемый ресурс RiCR, имеет пометку - неотрицательное целое число ti, обозначающее число доступных для распределения в данный момент единиц этого ресурса;

  • pj - вершина, представляющая процесс pj   в системе;

  • pj k Ri - дуга (pj, Ri) с весом |(pj, Ri)|=k, представляющая вып олненный процессом pj  , но пока не удовлетворенный запрос на k единиц повторно используемого ресурса Ri  SR ;

  • каждый запрос, выполняемый процессом pj   на ресурс Ri  SR, должен удовлетворять ограничению:

| ( pj , Ri ) |  ci, - | ( Ri, pj ) | ,

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

  • pj k Ri - дуга (pj, Ri) с весом |(pj, Ri) |=k, представляющая вып олненный процессом pj  , но пока не удовлетворенный запрос на k единиц потребляемого ресурса Ri  CR ;

  • R i k pj - ребро (Ri, pj) с весом |(Ri, pj)|=k, представляющее все распределения ресурса Ri  SR процессу pj   по его удовлетворенным запросам ;

  • в общей сложности в системе для каждого ресурса Ri  SR может быть сделано не более чем ci назначений, то есть

n

 | ( Ri, pj ) |  ci ;

j = 1

  • для каждого ресурса Ri  CR существует непустое множество процессов-производителей этого ресурса  (Ri)   и граф обобщенных ресурсов содержит дугу производителя (Ri, pj) для каждого pj (Ri) по всем RiCR;

R i pj - обозначение ребра (дуги) производителя ресурса Ri ;

ребра производителя являются постоянными и никогда не уничтожаются.

Операции в системе с обобщенными ресурсами выполняются в соответствии с правилами, установленными для ресурсов различных типов, перечисленными выше.

При определении тупика было введено понятие заблокированного процесса. Сейчас можно дать определение, которое указывало бы и на причину блокировки.

Процесс pj заблокирован, если он не способен выполнить ни одну из трех операций, изменяющих состояние системы. Эта ситуация может возникнуть только тогда, когда процесс выдал запросы, которые не могут быть удовлетворены за счет имеющихся в данном состоянии ресурсов, то есть процесс pj заблокирован, если существует по крайней мере один ресурс Ri такой, что

| ( pj , Ri ) | > ti .

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

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

Выгодное состояние - это такое состояние системы, в котором все процессы, имеющие запросы, заблокированы.

Большинство систем управления ресурсами реализуют именно такую стратегию распределения ресурсов.

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

При использовании вводимой графовой модели будем считать, что выполняются следующие условия:

  • нет динамического порождения процессов и ресурсов (множество вершин графа не изменяется);

  • процессы недетерминированы (в любое время любым процессом может быть выполнена любая операция);

  • состояние системы может изменяться только тремя операциями:

  • request (Ri, k) - запрос процесса pj, выполняющего данную операцию, на k единиц ресурса Ri ; для ПИР операция может быть выполнена, если только запрос верен (соблюдаются указанные выше условия); в результате ее выполнения в графе ресурсов появляется соответствующая этому запросу дуга (pj, Ri);

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

  • release (Ri, k) - освобождение процессом pj k единиц ресурса Ri (операция выполняется тогда и только тогда, когда pj не имеет запросов и ему распределено указанное в операции количество повторно используемого ресурса Ri или данный процесс является производителем потребляемого ресурса Ri); выполнение операции изменяет пометку вершины, представляющей освобожденный ресурс, а для графа ПИР также удаляется (при освобождении всех единиц ресурса) дуга выделения или уменьшается на количество освобожденных единиц ее вес.

Все задачи, рассматриваемые ниже, решаются при выполнении перечисленных условий.

Параллельное использование общих ресурсов требует также решения задачи взаимного исключения. Предполагается, что эта задача решена одним из рассмотренных выше методов.

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

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

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

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