⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fcfs(时间片更新).cpp

📁 操作系统实验 实验一 进程调度 实验二 作业调度 实验三(综合性) 主存空间的分配与回收 实验四 文件系统
💻 CPP
字号:
#include <iostream>
#include <conio.h>
#define getpch(type) (type *)malloc(sizeof(type))
#define NULL 0

using namespace std;

struct pcb{		//进程控制块
	char name[10];			
	char state;				//状态:就绪(w)、运行(r)、完成()
	int super;				//优先级			
	int ntime;				//需要运行时间
	int rtime;				//已运行时间
	struct pcb *link;
}*ready = NULL, *p;				//ready为就绪队列队首,p为当前运行进程

typedef struct pcb PCB;


//按优先级排序
void sort()					
{
	PCB *first , * second;
	int insert = 0;
	if(ready == NULL || p->super > ready->super){	//优先级最高
		p->link = ready;
		ready = p;
	}
	else {
		first = ready;
		second = first->link;
		while(second != NULL){
			if(p->super > second->super){
				p->link = second;
				first->link = p;
				second = NULL;
				insert = 1;
			}
			else{
				first = first->link;
				second = second->link;
			}
		}
		if(insert == 0)				//如果没插入队列(优先级最低)中,插到队尾
			first->link = p;
	}
	return ;
}

//建立进程控制块
void input()						
{
	int i, num;
	system("cls");
	printf("\n 请输入进程数?");
	scanf("%d", &num);
	for(i = 0; i < num; i++){
		printf("\n 进程号 No.%d:\n", i);
		p = getpch(PCB);
		printf("\n 输入进程名:");
		scanf("%s", p->name);
		printf("\n 输入进程优先数:");
		scanf("%d", &p->super);
		printf("%n 输入进程运行时间:");
		scanf("%d", &p->ntime);
		printf("\n");
		p->rtime = 0;
		p->state = 'w';
		p->link = NULL;
		sort();
	}
	return ;
}


//计算进程数
int space()
{
	int l = 0; 
	PCB * pr = ready;
	while(pr != NULL){
		l++;
		pr = pr->link;
	}
	return l;
}


//显示传入pr进程
void disp(PCB *pr)
{
	printf("\n qname \t state \t super \t ndtime    runtime \n");
	printf("|%s\t", pr->name);
	printf("|%c\t", pr->state);
	printf("|%d\t", pr->super);
	printf("|%d\t", pr->ntime);
	printf("|%d\t", pr->rtime);
	printf("\n");
	return ;
}



//进程查看
void check()
{
	PCB * pr;
	printf("\n **** 当前正在运行的进程是:%s", p->name);
	disp(p);
	pr = ready;
	printf("\n **** 当前就绪队列状态为:\n");
	while(pr != NULL){
		disp(pr);
		pr = pr->link;
	}
	return ;
}


//撤销进程
void destroy()
{
	printf("\n 进程 [%s] 已完成。\n", p->name);
	free(p);
	return;
}


//运行p进程
void running()
{
	p->rtime ++;
	if(p->rtime == p->ntime)
		destroy();
	else {
		p->super --;
		p->state = 'w';
		sort();							//重新排序
	}
	return ;
}



int main()
{	
	int len, h = 0;
	char ch;
	input();
	len = space();
	while(len != 0 && ready != NULL){
		ch = getchar();
		h++;
		printf("\n The execute number:%d\n", h);
		p = ready;
		ready = p->link;                        //预先设置进程能完成后的ready
		p->link = NULL;
		p->state = 'r';
		check();			
		//运行队首进程
		running();
		printf("\n 按任一键继续......");
		ch = getchar();
	}
	printf("\n\n 进程已经完成。\n");
	ch = getchar();

	return 0;
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -