资源简介
【实验原理】
LLF算法根据实时任务的松弛度来确定任务的优先权,即任务的松弛度越低,其优先权越高。在实现该算法时,要求系统中有一个按松弛度排序的实时任务就绪队列。该算法通常采用抢占方式,当一个任务的最低松弛度为 0 时,它便立即抢占 CPU,以保证它的截止时间要求。
松弛度 = 任务必须完成的时间 - 任务本身运行的时间 - 当前时间
比如说,一个任务在200ms时必须完成而它本身运行需要100ms,所以此任务就必须在100ms之前调度执行,此任务的松弛度就是100ms。在实现此算法时需要系统中有一个按松弛度排序的实时任务就绪队列,松弛度最低的任务排在最烈的最前面,调度程序总是选择就粗队列中的首任务执行。
LLF算法根据实时任务的松弛度来确定任务的优先权,即任务的松弛度越低,其优先权越高。在实现该算法时,要求系统中有一个按松弛度排序的实时任务就绪队列。该算法通常采用抢占方式,当一个任务的最低松弛度为 0 时,它便立即抢占 CPU,以保证它的截止时间要求。
松弛度 = 任务必须完成的时间 - 任务本身运行的时间 - 当前时间
比如说,一个任务在200ms时必须完成而它本身运行需要100ms,所以此任务就必须在100ms之前调度执行,此任务的松弛度就是100ms。在实现此算法时需要系统中有一个按松弛度排序的实时任务就绪队列,松弛度最低的任务排在最烈的最前面,调度程序总是选择就粗队列中的首任务执行。
代码片段和文件信息
// oslab1.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
int numa=0numb=0;//存放已经运行的次数
int deadtimea[10]={20406080100120140160180};//存放时间轴上A任务的截止时间
int deadtimeb[10]={50100150200};//存放时间轴上B任务的截止时间
int runtimea=10runtimeb=25;//存放当前任务A、B还需要运行的时间,A、B任务的运行时间的初始值分别为10和25
int clock=0;//clock中存放当前时间
int step=5;//用来存放时间跨度,每次增加5,即每隔5个时间单位进行一次最低松弛度优先算法的调度
int softa=0softb=0;//softa和softb分别用来存放当前任务A和任务B的松弛度
bool runa=falserunb=false;
//通过布尔量runa和runb来定义一些规则,runb为true表示B任务正在运行,为false表示当前不允许B任务执行,
//runa同理,在程序中可以灵活使用
void softai()//最低松弛度优先算法的核心部分
{
if(softa==0)//表示如果当前A任务已经到达了临界条件即A任务松弛度为0时,此时要抢占处理机来执行任务A
{
runb=false;
}
if(softb==0)//表示如果当前B任务已经到达了临界条件即B任务松弛度为0时,此时要抢占处理机来执行任务B
{
runa=false;
}
if(deadtimea[numa]-clock>20)//表示如果任务A当前周期内的运行任务已经完成,而且尚未进入下一周期,则任务A放弃处理机,让任务B执行任务
{
runb=true;
}
if(deadtimeb[numb]-clock>25)//表示如果任务B当前周期内的运行任务已经完成,而且尚未进入下一周期,则任务B放弃处理机,让任务A执行任务
{
runa=true;
}
if(softa {
runa=true;
runtimea-=step;
if(runtimea==0)
{
runtimea=10;
numa++;
}
}
else
{
runb=true;
runtimeb-=step;
if(runtimeb==0)
{
runb=false;
runtimeb=25;
numb++;
}
}
}
void display()//对表格中的每一项进行打印,包括“当前时间、截止时间、运行时间、松弛度”
{
printf(“%5d%11d%11d%9d %6d%11d%11d\n“clockdeadtimea[numa]runtimeasoftadeadtimeb[numb]runtimebsoftb);
}
int _tmain(int argc _TCHAR* argv[])
{
int timeatimeb;//用来存放任务的周期
int deadtime;//存放调度的最终截止时间
printf(“请输入任务A的周期:\n“);
scanf(“%d“&timea);
printf(“请输入任务A每周期的运行时间:\n“);
scanf(“%d“&runtimea);
printf(“请输入任务B的周期:\n“);
scanf(“%d“&timeb);
printf(“请输入任务B每周期的运行时间:\n“);
scanf(“%d“&runtimeb);
printf(“该调度算法从0时刻开始,请输入调度运行时间:\n“);
scanf(“%d“&deadtime);
for(int i=0;i<10;i++)
{
deadtimea[i]=timea*(i+1);//deadtimea[i]存放时间轴上A任务的截止时间
deadtimeb[i]=timeb*(i+1);//deadtimeb[i]存放时间轴上B任务的截止时间
}
printf(“*********************A*****************************B***************\n“);
printf(“当前时间 必须完成时间 运行时间 松弛度 必须完成时间 运行时间 松弛度\n“);
while(clock<=deadtime)//在deadtime内进行最低松弛度优先的调用
{
softa=deadtimea[numa]-runtimea-clock;//计算当前A任务的松弛度
softb=deadtimeb[numb]-runtimeb-clock;//计算当前B任务的松弛度
display();//每调用一次算法,打印当前任务的运行时间、截止时间等
softai();//调用最低松弛度优先算法
clock+=step;//时间增加
}
getchar();
getchar();
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2019-12-26 16:22 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\
目录 0 2019-12-26 16:20 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\
目录 0 2019-12-26 16:20 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\Debug\
文件 31232 2018-12-12 15:33 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\Debug\oslab1.exe
文件 378340 2018-12-12 15:33 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\Debug\oslab1.ilk
文件 470016 2018-12-12 15:33 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\Debug\oslab1.pdb
目录 0 2019-12-26 16:20 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\
文件 207872 2018-12-12 14:15 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1.ncb
文件 884 2018-12-12 14:15 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1.sln
文件 11264 2018-12-12 16:52 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1.suo
目录 0 2019-12-26 16:20 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\Debug\
文件 9508 2018-12-12 15:33 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\Debug\BuildLog.htm
文件 65 2018-12-12 15:33 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\Debug\mt.dep
文件 663 2018-12-12 14:26 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\Debug\oslab1.exe.em
文件 728 2018-12-12 14:26 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\Debug\oslab1.exe.em
文件 621 2018-12-12 15:33 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\Debug\oslab1.exe.intermediate.manifest
文件 11038 2018-12-12 15:33 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\Debug\oslab1.obj
文件 3211264 2018-12-12 14:26 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\Debug\oslab1.pch
文件 12149 2018-12-12 14:26 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\Debug\stdafx.obj
文件 68608 2018-12-12 15:33 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\Debug\vc90.idb
文件 126976 2018-12-12 15:33 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\Debug\vc90.pdb
文件 2992 2018-12-12 15:35 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\oslab1.cpp
文件 4495 2018-12-12 14:15 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\oslab1.vcproj
文件 1403 2018-12-12 16:52 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\oslab1.vcproj.C25.ACER.user
文件 1177 2018-12-12 14:15 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\ReadMe.txt
文件 211 2018-12-12 14:15 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\stdafx.cpp
文件 233 2018-12-12 14:15 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\stdafx.h
文件 498 2018-12-12 14:15 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\targetver.h
文件 65536 2018-12-12 16:08 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\绘图1.vsd
文件 223819 2018-12-21 09:52 C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\实验报告9.docx
- 上一篇:进程同步与互斥C++
- 下一篇:Python基础教程第3版) 高清PDF
评论
共有 条评论