- •1. Что такое критическая область? Условия избегания состязания для эффективной работы процессов.
- •Строгое чередование
- •Что такое примитивы взаимодействия процессов, и для чего они применяются? в чем заключается проблема переполненного буфера?
- •Что такое семафор? Для чего применяются операции up и down?
- •8. Решение проблемы переполнения буфера с помощью семафоров (producer-consumer).
- •10. Образ процесса, регистры процесса.
- •12. Основные атрибуты процесса.
- •13. Что такое контекст и дескриптор процесса? Из каких частей состоит контекст процесса в unix-системах? Контекст и дескриптор процесса
- •14. Назвать состояния процесса в unix-системах.
- •15. Этапы жизненного цикла процесса в unix-системах.
- •16. В каких случаях происходит переключение контекста
- •17. Приоритеты процессов
- •18. Синхронизация процессов.
- •Критерии планирования и требования к алгоритмам
- •24. Методы разделения процессов на группы в интерактивных системах.
- •25. Какие существуют системы реального времени? Необходимое условие для планирования процессов в системе реального времени
- •26. Статический алгоритм планирования процессов (rms) в системах реального времени.
- •27. Динамический алгоритм планирования процессов (edf) в системах реального времени
- •28. Понятие взаимоблокировки процессов. Что такое ресурс? Типы ресурсов, последовательность событий, необходимых для использования ресурса
- •34. Способы выхода из взаимоблокировки:
Строгое чередование
while(TRUE) { while (turn != 0) critical_region(); turn=l; noncritical _region(); }
while(TRUE) { while (turn != 0) critical_region(); turn=0; noncritical _region(); }
целая переменная turn, изначально равная 0, отслеживает, чья очередь входить в критическую область.
Вначале процесс 0 проверяет значение turn, считывает 0 и входит в критическую область(*см. примечание ниже)
Процесс 1 также считывает значение turn, считывает 0 и после этого входит в цикл, непрерывно проверяя, когда значение turn будет равно 1.
Постоянная проверка значения переменной в ожидании некоторого значения называется активным ожиданием. Данный способ является бесцельной тратой времени процессора. Активное ожидание используется только в случае, когда есть уверенность в небольшом времени ожидания.
Что такое примитивы взаимодействия процессов, и для чего они применяются? в чем заключается проблема переполненного буфера?
Вводится понятия двух примитивов. Sleep - системный запрос, в результате которого вызывающий процесс блокируется, пока его не запустит другой процесс. Wakeup - системный запрос, в результате которого блокированный процесс будет запущен.
Основное преимущество - это отсутствие активного ожидания. Проблема заключается в следующем, если спулер пуст, то wakeup срабатывает в пустую.
Проблема переполненного буфера (проблема производителя и потребителя)
Рассмотрим два процесса, которые совместно используют буфер ограниченного размера, один процесс пишет в буфер, другой считывает данные.
Чтобы первый процесс не писал, когда буфер полный, а второй не считывал, когда он пуст, вводится переменная count ля подсчета количества элементов в буфере.
Проблема переполненного буфера
В этой ситуации оба процесса могут попасть в состояние ожидания, если пропадет сигнал активации.
Алгоритм такой ситуации:
Процесс В, считал count=0 (заблокироваться он еще не успел)
Планировщик передал управление процессу А
Процесс А, выполнил все вплоть до wakeup, пытаясь разблокировать процесс В (но он не заблокирован, wakeup срабатывает впустую)
Планировщик передал управление процессу В
И он заблокировался, и больше сигнала на разблокировку не получит
Процесс А в конце концов заполнит буфер и заблокируется, но сигнала на разблокировку не получит.
Что такое семафор? Для чего применяются операции up и down?
Концепция семафоров. Семафор представляет собой целую переменную, доступ любого процесса к которой, за исключением момента ее инициализации, может осуществляться только через две атомарные операции: P (от датского слова proberen – проверять) и V (от verhogen – увеличивать). Классическое определение этих операций выглядит следующим образом:
P(S): пока S == 0 процесс блокируется;
S = S – 1;
V(S): S = S + 1;
при выполнении операции P над семафором S сначала проверяется его значение. Если оно больше 0, то из S вычитается 1. Если оно меньше или равно 0, то процесс блокируется до тех пор, пока S не станет больше 0, после чего из S вычитается 1. При выполнении операции V над семафором S к его значению просто прибавляется 1. В момент создания семафор может быть инициализирован любым неотрицательным значением.
переменная располагается внутри адресного пространства ядра операционной системы. Операционная система обеспечивает атомарность операций P и V. Если при выполнении операции P заблокированными оказались несколько процессов, то порядок их разблокирования может быть произвольным, например, FIFO.
