Что такое добровольное вытеснение? - PullRequest
4 голосов
/ 03 марта 2011

Что такое добровольное вытеснение?Я только знаю, что это концепция планирования.

1 Ответ

4 голосов
/ 21 апреля 2011

Это немного зависит от ОС.


В некоторых ОСРВ добровольное вытеснение означает, что запущенный процесс объявляет точки, в которых он может быть вытеснен (в противном случае он будет выполняться до завершения). Еще один способ думать об этом варианте - это выход в сопрограмме . Это в отличие от большинства настольных ОС, где ядро ​​определяет приоритет. Имейте в виду, что в некоторых ОСРВ отсутствует понятие «пользовательский режим».


В Linux (по крайней мере) "добровольное вытеснение" - это бит неправильного числа:

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

Превентивное ядро ​​таково, что сам код ядра может быть выгружен. Это звучит избыточно, но стоит отметить, что мы имеем в виду, что ядро ​​ выгружается , а не то, что «ядро поддерживает вытеснение». Принудительное / недобровольное вытеснение означает, что даже при обслуживании системного вызова прерывание для высокоприоритетного пользовательского процесса может «принудительно» переключить ядро ​​в контекстное переключение, так что теперь оно будет работать (технически это не действительно переключение контекста, но оно имеет то же самое эффект). Это уменьшает задержку пользовательского процесса, «видящего» изменения в состоянии оборудования.

Добровольное вытеснение - это то, когда ядро ​​периодически проверяет, должно ли оно перепланировать процессы «при выполнении действий с ядром». То есть, вместо того, чтобы только планировать / перепланировать пользовательские процессы в точках прерывания, он делает это периодически, обрабатывая такие вещи, как ввод / вывод. Таким образом, там, где обычно высокоприоритетному пользовательскому процессу, возможно, все еще придется ждать, пока процесс с низким приоритетом завершит свою часть, высокоприоритетный процесс теперь может запускаться «рано», так как ядро ​​проверяет чаще, запускается ли оно. Это уменьшает задержку пользовательского процесса, переходящего из приостановленного состояния в рабочее состояние (за счет общей пропускной способности системы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...