您的位置:首页 > 理论基础

【进程&线程】调度 schedule

2017-05-10 10:03 260 查看
预备知识:

在并发体系中,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时长短的会获得更高的优先级。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息