資源簡介
內容描述:
(1)設計進程控制塊PCB表結構,分別適用于優先權調度算法和時間片輪轉調度算法。
PCB結構中一般包括以下信息:進程名、進程優先數(或輪轉時間片),進程所占用的CPU時間,進程的狀態,當前隊列指針等。可以根據調度算法的不同,對PCB結構作適當的增刪。
(2)建立進程就緒隊列。對兩種不同算法編制入鏈子程序。
(3)編制兩種進程調度算法:允許用戶在程序運行時選擇使用某一種調度算法。
a)搶占式動態優先權調度算法;
b)時間片輪轉調度算法。
通過VC++6.0實現!

代碼片段和文件信息
#include??
#include??
#include?
#include??
#include?
#include???//控制字符長度頭文件
using?namespace?std;
#define?TXIANGYING?5?//響應時間為5s
#define?minprio?20???//優先權高低控制標準
#define?ADDPRIO?1????//定義優先權增加幅度
#define?UPDATETIME?2?//定義優先權增加間隔
typedef?struct?node?
{?
??char?name[20];??????//進程名字
??int?prio;???????????//進程的優先級?
??int?round;??????????//分配CPU的時間片?
??int?needtime;???????//進程執行所需要的時間?
??char?state[8];?????????//進程的狀態,Wait——就緒態,Run——執行態,Finish——完成態?
??int?count;??????????//記錄執行的次數
??int?arrive;??????????//到達時間
??int?zhouzhuan?;??????//周轉時間
??double?ave_daiquan?;??//帶權周轉時間
??int?fuwu_time;????????//服務時間?
??struct?node?*next;???//鏈表指針
}PCB;?
??????????????????????
???
int?GetFirst(int?sumtime);????????????//從就緒隊列取得第一個節點?
void?Output1();???????????????????????//輸出時間片輪轉隊列信息
void?Output2(int?sumtime);????????????//輸出優先權調度隊列信息?
void?InsertPrio(PCB?*in);?????????????//創建優先級隊列,規定優先數越小,優先級越高?
void?InsertRound(PCB?*in);????????????//創建時間片就緒隊列?
void?InsertFinish(PCB?*in);???????????//創建完成隊列
void?PrioCreate();????????????????????//優先級輸入函數?
void?TimeCreate();????????????????????//時間片輪轉調度算法——輸入函數?
void?Priority();??????????????????????//按照優先級調度?
void?RoundRun();??????????????????????//時間片輪轉調度?
void?update_priority(int?&add_priority);??????//等待隊列的優先權更新
PCB?*ready=NULL*run=NULL*finish=NULL;//定義3個隊列,就緒隊列,執行隊列和完成隊列?
int?main()?
{?
char?choose;
FILE?*fp;
cout<<“*****************歡迎進入進程管理和調度的算法模擬*****************\n“< cout<<“*****************************主菜單*****************************“< cout<<“輸入進程的調度方法(請輸入對應數字):“< cout<<“1.搶占式動態優先權調度(手工輸入)“< cout<<“2.時間片輪轉調度(手工輸入)“< cout<<“3.搶占式動態優先權調度(從文件讀入已設定的的數據)“< cout<<“4.時間片輪轉調度(從文件讀入已設定的的數據)“< 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);//優先級輸入文件
PrioCreate();?
Priority();
Output1();?
fclose(fp);
break;
case?‘4‘:
fp=freopen(“sjp.txt““r“stdin);//時間片輸入文件
TimeCreate();?
RoundRun();
Output1();
fclose(fp);
break;
case?‘5‘:exit(1);
default:break;?
}
return?0;?
}?
/*
void?GetFirst()??//取得就緒隊列第一個節點
{?
??run?=?ready;?
???
??if(ready!=NULL)?
??{?
????strcpy(run?->state“Run“);?
????ready?=?ready?->next;?
????run?->next?=?NULL;?
??}?
}?
*/
int?GetFirst(int?sumtime)??//取得就緒隊列第一個節點
{
PCB?*fst*temp1*temp2*temp3;
if(ready!=NULL?&&?sumtimearrive)//ready隊列改變
{
fst=ready;
while(sumtimearrive)//尋找到達時間最小的
{
temp1=fst;//記錄符合條件的前面一個值
fst=fst->next; ??
if(fst==NULL)
{
sumtime++;
Output2(sumtime);
fst=ready;
if?(sumtime>=fst->arrive)//搜索一輪之后,設置CPU時間+1,即全部進程都等待
{
run=ready;
if(ready!=NULL)?
{?
strcpy(run?->stat
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????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盒
評論
共有 條評論