这是我们操作系统实验课的一个实验程序,模拟简单的若干个进程在执行态和就绪态之间的变动。我根据实验指导书上给出的程序进行了一点修改。 #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语言取整以及4种函数 2022-09-17
- [C语言]二叉搜索树 2023-09-07
- C++实现ETW进行进程变动监控详解 2023-05-15
- C++实战之二进制数据处理与封装 2023-05-29
- C语言编程C++旋转字符操作串示例详解 2022-11-20
- centos 7 vscode cmake 编译c++工程 2023-09-17
- C语言 详解字符串基础 2023-03-27
- [c语言-函数]不定量参数 2023-09-08
- 全面了解C语言 static 关键字 2023-03-26
- C语言实现宾馆管理系统课程设计 2023-03-13
