Планировщики процессов реализованы на уровне ОС или аппаратного уровня?

644
EnderShadow

Планировщики процессов реализованы в программном или аппаратном обеспечении? Если это сделано аппаратно, то как оно отслеживает количество процессов и где они находятся, когда они неактивны? Если это программное обеспечение, обеспечивает ли аппаратное обеспечение инструкции для планирования, например, для загрузки или сохранения регистров по адресу в памяти?

0
Были инструкции процессора, чтобы помочь планировщику и обработчикам прерываний. Некоторые архитектуры (например, Intel i386 и более поздние версии IIRC) содержали инструкции «сохранение контекста» и «восстановление контекста». Смотрите http://wiki.osdev.org/Context_Switching sawdust 8 лет назад 0

1 ответ на вопрос

1
LawrenceC

x86 CPUs on your normal PC platform do not implement scheduling in hardware, it is the kernel's job to do that. Neither do any other common CPUs such as ARM, MIPS, PowerPC, etc.

does the hardware normally provide instructions to help with scheduling such as for loading or storing the registers at an address in memory?

"Loading and storing registers at an address in memory" is a fundamental CPU operation that helps with just about everything a CPU does, not just scheduling tasks.

And not really - continuing with x86 as an example, there aren't any special process scheduling instructions.

About the only thing required from hardware from a scheduling perspective - if you want to have a pre-emptive multitasking system as opposed to a cooperative multitasking system - is a way to interrupt a task that is taking too long, and the PC platform provides timers that cause interrupts when they expire as a way to force a process to relinquish control of the CPU.

-1 для * "И не совсем - продолжая с x86 в качестве примера, никаких специальных инструкций по планированию процессов нет." * sawdust 8 лет назад 0
У вас есть материал TSS, который поддерживает переключение задач * (если оно используется), но не планирование задач *. LawrenceC 8 лет назад 0
Если переключение задач отсутствует, тогда какова цель планирования задач? Когда вновь готовая задача с самым высоким приоритетом будет вытеснять активную задачу с более низким приоритетом? Вы утверждаете, что переключение не является задачей планировщика? sawdust 8 лет назад 0
Я согласен с вами (я забыл об особенностях TSS) - но просто для того, чтобы быть педантичным, решать, когда запускается задача, и фактически переключать ее, но это разные вещи. IIRC Вы не можете просто установить ворота задач, а затем покончить с этим, вам нужно что-то «над» задачами, которые говорят «хорошо», какая задача запускается следующей - даже если это простая циклическая проверка или что-то еще. Похоже, я должен освежить свои знания об этом, хотя. :) LawrenceC 8 лет назад 0
Прочитайте это - http://wiki.osdev.org/Context_Switching LawrenceC 8 лет назад 0
* "Прочитайте это" * - Ду, я уже разместил эту ссылку в комментарии к Q вчера. * «решение, когда задача запускается, и ее фактическое переключение - это связанные, но разные вещи» * - это сводится к большему количеству подпрограмм в одном модуле планировщика, то есть все это находится в ведении подсистемы планировщика. FWIW по другим причинам, я искал в Linux [kernel / sched / core.c] (http://lxr.free-electrons.com/source/kernel/sched/core.c?v=4.1) и нашел процедуры для определение следующей задачи для запуска * и * переключение задач. sawdust 8 лет назад 0

Похожие вопросы