【进程&线程】调度 schedule

预备知识:
在并发体系中,I/O几乎是不消耗cpu资源的。当I/O完成之后会通过DMA(Direct Memory Access),通知cpu。这个时候cpu完成上下文切换,执行接下来的进程。
由于cpu的发展比磁盘的改进快很多,所以接下来的进程会越来越倾向于I/O密集型。

两种调度算法:
非抢占式算法 挑选一个进程并运行直至它IO阻塞或者自动让出cpu。这样就算cpu中断的时候进行check,也不会更改运行的进程,除非出现了更高优先级的进程。
抢占式算法 设定进程运行时间的最大值,若到达时间了这个进程还在运行,就挂起它。一般这个处理需要时钟中断,以便把cpu控制权返回给调度程序。

三种环境:
批处理 基本就是安心工作,不需要和用户交互。这种就要尽可能地避免改变进程,切换各种上下文。非抢占式或者比较长时间阈值的抢占式都可以。
            需要大吞吐量(作业量,以作业为单元),短周转时间(从作业提交到作业完成的平均时间),
交互式 需要和用户不断地交互,比如UI,比如等待用户连接的服务器。需要抢占式。需要的是最小响应时间。
实时 多媒体播放

目标
共同目标:公平、保证系统策略一定要执行(该系统所必须要实现的效果)、保持系统的所有部分尽可能忙碌

下面爸爸重点记录一下交互式系统中的调度。
1. 轮转调度
每个进程有固定的时间片。由于切换上下文等操作需要时间,所以理论上时间片越长,效率越高。但是问题是时间片长的话,万一并发进程一多,排在后面的就不得不排好久。
2. 优先级调度
每个进程有优先级。比较简单的优先级算法为:假设为IO密集型进程服务,假设上一次消耗的时间为f,则下一次获得的优先级为1/f。即占用cpu时长短的会获得更高的优先级。

猜你喜欢

转载自blog.csdn.net/hhh132/article/details/71514751