資源簡介
本課程設計要求模擬實現一個的多道批處理系統的兩級調度。作業調度分別采用最小作業優先算法,進程調度采用可搶占的優先級調度算法。

代碼片段和文件信息
#include?“stdio.h“?
#include??
#include??
#define?getpch(type)?(type*)malloc(sizeof(type))?
#define?NULL?0?
#define?true?1?
#define?false?0?
#define?Free?0?????????//空閑狀態
#define?Busy?1?????????//已用狀態
#define?OK?1???????????//完成
#define?ERROR?0????????//出錯
#define?MAX_length?100?//最大內存空間為100KB
typedef?int?Status;
int?neicui=100cidaiji=4now=0show=0;
struct?pcb?{?/*?定義進程控制塊PCB?*/?
int?ID;??????????//進程號
char?name[10];???//進程名
char?state;??????//狀態
int?ntime;???????//運行時間
int?hour;????????//到達時間?時
int?minute;??????//到達時間?分
int?rtime;???????//已運行時間
int?super;???????//優先級
int?nc;??????????//需要內存
int?cdj;?????????//需要磁帶機
struct?pcb*?link;?
}*ready=NULL*wait=NULL*shuru=NULL*p;?
typedef?struct?pcb?PCB;???
typedef?struct?freearea//定義一個空閑區說明表結構
{
int?ID;???//分區號
long?size;???//分區大小
long?address;?//分區地址
int?state;???//狀態
}ElemType;
?
//線性表的雙向鏈表存儲結構
typedef?struct?DuLNode?//double?linked?list
{
ElemType?data;?
struct?DuLNode?*prior;?//前趨指針
struct?DuLNode?*next;??//后繼指針
}DuLNode*DulinkList;
?
DulinkList?block_first;?//頭結點
DulinkList?block_last;??//尾結點
void?disp(PCB?*?pr)?/*建立進程顯示函數用于顯示當前進程*/?
{?
printf(“\n|?進程名?|?狀態?|?到達時間?|?運行時間?|?優先級?|?已運行?|?需要內存?|?需要磁帶機\n“);?
printf(“|?%s??????“pr->name);?
printf(“|?%c????“pr->state);?
printf(“|?%d:%d????“pr->hourpr->minute);
printf(“|?%d???????“pr->ntime);?
printf(“|%d???????“pr->super);?
printf(“|%d???????“pr->rtime);?
printf(“|%d???????“pr->nc);?
printf(“|%d???????“pr->cdj);?
printf(“\n“);?
}?
void?check(){
pcb*?pr;
int?hmi;
h=now/100;
mi=now%100;
printf(“當前時間是:%d:%d\n“hmi);
printf(“剩余內存:%d\n“neicui);
printf(“剩余磁帶機:%d\n“cidaiji);
if(ready!=NULL){
pr=ready->link;
printf(“\n正在運行的進程是:\n“);
disp(ready);
printf(“\n已就緒隊列:\n“);
while(pr!=NULL){
disp(pr);
pr=pr->link;
}
}
if(wait!=NULL){
printf(“\n正在等待隊列:\n“);
pr=wait;
while(pr!=NULL){
disp(pr);
pr=pr->link;
}
}
if(shuru!=NULL){
printf(“\n還沒到達隊列:\n“);
pr=shuru;
while(pr!=NULL){
disp(pr);
pr=pr->link;
}
}
if(ready==NULL&&wait==NULL&&shuru==NULL){
?printf(“\n進程已經全部執行\n“);
?printf(“\n?按任一鍵退出......\n“);?
?getchar();
?}
printf(“\n\n“);
}
Status?Initblock()//開創帶頭結點的內存空間鏈表
{
block_first=(DulinkList)malloc(sizeof(DuLNode));
block_last=(DulinkList)malloc(sizeof(DuLNode));
block_first->prior=NULL;
block_first->next=block_last;
block_last->prior=block_first;
block_last->next=NULL;
block_last->data.address=0;
block_last->data.size=MAX_length;
block_last->data.ID=0;
block_last->data.state=Free;
return?OK;
}
//首次適應算法
Status?First_fit(int?IDint?request)//傳入作業名及申請量
{
//為申請作業開辟新空間且初始化
DulinkList?temp=(DulinkList)malloc(sizeof(DuLNode));?
temp->data.ID=ID;?
temp->data.size=request;
temp->data.state=Busy;
?
DuLNode?*p=block_first->next;
while(p)
{
if(p->data.state==Free?&&?p->data.size==request)
{//有大小恰好合適的空閑塊
p->data.state=Busy;
p->data.ID=ID;
return?OK;
break;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2014-01-27?16:51??操作系統課程設計\
?????文件??????735232??2014-01-07?21:35??操作系統課程設計\操作系統課程設計內容.doc
?????文件??????197120??2014-01-27?16:51??操作系統課程設計\操作系統課程設計封面.doc
?????目錄???????????0??2014-01-07?21:35??操作系統課程設計\源代碼\
?????文件????????8479??2014-01-07?21:35??操作系統課程設計\源代碼\czxtKS.cpp
?????文件??????192561??2014-01-07?21:35??操作系統課程設計\源代碼\czxtKS.exe
評論
共有 條評論