Прерывание процесса в критической секции - PullRequest
0 голосов
/ 06 мая 2018

В Планирование на основе приоритетов , я столкнулся с проблемой Инверсия приоритетов , которая представляет собой процесс с более высоким приоритетом, вынуждена ждать задачи с более низким приоритетом. Одним из возможных сценариев является рассмотрение трех процессов L, M, H с порядком приоритета L

L работает в CS; H также должен работать в CS; H ждет L, чтобы выйти из CS; М прерывает L и начинает бежать; М работает до завершения и отказывается от контроля; L возобновляет работу и начинает работать до конца CS; H входит в CS и начинает работать.

Здесь у меня возникает вопрос, касающийся утверждения M прерывает L и запускает , т. Е. Может ли процесс, выполняющийся в критической секции, быть прерван или прерван.

Ответы [ 2 ]

0 голосов
/ 07 мая 2018

Здесь мой вопрос относительно того, что оператор M прерывает L и начинает работать, т. Е. Может ли процесс, выполняющийся в критическом разделе, быть прерван или прерван.

Зависит от того, как реализован критический раздел.

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

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

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

Раньше старые ленты DECUS были заполнены приложениями "справедливой доли", которые снизили бы приоритет процессов с высокой загрузкой ЦП и привели бы к хаосу при системном планировании.

0 голосов
/ 06 мая 2018

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

Даже если M требуется CS, он выгрузит L, запустит, заблокирует и отключит L для продолжения выполнения.

...