用户线程与内核线程

tec*_*e11 4 multithreading kernel linux-kernel

有人可以帮助澄清我对内核线程的理解.我听说,在Linux/Unix上,内核线程(例如系统调用的线程)比用户线程执行得更快.但是,这些用户线程不是由内核调度并使用内核线程执行的吗?有人可以告诉我内核线程和用户线程之间的区别是什么,而不是他们可以访问不同的地址空间.他们之间有什么区别?在单个处理器盒上,当用户线程运行时,内核是否会被挂起?

提前致谢,

亚历克斯

dus*_*uff 7

我听说,在Linux/Unix上,内核线程(例如系统调用的线程)比用户线程执行得更快.

这是一个很大程度上不准确的陈述.

  • 内核线程用于内核内部的"后台"任务,例如处理中断和将数据刷新到磁盘.大多数系统调用由内核在调用它们的进程的上下文中处理.

  • 内核线程的调度方式与用户进程的调度方式大致相同.一些内核线程具有高于默认优先级(在某些情况下高达实时优先级),但是说它们"执行得更快"是误导性的.

在单个处理器盒上,当用户线程运行时,内核是否会被挂起?

当然.一个CPU核心上一次只能运行一个进程.

话虽这么说,有很多情况下内核可以中断正在运行的任务并切换到另一个(可能是内核线程):

  • 当定时器中断触发时.默认情况下,每秒发生100次.
  • 当任务进行阻塞系统调用(例如select()read())时.
  • 当任务中发生CPU异常时(例如,内存访问故障).