资源简介

本课程设计要求模拟实现一个的多道批处理系统的两级调度。作业调度分别采用最小作业优先算法,进程调度采用可抢占的优先级调度算法。

资源截图

代码片段和文件信息

#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

评论

共有 条评论