最早截止时间优先即EDF算法
1. 最早截止时间优先EDF(Earliest DeadlineFirst)算法是非常著名的实时调度算法之一。在每一个新的就绪状态,调度器都是从那些已就绪但还没有完全处理完毕的任务中选择最早截止时间的任务,并将执行该任务所需的资源分配给它。在有新任务到来时,调度器必须立即计算EDF,排出新的定序,即正在运行的任务被剥夺,并且按照新任务的截止时间决定是否调度该新任务。如果新任务的最后期限早于被中断的当前任务,就立即处理新任务。按照EDF算法,被中断任务的处理将在稍后继续进行。
2. 该算法的思想是从两个任务中选择截至时间最早的任务,把它暂作为当前处理任务,再判断该任务是否在当前周期内,若不在当前周期内,就让另一任务暂作当前处理任务,若该任务也不在当前周期内,就让CPU空跑到最靠近的下一个截至时间的开始,若有任务在该周期内,就判断该任务的剩余时间是否小于当前截至时间与当前时间的差,若小于,则让该任务运行到结束.否则,就让该任务运行到该周期的截止时间,就立即抢回处理器,再判断紧接着的最早截至时间,并把处理器给它,做法同上,如此反复执行.
3.最早截止时间优先即EDF算法的程序如下:
#include<stdio.h> #define closetime 200 #define PERIOD1 10 /*任务1的周期*/
#define PERIOD2 40 /*任务2的周期*/
#define CPUTIME1 5 /*任务1需要的CPU时间*/
#define CPUTIME2 20 /*任务2需要的CPU时间*/ typedef struct TCB { int period; /*周期*/ int cputime;/*需要的cpu时间*/ int remain; /*剩余的cpu时间*/ int pnum; /*所处周期数*/ int laxity; /*松弛度*/ } TCB;
TCB tcb[2]; /*任务控制块,容易扩充为多个*/ int curtime; /*当前时间,初始为0*/ void init(void)
{int i;float f; curtime=0;/*当前时间为0*/ tcb[0].period=PERIOD1;tcb[0].cputime=CPUTIME1;/*周期与*/ tcb[1].period=PERIOD2;tcb[1].cputime=CPUTIME2;/*CPU时间*/ f=(float)tcb[0].cputime/tcb[0].period+(float)tcb[1].cputime/tcb[1].period;/*数据合法性检查*/ if(f>1){ printf("非法周期!");return; } for(i=0;i<2;++i){ tcb[i].pnum=1;/*初始周期号*/ tcb[i].remain=tcb[i].cputime;/*初始剩余时间*/ }
} void schedule(void)/*调度程序*/
{int i,p;/*i是被调度运行任务,p是当前周期值*/ int duration;/*本次运行持续时间*/ i=tcb[0].period*tcb[0].pnum<=tcb[1].period*tcb[1].pnum?0:1;/*选最早截止时间的的任务*/ if(curtime<tcb[i].period*(tcb[i].pnum-1))/*尚未进入该周期*/ {p=tcb[i].period*(tcb[i].pnum-1); i=(i+1)%2;/*选另一个任务*/ if(curtime<tcb[i].period*(tcb[i].pnum-1))/*尚未进入该周期*/ curtime=p; else if(tcb[i].remain<=p-curtime)duration=tcb[i].remain; /*让它运行到结束*/ else duration=p-curtime;/*只能运行到下个周期到来时刻*/ tcb[i].remain-=duration;/*修改剩余时间*/ printf("任务号=%-3d周期序号=%-3d调度时刻=%-6d运行时间长度=%-3d\n",i,tcb[i].pnum,curtime,duration); curtime+=duration;/*时间推进到下一调度时刻*/ if(tcb[i].remain==0) {/*本周期的任务已完成*/ tcb[i].pnum++;/*向前推进一个周期*/ tcb[i].remain=tcb[i].cputime;/*设置初始剩余时间*/ } }else {p=tcb[i].period*tcb[i].pnum; if(tcb[i].remain<=p-curtime)duration=tcb[i].remain; /*让它运行到结束*/ else duration=p-curtime;/*只能运行到下个周期到来时刻*/ tcb[i].remain-=duration;/*修改剩余时间*/ printf("任务号=%-3d周期序号=%-3d调度时刻=%-6d运行时间长度=%-3d\n",i,tcb[i].pnum,curtime,duration); curtime+=duration;/*时间推进到下一调度时刻*/ if(tcb[i].remain==0) {/*本周期的任务已完成*/ tcb[i].pnum++;/*向前推进一个周期*/ tcb[i].remain=tcb[i].cputime;/*设置初始剩余时间*/ } }
} void main(void)
{ init(); while(curtime<closetime) schedule();
}
最早截止时间优先即EDF算法相关推荐
- 最早截止时间有限(EDF)算法、最低松弛度优先(LLF)算法
最早截止时间有限(EDF)算法: 截止时间越早,优先级越高 最低松弛度优先(LLF)算法: 松弛度=完成截止时间-仍需运行时间-当前时间 松弛度越低优先级越高,当正在执行时有其他松弛度更低的进程进入队 ...
- 最早截止时间优先(EDF)
最早截止期限优先(EDF)调度根据截止期限动态分配优先级.截止期限越早,优先级越高:截止期限越晚,优先级越低. 根据 EDF 策略,当一个进程可运行时,它应向系统公布截止期限要求.优先级可能需要进行调 ...
- 计算机操作系统——什么是最早截止时间优先调度算法?什么是最低松弛度有限调度算法?举例说明之~
最早截止时间优先算法(Earliest Deadline First,EDF) 定义:EDF算法是指根据任务的截止时间来确定任务的优先级的算法,任务截止时间越早,其优先级愈高. 作用对象:即可用于抢占 ...
- ======第三章处理机调度与死锁======
目录 第三章 处理机调度与死锁 3.1处理机调度的层次 3.1.1 高级调度 3.1.2 低级调度 3.1.3 中级调度 3.2 调度队列模型和调度准则 3.2.1 调度队列模型 3.2.2 选择调度 ...
- 作业调度、进程调度、实时调度的几种典型算法
1.先来先服务FCFS 定义:系统按照作业到达的先后次序来进行调度(优先考虑等待时间最长的作业),并且不管该作业所需执行时间的长短. 例子: 2.短作业优先SJF 定义:系统在调度时会从作业后备队列中 ...
- 【操作系统】重点知识点总结
操作系统的基本特征 并发:同一段时间内多个程序执行(注意区别并发和并行,前者是同一时刻的多个事件,后者是统一时间段内的多个事件) 共享:系统中的资源可以被内存中多个并发执行的进线程共同使用 虚拟:通过 ...
- 操作系统03进程管理Process_Scheduling
2 Process Scheduling >Type of scheduling >Scheduling Criteria (准则) >Scheduling Algorithm &g ...
- 计算机操作系统习题答案
计算机操作系统(第四版)课后习题答案(完整版) 第一章 1.设计现代OS的主要目标是什么? 答:(1)有效性 (2)方便性 (3)可扩充性 (4)开放性 2.OS的作用可表现在哪几个方面? 答:(1) ...
- 计算机操作系统(第四版)
计算机操作系统(第四版) 引论 目标:方便性,有效性,可扩展性,开放性 作用 用户与计算机硬件系统之间的接口 计算机系统资源的管理者 对计算机资源的抽象 发展动力 不断提高计算机资源利用率 方便用户 ...
最新文章
- (转载) 数组a[]={3,5,2,4,1,8},要求从a中找出所有“和”等于10的子集
- 16 个写代码的好习惯
- JQuery-学习笔记01【基础——JQuery基础】
- php python插件,Python:开发Sublime插件,方便PHP开发
- matlab find
- php代码提示助手,laravel自动补全助手ide-helper安置及配置
- java编码规范文档 下载_软件项目实训及课程设计指导——制定待开发项目中各种文档的规范...
- 缩放图片,解决bitmap 内存溢出out of memory的问题
- (转)SQL Server 监控统计阻塞脚本信息
- 前台js限制上传图片质量大小和尺寸
- 点播系统加服务器加投影加音响,VOD视频点播系统的安装维护与使用
- vscode打开txt文件乱码
- 计算机三级网络技术(精简)
- 探索硅谷奇迹的本质--周末荐书之《硅谷之谜》
- 8.1 有监督学习算法
- mysql时间串工具_时间戳_时间戳转换工具_阿波罗查询
- 韦伯望远镜拍摄图片震撼来袭!!
- NASA全球生态系统动态调查激光雷达(GEDI)
- docker 学习记录1
- ML:MLOps系列讲解之《设计机器学习驱动的(ML-powered)软件—我们想要解决的业务问题是什么?》解读