0.总览
1.背景
早期操作系统一个进程从开始到结束不准被打断,其他进程不得不等待前一个进程执行完了之后才能执行,
这种情况下的效率不高.
另一种情况是抢占式的,在这种情况下,操作情况会根据自己的策略去选择自己认为要执行的进程去执行,
这个是我们现在的操作系统常用的调度策略.
非抢占式多任务调度算法---Non-Preemptive multitasking Scheduling Algorithm
我们说的抢占式和非抢占式策略说的都是用户态的进程,在内核中也会存在是否可以抢占的概念.
当一个用户进程执行系统调用,如果这个系统调用在内核中不会导致这个进程处于等待状态(进程
还处于运行状态)的时候,当进程正常返回的时候一定会返回到发起系统调用的进程继续执行,不
会在内核中出现抢占现象,在内核中不会切换到另一个线程去执行了,这个就是内核不可抢占.
如果这个系统调用在内核中会导致这个进程处于等待状态,当进程正常返回的时候可能去调用另一个
进程去了,这个就是内核的抢占.
2.调度原则
2.1 程序执行模型
2.2 比较调度算法的准则
2.3 吞吐量VS延迟
2.4 公平的目标
如果CPU利用率高,我们可以认为调度的不错;
吞吐量越高,认为进程的效率不错;
周转时间越短当然越好;
等待时间是指处于就绪态的进程等待多长时间才会变成运行态,不是指阻塞态的进程等待多长时间才会被唤
醒,处于就绪态的进程等待时间越短当然越好;
响应时间是,比如说一个用户或者一个外设发出一个请求到这个请求的进程被处理完毕所花费的时间,响应
时间也是越短越好.
这些指标都可以被调用算法用来量化分析.
当遇到指标有矛盾的时候,根据需求需要进行一些平衡或取舍.
比如说最小响应时间和最大吞吐量之间就会有一定的矛盾.
桌面系统 --低延迟
数据中的服务器--高吞吐
3.调度算法
会从三个方面来说调度算法:
1.通常的桌面和服务器涉及到的最基本的调度算法;
2.针对嵌入式实时系统中的一些特殊的调度算法;
3.多处理器的调度算法.
3.1 桌面和服务器涉及到的最基本的调度算法
3.1.1 FCFS-先来先服务
3.1.2 短进程优先&短剩余时间优先
问题:进程的执行时间是如何计算出来的呢????操作系统如何知道呢??