用户空间进程是否抢占了内核线程?

时间:2011-12-10 00:14:49

标签: c linux

目前我正在阅读“了解Linux内核,第3版”,在第22页,我可以阅读:

  

在最简单的情况下,CPU从中顺序执行内核控制路径   第一条指令到最后一条。但是,当发生以下事件之一时,   CPU交错内核控制路径:

     
      
  • 在用户模式下执行的进程会调用系统调用,以及相应的进程   内核控制路径验证不能立即满足请求;它   然后调用调度程序以选择要运行的新进程。结果,一个过程   切换发生。第一个内核控制路径未完成,而CPU   恢复执行其他一些内核控制路径。在这种情况下,两个   控制路径代表两个不同的进程执行。
  •   

内核控制路径是否可以从进行系统调用的用户空间进程中断? 我认为优先级非常重要:

  • 中断
  • 内核线程
  • 用户空间流程

我检查了勘误表,但却找不到任何相关内容。

1 个答案:

答案 0 :(得分:4)

你对优先级列表是正确的,但本书试图说的是(我认为):

  • 当(用户)进程进行系统调用时,内核会开始代表它执行。
  • 如果系统调用可以完成(内核控制路径没有遇到障碍),那么它通常会直接返回到调用进程 - 想想getpid()函数调用。
  • 另一方面,如果系统调用无法完成(例如,因为磁盘系统必须在将数据返回到调用进程之前将块读入内核缓冲池),那么调度程序将用于选择要运行的新进程 - 抢占(代表该运行的控制的内核线程)用户进程。
  • 在适当的时候,原始系统调用将能够继续,并且原始(代表该运行的控制的内核线程)用户进程将能够继续并最终完成,将控制权返回给用户空间进程在用户空间而不是在内核中运行。

所以“不”:不是'内核路径可以从进行系统调用的用户空间进程中断'的情况。

内核路径在代表用户空间进程执行系统调用时可能会被中断,因为:发生中断,或者内核路径必须等待资源可用,或者......