91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

資源簡介

內容描述: (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


評論

共有 條評論