Как процесс возвращает управление обратно диспетчеру задач в многозадачных системах? - PullRequest
1 голос
/ 19 октября 2010

Простой вопрос: в системе с одним заданием ОС копирует smt в память, а затем куда-то «уходит», и программа позже возвращает управление диспетчеру задач. Но в многозадачной ОС мы просто делаем несколько шагов внутри процесса и затем возвращаемся в диспетчер задач, ожидая своей очереди. Как нам «перейти к диспетчеру задач» без «goto» и «ret's?»

(Единственное, что приходит на ум - какое-то странное прерывание в процессоре, например 'have made one instruction')

1 Ответ

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

Существует два основных типа многозадачных систем. Кооперативный и Упреждающий.

В кооперативной системе каждая задача получает контроль, а затем должна выполняться в течение некоторого периода. Затем он должен добровольно вернуть управление планировщику. Это может быть выполнением запланированной функции или выполнением функции yield (). Можно заставить систему не отвечать на запросы, выполнив задачу, которая не дает результатов.

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

...