資源簡介
【實驗原理】
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
評論
共有 條評論