CPU调度的基本单位是是线程。线程是操作系统能够进行运算调度的最小单位。
一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。在Unix System V及SunOS中也被称为轻量进程(lightweight processes),但轻量进程更多指内核线程(kernel thread),而把用户线程(user thread)称为线程。 (推荐学习:web前端视频教程)
CPU调度程序
每当CPU空闲时,操作就必须从就绪队列中选择一个进程来执行。进程选择由短期调度程序(short-term scheduler)或CPU调度程序执行。调度程序从内核中选择一个能够执行的进程,并为之分配CPU。
就绪队列不必是先进先出(FIFO)队列。就绪队列可实现为FIFO队列,优先队列,树或简单的无序链表。不过从概念上来说,就绪队列内的所有进程都要排队以等待在CPU上运行。队列中的记录通常为进程控制块(PCB)。
抢占调度
CPU调度决策可在如下4种环境下发生:
当一个进程从运行状态切换到等待状态(例如,I/O请求,或调用wait等待一个子进程的终止)。
当一个进程从运行状态切换到就绪状态(例如,当出现中断时)
当一个进程从等待状态切换到就绪状态(例如,I/O完成)
当一个进程终止
对于第1和第4两种情况,没有选择而只有调度。一个新进程(如果就绪队列中已有一个进程存在)必须被选择执行。不过,对于第2和第3两种情况,可以进行选择。
当调度只能发生在第1和第4两种情况下时,称调度方案是非抢占的(nonpreemptive)的或协作的(cooperative);否则,称调度方案是抢占的(preemptive)。采用非抢占调度,一旦CPU分配给一个进程,那么该进程会一直使用CPU知道进程终止或切换到等待状态。
中断能随时发生,而且不能总是被内核所忽视,所以受中断影响的代码段必须加以保护以避免同时访问。为了这些代码段不被多个进程同时访问,在进入时要禁止中断,而在退出时要重新允许中断。
以上是处理器调度的最小单位的详细内容。更多信息请关注PHP中文网其他相关文章!