
- •Вопрос1. Понятие программного обеспечения (по). Классификация программного обеспечения по выполняемым функциям. Основные свойства системного программного обеспечения и структура системного по.
- •Вопрос 2 .Операционные системы как ядро системного программного обеспечения
- •1)Управление процессами (программ во время выполнения);
- •Вопрос3 Классификация ос (по структуре и архитектурным принципам построения, по режимам работы). Примеры.
- •4) Общие принципы построения ос. Основные характеристики современных ос. Примеры реализации общих принципов и особенности организации и функционирования ос.
- •Вопрос 5. Определение и классификация ресурсов
- •Вопрос 6.Определение и классификация процессов. Примеры. Процессы и потоки.
- •Вопрос 7. Состояние процессов и функции ос по управлению процессами. Задачи, решаемые ос при реализации функций. Примеры решения.
- •Вопрос 8 . Проблема взаимного исключения. Понятие критической секции, её свойства, условия реализации. Примеры.
- •Вопрос 9. Программные методы реализации взаимного исключения. Примеры.
- •Вопрос 10. Понятие семафора, семафорные примитивы. Примеры объектов диспетчеризации в ms Windows, которые могут использоваться как «семафоры».
- •Вопрос 11. Применение бинарных семафоров для реализации взаимного исключения и синхронизации процессов.
- •Вопрос 12. Общие семафоры, решение задачи «писателей и читателей» при работе с циклическим буфером.
- •Вопрос 13. Проблема тупика и задачи, связанные с решение проблемы тупика. Примеры.
- •Вопрос 14. Задача предотвращения тупика, подходы к решению. Примеры.
- •Вопрос 15. Математическая модель для определения тупика. Определение заблокированных процессов, процессов, находящихся в тупике. Определение состояния тупика. Понятие выгодного состояния. Примеры.
- •Вопрос 16. Модель системы с повторно используемыми ресурсами (граф повторно используемых ресурсов). Примеры.
- •Вопрос 17. Модель системы с потребляемыми ресурсами (граф потребляемых ресурсов). Примеры.
- •Вопрос 18. Система с повторно используемыми и потребляемыми ресурсами (граф обобщённых ресурсов). Примеры.
- •Вопрос 19. Решение задачи распознавания тупика для систем с повторно используемыми ресурсами: основная теорема о тупике. Примеры редукции.
- •Вопрос 21. Распознавание тупиков в системах с повторно используемыми ресурсами с ограничениями на запросы. Примеры.
- •Вопрос 22. Распознавание тупиков в системах с потребляемыми ресурсами и в системах с обобщёнными ресурсами: алгоритм редукции. Примеры.
- •Вопрос 23. Распознавание тупиков в системах с потребляемыми ресурсами и в системах с обобщёнными ресурсами: системы с ограничениями на выполнение операций. Примеры.
- •Вопрос 24. Вывод системы из тупика. Общий подход и частный случай.
- •Вопрос 25. Обходы тупиков. Алгоритм банкира. Примеры.
Вопрос 18. Система с повторно используемыми и потребляемыми ресурсами (граф обобщённых ресурсов). Примеры.
Граф обобщенных ресурсов - это ориентированный двудольный граф
RG = (N, E),
где N есть множество вершин:
N =
( = { p1 , p2 , ..., pn}- конечное множество вершин, представляющих процессы в ВС, = { R1 , R2 , ..., Rm} - множество вершин, соответствующих ресурсам ВС, причем = CR SR, где CR - множество вершин, представляющих потребляемые ресурсы, SR - множество вершин, представляющих повторно используемые ресурсы (CR SR = ); = ), а E - множество дуг графа:
E ( ) ( ),
причем элементы графа обладают следующими свойствами:
Ri - вершина, представляющая повторно используемый ресурс RiSR, имеет пометку - пару (ci, ti ), где ci - емкость данного ресурса, а ti - количество единиц ресурса, доступных для распределения (свободных) в данный момент;
Ri - вершина, представляющая потребляемый ресурс RiCR, имеет пометку - неотрицательное целое число 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) по всем RiCR;
Ri pj - обозначение ребра (дуги) производителя ресурса Ri ;
ребра производителя являются постоянными и никогда не уничтожаются.
Вопрос 19. Решение задачи распознавания тупика для систем с повторно используемыми ресурсами: основная теорема о тупике. Примеры редукции.
Чтобы распознать состояние тупика в системе необходимо для каждого существующего в ней процесса определить сможет ли он выполняться сейчас или когда-либо. При этом по определению процесс находится в тупике только в том случае, когда он не сможет развиваться ни при каких условиях.
Наиболее общий способ распознавания тупика (моделирования благоприятного развития системы) основан на редукции (сокращении) графов ресурсов, представляющих исследуемое состояние системы.
Порядок действий при редукции графа ПИР процессом pi выглядит следующим образом:
удалить все ребра запросов (pi, Rj), исходящие из вершины, представляющей pi;
удалить все ребра (Rj, pi), показывающие распределение ресурсов процессу pi, причем для каждого ресурса Rj , для которого удаляется ребро (Rj, pi), изменить пометку соответствующей ему вершины: ti := ti + r, где r = |(Rj, pi)| - вес удаляемого ребра.
Освобождение ресурсов при выполнения редукции одним процессом может разблокировать другие процессы, запрашивающие эти ресурсы. Если это необходимо, то редукцию можно продолжить с помощью других процессов до получения несокращаемого графа повторно используемых ресурсов.
Граф ресурсов является несокращаемым, если он не может быть сокращен ни одним процессом (все процессы либо заблокированы, либо представляющие их вершины являются изолированными).
Граф ресурсов является полностью сокращаемым, если существует последовательность сокращений, которые удаляют все ребра графа.
Пример редукции графа ПИР приведен на рис.2.13.
Для графов ПИР порядок сокращений несущественен. Что доказывается следующей леммой:
Все последовательности сокращений данного графа ПИР приводят к одному и тому же несокращаемому графу.
(3, 0) (3, 2) (3, 3)
R
1
R1
R1
2
1 1 1 1
P
1
P2
P1 P2 P1 P2 P1 P2
1 1 1 1 1
R
2
R2
R2
(2, 1) (2, 1) (2, 2)
Рис.2.13. Последовательность сокращений графа ПИР
Состояние системы S есть состояние тупика тогда и только тогда, когда граф ПИР для состояния S не является полностью сокращаемым.
Данная теорема позволяет построить алгоритм распознавания тупика в системе: следует сократить граф ПИР, представляющий исследуемое состояние системы, если редукция приводит к вполне несвязному графу, то исходное состояние не было состоянием тупика, если же в результате сокращений будет получен несокращаемый граф, в котором останутся дуги, то исходное состояние является тупиковым, а несокращенные дуги показывают процессы, оказавшиеся в тупике, и его причину.
Алгоритм редукции для распознавания тупика может быть выполнен простым перебором всех вершин, соответствующих процессам, с выполнением редукции по незаблокированным процессам, имеющим запросы и/или владеющим ресурсами.
Более эффективный алгоритм может быть построен, если хранить дополнительную информацию о запросах, например, счетчики блокирующих запросов, и упорядочить запросы на ресурсы по их величинам.
Вопрос 20. Решение задачи распознавания тупика для систем с повторно используемыми ресурсами: частные случаи (системы с единичными ресурсами (алгоритм поиска цикла), системы с ограничениями на запросы, системы в выгодном состоянии (понятие узла, алгоритм поиска узла)).
Для систем с потребляемыми ресурсами алгоритм редукции выполняется иначе - сокращение графа процессом pi состоит из следующих операций:
удовлетворить все запросы процесса pi и удалить все ребра запросов (pi, Rj), исходящие из вершины, представляющей pi, уменьшив соответствующие пометки вершин (счетчики доступных единиц), представляющих выделенные ресурсы, на величины выполненных запросов;
для всех потребляемых ресурсов Rj таких, что процесс pi является их производителем, удалить все ребра (Rj, pi) производителей, освободив при этом достаточное количество ресурсов для удовлетворения всех имеющихся на них запросов от всех процессов в системе (для того чтобы не усложнять работы вычислением этого числа, введем специальное число такое, что для любого целого k выполняются условия: > k, + k = - k = ), пометку вершин, для которых данный процесс был производителем, заменяем на .
Для системы с потребляемыми ресурсами не выполняется приведенная выше лемма, то есть порядок сокращений при редукции графа потребляемых ресурсов в общем случае влияет на результат редукции (полученные после всех возможных сокращений несокращаемые графы потребляемых ресурсов могут быть различными). Пример результатов выполнения различных цепочек сокращений приведен на рис.2.14.
1
1
2
P
1
1 R1
P2
R2
P3
1 1
(а)
P1 R1 P2 R2 P3
(б)
1
P 1 1 R1 P2 R2 P3
0
(в)
Рис.2.14. Пример сокращений графа потребляемых ресурсов:
(а) исходный граф;
(б) результат редукции, начатой процессом p1;
(в) результат редукции, начатой процессом p2
Узел в ориентированном графе (N, E) есть подмножество вершин M N таких, что для всех вершин v M: P(v) = M (здесь P(v) - множество всех вершин, достижимых из вершины v).
Следующая теорема дает достаточное условие тупика для системы в выгодном состоянии.
Если состояние системы выгодное, то наличие узла в соответствующем графе повторно используемых ресурсов является достаточным условием тупика.
Приведенный ниже алгоритм дает возможность обнаружить узел в графе. Он основан на том, что узел по определению не может содержать вершину сток (сток - это вершина v, из которой не выходит ни одной дуги, то есть полустепень исхода такой вершины равна 0: od(v) = 0), а также вершины, из которых можно попасть в вершину-сток.
Sink := { v N | od(v) = 0 }
for all v Sink do
for all u : (u, v) E do
if u Sink then Sink := Sink { u } ;
if N Sink then write (‘В графе есть узел !’)
Алгоритм распознавания цикла в графе, время выполнения которого пропорционально числу дуг в графе (m n в худшем случае), основан на последовательном исключении дуг, направленных в стоки, его можно записать следующим образом (через w(v) обозначено число ребер, выходящих из вершины v):
Sink := { v N | od(v) = 0 }
for all v Sink do
begin
for all u : (u, v) E do
begin
w(u) := w(u) - 1 ;
if w(u) = 0 then Sink := Sink { u } ;
end
end
if Sink N then write (‘В графе есть цикл !’)