资源简介
用C语言编写的模拟实现的多道批处理系统的两级调度,可供选择的作业调度算法有:先来先服务算法、最小作业优先算法、短作业优先算法。可供选择的进程调度算法有:先来先服务、最短进程优先算法、高响应比者优先算法。
代码片段和文件信息
#include “stdio.h“
#include
#include
#include
#define getpch(type) (type*)malloc(sizeof(type))
/* 定义作业控制块JCB */
struct jcb {
char name[10]; //作业名
char state; //作业状态就绪or执行or完成
float super; //优先数
int ntime; //作业运行总共需要的时间
int rtime; //作业已经执行的时间
int atime; //Arrival time作业到达时间
int wtime; //wait time作业等待的时间
int size; //作业请求分配的内存空间长度
int ntape; //作业需要的磁带机数量
int startAddress; //首址
//int startTime; //开始时间
int endTime; //结束时间
struct jcb* link; //下一个指针
}*ready=NULL*j*p*readyP=NULL; //ready指针指向链表的第一个jcb
/*
*空间分区表
*/
struct freeArea{
int length; //空闲分区的大小(长度)
int startAddress; //空闲分区的首址
int state; //该分区的状态,1为分配出去,0为未分配
struct freeArea *next; //后继
}*f;
typedef struct jcb JCB ;
typedef struct freeArea freeArea ;
freeArea F; //链头
int tapeNumber; //磁带机数量
int algorithmJob=0; //记录用户选择了哪种作业调度的算法
int algorithmProcess=0; //记录用户选择了哪种进程调度算法
int ctime = 0; //CPU时间
struct jcb J[20]; //记录已完成的作业的信息
int count = 0; //记录就绪队列中的作业数
/*
*初始化一片可用内存空间大小为(length)KB的内存空间
*/
void initMainStore(int length)
{
f = (freeArea*)malloc(sizeof(freeArea));
f->length = length;
f->startAddress = 0;
f->state = 0;
f->next = NULL;
F.next = f;
F.length = 0;
}
/*
*初始化磁带机的数量
*/
void initTape(int tapeN)
{
tapeNumber = tapeN;
}
/*
*打印输入井的作业表信息
*/
void printInputShaft(int flag)
{
JCB *pr = ready;
while(pr!=NULL&&pr->state==‘w‘)
{
pr = pr->link;
}
//pr指向当前输入井第一个
printf(“***当前输入井作业信息如下:\n“);
//printf(“\n name \t state \t needtime \t runtime\t arrivaltime\t waittime\t cputime \n“);
printf(“作业名 \t 到达时间 \t 服务时间 \t 等待时间 \t 内存需要 \t 磁带机需要 \n“);
while(pr!=NULL)
{
printf(“|%s\t“pr->name);
printf(“|%d\t\t“pr->atime);
printf(“|%d\t\t“pr->ntime);
if(flag==2)
{
if(pr->atime {
pr->wtime++;
}
}
printf(“|%d\t\t“pr->wtime);
printf(“|%d\t\t“pr->size);
printf(“|%d\t\t“pr->ntape);
printf(“\n“);
pr = pr->link;
}
}
/*
*先来先服务算法的作业排序
*/
void FCFSJob(int tag JCB *jr)
{
JCB *first *second *readyJ;
JCB *jj*jjr=NULL;
int insert=0;
if(tag==1)
{
readyJ = ready;
}
else
{
jj = ready;
while(jj!=NULL&&jj->state==‘w‘)
{
jjr = jj;
jj = jj->link;
}
//jj指向输入井第一个jjr指向就绪队列第一个
readyJ = jj;
}
if(readyJ==NULL)
{ //队列为空,插入队首
if(tag==1||jjr==NULL)
{
j
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 58 2018-01-14 02:07 代码\input.txt
文件 0 2018-01-15 21:56 代码\output.txt
文件 66141 2018-01-15 21:01 代码\TLS.c
文件 1142 2018-01-13 00:07 代码\TwoLevelScheduling.cbp
文件 56085 2018-01-15 21:01 代码\TwoLevelScheduling.exe
目录 0 2018-01-15 21:57 代码
----------- --------- ---------- ----- ----
123426 6
相关资源
- arduino I2C设备扫描并串口返回地址(
- Proteus仿真:LCD液晶屏显示.rar
- STM32 PCB封装库 全系列 全网不好找
- 基于STM32F407的W5500 tcpserver(官网例程
- 步进电机调速原理.c
- tm1650+stm32f103源码(board_tm1650.c)
- 颜色识别形状识别STM103嵌入式代码
- 基于STM32的音频信号采样与FFT分析
- 汽车电子编程规范(Unlock-MISRA C 2012)
- cheat engine 7.2源码
- 基于STM32F103C8T6主控板使用BH1750检测光
- cubeMX设计实现stm32f407上的CAN及485的通
- stm32 BootLoader程序(main.c)
- 新编Windows API参考大全.doc
- CrySearch内存搜索器源码
- com组件(共907页)
- WINcc与海康威视摄像头
- 获取pc上所有网卡信息
- WINCC-C脚本大全
- c#与西门子1500通讯
- json读取(json.c)
- 实验报告:数据结构长整数四则运算
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- 基于CS的TCP文件传输程序设计
- omni CORBA 中间件
- ACM笔记-天津大学
- traceroute路由跟踪
- 高性能服务器代码(50_06th_server_thre
- mfc 调用redis
评论
共有 条评论