-
大小: 13KB文件類型: .cpp金幣: 1下載: 0 次發(fā)布日期: 2021-05-21
- 語(yǔ)言: C/C++
- 標(biāo)簽: 操作系統(tǒng)??
資源簡(jiǎn)介
編寫程序模擬進(jìn)程調(diào)度過(guò)程,能夠按照時(shí)間片輪轉(zhuǎn),短進(jìn)程優(yōu)先法,可搶占式和不可搶占式優(yōu)先級(jí)法,以及先來(lái)先服務(wù)和高響應(yīng)比優(yōu)先法處理輸入的數(shù)據(jù),運(yùn)行結(jié)果包含界面。
代碼片段和文件信息
#include
#include
#include
#include
#include
using?namespace?std;
struct?node
{
????int?num;????????????///序號(hào)
????char?name[10];??????///進(jìn)程名
????int?Gen_time;???????///產(chǎn)生時(shí)間
????double?Ser_time;????///要求服務(wù)時(shí)間
????int?Pty;????????????///優(yōu)先級(jí)priority
????char?vis;???????????///進(jìn)程狀態(tài)R表示就緒,E表示結(jié)束
????int?ends;???????????///完成時(shí)間
????double?t_time;??????///周轉(zhuǎn)時(shí)間
????double?rt_time;?????///帶權(quán)周轉(zhuǎn)時(shí)間
}?p[1000]pc[1000]p1[1000]
p2[1000]p3[1000]p4[1000]p5[1000];
///pc用于記錄時(shí)間片輪轉(zhuǎn)調(diào)度的進(jìn)程數(shù)據(jù),p1可搶占式,p2不可搶占式
///p3短進(jìn)程優(yōu)先調(diào)度,p4先來(lái)先服務(wù),p5高響應(yīng)比優(yōu)先
int?process_n;??????///存放進(jìn)程的時(shí)間片
int?number;?????????///出入的進(jìn)程個(gè)數(shù)
struct?D_value
{
????int?sub;
????int?flage;
}s[1000];///針對(duì)時(shí)間片輪轉(zhuǎn)算法,記錄進(jìn)程產(chǎn)生差值和是否被處理過(guò)一次
void?Init(node?m[]node?n[])????///初始化基本數(shù)據(jù)
{
????for(int?i=0;?i ????{
????????m[i].num=n[i].num;
????????strcpy(m[i].namen[i].name);
????????m[i].Gen_time=n[i].Gen_time;
????????m[i].Ser_time=n[i].Ser_time;
????????m[i].Pty=n[i].Pty;
????????m[i].vis=n[i].vis;
????}
}
void?print(int?by_order[]int?knode?q[])???///輸出進(jìn)程執(zhí)行結(jié)果
{
????printf(“%-16s%-16s%-16s%-16s%-16s%-16s%-16s\n“
???????????“進(jìn)程序列號(hào)““進(jìn)程名““產(chǎn)生時(shí)間““要求服務(wù)時(shí)間““完成時(shí)間“
???????????“周轉(zhuǎn)時(shí)間““帶權(quán)周轉(zhuǎn)時(shí)間“);
????double?sum1=0sum2=0;
????for(int?i=0;?i ????{
????????printf(“%-8d\t%-8s\t%-8d\t%-8.2lf\t%-8d\t%-8.2lf\t%-8.2lf\n“
???????????????q[i].numq[i].nameq[i].Gen_timeq[i].Ser_timeq[i].ends
???????????????q[i].t_timeq[i].rt_time);
????????sum1+=q[i].t_time;
????????sum2+=q[i].rt_time;
????}
????cout< ????printf(“平均周轉(zhuǎn)時(shí)間為:%.2lf?平均帶權(quán)周轉(zhuǎn)時(shí)間為:%.2lf\n\n“sum1/numbersum2/number);
????printf(“各進(jìn)程執(zhí)行順序?yàn)椋篭n“);
????for(int?i=0;?i ????{
????????if(i==0)
????????????printf(“%d?“by_order[i]);
????????else?if(i!=0&&by_order[i]!=by_order[i-1])
????????????printf(“%d?“by_order[i]);
????}
????printf(“\n“);
????return;
}
bool?cmp(node?anode?b)??///按照進(jìn)程的序號(hào)排列
{
????return?a.num }
void?Time_Circular()????///時(shí)間片輪轉(zhuǎn)調(diào)度
{
????printf(“輸入時(shí)間片:“);
????cin>>process_n;
????int?sum=0run_sum=0;
????Init(pcp);?????///初始化
????memset(s0sizeof(s));
????for(int?i=0;?i ????{
????????if(i!=0)
????????????s[i].sub=p[i].Gen_time-p[i-1].Gen_time;
????????sum+=p[i].Ser_time;
????}
????int?cnt=0k=0;
????int?by_order[sum];??///記錄進(jìn)程執(zhí)行的順序。
????memset(by_order0sizeof(by_order));????///初始化
????node?q;?????????????///臨時(shí)存儲(chǔ)出隊(duì)列的進(jìn)程
????queueQQ1;????///Q存儲(chǔ)為執(zhí)行完成的進(jìn)程,Q1存儲(chǔ)執(zhí)行完成的進(jìn)程
????Q.push(pc[0]);
????for(int?i=1;i ????{
????????if(s[i].sub<=process_n)
????????{///將進(jìn)程產(chǎn)生的間隔差值與時(shí)間片比較,分為兩種情況,小于等于和大于
????????????Q.push(pc[i]);
????????????s[i].flage=1;
????????}
????????else
????????????break;
????}
????int?i=0;
????while(!Q.empty())
????{
????????q=Q.front();
????????Q.pop();
????????if(q.vis==‘R‘&&q.Gen_time<=i)
????????{
????????????by_order[k++]=q.num;
????????????if(process_n<=q.Ser_time)///剩余要求服務(wù)時(shí)間大于等于時(shí)間片
????????????{
????????????????run_sum=run_sum
評(píng)論
共有 條評(píng)論