資源簡介
操作系統課程設計
多道批處理系統兩級調度的模擬

代碼片段和文件信息
#include?
#include?
#include?
#include?
#define?null?0
#define?len?sizeof(struct?jnote)
struct?jcb//定義了兩個結構體
{???????????//定義了七個變量和一個數組
?int?state;//狀態
?int?num;//編號
?int?in;//系統時間
?int?run;//運行時間
?int?pri;//優先級
?int?mem;//內存
?int?tape;//磁盤需求
}job[50];//數組
struct?jnote
{
?int?id;?//編號
?int?in;?//系統時間
?int?start;//開始時間
?int?run;//運行時間
?int?end;//結束時間
?int?pri;//優先級
?int?size;//大小
?int?tape;//磁盤需求
?int?*maddr;//地址
?struct?jnote?*next;
};
int?rest=4memory[101]*mh=memorylogo=0fid=0;
struct?jcb?*p=job;
struct?jnote?*jh=null*rp=null*jp=null;
txt()//從txt文件中作業流
{
?FILE?*fp;
?char?pt;//單個字符
?int?ispace=0j=0data[100]hkcount;
?char?str[10];//字符數組
?for(i=0;i<100;i++)?data[i]=-1;?//用循環定義變量
?for(i=0;i<20;i++)
{
?job[i].num=-1;
?job[i].tape=-1;
?job[i].state=-1;
}
i=0;
fp=fopen(“job.txt““r+“);//打開文件,r+是表示可以寫入和讀出
if(fp==NULL)
{
?printf(“Cann‘t?the?file\n“);
?exit(0);//退出
}
while((pt=getc(fp))!=EOF)//如果指針在文件尾
{
?if(pt>=‘0‘&&pt<=‘9‘)//如果數字在0到6之間時
?{
??str[i]=pt;?//用數組保存這個字符
??i++;
??space=0;
?}
??else
??{
???if(pt==‘?‘||pt==‘\n‘)?//如果字符是空格和回車的時候
??{
???if(space==1)?continue;//直接跳出
???else
???{
????str[i]=‘\0‘;
????data[j]=atoi(str);//將字符轉化為數據
????j++;
????i=0;
????space=1;
???}
??}
?}
}
for(h=0k=0;data[k]!=-1;k++h++)//各個數據代表不同的意思
{
?job[h].num=data[k];k++;?//編號
?job[h].in=data[k];k++;??//?系統時間
?job[h].run=data[k];k++;?//?運行時間
?job[h].pri=data[k];k++;?//?優先級
?job[h].mem=data[k];k++;?//?內存
?job[h].tape=data[k];??//磁盤大小
}
if(job[h-1].tape==-1)
?{
??str[i]=‘\0‘;
??job[h-1].tape=atoi(str);
?}
??system(“cls“);//清屏
??for(i=0;job[i].num!=-1;i++);//判斷進程數
??return(i);
?}
rpend(startrun)?//計算進程的結束時間
int?start?run;
{
??int?end=0;
??int?i=start%100+run;
??end=(start/100+i/60)*100+i%60;
??return(end);
}
time_time(endin)//計算周轉時間或計算剩余的運行時間
int?inend;
{
?int?time;
?time=end/100*60+end%100-(in/100*60+in%100);
?return(time);
}
?int?*m_pd(int?size)//內存判斷
?{
??int?*mp*cp;
??int?i=0;
??mp=cp=mh;
??while(*mp!=-1)
??{
???while(*cp==0)
???{
????cp++;i++;
???}
???if(i>=size)?return(mp);
???while(*cp==1)?cp++;
???mp=cp;
???}return(null);
}
zy_div_free(mpmsizetapeh)//資源分配與釋放
int?*mpmsizetapeh;
{
?int?*cpi=msize;
?cp=mp;
?if(h==1)
?{
??for(;i>0;i--)
??{
???*cp=1;?cp++;
??}rest=rest-tape;
??return?(1);
?}if(h==2)
??{
???for(;i>0;i--)
???{
????*cp=0;cp++;
???}rest=rest+tape;
???return?(2);
??}
}
selectrp(plogotime)//選擇當前運行進程
int?plogotime;
{
?struct?jnote?*newj;?//定義結構體變量
?struct?jnote?*temp;
?if(jh==null&&rp==null)//當都為空時
?{
??p=job;
??for(;p->state==0;)?p++;
??zy_div_free(mhp->memp->tape1);//重新進行資源分配
??p->state=0;
??newj=(struct?jnote?*)malloc(len);//分配地址
??rp=newj;?//傳遞變量
??rp->id=p->num;?rp->in=p->in;?rp->start=p->in;?rp->run=p->run;?rp->end=0;?rp->pri=p->pri;
??rp->size=p->mem;?rp->tape=p->tape;
??rp->maddr=mh;?rp->next=null;
??return?(0);
??}
??else
??{
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件?????137728??2010-06-30?13:08??操作系統課程設計實驗報告.doc
?????文件???????7395??2010-06-30?13:05??源代碼\design.c
?????文件??????????0??2010-01-12?00:36??源代碼\design.cpp
?????文件?????????77??2010-01-12?03:28??源代碼\job.txt
?????文件???????4238??2010-01-12?00:39??源代碼\OS.dsp
?????文件????????512??2010-01-12?00:39??源代碼\OS.dsw
?????文件??????50176??2010-06-30?13:07??源代碼\OS.ncb
?????文件???????1531??2010-06-30?13:05??源代碼\OS.plg
?????文件??????17905??2010-06-30?13:05??源代碼\Debug\design.obj
?????文件?????196698??2010-06-30?13:05??源代碼\Debug\OS.exe
?????文件?????234304??2010-06-30?13:05??源代碼\Debug\OS.ilk
?????文件?????206920??2010-06-30?13:05??源代碼\Debug\OS.pch
?????文件?????517120??2010-06-30?13:05??源代碼\Debug\OS.pdb
?????文件??????33792??2010-06-30?13:06??源代碼\Debug\vc60.idb
?????文件??????53248??2010-06-30?13:05??源代碼\Debug\vc60.pdb
?????文件??????48640??2010-06-30?13:07??源代碼\OS.opt
?????目錄??????????0??2010-06-30?13:07??源代碼\Debug
?????目錄??????????0??2010-06-30?13:07??源代碼
-----------?---------??----------?-----??----
??????????????1510284????????????????????18
- 上一篇:RTX二次開發相關的最全面的
- 下一篇:easyfit重現期的計算
評論
共有 條評論