空闲进程的代码是什么?

nod*_*nja 9 cpu process

当cpu没有做任何事情时,它会运行空闲进程.我听说这个进程会查找正在队列中等待的程序,以便cpu可以运行它们.这就是它的全部吗?它的代码是什么样的?我也有兴趣了解各种操作系统中系统空闲进程的文件名.

Jde*_*eBP 12

这个问题包含几个错误的默认假设.以下是一些指示:

  • 它不一定是空闲的过程. 它是非多线程操作系统上的空闲进程,但不适用于多线程操作系统.专注于后一种操作系统的过程集中在错误的事情上.虽然Microsoft Windows NT将其称为"空闲进程",并在其任务管理器中显示,但重要的机制是空闲线程.空闲进程只是这些线程为了簿记而属于的进程.(所有线程必须属于进程.)没有文件名.(进程甚至不具备在许多系统上的名字.)
  • 并非所有操作系统都具有这些空闲进程/线程.在几个较旧的单处理器操作系统中,当没有任何事情要做时,系统闲置只是调度员中的一个特例.这种方法对于多处理器操作系统是有问题的(当一个CPU在另一个CPU想要分派的进程/线程中空闲时),这就是为什么一个特殊的进程/线程的想法总是准备好运行,每个处理器一个系统,使CPU可以在自己的私有线程上下文中空闲,成为常态.
  • 空闲进程/线程的作用是CPU特定的.空闲进程/线程的重要质量是它必须始终准备好运行.它绝不能阻止.但它可以做任何它喜欢的事情.然而,通常"无论喜欢什么"都意味着"尽可能少".规范空闲线程只是一个无限循环:一个无条件分支指令分支到自身.多个处理器体系结构提供了x86 hlt指令的等价物,其目的一般是减少空闲处理器对系统总线的使用(因此,当然,处理器可以使用该总线带宽).因此,在许多架构中,无限循环重复执行这些指令.一些处理器在执行这样的指令时可以在总线上发信号通知它们的"空闲"状态,外部硬件可以识别并采取行动(例如通过减慢总线时钟并消耗更少的功率).类似地,空闲指令可以使处理器本身执行诸如时钟减速和省电之类的事情.
  • 低级别调度不是"线程内"的事情. 毕竟,它是低级调度程序,通常称为调度程序,它决定了首先运行的线程.它是在线程内运行的中级和(有时很少)高级调度.例如,中级调度程序可以是每N秒唤醒一次的线程,并扫描线程表,重新计算动态优先级线程的线程优先级.或者它可能是一个线程,每隔N秒,将整个进程段推送到磁盘并再次将它们拉回,具体取决于进程优先级和最近的CPU使用情况.(后一种类型在现代分页操作系统中很少见,但它存在于分段交换操作系统上.)


mou*_*iel 6

在空间关键的嵌入式系统中,空闲过程用于擦除存储器以检查宇宙射线是否引入了位翻转.


Woo*_*ble 5

Idle 进程不执行任何操作;操作系统本身负责调度进程运行。Idle 进程本身只是循环 HLT 指令。(来源:维基百科