📄 fcfs(时间片更新).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 + -