-
大小: 370KB文件類型: .rar金幣: 2下載: 0 次發(fā)布日期: 2021-06-09
- 語(yǔ)言: C/C++
- 標(biāo)簽: 操作系統(tǒng)??進(jìn)程調(diào)度??PCB??搶占式??
資源簡(jiǎn)介
內(nèi)容描述:
(1)設(shè)計(jì)進(jìn)程控制塊PCB表結(jié)構(gòu),分別適用于優(yōu)先權(quán)調(diào)度算法和時(shí)間片輪轉(zhuǎn)調(diào)度算法。
PCB結(jié)構(gòu)中一般包括以下信息:進(jìn)程名、進(jìn)程優(yōu)先數(shù)(或輪轉(zhuǎn)時(shí)間片),進(jìn)程所占用的CPU時(shí)間,進(jìn)程的狀態(tài),當(dāng)前隊(duì)列指針等??梢愿鶕?jù)調(diào)度算法的不同,對(duì)PCB結(jié)構(gòu)作適當(dāng)?shù)脑鰟h。
(2)建立進(jìn)程就緒隊(duì)列。對(duì)兩種不同算法編制入鏈子程序。
(3)編制兩種進(jìn)程調(diào)度算法:允許用戶在程序運(yùn)行時(shí)選擇使用某一種調(diào)度算法。
a)搶占式動(dòng)態(tài)優(yōu)先權(quán)調(diào)度算法;
b)時(shí)間片輪轉(zhuǎn)調(diào)度算法。
通過(guò)VC++6.0實(shí)現(xiàn)!

代碼片段和文件信息
#include??
#include??
#include?
#include??
#include?
#include???//控制字符長(zhǎng)度頭文件
using?namespace?std;
#define?TXIANGYING?5?//響應(yīng)時(shí)間為5s
#define?minprio?20???//優(yōu)先權(quán)高低控制標(biāo)準(zhǔn)
#define?ADDPRIO?1????//定義優(yōu)先權(quán)增加幅度
#define?UPDATETIME?2?//定義優(yōu)先權(quán)增加間隔
typedef?struct?node?
{?
??char?name[20];??????//進(jìn)程名字
??int?prio;???????????//進(jìn)程的優(yōu)先級(jí)?
??int?round;??????????//分配CPU的時(shí)間片?
??int?needtime;???????//進(jìn)程執(zhí)行所需要的時(shí)間?
??char?state[8];?????????//進(jìn)程的狀態(tài),Wait——就緒態(tài),Run——執(zhí)行態(tài),F(xiàn)inish——完成態(tài)?
??int?count;??????????//記錄執(zhí)行的次數(shù)
??int?arrive;??????????//到達(dá)時(shí)間
??int?zhouzhuan?;??????//周轉(zhuǎn)時(shí)間
??double?ave_daiquan?;??//帶權(quán)周轉(zhuǎn)時(shí)間
??int?fuwu_time;????????//服務(wù)時(shí)間?
??struct?node?*next;???//鏈表指針
}PCB;?
??????????????????????
???
int?GetFirst(int?sumtime);????????????//從就緒隊(duì)列取得第一個(gè)節(jié)點(diǎn)?
void?Output1();???????????????????????//輸出時(shí)間片輪轉(zhuǎn)隊(duì)列信息
void?Output2(int?sumtime);????????????//輸出優(yōu)先權(quán)調(diào)度隊(duì)列信息?
void?InsertPrio(PCB?*in);?????????????//創(chuàng)建優(yōu)先級(jí)隊(duì)列,規(guī)定優(yōu)先數(shù)越小,優(yōu)先級(jí)越高?
void?InsertRound(PCB?*in);????????????//創(chuàng)建時(shí)間片就緒隊(duì)列?
void?InsertFinish(PCB?*in);???????????//創(chuàng)建完成隊(duì)列
void?PrioCreate();????????????????????//優(yōu)先級(jí)輸入函數(shù)?
void?TimeCreate();????????????????????//時(shí)間片輪轉(zhuǎn)調(diào)度算法——輸入函數(shù)?
void?Priority();??????????????????????//按照優(yōu)先級(jí)調(diào)度?
void?RoundRun();??????????????????????//時(shí)間片輪轉(zhuǎn)調(diào)度?
void?update_priority(int?&add_priority);??????//等待隊(duì)列的優(yōu)先權(quán)更新
PCB?*ready=NULL*run=NULL*finish=NULL;//定義3個(gè)隊(duì)列,就緒隊(duì)列,執(zhí)行隊(duì)列和完成隊(duì)列?
int?main()?
{?
char?choose;
FILE?*fp;
cout<<“*****************歡迎進(jìn)入進(jìn)程管理和調(diào)度的算法模擬*****************\n“< cout<<“*****************************主菜單*****************************“< cout<<“輸入進(jìn)程的調(diào)度方法(請(qǐng)輸入對(duì)應(yīng)數(shù)字):“< cout<<“1.搶占式動(dòng)態(tài)優(yōu)先權(quán)調(diào)度(手工輸入)“< cout<<“2.時(shí)間片輪轉(zhuǎn)調(diào)度(手工輸入)“< cout<<“3.搶占式動(dòng)態(tài)優(yōu)先權(quán)調(diào)度(從文件讀入已設(shè)定的的數(shù)據(jù))“< cout<<“4.時(shí)間片輪轉(zhuǎn)調(diào)度(從文件讀入已設(shè)定的的數(shù)據(jù))“< cout<<“5.退出程序“< cin>>choose;?
switch(choose)?
{?
case?‘1‘:??
PrioCreate();?
Priority();
Output1();????
break;?
case?‘2‘:?
TimeCreate();?
RoundRun();
Output1();?
break;?
case?‘3‘:
fp=freopen(“yxj.txt““r“stdin);//優(yōu)先級(jí)輸入文件
PrioCreate();?
Priority();
Output1();?
fclose(fp);
break;
case?‘4‘:
fp=freopen(“sjp.txt““r“stdin);//時(shí)間片輸入文件
TimeCreate();?
RoundRun();
Output1();
fclose(fp);
break;
case?‘5‘:exit(1);
default:break;?
}
return?0;?
}?
/*
void?GetFirst()??//取得就緒隊(duì)列第一個(gè)節(jié)點(diǎn)
{?
??run?=?ready;?
???
??if(ready!=NULL)?
??{?
????strcpy(run?->state“Run“);?
????ready?=?ready?->next;?
????run?->next?=?NULL;?
??}?
}?
*/
int?GetFirst(int?sumtime)??//取得就緒隊(duì)列第一個(gè)節(jié)點(diǎn)
{
PCB?*fst*temp1*temp2*temp3;
if(ready!=NULL?&&?sumtimearrive)//ready隊(duì)列改變
{
fst=ready;
while(sumtimearrive)//尋找到達(dá)時(shí)間最小的
{
temp1=fst;//記錄符合條件的前面一個(gè)值
fst=fst->next; ??
if(fst==NULL)
{
sumtime++;
Output2(sumtime);
fst=ready;
if?(sumtime>=fst->arrive)//搜索一輪之后,設(shè)置CPU時(shí)間+1,即全部進(jìn)程都等待
{
run=ready;
if(ready!=NULL)?
{?
strcpy(run?->stat
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????3401??2010-04-18?00:44??diaodu.dsp
?????文件????????537??2010-04-18?00:44??diaodu.dsw
?????文件??????41984??2010-04-25?00:36??diaodu.ncb
?????文件??????53760??2010-04-25?00:36??diaodu.opt
?????文件???????1162??2010-04-18?00:44??diaodu.plg
?????文件?????????40??2010-04-18?00:44??sjp.txt
?????文件?????????39??2010-04-18?00:44??sjp1.txt
?????文件?????????52??2010-04-18?00:44??yxj.txt
?????文件?????????53??2010-04-18?00:44??yxj1.txt
?????文件?????????55??2010-04-18?00:44??yxj2.txt
?????文件?????548962??2010-04-18?00:44??Debug\diaodu.exe
?????文件?????285808??2010-04-18?00:44??Debug\diaodu.obj
?????文件????1123328??2010-04-18?00:44??Debug\diaodu.pdb
?????文件?????126976??2010-04-18?00:44??Debug\vc60.pdb
?????文件??????11485??2010-04-18?00:44??diaodu.cpp
?????目錄??????????0??2010-04-18?00:44??Debug
-----------?---------??----------?-----??----
??????????????2197642????????????????????16
- 上一篇:類似QQ截圖的MFC截圖軟件C++源碼
- 下一篇:DES密碼算法 S盒P盒
評(píng)論
共有 條評(píng)論