c语言模拟短作业优先调度算法和时间片转轮调度算法

数组模拟短作业,队咧模拟时间片转轮,注释很清楚,就不赘述

代码:

#include
#include
#include
#include
#include
#include
#define R "RUN"  //运行中 
#define F "FINISH"  //已完成 
#define W "WAITE"  //等待中 
#define T "TAKEN"  //未提交 
#define MAX 5

struct PCB{   
    char Name[10];//进程名 
    int Arrive;//到达时间   
    int Need;//需要运行时间   
    int Start;//开始时间   
    int End;//完成时间   
    int Turnover;//周转时间   
    int Priority;//优先级 
    int CpuTime;//所用cpu时间 
    float UseWeightTurnover;//带权周转时间  
    char Status[10];//进程状态     
};

int CurrentTime;//当前时间 
int finish;//已完成数量 
char c; //算法选择 
int visit[MAX]; //标记是否存在队列 

//创建PCB  
void CreatePCB(struct PCB* pcb){  
    int fd_stdin=dup(fileno(stdin));
    freopen("d:\\input.txt","r",stdin);  
    printf("从文件中读入四个参数的数据:\n");  
    printf("作业号 优先级 到达时间 需要运行时间\n");   
    for(int i= 0;ifront=(Node *)malloc(sizeof(Node));
    if(q->front!=NULL){
        q->rear=q->front;
        q->front->next=NULL;
    }

}

/*入队操作。*/
void Enqueue(Queue *q,int x)
{
/* 将数据元素x插入到队列Q中 */
    Node *NewNode;
    NewNode=(Node *)malloc(sizeof(Node));
    if(NewNode!=NULL){
        NewNode->data=x;
        NewNode->next=NULL;
        q->rear->next=NewNode;
        q->rear=NewNode;
    }
}
/*出队操作。*/
int Dequeue(Queue *q)
{
/* 将队列Q的队头元素出队,并存放到x所指的存储空间中 */
    Node *p;
    int x;
    p=q->front->next;
    q->front->next=p->next;
    if(q->rear==p)
        q->rear=q->front;
    x=p->data;
    free(p);
    return x;
}


//打印 
void Display(struct PCB* pcb){  
    int i;
    printf("当前时间为%d\n", CurrentTime);  
    printf("进程名 优先级 到达时间 需要运行时间 已用cpu时间 开始时间 完成时间 进程状态\n");  
    for(i=0;i=pcb[i].Arrive&&strcmp(pcb[i].Status,T)==0){
            strcpy(pcb[i].Status,W);   
        }
        if(pcb[i].CpuTime==pcb[i].Need&&strcmp(pcb[i].Status,W)==0){
        	finish++;
            strcpy(pcb[i].Status,F);
            pcb[i].End=CurrentTime;  
            pcb[i].Turnover=pcb[i].End-pcb[i].Arrive;  
            pcb[i].UseWeightTurnover=pcb[i].Turnover*1.0/pcb[i].Need;  
        }
    }  
}

//取就绪队列中运行时间最短的进程下标 
int ShortIndex(struct PCB* pcb){
	int i;
    int min;
    int temp;
    min=100;
    temp=-1;
    StatusConfirm(pcb);//更新进程状态 
    for(i=0;i

你可能感兴趣的:(学习日记)