Что такое вытесняющая многозадачность? - PullRequest
0 голосов
/ 26 октября 2010

Что такое вытесняющая многозадачность?Погуглив, я не смог найти ответ, может кто-нибудь мне помочь?

Ответы [ 3 ]

3 голосов
/ 26 октября 2010

http://en.wikipedia.org/wiki/Preemption_(computing)

Прочтите статью в Википедии. Подумайте об этом таким образом, это способ позволить вам запускать много разных программ одновременно без необходимости написания каждой программы, чтобы тратить время процессора - операционная система справляется с этим. Идея состоит в том, что каждый процесс «прерывается» в какой-то момент.

0 голосов
/ 06 августа 2018

просто, если процесс является приоритетным, его можно остановить и отправить в готовую очередь с помощью внешнего прерывания (прерывания).

  1. Когда процесс переключается из состояния выполнения в состояние ожидания (например, в результате запроса ввода-вывода или вызова wait () для завершения дочернего процесса)
  2. Когда процесс переключается из рабочего состояния в состояние готовности (например, когда происходит прерывание)
  3. Когда процесс переходит из состояния ожидания в состояние готовности (например, при завершении ввода / вывода)
  4. Когда процесс завершается

Для ситуаций 1 и 4 не существует превентивных

0 голосов
/ 20 января 2016

Preemptive Multitasking требует двух основных компонентов: прерывания по таймеру (скажем, каждые 10 мсек) и планировщика, который «связан» с этим прерыванием.Затем планировщик сохраняет «контекст» задачи «прерванная / прерванная» (которая является причудливым термином для всех регистров / указателя стека) в некоторой области (например, стеке), а затем через свой алгоритм планирования определяет, какая (другая) задача может «беги "дальше.Если он находит его, он раскручивает / восстанавливает контекст для задачи TH и возвращается из прерывания таймера.Кстати, точно так же, как «вызов», который помещает адрес возврата (обычно адрес после инструкции Call в стеке, прерывание работает так же, и когда прерывание «возвращается», оно использует то, что находится в стеке, и переходит к нему.Поэтому, когда мы возвращаемся из какой-либо другой задачи в точку ее «прерывания», нам просто нужно манипулировать стеком, поместить адрес возврата из задачи THAT в верхнюю часть стека и выполнить инструкцию «Return-from_Interrupt».нормальное возвращение. Бьюсь об заклад, вы теперь жаль, что вы спросили! Ура,

...