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

  • 大小: 13KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-13
  • 語言: C/C++
  • 標簽: cyuyan??data??s??

資源簡介

c語言版本,使用數據結構簡單實現搶占式短進程優先調度算法

資源截圖

代碼片段和文件信息

//?OSExperiment1.cpp?:?此文件包含?“main“?函數。程序執行將在此處開始并結束。


//#include?“pch.h“
#include?
#include?
#include?
#include?
#include?
#pragma?warning(disable:4996)?//將某個編譯警報設置為失效

using?namespace?std;

#define?JOBSUM????6????//進程/作業總數
#define?JOBNUM????3????//允許的作業道數
#define?TIMELIMIT?5????//時間限制

struct?Job?{????//作業
char?jname[40];????//作業名
int?start;????//到達時間
int?worktime;????//工作時間
Job?*next;????//鏈接指針
};

struct?PCB?{
PCB*?next;
char?pname[40];????//進程名
int?time;????//進程運行時間
char?status;????//運行狀態
};

bool?CreateJob(Job*?jobtable?char?name[])
//創建作業,將作業放入作業調度表jobtable
{
//隨機生成一個作業
Job?*p?=?new?Job;
strcpy(p->jname?name);
p->start?=?rand()?%?(TIMELIMIT?-?1)?+?1;??//生成1-4的隨機數
p->worktime?=?rand()?%?(TIMELIMIT?-?p->start)?+?1;?//保證在TIMELIMIT內能完成作業
p->next?=?NULL;

//將作業放入作業調度表
Job*?now?=?jobtable;

//將作業放入作業調度表,按到達時間排序
if?(now->next==NULL)?//houbei隊列仍為空時
{
now->next=p;//將新建的JOB加到隊頭
}
else
{
if?(p->start?<=?now->next->start)//新建JOB到達時間比houbei隊列第一個JOB更小
{
p->next=now->next;
now->next=p;//將新建JOB掛在houbei隊首
}
else
{
Job?*q=now->next;
while((p->start>q->start)&&(q->next!=NULL))//遍歷houbei,尋找start時間比新建JOB大的JOB,將新建JOB插在其之前
{
q=q->next;
}
if?((p->start?>?q->start)&&q->next==NULL)//新建JOB起始時間比所有houbei中的都大,插在隊尾
{
q->next=p;
}
else?if?(p->start?<=?q->start)
{
Job?*t=now->next;//從頭開始找插入位置
while(t->next!=q)
{
t=t->next;
}
t->next=p;
p->next=q;//找到位置插入到q前
}
}
}

return?true;
}

bool?AddHoubei(Job?*jobtable?Job?*p?Job?*&jhead)
//將作業p放入后備隊列jhead,按短作業優先放置
{
//將作業p從作業調度表jobtable中去除
Job?*q=jobtable;
while(q->next!=p&&q->next!=NULL)
{
q=q->next;
}
if(q->next==p)
{
q->next=p->next;
p->next=NULL;//已經將p->next置為NULL了
}

//將JOB?p放入houbei,從隊首開始是最短的
if?(jhead==NULL)
{
jhead=p;//houbei為空直接放隊首
}
else
{
if?(p->worktime?<=?jhead->worktime)
{
//p比隊首worktime還要少
p->next=jhead->next;
jhead->next=p;
}
else//尋找worktime比p大的
{
Job?*q=jhead;
while((p->worktime>q->worktime)&&(q->next!=NULL))//有問題?。。?!q->next->worktime
{
q=q->next;
}
if?((p->worktime>q->worktime)&&q->next==NULL)
{
q->next=p;
}
else?if(p->worktime?<=?q->worktime)
{
Job?*t=jhead;
while(t->next!=q)
{
t=t->next;
}
t->next=p;
p->next=q;
}
}
}

return?true;

}

bool?CreateProcess(PCB*?&head?PCB*?&tail?Job*?&jhead)
//創建新進程
{
PCB?*p=new?PCB;
char?JobID?=?jhead->jname[3];
strcpy(p->pname“Process“);
p->pname[7]=JobID;
p->pname[8]=‘\0‘;??//修改進程名數組
p->status=‘R‘;??//修改狀態為就緒Ready狀態
p->time=jhead->worktime;??//進程所需時間對應JOB所需時間

if(tail==NULL)//就緒隊列為空第一次賦值
{
head=p;?????????//因為是循環隊列,所以直接指向?JOB?p
tail=head;
tail->next=head;//問題解決?。。。。⊙h隊列!?。。?br/> }
else
{
tail->next=p;??//在尾部?*tail掛上p
tail=p;????????

評論

共有 條評論