进程调度----FCFS,SJF,优先级调度,RR
1,FCFS
先服务先调度
FCFS策略可以通过FIFO队列容易的实现。当一个进程进入就绪队列时,它的PCB会被连接到队列尾部。当CPU空闲时,它会分配给位于队列头部的进程,并且这个运行进程从队列中移去。
缺点:平均等待时间往往很长。
假设有这么三个进程P1,P2,P3按顺序到达,并且按FCFS顺序进行处理
进程 | 执行时间 |
---|---|
P1 | 24 |
P2 | 6 |
P3 | 6 |
平均等待时间=((0-0)+(24-0)+(30-0))/3=18ms
1.1,护航效果
考虑动态情况下FCFS调度性能:
假设有一个CPU密集型进程和多个I/O密集型进程,随着进程在系统中的运行,可能会有这样的情况:
- CPU密集型进程得到CPU并使用它,这段时间里,其他I/O进程处理完它们的I/O,转到就绪队列里,等待CPU;当这些I/O密集型进程在等待的时候,I/O设备空闲
- 当CPU密集型进程完成CPU的执行之后,转至I/O执行进程;而此时I/O密集型进程因为具有很短的CPU执行,很快就会回到I/O队列,此时CPU空闲
- 之后,CPU密集型进程会移回到就绪队列并拿到CPU的执行权,I/O密集型进程完成了I/O工作之后,会在就绪队列中等待CPU的释放。
- 由于所有其他进程都等待一个大进程释放CPU,故称之为护航效果
2,SJF
最短作业优先调度
这个算法将每个进程与其啊次CPU执行的长度关联起来。当CPU变为空闲的时候,它会被赋给具有最短CPU执行的进程!
SJF有抢占式的和非抢占式的
假设有这么四个进程
进程 | 到达时间 | 执行时间 |
---|---|---|
P1 | 0 | 8 |
P2 | 1 | 4 |
P3 | 2 | 9 |
P4 | 3 | 5 |
非抢占式的:
0ms时,P1进程进来了,P1拿到CPU的执行权,当P1运行完之后,已经是4ms了;此时P2,P3,P4均已到达,此时会根据CPU执行时间进行调度!所以进程的执行顺序是P1-P2-P4-P3
抢占式的:
第0ms的时候,P1到达并拿到CPU的执行权;
第1ms的时候,P2到达,此时P1的剩余执行时间还有7ms,而P2的执行时间只需要4ms,所以调度程序会让P2拿到CPU的执行权;
第2ms的时候,P3到达了,此时P1,P2,P3的所需执行时间分别为:7ms,2ms,9ms,所以会让P2继续执行;
第3ms的时候,P4到达了,此时P1,P2,P3,P4所需的执行时间分别为:7ms,1ms,9ms,5ms,所以后续的执行顺序应该是:P2-P4-P1-P3
这样就是图中所示的信息!
值得一提的是:抢占式SJF调度有时被称为最短剩余时间优先调度
3,优先级调度
SJF算法是通用优先级调度算法的一个特例
进程会被分配到一个优先级,但值得一提的是,对于0优先级表示最高还是最低并没有定论!
有的系统用低数字表示高优先级,有的则用来表示低优先级!
3.1,优先级的定义
优先级的定义可以分为外部的和内部的
- 内部的:采用一些测量数据来计算进程优先级:时限,内存要求,打开文件数量,平均I/O执行时间与CPU平均执行之比;这些都可以用于计算优先级
- 外部的:进程重要性,用于支付使用那个计算机的费用类型和数量,赞助部门,其他因素等;也可以用来计算优先级
3.2,问题
优先级调度算法的一个主要问题就是:无穷阻塞/饥饿
极端情况下优先级高的进程可以让优先级低的进程一直等待;
通俗点说就是:假如有一个优先级为0(这里假设数字越低,优先级越低)的进程在等待CPU执行,每当快轮到它时,都会有一个更高优先级的进程进来,还不止一次,这样它就永远都得不到运行!
3.3,解决方法
低优先级进程的无穷等待问题的解决方案之一就是老化。
老化可以逐渐增加在系统中等待很久的进程的优先级,例如可以每个一段时间就提高进程的优先级数字(这里假设数字越低,优先级越低)
3.4,示例
这里假设数字越低,优先级越高
进程 | 执行时间 | 优先级 |
---|---|---|
P1 | 10 | 1 |
P2 | 1 | 3 |
P3 | 2 | 2 |
执行的顺序:
4,RR
轮转调度算法
轮转调度算法就是专门为分时系统设计的,类似于FCFS调度,但是增加了抢占以切换进程。
将一个较小时间单元定义为时间量或者时间片,时间片的大小通常为10~100ms,就绪队列作为循环队列,CPU调度程序循环整个就绪队列,为每个进程分配不超过一个时间片的CPU
在轮转时有两种情况
- 进程CPU剩余执行时间>时间片
- 执行完一个时间片的时间后,定时器会中断,交由下一个进程执行
- 进程CPU剩余执行时间<时间片
- 进程执行完成之后,会释放CPU,交由下一个进程执行
4.1,示例
进程 | 到达时间 | 执行时间 |
---|---|---|
P1 | 0 | 100 |
P2 | 4 | 50 |
P3 | 6 | 75 |
假设一个时间片是25ms
值得一提的是:时间片的大小不能一味的以为越大越好!
过大的话:极端情况下RR算法与FCFS算法一样
过小的话:会导致频繁的上下文切换,导致时间的浪费!
进程调度----FCFS,SJF,优先级调度,RR相关推荐
- 操作系统(五):FCFS/SJF/非抢占优先级/RR
操作系统(五):FCFS/SJF/非抢占优先级/RR 一.题目1(书上170页5.7) 5.4 5.4 Consider the following set of processes, with th ...
- 进程分配算法(FCFS,SJF,RR)
一.进程调度算法的背景 在多道程序环境下,内存中存在着多个进程,其数目往往多于处理机数目.这就要求系统能按某种算法,动态地将处理机分配给处于就绪状态的一个进程,使之执行.分配处理机的任务是由处理机调度 ...
- 操作系统-进程调度(FCFS和SJF)
文章目录 进程调度(FCFS和SJF) 问题描述 实验环境 输入 输出 测试数据 实验设计 数据结构 函数的功能.参数和输出 主要函数算法设计 详细设计 流程图 实验结果与分析 结果展示与描述 结果分 ...
- 操作系统中的调度算法FCFS、SJF、RR算法(Java实现)
Proce类: package five; public class Process { public String name;// 进程名称 public int arrivalTime;// 到达 ...
- linux进程调度之 FIFO 和 RR 调度策略
转载 http://blog.chinaunix.net/uid-24774106-id-3379478.html linux进程调度之 FIFO 和 RR 调度策略 2012-10-19 18:1 ...
- FCFS,SJF以及PSA进程调度算法效率的比较
实现 下面是用 Java 程序比较 FCFS,SJF 和 PSA 算法效率的示例代码: FCFS 思路 对于 FCFS 算法,我们可以定义一个 Process 类来表示一个进程,其中包含进程名称.到达 ...
- FCFS,SJF以及PSA进程调度算法的比较
实现 下面是用 Java 程序比较 FCFS,SJF 和 PSA 算法效率的示例代码: FCFS 思路 对于 FCFS 算法,我们可以定义一个 Process 类来表示一个进程,其中包含进程名称.到达 ...
- 操作系统进程调度 FCFS,SJF,RR算法(Java实现)
有用就给个关注呗 进程控制块 为了管理和控制进程,系统在创建每一个进程时,都为其开辟一个专用的存储区,用以随时记录它在系统中的动态特性.通常,把这一存储区称为该进程的"进程控制块" ...
- FCFS、SJF、RR、SRT进程调度算法的代码实现
最近在做操作系统的上机实验,顺便给大家分享一下自己实验的过程和成果. 以下是实验步骤∶ 1.用一个结构体来存储进程的信息,结构体中包含以下变量. int id; int arriving_time;/ ...
最新文章
- 在AI领域每月投资一次,全面解析腾讯的人工智能奇招
- 开发日记-20190802 关键词 闲聊
- vs2010 vc nmake编译openssl-0.9.8e
- 如何在ubuntu上搭建hustoj?
- VTK:Filtering之WarpTo
- laytpl遍历实体列表_Layui数据表格之获取表格中所有的数据方法
- C语言讲义——字符串
- ssh 免密码登录远程主机 免登录运行指令
- Mac国内安装oh-my-zsh
- windows安装各版本python解释器和anaconda
- nginx 隐藏端口号、自签名https、强制https
- 魔法风云纪无限元宝公益服务器,好玩网页游戏 2678魔法风云纪sf 神兽助战卡免费获得...
- Redis持久化 - 邱乘屹的个人技术博客
- java LPT1_com1/lpt1/prn/nul 木马后门处理方法集合
- 计算机组成原理多级先行进位,计算机组成原理—最系统的算机基础知识.ppt
- C语言打印杨辉三角的多种方法
- 前端学习第三站——Vue2基础篇
- python发短信sim800_玩转 ESP32 + Arduino (十八) 采用SIM800L发送短信和定位(基础知识)...
- 3G带动企业移动管理信息化应用 直播视频
- TOJ 1335 优先队列