写一个程序描述进程状态迁移过程
来源:互联网 发布:淘宝上的翡翠能买吗 编辑:程序博客网 时间:2024/05/17 08:15
#include
"stdio.h"
#include <STDLIB.H>
#include <CONIO.H>
#define getpch(type) (type*)
malloc
(
sizeof
(type))
#define NULL 0
struct
pcb {
/* 定义进程控制块PCB */
char
name[10];
char
state;
int
super;
int
ntime;
int
rtime;
struct
pcb* link;
}*ready=NULL,*p;
typedef
struct
pcb PCB;
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;
}
}
input()
/* 建立进程控制块函数*/
{
int
i,num;
//clrscr(); /*清屏*/
printf
(
"\n 请输入进程号?"
);
scanf
(
"%d"
,&num);
for
(i=0;i<NUM;I++)
scanf
(?%s?,p- 输入进程名:?);
printf
(?\n p=
"getpch(PCB);"
进程号No.%d:\n?,i); {>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函数*/
}
}
int
space()
{
int
l=0; PCB* pr=ready;
while
(pr!=NULL)
{
l++;
pr=pr->link;
}
return
(l);
}
disp(PCB * pr)
/*建立进程显示函数,用于显示当前进程*/
{
printf
(
"\n qname \t state \t super \t ndtime \t 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"
);
}
check()
/* 建立进程查看函数 */
{
PCB* pr;
printf
(
"\n **** 当前正在运行的进程是:%s"
,p->name);
/*显示当前运行进程*/
disp(p);
pr=ready;
printf
(
"\n ****当前就绪队列状态为:\n"
);
/*显示就绪队列状态*/
while
(pr!=NULL)
{
disp(pr);
pr=pr->link;
}
}
destroy()
/*建立进程撤消函数(进程运行结束,撤消进程)*/
{
printf
(
"\n 进程 [%s] 已完成.\n"
,p->name);
free
(p);
}
running()
/* 建立进程就绪函数(进程运行时间到,置就绪状态*/
{
(p->rtime)++;
if
(p->rtime==p->ntime)
destroy();
/* 调用destroy函数*/
else
{
(p->super)--;
p->state=
'w'
;
sort();
/*调用sort函数*/
}
}
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;
p->link=NULL;
p->state=
'R'
;
check();
running();
printf
(
"\n 按任一键继续......"
);
ch=
getchar
();
}
printf
(
"\n\n 进程已经完成.\n"
);
ch=
getchar
();
}
0 0
- 写一个程序描述进程状态迁移过程
- 进程 描述 状态
- 写多进程程序碰到的一个问题
- select函数监控一个或多个文件描述符状态程序
- 用存储过程写的一个小递归程序
- 为OpenCV产生正样本描述文件写的一个小程序
- 操作系统学习笔记------进程描述与进程状态变化
- 程序,进程和线程的详细描述
- 如何写一个漂亮的bug描述
- Linux-进程描述(3)之进程状态僵尸进程与孤儿进程
- 写一个死锁程序
- 准备写一个程序
- 写一个进度条程序
- C#写进程守护程序
- 用户访问一个网站的过程描述
- 用python写一个进程
- 面试写一个进程死锁
- [Windows安全知识]Windows 操作系统进程描述(程序进程)
- 大数据实时计算工程师/Hadoop工程师/数据分析师职业路线图
- Maven之入门
- document.body、document.documentElement和window获取视窗大小的区别
- WebCollector爬虫的数据持久化
- FFMPEG教程6_同步音频(使用2014年新SDK重新整理编译通过)
- 写一个程序描述进程状态迁移过程
- android开发学习(二)——测试概念,junit测试框架, logcat
- 如何使用JUNIT对于Java Web 白盒测试
- 创业你要懂得那些事
- nginx---虚拟主机配置
- 外贸电商-全网营销
- struts2的配置文件
- css 浮动(float,clear)通俗讲解
- 设计模式之单例模式