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

資源簡介

自己寫的代碼和實驗報告,模擬了在批處理系統(tǒng)中的作業(yè)調(diào)度。適于操作系統(tǒng)初學者理解操作系統(tǒng)中的作業(yè)調(diào)度原理。(希望朋友們先根據(jù)要求自己實現(xiàn)代碼,然后再參考我的代碼。)

資源截圖

代碼片段和文件信息

#include?
#include?

#define?n?10?????????//后備隊列中JCB的最大數(shù)量

//作業(yè)控制塊
typedef?struct?
{
char?name[4];?????//作業(yè)名
int?length;???????//作業(yè)長度
int?printer;??????//打印機數(shù)量
int?tape;?????????//磁帶機數(shù)量
int?runtime;??????//運行時間
int?waittime; ??//等待時間
int?next; ??//指針
}?JCB;

//后備隊列(對結(jié)構(gòu))
JCB?jobTable[n]; ??//作業(yè)表
int?jobCount; ??//作業(yè)表中當前作業(yè)數(shù)量
int?head;????????????//作業(yè)表頭指針

//初始化函數(shù)
void?Init()
{
head=-1;
jobCount=0;
}

//入隊函數(shù)
void?PushQueue(JCB?job)
{
if(jobCount>=n)
{
printf(“隊列已滿,不能加入\n“);
return;
}

if(head==-1)
head=0;

jobTable[jobCount].length=job.length;
strcpy(jobTable[jobCount].namejob.name);
jobTable[jobCount].printer=job.printer;
jobTable[jobCount].runtime=job.runtime;
jobTable[jobCount].tape=job.tape;
jobTable[jobCount].waittime=job.waittime;

jobTable[jobCount-1].next=jobCount;
jobTable[jobCount].next=-1;

jobCount++;
}

//出隊函數(shù)
void?PopQueue(int?num)
{
if(jobCount==0)
{
printf(“空隊不能出隊“);
return;
}
if(num>=jobCount)
{
printf(“隊列中不存在該元素“);
return;
}
if(jobCount==1)
{
head=-1;
jobTable[0].next=-1;
jobCount=0;
}
else
{
jobTable[num-1].next=jobTable[num].next;
jobTable[num].next=-1;
jobCount--;
}
}

//系統(tǒng)資源
int?memory=65536;?????//主存大小64MB,65536KB
int?tape=4;???????????//磁帶機數(shù)量
int?printer=2;????????//打印機數(shù)量
?
//作業(yè)調(diào)度函數(shù)
void?Schedule()
{
int?currJobmaxJob;
double?currJobRatiomaxJobRatio;

while(head!=-1)
{
currJob=maxJob=head;
currJobRatio=maxJobRatio=0;

//找出響應(yīng)比最大的作業(yè)
while(1)
{
//找出滿足資源的作業(yè)
if(jobTable[currJob].length<=memory?&&?jobTable[currJob].printer<=printer?&&?jobTable[currJob].tape<=tape)?????
{
currJobRatio=(double)jobTable[currJob].waittime/jobTable[currJob].runtime;?????//計算響應(yīng)比
if(currJobRatio>maxJobRatio)
{
maxJobRatio=currJobRatio;
maxJob=currJob;
}
}
if(jobTable[currJob].next==-1)
break;
else
currJob=jobTable[currJob].next;
}

//輸出響應(yīng)比最大的作業(yè)、分配資源
if(maxJobRatio!=0)
{
memory-=jobTable[maxJob].length;
tape-=jobTable[maxJob].tape;
printer-=jobTable[maxJob].printer;
printf(“選中作業(yè)的作業(yè)名為:%s\n“jobTable[maxJob].name);

PopQueue(maxJob);
}
}

}

void?main()
{
//用于作業(yè)的臨時變量
char?tmp_name[4];
int?tmp_length;
int?tmp_printer;
int?tmp_tape;
int?tmp_runtime;
int?tmp_waittime;

int?tmp_count;?????//記錄輸入作業(yè)數(shù)量
JCB?tmp_job;???????//臨時作業(yè)變量

printf(“請輸入作業(yè)相關(guān)信息,以作業(yè)名為Q為輸入結(jié)束。\n\n按任意鍵進入輸入模式:“);
getchar();

Init();

while(1)
{

tmp_count=1;
if(tmp_count>n)
{
printf(“達到最大作業(yè)數(shù),輸入結(jié)束。“);
break;
}
//輸入作業(yè)名、作業(yè)大小、磁帶機數(shù)、打印機數(shù)、估計執(zhí)行時間、等待時間
printf(“作業(yè)名:“);
scanf(“%s“tmp_name);
if(strcmp(tmp_name“Q“)==0||strcmp(tmp_name“q“)==0)
break;
printf(“作業(yè)大小:“);
scanf(“%d“&tmp_length);
printf(“磁帶機數(shù):“);
scanf(“%d“&tmp_printer);
printf(“打印機數(shù):“);
scanf(“%d“&tmp_tape);
printf(“估計運行時間:“);
scanf(“%d“&tmp

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----

?????文件???????3690??2009-11-30?17:23??批處理系統(tǒng)的作業(yè)調(diào)度\JobSchedule.c

?????文件??????42496??2009-12-04?22:26??批處理系統(tǒng)的作業(yè)調(diào)度\實驗報告.doc

?????文件?????133632??2009-12-04?22:28??批處理系統(tǒng)的作業(yè)調(diào)度\實驗要求.doc

?????目錄??????????0??2009-12-04?22:28??批處理系統(tǒng)的作業(yè)調(diào)度

-----------?---------??----------?-----??----

???????????????179818????????????????????4


評論

共有 條評論