
- •Вопрос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. Обходы тупиков. Алгоритм банкира. Примеры.
Вопрос 8 . Проблема взаимного исключения. Понятие критической секции, её свойства, условия реализации. Примеры.
Взаимное исключение необходимо в том случае, когда несколько процессов работают параллельно с разделяемыми (общими) данными, совместное использование которых может привести к их разрушению или к конфликтной ситуации.
Критическая секция (интервал, участок) - это последовательность команд программы, операции которой связаны с обращением к разделяемым данным, причем параллельное выполнение несколькими процессами действий, заданных в критических секциях, может привести к разрушению этих данных.
Требования к КС:
в любой момент времени только один процесс может находиться в своей критической секции по данному ресурсу (это главное требование - взаимное исключение);
ни один процесс не должен ждать бесконечно долго входа в критическую секцию (реализация взаимного исключения не должна приводить к ошибкам или невозможности выполнения процессами своих функций - взаимное исключение только устанавливает порядок доступа к общим ресурсам, исключающий их разрушение);
ни один процесс не может находиться в своей критической секции бесконечно долго (это следствие предыдущего требования - все процессы в течение приемлемого времени должны получить доступ к разделяемым данным для выполнения своих функций);
никакой процесс, находящийся вне своей критической секции, не должен задерживать выполнение других процессов, ожидающих входа в свои критические секции.
Относительно режима работы в КС справедливы утверждения:
относительные скорости процессов неизвестны;
программа может останавливаться только вне ее критической секции;
операции считывания и записи разделяемых данных неделимы;
процессы не имеют приоритетов, связанных с доступом к общим данным, то есть нет приоритетов на вход в критические секции;
одновременные обращения к одним и тем же данным для выполнения операции чтения или записи более чем одного процессора приведут к последовательным обращениям в неустановленном порядке.
Вопрос 9. Программные методы реализации взаимного исключения. Примеры.
1. использование общей переменной (N), указывающей номер процесса, чья очередь войти в критическую секцию в данный момент.
N –н ачальное значение этой переменной должно быть установлено при инициализации системы (до запуска процессов P1 и P2). Предположим, что первым в критическую секцию должен быть допущен процесс P1.
Процедура инициализации |
Первый процесс |
Второй процесс |
procedure INIT; common integer N ; begin N := 1 ; start(P1) ; start(P2) end INIT .
|
process P1; common integer N ; begin while true do begin BEFORE1 ; while N = 2 do ; CS1 ; N := 2 ; AFTER1 ; end end P1 . |
process P2; common integer N ; begin while true do begin BEFORE2 ; while N = 1 do ; CS2 ; N := 1 ; AFTER2 ; end end P2 . |
Цикл, вставленный в программы перед началом критических секций, позволяет организовать ожидание момента, когда подойдет очередь данного процесса для входа в критическую секцию. Первым при установленном порядке доступ к разделяемым данным должен получить процесс P1. Оба процесса, дождавшись возможности входа в критическую секцию, выполняют заданные в ней действия и сразу после выхода из критической секции передают очередь на вход следующему процессу, установив его номер в переменной N. Первый процесс передает очередь на доступ к разделяемому ресурсу второму процессу, а второй - первому.
Минус: процесс имеющий право на вход в свою критическую секцию, но пока не вошедший в нее блокирует вход в критические секции другим процессам, которые могут быть готовы к обработке общих данных, но не могут получить к ним доступ
2. использование переменных-флажков, которые представляют собой признак, показывающий, не находится ли соответствующий ей процесс в своей критической секции.
Процедура инициализации |
Первый процесс |
Второй процесс |
procedure INIT; common boolean C1,C2 ; begin C1 := false ; C2 := false ; start(P1) ; start(P2) end INIT .
|
process P1; common boolean C1,C2 ; begin while true do begin BEFORE1 ; while C2 do ; C1 := true ; CS1 ; C1 := false ; AFTER1 ; end end P1 . |
process P2; common boolean C1,C2 ; begin while true do begin BEFORE2 ; while C1 do ; C2 := true ; CS2 ; C2 := false ; AFTER2 ; end end P2 . |
Перед входом в критическую секцию каждый процесс проверяет, не находится ли его конкурент в своей критической секции, если нет, то в процессе устанавливается признак (значение true соответствующего этому процессу флажка), что он вошел в критическую секцию (занял ресурс), а после выхода из критической секции этот флажок снова сбрасывается в false, освобождая ресурс. Однако в том случае, когда (хоть это и маловероятно) оба процесса одновременно подойдут к проверке значений флажков своих конкурентов перед входом в критическую секцию, они смогут пройти в нее одновременно. Таким образом, нарушается самое главное требование к реализации критической секции - требование взаимного исключения.
3.Алгоритм Деккера
Процедура инициализации |
Первый процесс |
Второй процесс |
procedure INIT; common boolean C1,C2 ; common integer N ; begin C1 := false ; C2 := false ; N := 1 ; start(P1) ; start(P2) end INIT .
|
process P1; common boolean C1,C2 ; begin while true do begin BEFORE1 ; C1 := true ; while C2 do begin if N = 2 then begin C1 := false ; while N=2 do ; C1 := true ; end end ; CS1 ; C1 := false; N := 2; AFTER1 ; end end P1 . |
process P2; common boolean C1,C2 ; begin while true do begin BEFORE2 ; C2 := true ; while C1 do begin if N = 1 then begin C2 := false ; while N=1 do ; C2 := true ; end end ; CS2 ; C2 := false; N:=1; AFTER2 ; end end P2 . |
Порядок входа в критическую секцию процессов, одновременно заявивших о своих намерениях получить доступ к общим данным, устанавливается с помощью целочисленной переменной, в которой фиксируется значение номера процесса, имеющего преимущество на вход в критическую секцию. Причем этот номер учитывается только в случае, когда процессы подошли к критической секции одновременно, то есть не будет нарушено условие, что процессы, не находящиеся в критической секции, не должны мешать другим процессам входить в их критические секции. После выхода из критической секции процесс передает очередь на преимущественный доступ к разделяемым данным своему конкуренту.