Пользовательский режим и режим ядра: разные программы одновременно

Возможно ли, что один процесс одновременно работает в режиме ядра, а другой — в пользовательском режиме?

Я знаю, что это не вопрос кодирования, но, пожалуйста, помогите мне, если кто-то знает ответ.


person Harshil Shah    schedule 29.04.2019    source источник
comment
Почему вы думаете, что это было бы необычным/запрещенным?   -  person Martin James    schedule 29.04.2019


Ответы (2)


Да, это возможно. Даже несколько процессов могут одновременно находиться в режиме ядра.

Просто один процесс не может находиться в обоих режимах одновременно.

person Yash Sodha    schedule 29.04.2019
comment
Может ли один процесс быть в обоих одновременно, если он использует потоки? - person Jack Humphries; 30.04.2019
comment
Джек, поток и процесс в большинстве случаев представляют собой одно и то же понятие, если речь идет о ядре, за некоторыми исключениями по историческим причинам. Два разных потока, даже если они порождены одним и тем же процессом, выполняются независимо и независимо выполняют или не выполняют системные вызовы (режим ядра). - person Nadav Har'El; 30.04.2019

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

Если вы спрашиваете только об одном ЦП, в этом случае у вас не может быть двух запущенных процессов одновременно. Но у вас может быть два запускаемых процесса, что означает два процесса, которые оба готовы к запуску, но, поскольку имеется только один ЦП, только один из них может фактически работать. Один из запущенных процессов может находиться в пользовательском режиме — например, рассмотрим продолжительный замкнутый цикл, который был вытеснен после того, как его квота времени истекла. Другой исполняемый процесс может находиться в режиме ядра — например, рассмотрим процесс, который выполнил системный вызов read() с диска, ядро ​​отправило запрос на чтение на диск, но запрос на чтение был выполнен, так что теперь процесс готов к повторному запуску в режиме ядра и завершите вызов read().

person Nadav Har'El    schedule 29.04.2019
comment
Значит, если у нас только один ЦП, то и в режиме ядра, и в пользовательском режиме есть только один процесс, верно? - person Harshil Shah; 30.04.2019
comment
есть только один процесс неоднозначный. Процессов может быть сотни, и каждый из них может находиться в режиме ожидания в пользовательском режиме (т. е. быть вытесненным в середине вычислений) или в режиме ядра (системный вызов еще не может быть завершен и переводит процесс в спящий режим). Но, конечно же, на одном процессоре только один из этих процессов может фактически выполняться в любой момент времени. - person Nadav Har'El; 30.04.2019