Практические способы реализации упреждающего планирования без аппаратной поддержки?

Я понимаю, что использование аппаратной поддержки для реализации упреждающего планирования отлично подходит для повышения эффективности.

Я хочу знать, каковы практические способы упреждающего планирования без поддержки аппаратного обеспечения? Я думаю, что одним из способов являются программные таймеры.

Кроме того, в многопроцессорной системе другим способом является использование одного процессора, выступающего в качестве ведущего, продолжающего смотреть на процессор ведомого процессора.

Считай, меня устраивает неэффективный способ.

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


person sgoel    schedule 03.03.2021    source источник
comment
Я вижу, что упреждающее планирование может быть полезным только тогда, когда оно управляется аппаратными прерываниями, что обеспечивает высокопроизводительный ввод-вывод. Я не могу представить себе какую-либо другую эффективную систему - завершения ввода-вывода должны инициировать планирование/диспетчеризацию потоков на ядра, а это означает прерывания.   -  person Martin James    schedule 03.03.2021
comment
@MartinJames, сэр, я тоже не против неэффективных способов. Я согласен, но прерывания могут быть реализованы и программно. Как мы сделали для запрограммированного ввода/вывода.   -  person sgoel    schedule 03.03.2021
comment
.... но только аппаратное обеспечение знает, что запрос ввода-вывода выполнен.   -  person Martin James    schedule 03.03.2021
comment
@MartinJames, сэр, аппаратное обеспечение, сэр? Я думаю, что настройку флага и проверку флага можно выполнить с помощью программного обеспечения, такого как Microprogrammed. Кроме того, я имел в виду, нужна ли нам специальная аппаратная поддержка для выполнения упреждающего планирования, сэр? Типа Невозможно обойтись без аппаратной поддержки?   -  person sgoel    schedule 03.03.2021
comment
Но почему? Такая проверка флагов не позволяет эффективно управлять ресурсами ЦП. ОС в первую очередь является диспетчером ресурсов, и флаги опроса ввода-вывода предотвращают управление ЦП. Я не понимаю вашу концепцию упреждающего планировщика без аппаратных прерываний. Как удалить поток из ядра без аппаратного прерывания ядра?   -  person Martin James    schedule 03.03.2021
comment
@MartinJames Сэр, продолжайте постоянно проверять ядро, пока мы не увидим, что оно выполняется. Core не должен прерывать нас.   -  person sgoel    schedule 03.03.2021
comment
Может быть, пример прояснит для меня концепцию. Если я запускаю текстовый редактор, скажем, Блокнот, должно ли одно ядро ​​ЦП постоянно привязываться для опроса контроллера клавиатуры?   -  person Martin James    schedule 04.03.2021
comment
@MartinJames, сэр, да, это была моя точка зрения. Но, будучи полным новичком, сэр, я могу ошибаться.   -  person sgoel    schedule 04.03.2021


Ответы (1)


Чтобы вытеснить процесс, операционная система должна каким-то образом получить контроль над процессором без участия процесса. Или с другой точки зрения: ЦП должен каким-то образом принять решение прекратить выполнение кода процесса и начать выполнение кода операционной системы.

Точно так же, как процессы не могут работать одновременно с другими процессами, они не могут работать одновременно с ОС. Процессор выполняет инструкции по порядку, это все, что он знает. Он не работает с двумя вещами одновременно.

Итак, вот несколько причин, по которым ЦП переключается на выполнение кода операционной системы вместо кода процесса:

  • Аппаратное устройство отправляет прерывание этому ЦП, например, таймер, нажатие клавиши, сетевой пакет или завершение работы жесткого диска.
  • Программное обеспечение, работающее на другом ЦП, посылает этому ЦП межпроцессорное прерывание.
  • Запущенный процесс решает вызвать функцию в операционной системе. В зависимости от архитектуры процессора он может работать как обычный вызов или как поддельное прерывание.
  • Запущенный процесс выполняет инструкцию, которая вызывает исключение, например доступ к неотображенной памяти или деление на ноль.
  • Какой-то интерфейс аппаратной отладки используется для перезаписи указателя инструкций, в результате чего ЦП внезапно выполняет другой код.
  • ЦП на самом деле является симуляцией, а ОС интерпретирует код процесса, и в этом случае ОС может решить прекратить интерпретацию, когда захочет.

Если ничего из вышеперечисленного не происходит, код ОС не запускается. Большинство операционных систем будут пересматривать, какой процесс должен быть запущен, когда происходит аппаратное событие, вызывающее пробуждение процесса, а также будут использовать прерывание по таймеру в качестве последнего средства, чтобы предотвратить перегрузку процессорного времени одной программой.

Как правило, когда код ОС запускается, он не обязан возвращаться в то же место, откуда он был вызван. Упреждение — это просто когда ОС решает перейти куда-то, кроме того места, откуда она была вызвана.

person user253751    schedule 05.03.2021
comment
Приятно читать такой хороший ответ по этому тегу :) - person Martin James; 07.04.2021