我正在听OS讲座,被这两个短语弄糊涂了。
- "当用户进程调用 IO 时,它会调用系统调用并等待系统调用完成"
- "当用户进程调用系统调用时,用户进程本身在内核模式下执行内核函数">
我相信一个用户进程调用系统调用来使用IO,内核执行内核指令,而内核正在运行的用户进程等待IO进程完成。所以我认为短语2一定是错误的。但教授说两者都是正确的。有人可以帮助我理解为什么吗?
实际上,两者都只是有时是正确的。
"当用户进程调用 IO 时,它会调用系统调用并等待系统调用完成">
仅当系统服务执行同步 I/O 时,才适用。某些操作系统具有不会导致等待的异步 I/O 调用。
"当用户进程调用系统调用时,用户进程本身在内核模式下执行内核函数">
当系统在内核模式下实现其所有系统服务时,情况确实如此。某些系统具有多种模式(通常为 4 种(,允许实现不可能使系统崩溃的系统服务。
在任何情况下,这可能不是同步 I/O 系统服务调用。在这种情况下,它可能不会等待。如果调用时间系统服务,则进程不太可能等待。