资源简介

用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


评论

共有 条评论