调用syscall时的进程状态?

时间:2010-07-21 08:01:23

标签: linux kernel system-calls

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

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

这是执行内核代码的过程itselft,或者进程是悬念,而且就像执行syscall处理程序的“内核线程”(并且知道这个进程叫做(当前))?

我不确定从执行变为准备还是执行被阻止。

2 个答案:

答案 0 :(得分:2)

这取决于系统调用的作用。

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

当然,许多系统调用等待事情 - 例如,考虑sleep(),它释放CPU而不是旋转。这使进程进入睡眠状态,注册了内核计时器以将其唤醒。

相当多的系统调用从不睡觉,像getpid()这样的东西只能检索始终在ram中的信息。许多有时会睡觉的人不一定会这样做,例如,如果你对已经在内核缓冲区中的数据调用read()。

答案 1 :(得分:1)

流程本身会切换到内核模式并执行系统调用 - 尽管它会切换到内核堆栈来执行此操作。在内核中执行的进程具有状态Running,并且可以被抢占并最终处于Runnable状态。