Что делает простаивающий процесс CPU?

Вы можете выразить последовательность из одной или нескольких десятичных цифр POSIXly как [0-9] \ {1, \} или менее переносимо, используя расширенный обычный бывший оператор нажатия + как [0-9] + , так что либо

sed 's@]http://map[0-9]\{1,\}\.link\.de/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

, либо

sed -E 's@]http://map[0-9]+\.link\.de/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk

Если вы хотите заменить любым URI (а не только теми, чьи квалифицированные имя хоста совпадает с map? .link.de ), то вы можете упростить последнее до

$ sed -E 's@]http://[^/]*/@,@' file.csv
14/Feb/2016:15:21:33-0500,mk
14/Feb/2016:16:21:33-0500,mk
75
14.01.2019, 00:08
3 ответа

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

Похоже, что в Unix всегда был какой-то цикл простоя (но не обязательно фактическая простаивающая задача, см. ответ Жиля ), и даже в V1 он использовал инструкцию WAIT , которая останавливала процессор до тех пор, пока не произошло прерывание (это означает «ожидание прерывания»). Некоторые другие операционные системы использовали циклы занятости, DOS, OS / 2 и, в частности, ранние версии Windows. В течение довольно долгого времени процессоры использовали эту команду «ожидания», чтобы снизить потребление энергии и выработку тепла. Вы можете увидеть различные реализации простаивающих задач, например, в arch / x86 / kernel / process.c в ядре Linux: базовый просто вызывает HLT , который останавливает процессор до тех пор, пока происходит прерывание (и включает режим энергосбережения C1), другие реализации обрабатывают различные ошибки или неэффективности ( например, с использованием MWAIT вместо HLT на некоторых процессорах) .

Все это полностью отделено от состояний ожидания в процессах, когда они ждут события (ввод-вывод и т. Д.).

101
27.01.2020, 19:31

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

В планировщике Linux нет специального кода для случая, когда ничего не нужно делать. Вместо этого он кодирует случай «ничего не делать» как особый процесс, незанятый процесс. Неактивный процесс назначается только тогда, когда никакой другой процесс не подлежит планированию (фактически он имеет бесконечно низкий приоритет). Неактивный процесс на самом деле является частью ядра: это поток ядра, то есть поток, который выполняет код в ядре, а не код в процессе. (Точнее, для каждого ЦП существует один такой поток.) ​​Когда незанятый процесс выполняется, он выполняет операцию ожидания прерывания.

Как работает ожидание прерывания, зависит от возможностей процессора. В самой базовой конструкции процессора это просто цикл занятости -

nothing:
    goto nothing

Процессор постоянно выполняет инструкцию ветвления, что ничего не дает. Большинство современных ОС этого не делают, если только они не работают на процессоре, где нет ничего лучше, а у большинства процессоров есть что-то получше.Вместо того, чтобы тратить энергию на то, чтобы ничего не делать, кроме обогрева комнаты, в идеале следует выключить процессор. Таким образом, ядро ​​запускает код, который инструктирует процессор выключиться или, по крайней мере, выключить большую часть процессора. Должна быть хотя бы одна маленькая деталь, которая остается включенной, - контроллер прерываний. Когда периферийное устройство запускает прерывание, контроллер прерываний отправляет сигнал пробуждения основному процессору (его части).

На практике современные процессоры, такие как Intel / AMD и ARM, имеют множество сложных настроек управления питанием. ОС может оценить, как долго процессор будет находиться в режиме ожидания, и в зависимости от этого выберет различные режимы с низким энергопотреблением. Режимы предлагают различные компромиссы между потреблением энергии в режиме ожидания и временем, необходимым для входа и выхода из режима ожидания. На некоторых процессорах ОС также может снизить тактовую частоту процессора, если обнаружит, что процессы не потребляют много времени ЦП.

58
27.01.2020, 19:31

Нет, простаивающая задача не тратит циклы ЦП впустую. Планировщик просто не выбирает простаивающий процесс для выполнения. Бездействующий процесс ожидает некоторого события, чтобы продолжить работу. Например, он может ожидать ввода в системном вызове read().

Кстати, ядро ​​не является отдельным процессом. Код ядра всегда выполняется в контексте процесса (, за исключением особого случая потока ядра ), поэтому неправильно говорить «и один ЦП будет удерживаться самим ядром, пока не будет выполняться пользовательское пространство». Работа".

-1
27.01.2020, 19:31

Теги

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