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