資源簡介
1) 提供導致進程狀態變化的調用接口,包括創建、刪除、調度、阻塞、激活等。
2) 實現進程列表顯示的接口。
3) 這里設計的進程是一個假設的對象實體,是由程序自己創建和刪除,不是系統維護的進程。

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