这是我们操作系统实验课的一个实验程序,模拟简单的若干个进程在执行态和就绪态之间的变动。我根据实验指导书上给出的程序进行了一点修改。 #includecstdio#includecstdlibstruct PCB{char name[10];char stat...
这是我们操作系统实验课的一个实验程序,模拟简单的若干个进程在执行态和就绪态之间的变动。
我根据实验指导书上给出的程序进行了一点修改。
#include<cstdio> #include<cstdlib> struct PCB { char name[10]; char state; //状态 int super; //优先级 int ntime; //预计运行时间 int rtime; //实际运行时间 PCB *link; }*ready=NULL, *p; void disp(PCB *pr) /*建立进程显示函数,用于显示当前进程 */ { printf("\n qname \t state \t super \t ntime \t rtime \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"); } void check() /* 建立进程查看函数 */ { printf("\n ******** 当前正在运行的进程是:%s",p->name); /* 显示当前运行进程 */ disp(p); printf("\n ******** 当前就绪队列状态为:\n"); /* 显示就绪队列状态 */ PCB *pr=ready; while(pr!=NULL) disp(pr), pr=pr->link; } void sort() /* 建立对进程进行优先级排列函数 */ { if(ready==NULL || (p->super)>(ready->super)) /* 优先级最大者,插入队首 */ { p->link=ready; ready=p; } else /* 进程比较优先级,插入适当的位置中 */ { PCB *first=ready, *second=first->link; while(second!=NULL) { if((p->super)>(second->super)) /* 若插入进程比当前进程优先数大,插入到当前进程前面 */ { first->link=p; p->link=second; return; } first=first->link; second=second->link; } first->link=p; } } void input() /* 建立进程控制块函数 */ { system("cls"); printf("\n 请输入进程数目?"); int num; scanf("%d",&num); for(int i=0;i<num;i++) { printf("\n 进程号 No.%d:\n",i); p=(PCB *)malloc(sizeof(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(); /* 调用 sort 函数 */ } system("cls"); printf("\n ******** 进程创建如下:\n"); PCB *pr=ready; while(pr!=NULL) disp(pr), pr=pr->link; } inline void destroy() /*建立进程撤消函数(进程运行结束,撤消进程) */ { printf("\n 进程 [%s] 已完成.\n",p->name), free(p); } inline void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态) */ { (p->rtime)++; if(p->rtime==p->ntime) destroy(); /* 调用 destroy 函数 */ else --(p->super), p->state='w', sort(); } int main() /*主函数*/ { input(); int h=0; while(ready!=NULL) { getchar(); printf("\n The execute number:%d \n",++h); p=ready; ready=p->link; p->link=NULL; p->state='r'; check(); running(); printf("\n 按任意键继续......"), getchar(); } printf("\n\n 进程已经全部完成.\n"); getchar(); return 0; } /* 3 A 3 5 B 2 3 C 1 4 */
沃梦达教程
本文标题为:一个简单的模拟进程调度的C++程序
基础教程推荐
猜你喜欢
- C语言 structural body结构体详解用法 2022-12-06
- C/C++编程中const的使用详解 2023-03-26
- C++中的atoi 函数简介 2023-01-05
- C利用语言实现数据结构之队列 2022-11-22
- 如何C++使用模板特化功能 2023-03-05
- C++使用easyX库实现三星环绕效果流程详解 2023-06-26
- C语言基础全局变量与局部变量教程详解 2022-12-31
- 一文带你了解C++中的字符替换方法 2023-07-20
- 详解c# Emit技术 2023-03-25
- C++详细实现完整图书管理功能 2023-04-04