本文主要是介绍操作系统第六周(第一堂),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
回顾
线程与进程的关键点:
1、进程之间是并发运行的,线程之间也是并发运行的
2、线程是CPU使用的基本单位,是程序执行的基本单位
3、进程是CPU分配资源的单位
4、线程是进程的上下文,子进程不是父进程的上下文
5、进程是程序运行的实体
6、线程出现后比进程节省资源的重要原因在于:在一个线程被阻塞后CPU切换其他线程的速度更快
7、进程创建线程后,进程本身也仍然和线程并发执行,共同抢占CPU资源
关于线程的理解,我们只需要停留在:1、线程是程序执行的基本单位;2、线程是进程的上下文与进程共同抢占CPU资源 便可以了。
后续不会特别区分线程和进程,我们的知识点都将以进程展开
进程调度
进程调度就是指CPU在不同的进程间切换,以提高CPU整体的利用率
必要性
进程在运行中有时需要IO参与,IO在执行中进程会被中断,此时CPU是空闲的,因此可以让CPU运行其他的进程
根本原因:进程运行是I/O执行和CPU执行交替进行的
现实统计结果: 在实际对程序进行调查后,发现大量的程序主要的时间都处于I/O执行阶段,实际需要CPU的时间非常少,这也就意味着CPU需要有较多的进程切换以保证自己的利用率。
下图中大部分的进程CPU占用时间在2s左右
调度程序
调度程序实际上指的是短期调度程序(从内存的就绪队列中选择进程调用到CPU中)。调度程序的目的是在就绪队列中为CPU中选择下一个运行的进程。
其他调度程序有:中期调度程序(从内存中选择进程调用到磁盘中)
长期调度程序(从磁盘中选择进程调度到内存就绪队列中)
后面我们用调度程序指代短期调度程序
调度程序类型
调度程序可以分为两类:一、抢占的;二、非抢占的
定义如下:
抢占的:一旦有新进程准备就绪,操作系统就会给正在CPU执行的进程发出中断信号让其转为waiting状态,并调度新进程入CPU运行
非抢占:一旦某个进程分配到CPU则会一直使用CPU直到它终止或切换到等待状态
另一种视角:
1、当调度只出现第一种和第四种情况时,则表示该调度程序是非抢占式的,否则就是抢占式的。
2、发送调度时,上图中第二种情况是该进程被其他进程抢占,第三种情况是该进程准备抢占其他进程
图解视角:
利用上面用过的图帮助大家更直观的理解抢占和非抢占程序
1、箭头指向位置表示调度发生的时间
2、第一个箭头表示发生在CPU执行区间内
3、第二个箭头表示发生在CPU执行区间结束时
调度准则
重点的准则有:周转时间、等待时间
这里直接贴上黑宝书的图:
调度算法
CPU需要调度进程,那么肯定就需要一个程序去执行这个调度的操作。不同的调度程序有不同的实现算法,其执行调度操作的特点肯定是不同的,接下来就介绍几种典型的调度算法,它们都有各自的优缺点,适用的场景也不同
先到先服务算法(FCFS算法)
特点
1、先到CPU的先被服务,后到的后被服务
2、FCFS是非抢占式的,一旦进程被分配给了CPU则会一直运行到释放CPU(程序终止或请求I/O)
3、平均等待时间往往很长,变化很大
4、存在护航效应(所有其他进程等待一个大进程释放CPU),这是导致3出现的内核原因
举例
假如P1先进入CPU那么画出甘特图如下 :
此时就出现护航效应 ,计算出各进程的等待时间为:
- P1:0ms
- P2:24ms
- P3:27ms
所以平均等待时间为:(24+0+27)/3=17ms
最短作业优先调度(SJF算法)
特点
1、在就绪队列中选择最短CPU执行长度的进程
2、SJF算法可以是抢占式的也可以是非抢占式的,抢占理论上更优
3、SJF算法是一种特殊的优先级算法
4、SJF算法最困难的点在于如何确定进程的CPU执行长度
举例(非抢占式,0时刻各进程一起进入)
假设是非抢占式的,画出甘特图如下 :
假设在0时刻各进程一起进入CPU,计算出各进程的周转时间:
- P4:3ms
- P1:9ms
- P3:16ms
- P2:24ms
平均周转时间为:(3+9+16+24)/4=13ms
如何预测进程执行的上下文长度
可以利用每一个进程的历史执行长度来预测该进程下一次执行的长度
上图就是CPU对一个进程执行长度的预测:从左往右看,8=(10+6)/2,6=(8+4)/2,6=(6+6)/2~~~~(即将预测时间与实际时间取平均作为下一个时间的预测,就是让CPU实际执行长度不停去修正我们的预测长度)
举例(抢占式)
画出甘特图如下:
计算各进程的等待时间
- P1:9ms
- P2:0ms
- P3:15ms
- P4:2ms
平均等待时间为:(9+0+15+2)/4=6.5ms
总结
本文到这里就结束啦~~下节课我们再来进入剩下的三种调度算法
如果觉得对你有帮助,辛苦友友点个赞哦~
知识来源:操作系统概念(黑宝书)、山东大学高晓程老师PPT及课上讲解。不要私下外传
这篇关于操作系统第六周(第一堂)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!