CHS_04.2.2.3_2+调度器和闲逛进程

CHS_04.2.2.3_2+调度器和闲逛进程

  • 调度器/调度程序(scheduler)
  • 闲逛进程

调度器/调度程序(scheduler)

CHS_04.2.2.3_2+调度器和闲逛进程_第1张图片

调度器 或者叫调度程序 很简单的一个概念 调度程序是操作系统内核的一个非常非常重要的一个程序模块

我们说一个进程会在就绪运行阻塞之间来回横跳那二和三这两个状态的转换

就是由调度程序来负责完成的操作系统的调度程序要决定这样的两个事 首先让谁去运行
这就涉及到这个调度程序 它采用的调度算法是什么
先来先服务 短作业优先 还是时间片轮转等等

那除了让谁运行之外 还需要决定运行多长时间 不同的进程可以给他分配不同的时间变大小

好 所以这就是操作系统的调度程序 反正就是用来管调度的当前运行的进程
要不要让他下处理机 如果他下了处理机 那么接下来就去对列里的这些进程要让谁上处理机运行 这就调度程序要管的一个事情

那之前我们讲过这样的一个知识点 叫做进程的调度时机 那现在我们也可以换一种说法 就是

什么样的事件会触发这个调度程序 他开始工作首先创建一个新进程的时候 这就绪对列是不是会发生改变

那是不是就有可能让这个新进程抢占当前正在运行的这个进程的一个cpu

所以创建新进程的时候 调度程序会出来工作一下 检查下要不要让这家伙上处理机好 那 除此之外 进程退出也会触发调度程序的工作

一个正在运行的进程 他此时决定自己终结自己 对吧 那他终结了自己 处理机不就空闲了吗 因此调度程序就得出来看一下

接下来让谁上处理机工作好 除此之外 一个正在运行的进程阻塞显然也需要调度程序出来看一下 对吧 接下来让谁上处理机

再者 发生i o中断的时候 有可能使得某些阻塞进程回到就绪态 那同样的原理 只要就绪队列一改变 那么调度程序就需要出来检查一下
这新就绪的进程应不应该让他上处理机运行 应不应该让他抢占
等等好另一点值得注意的是

如果我们采用的是非抢占式的调度策略 那么只有运行的进程阻塞
或者退出的时候 才会触发这个调度程序的工作
而如果采用的是抢占式的策略

那么 每个时钟中断或者每k个时钟中断都会触发调度程序出来检查工作

这个很好理解吧 如果是抢占式的高度策略 那就意味着只要就绪队列一改变 那就必须检查一下新旧区的进程 有没有可能抢占当前正在运行的这些进程

那这个检查的动作就是由时钟中断来触发的 每过一个时钟周期 或者每过k个时钟周期都例行的唤醒一下这个调度程序 让他来检查
此时就绪 对列有没有新进程到达 如果有 那么需不需要让他抢占当前正在运行的进程

而如果是非抢占式的调度策略 那只有当前运行的进程他主动放弃处理机的时候 才有必要唤醒这个调度程序 让他检查一下 对吧

平时 只要这个进程还在运行 那我们就没有必要频繁的唤醒这个调度程序 因此 非抢占式的这种调度策略

不会由时钟中断来唤醒调度程序好 这就是所谓的调度程序 你只需要知道它是干嘛的

以及什么时候这家伙会出来工作就可以了 那刚才我们说调度的时候 我们说的是进程的调度
CHS_04.2.2.3_2+调度器和闲逛进程_第2张图片

如果一个系统 它支持的不只是进程 还支持线程 那么调度程序 它调度的对象就变成了线程

在不支持内核级线程的操作系统当中调度程序 它调度的对象依然是进程

而如果支持内核级线程 那么调度的处理对象就是内核级的线程 内核线程会作为调度的基本单位 而进程会作为资源分配的基本单位

好 那这就是所谓的调度程序 接下来看闲逛进程 这个知识点也很简单

闲逛进程

CHS_04.2.2.3_2+调度器和闲逛进程_第3张图片

如果就绪队列当中没有其他的就绪进程的时候 调度程序他就会选中这个闲逛进程 让他上处理及运行

也就是说 实际的系统当中 cpu永远不可能空闲 即便没有其他的就绪进程
那么 至少还有一个闲逛进程 它是可以运行的 就跟你没事干的时候就喜欢抖腿一样

cpu没事干的时候也需要闲逛吗 好 那闲逛进程有这样的一些特性 首先 它的优先级在所有的就绪进程当中是最低的

但凡有其他的一个就绪进程 那肯定不会选择让他上处理运行 另外 我们在计组当中学过零地址的指令 对吧

那闲逛进程通常就要反复的执行一些零地址的指令 零地址的指令就意味着不需要仿存

甚至不需要去访问cpu里面的任何一个寄存器 因此 这种指令也会使得cpu的能耗比较低

让cpu在闲逛的时候更省电 更不耗能 另一方面 在执行完闲逛进程的每一条指令之后

它的这个指令周期的末尾也会例行的检查中断 那这个中断就可以周期性的唤醒调度程序

让调度程序来检查此时到底有没有其他的就绪进程 已经就绪 如果有的话 那么就让闲逛进程下处理机 让其他进程上处理机

好 那这就是闲逛进程 它是调度程序永远可以选择的一个备胎 不离不弃

知道他的作用以及知道他特性就行 这种考点大概率只会在选择题当中出现

推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习

你可能感兴趣的:(操作系统,#,处理机调度,第二章进程与线程,操作系统)