Каков код для бездействующего процесса? - PullRequest
9 голосов
/ 25 февраля 2011

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

Ответы [ 4 ]

12 голосов
/ 27 февраля 2011

Вопрос содержит несколько ошибочных молчаливых предположений. Вот несколько указателей:

  • Это не обязательно простой процесс . Это простой процесс в не многопоточных операционных системах, но не в многопоточных. Сосредоточение внимания на процессе в последнем типе операционной системы концентрируется на неправильной вещи. Хотя Microsoft Windows NT называет это «процессом бездействия» и отображает его в диспетчере задач, важными механизмами являются незанятые потоки. Неактивный процесс - это просто процесс, к которому эти потоки принадлежат ради бухгалтерии. (Все потоки должны принадлежать процессу.) Нет имени файла. (У процессов даже нет имен во многих системах.)
  • Не во всех операционных системах даже есть эти незанятые процессы / потоки. В некоторых старых однопроцессорных операционных системах простоя системы, когда нечего было делать, была просто особым случаем в диспетчере. Этот подход проблематичен для многопроцессорных операционных систем (когда один ЦП находится в режиме ожидания в процессе / потоке, в который другой ЦП хочет отправить), и именно поэтому идея специального процесса / потока, который всегда был готов к запуску, по одному на процессор в система, чтобы процессор мог бездействовать в своем собственном контексте частного потока, стала нормой.
  • То, что делает неактивный процесс / поток, зависит от процессора. Важное качество неработающего процесса / потока заключается в том, что он всегда должен быть готов к запуску . Это никогда не должно блокировать. Но он может делать все, что захочет. Однако обычно «все, что угодно» означает «как можно меньше». Канонический незанятый поток - это просто бесконечный цикл: безусловная инструкция ветвления разветвляется на себя. Некоторые архитектуры процессоров обеспечивают эквиваленты инструкции x86 hlt, цель которой в общих чертах уменьшить использование процессором на холостом ходу системной шины (так что, конечно, процессоры с не -idle могут использовать эта пропускная способность шины). Так что на многих архитектурах бесконечный цикл многократно выполняет эти инструкции. Некоторые процессоры могут сигнализировать о своем «незанятом» состоянии на шине, когда они выполняют такие инструкции, которые внешнее оборудование может распознавать и воздействовать (например, замедляя тактирование шины и потребляя меньше энергии, например). Точно так же инструкции бездействия могут заставить сами процессоры выполнять такие действия, как замедление тактовой частоты и энергосбережение.
  • Низкоуровневое планирование не является «поточной» вещью. В конце концов, именно низкоуровневый планировщик, часто называемый dispatcher , определяет, какой поток выравнивать бежать в первую очередь. Это среднеуровневое и (иногда, хотя и редко) высокоуровневое планирование, которое выполняется внутри потоков. Планировщик среднего уровня может быть, например, потоком, который просыпается каждые N секунд и сканирует таблицу потоков, повторно вычисляя приоритеты потоков потоков с динамическим приоритетом. Или это может быть поток, который каждые N секунд выталкивает целые сегменты процесса на диск и возвращает их снова, в зависимости от приоритета процесса и недавней загрузки ЦП. (Последний тип встречается редко в современных операционных системах подкачки, но он существовал в операционных системах с перестановкой сегментов.)
6 голосов
/ 25 февраля 2011

В встраиваемых системах, критичных к пространству, процесс простоя используется для очистки памяти для проверки того, что космические лучи вызвали перевороты битов.

3 голосов
/ 25 февраля 2011

Процесс ожидания ничего не делает; ОС сама отвечает за планирование процессов для запуска. Сам процесс ожидания просто зацикливает инструкции HLT. (источник: Википедия )

2 голосов
/ 25 февраля 2011

ОС запускает планировщик всякий раз, когда процесс находится в конце своего временного интервала, и всякий раз, когда процесс выполняет операцию блокировки.Затем планировщик выбирает следующий процесс для запуска.На известных мне платформах не имеет смысла рассматривать планировщик как процесс.

Вот еще немного о планировании .

...