Состояния процесса Linux

Самые большие "издержки" в unusesd использование операторов понимают Ваш код:)

Удаляющие неиспользованные делает Ваш код более опрятным и легче для кого-то еще считать и поддержать.

87
задан Blair 25 September 2009 в 06:12
поделиться

6 ответов

Во время ожидания read () или write () в / из возврата файлового дескриптора, процесс будет помещен в специальный вид сон, известный как «D» или «Disk Sleep». Это особенное, потому что процесс не может быть остановлен или прерван в таком состоянии. Процесс, ожидающий возврата от ioctl (), также будет переведен в спящий режим таким образом.

Исключением является случай, когда файл (например, терминал или другое символьное устройство) открывается в O_NONBLOCK ], пройденный, когда предполагается, что устройству (например, модему) потребуется время для инициализации. Однако в своем вопросе вы указали блочные устройства. Кроме того, я никогда не пробовал использовать ioctl () , который может блокировать fd, открытый в неблокирующем режиме (по крайней мере, неосознанно).

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

Некоторые программы пользовательского пространства при определенных обстоятельствах, как известно, остаются в это состояние навсегда, до перезагрузки. Обычно они сгруппированы вместе с другими «зомби», но этот термин не будет правильным, поскольку технически они не прекратили свое существование.

81
ответ дан 24 November 2019 в 07:43
поделиться

Процесс, выполняющий ввод-вывод, будет переведен в состояние D (непрерывный спящий режим) , что освобождает ЦП до тех пор, пока не произойдет аппаратное прерывание, которое сообщает ЦП вернуться в выполнение программы. Для получения информации о других состояниях процесса см. man ps .

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

В ядре 2.6 , есть O (1) планировщик временной сложности , поэтому независимо от того, сколько процессов у вас запущено, он будет назначать процессоры в постоянное время. Однако это сложнее, поскольку 2.6 представила приоритетное прерывание и балансировка нагрузки ЦП - непростой алгоритм. В любом случае это эффективно, и процессоры не будут простаивать, пока вы ждете ввода-вывода.

7
ответ дан 24 November 2019 в 07:43
поделиться

Да, задача блокируется в системном вызове read (). Выполняется другая задача, которая готова, или, если другие задачи не готовы, запускается задача бездействия (для этого ЦП).

Обычное, блокирующее чтение с диска приводит к тому, что задача переходит в состояние «D» (как отмечали другие) . Такие задачи влияют на среднюю нагрузку, даже если они не используют ЦП.

Некоторые другие типы операций ввода-вывода, особенно ttys и сеть, ведут себя иначе - процесс завершается в состоянии «S» и может прерываться и не учитывается при средней нагрузке.

1
ответ дан 24 November 2019 в 07:43
поделиться

Предполагая, что ваш процесс является одним потоком и вы используете блокирующий ввод-вывод, ваш процесс будет блокироваться в ожидании завершения ввода-вывода. Ядро тем временем выберет другой процесс для запуска в зависимости от удобства, приоритета, времени последнего выполнения и т. Д. Если других запускаемых процессов нет, ядро ​​не будет запускать их; вместо этого он сообщит оборудованию, что машина простаивает (что приведет к снижению энергопотребления).

Процессы, ожидающие завершения ввода-вывода, обычно появляются в состоянии D, например, в ps и вверху .

1
ответ дан 24 November 2019 в 07:43
поделиться

Да, задачи, ожидающие ввода-вывода, блокируются, а другие задачи выполняются. Выбор следующей задачи выполняется планировщиком Linux .

0
ответ дан 24 November 2019 в 07:43
поделиться

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

Решение о том, какой процесс запускается следующим, принимает планировщик в ядре.

0
ответ дан 24 November 2019 в 07:43
поделиться
Другие вопросы по тегам:

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