資源簡介
1) 提供導(dǎo)致進(jìn)程狀態(tài)變化的調(diào)用接口,包括創(chuàng)建、刪除、調(diào)度、阻塞、激活等。
2) 實現(xiàn)進(jìn)程列表顯示的接口。
3) 這里設(shè)計的進(jìn)程是一個假設(shè)的對象實體,是由程序自己創(chuàng)建和刪除,不是系統(tǒng)維護(hù)的進(jìn)程。

代碼片段和文件信息
#include
#include
using?namespace?std;
//進(jìn)程的定義
typedef?struct?QNode
{
char?Flag[33];?//進(jìn)程標(biāo)識符
//string?State;??//進(jìn)程的狀態(tài)
int?Time;??//進(jìn)程的運行時間
int?Order;??//進(jìn)程優(yōu)選級?
struct?QNode?*next;??//下一個節(jié)點???
}*PCB;
//----------------子函數(shù)聲明部分----------------------
void?Initial(PCB?&P);??//初始化鏈表函數(shù)
void?Display(PCB?P);??//顯示進(jìn)程函數(shù)
PCB?Look(PCB?&P);??//查找并且修改就緒進(jìn)程的函數(shù)
int?Length(PCB?P);??//計算進(jìn)程的個數(shù)
void?Ready(PCB?&P);??//就緒函數(shù)
void?Block(PCB?&PPCB?&R);??//阻塞函數(shù)
void?Finish(PCB?&PPCB?&R);??//消亡函數(shù)
void?Run(PCB?&PPCB?&F);??//執(zhí)行函數(shù)
void?Active(PCB?&PPCB?&B);??//喚醒函數(shù)?
//----------------------------------------------------
//--------------------主函數(shù)--------------------------
int?main()
{
????int?oprate=1;
PCB?RBFq;
?????
Initial(R);??//初始化就緒鏈表
Initial(B);??//初始化阻塞鏈表
Initial(F);??//初始化消亡鏈表
cout<<“請選擇使進(jìn)程所處狀態(tài)的操作“< cout<<“0--返回“< ????cout<<“1--就緒“< ????cout<<“2--阻塞“< ????cout<<“3--消亡“< cout<<“4--執(zhí)行“< cout<<“5--喚醒“<
while(cin>>oprate)??//選擇操作
{
switch(oprate)
{??????
case?0:????????????//使返回
???return?0;
????????case?1:Ready(R);??//使就緒
???break;
????????case?2:Block(BR);??//使阻塞
???break;
????????case?3:q=Look(R);Finish(Fq);??//使消亡
???break;
????case?4:Run(RF);??//使執(zhí)行
???break;
case?5:Active(RB);??//使喚醒
???break;
???????????default:
???cout<<“輸入錯誤請重新輸入“< }?
cout<<“---0返回--1就緒--2阻塞--“;
???cout<<“3消亡--4執(zhí)行--5喚醒---“< }
????return?0;
}
//----------------------------------------------------
//----------------一初始化函數(shù)------------------------
void?Initial(PCB?&P)
{
P=(PCB)malloc(sizeof(QNode));??//分配空間?
P->next=NULL;
}
//----------------------------------------------------
//---------------二顯示函數(shù)---------------------------
void?Display(PCB?P)
{
PCB?r=P->next;
if(!r)
cout<<“沒有元素存在“;
else
while(r)
{
cout<Order<<‘?‘;??//輸出
r=r->next;??//指向下一個
}
cout< }
//----------------------------------------------------
//-----------------三查找函數(shù)-------------------------
PCB?Look(PCB?&P)
{
PCB?r=Pq;
int?e;
cout<<“請輸入優(yōu)先級整數(shù)類型“< while(cin>>e)
{
if(e>0)??//判斷輸入合法性
break;
????else?
cout<<“輸入錯誤請重新輸入“< }
???
while(r->next)
{
if(r->next->Order==e)
{???
q=r->next;
r->next=r->next->next;??//刪除
cout<<“被處理后后剩余的進(jìn)程是:“;
????Display(P);
return?q;
}
else
r=r->next;??//指向下一個
}
if(r->next==NULL)
return?NULL;
}
//----------------------------------------------------
//---------------------四執(zhí)行函數(shù)---------------------
void?Run(PCB?&PPCB?&F)
{
PCB?r=Pq;
if(r->next)
{
q=r->next;
r->next=r->next->next;???//刪除
cout<<“被執(zhí)行后剩余的就緒進(jìn)程是:“;
Display(P);
Finish(Fq);??//執(zhí)行后直接放到消亡隊列中
}
else?
cout<<“已經(jīng)沒有就緒進(jìn)程了“< }
//----------------------------------------------------
//------------------五就緒函數(shù)------------------------
void?Ready(PCB?&P)
{
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????5911??2010-04-10?19:54??進(jìn)程狀態(tài)轉(zhuǎn)換.cpp
-----------?---------??----------?-----??----
?????????????????5911????????????????????1
- 上一篇:glr7nu.rar
- 下一篇:計算方法-----的一些經(jīng)典程序
評論
共有 條評論