资源简介

【实验原理】
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.embed.manifest
     文件         728  2018-12-12 14:26  C语言实现最低松弛度优先算法源代码+实验报告-安徽大学操作系统实验9\oslab1\oslab1\Debug\oslab1.exe.embed.manifest.res
     文件         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

评论

共有 条评论