进程在执行系统调用时切换会发生什么?

Sha*_*han 5 linux system-calls linux-device-driver embedded-linux

当该进程调用的系统调用正在运行时,如果调用系统调用的进程进入休眠状态或被抢占状态,会发生什么?

如果系统调用被抢占,它是如何重新加载并返回该进程的?

ddy*_*yer 1

系统维护每个进程的状态,其中存储了挂起并稍后重新启动进程所需的所有内容。其中大部分内容正是您所想象的 - 内存实际驻留位置的映射、文件句柄列表等。

系统进程正在做长期的事情,不会立即运行完成,必须非常仔细地编写,以确保所有资源都被考虑在内,所有锁都被释放等。这显然是 I/O 的情况,但其他事情也可以还涉及特殊资源。

大多数系统调用并不是很特别,它们是由普通库实现的,这些库只是进程的一部分。真正的最低级别的系统调用会执行缓慢的操作,其结构为“让我进入睡眠状态并在......时唤醒我”,因此进入睡眠状态是该过程自动但不可见的一部分。