2010-07-21 30 views
3

调用系统调用时进程状态是什么?调用系统调用时的进程状态?

我的意思是,不asume这是一个I/O系统调用像读或写...

它的过程itselft执行内核代码,或过程suspendes和有像“内核线程”执行系统调用处理程序(并知道什么称为(当前)的过程)?

我不确定从执行到准备,或执行到阻止的更改。

回答

1

这是进程本身切换到内核模式并执行系统调用 - 尽管它切换到内核堆栈来执行此操作。在内核中执行的进程具有运行状态,并且可以被抢占并以状态运行结束。

+0

谢谢:) _____ – makakko 2010-07-21 20:56:20

2

这取决于系统调用的功能。

假设存在一个假设的系统调用,它将PI计算为很多数字,并将结果放入应用程序指定的缓冲区,那么进程可能只是处于“R”运行状态。切换到内核模式不会阻止它在发出呼叫的任务的上下文中运行。

当然,很多系统调用都在等待事物 - 比如考虑sleep(),这会释放CPU而不是旋转。这使进程进入休眠状态,注册一个内核定时器来唤醒它。

相当多的系统调用永远不会睡觉,getpid()等只是检索总是在内存中的信息。许多有时睡眠的人并不一定这样做,例如,如果你对已经在内核缓冲区中的数据调用read()。

+0

太好了,谢谢.. – makakko 2010-07-21 20:55:31