資源簡介
進程調度時間片輪轉+優先級進程調度(操作系統課程設計),用隊列數據結構,C++實現。

代碼片段和文件信息
#include?
#include?
#include?
using?namespace?std;
struct?PCBNode
{
string?name;
????float?priority;??//優先級?
????float?runTime;??????//總的需要運行時間?
????float?remainTime;???//剩下需要運行時間?
????float?arriveTime;???//進入就緒隊列時間?
????float?startTime;????//開始運行時間?
????float?finishTime;???//結束運行時間?
????float?totalTime;????//周轉時間?
????float?weightTotalTime;??//帶權周轉時間
PCBNode?*?next;
};
struct?linkQueue??//隊列定義
{
PCBNode?*?front;?//隊頭指針
PCBNode?*?rear;??//隊尾指針
};
//隊列初始化
void?InitialQueue(linkQueue&?q);
//輸入PCBNode
void?Input(PCBNode&?p);
//隊列構造
void?CreateQueue(linkQueue&?q?int?n);
//按時間排序
void?SortByTime(linkQueue&?q?int?n);
//時間片輪轉算法
void?RoundRobin(linkQueue&?q?int?n);
//按優先級排序
void?SortByPri(linkQueue&?q?int?n);
//優先級算法
void?Priority(linkQueue&?q?int?n);
//打印隊列
void?PrintQueue(linkQueue&?q);
int?main()
{
int?i?=?1;
while?(i)
{
char?sign;
cout?<“算法選擇:時間片輪轉/T,優先級/P“?< cin?>>?sign;
if?(sign?==?‘t‘?||?sign?==?‘T‘)
{
linkQueue?queue;
InitialQueue(queue);
int?num?=?0;
cout?<“輸入進程個數“?< cin?>>num;
CreateQueue(queue?num);
SortByTime(queue?num);
RoundRobin(queue?num);
PrintQueue(queue);
}
else?if?(sign?==?‘p‘?||?sign?==?‘P‘)
{
linkQueue?queue;
InitialQueue(queue);
int?num?=?0;
cout?<“輸入進程個數“?< cin?>>num;
CreateQueue(queue?num);
SortByPri(queue?num);
Priority(queue?num);
PrintQueue(queue);
}
cout?< cout?<“繼續請輸入1退出請輸入0“?< cin?>>i;
}
return?0;
}
void?InitialQueue(linkQueue&?q)
{
q.front?=?NULL;
q.rear?=?NULL;
}
void?Input(PCBNode&?p)
{
//需要用戶輸入的信息
cout?<“輸入進程名稱“?< cin?>>?p.name;
cout?<“輸入到達時間“?< cin?>>?p.arriveTime;
????cout?<“輸入運行時間“?< cin?>>?p.runTime;
????cout?<“輸入優先級“?< cin?>>?p.priority;
//自動初始化的信息
p.startTime?=?0;??//開始時間
p.finishTime?=?0;??//完成時間
p.remainTime?=?p.runTime;??//還需要時間
p.totalTime?=?0;???//周轉時間
p.weightTotalTime?=?0;???//帶權周轉時間
p.next?=?NULL;
}
void?CreateQueue(linkQueue&?q?int?n)
{
for?(int?i=0;?i {
PCBNode?pcb;
Input(pcb);
if?(q.front?==?NULL)
{
PCBNode?*?temp?=?new?PCBNode;
*?temp?=?pcb;
q.front?=?q.rear?=?temp;
q.rear->next?=?NULL;
}
else
{
//此處必須新建一個PCBNode,否則連不上隊列
PCBNode?*?temp?=?new?PCBNode;
*?temp?=?pcb;
q.rear->next?=?temp;
q.rear?=?q.rear->next;
q.rear->next?=?NULL;
}
}
}
void?SortByTime(linkQueue&?q?int?n)
{
//冒泡排序
for?(int?i=0;?i {
PCBNode?*?before?=?q.front;
PCBNode?*?current?=?before->next;
PCBNode?*?after?=?current->next;
while?(current?!=?NULL)
{
//對開頭三個節點的比較,因為后續節點使用current和after比較
//三個指針向后移一位之后,第二和第三的比較被忽略了,所以將其加在這里。
if?(before?==?q.front)
{
//比較前兩個節點
if?(before->arriveTime?>?current->arriveTime)
{
q.front?=?current;
before->next?=?curr
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????10251??2010-01-25?16:00??操作系統(時間片輪轉+優先級進程調度)\main.cpp
?????目錄??????????0??2010-05-08?23:38??操作系統(時間片輪轉+優先級進程調度)
-----------?---------??----------?-----??----
????????????????10251????????????????????2
- 上一篇:數據壓縮LZW算法源代碼
- 下一篇:funcode太空戰機
評論
共有 條評論