这是我们操作系统实验课的一个实验程序,模拟简单的若干个进程在执行态和就绪态之间的变动。我根据实验指导书上给出的程序进行了一点修改。 #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++程序
猜你喜欢
- Easyx实现扫雷游戏 2023-02-06
- ubuntu下C/C++获取剩余内存 2023-09-18
- 我应该为我的项目使用相对包含路径,还是将包含目录放在包含路径上? 2022-10-30
- C++ 数据结构超详细讲解顺序表 2023-03-25
- c++ const 成员函数,返回一个 const 指针.但是返回的指针是什么类型的 const? 2022-10-11
- 详解C语言中sizeof如何在自定义函数中正常工作 2023-04-09
- C语言详解float类型在内存中的存储方式 2023-03-27
- C语言手把手带你掌握带头双向循环链表 2023-04-03
- C语言qsort()函数的使用方法详解 2023-04-26
- Qt计时器使用方法详解 2023-05-30
