Состояние процесса при вызове системного вызова? - PullRequest
3 голосов
/ 21 июля 2010

Какое состояние процесса имеет место, когда он вызывает системный вызов?

Я имею в виду, не думайте, что это системный вызов ввода / вывода, такой как чтение или запись ...

Это процесс isselft, который выполняет код ядра, или процесс приостанавливается, и это похоже на «поток ядра», который выполняет обработчик syscall (и знает, какой процесс называется (current))?

Я не уверен, что меняется с выполнения на готовое или выполнение на заблокированное.

Ответы [ 2 ]

2 голосов
/ 21 июля 2010

Это зависит от того, что делает системный вызов.

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

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

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

1 голос
/ 21 июля 2010

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

...