资源简介
试验名称:进程调度模拟算法
试验内容:设计一个有N个进程并行的进程调度程序。
调度算法:采用最高优先数优先的调度算法。每个进程由一个进程控制块(PCB)表示。进程控制块可以包含以下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间,进程状态等。
![](http://www.nz998.com/pic/45157.jpg)
代码片段和文件信息
#include “stdio.h“
#include “stdlib.h“
#include “conio.h“
#define getpch(type)(type*)malloc(sizeof(type))
#define NULL 0
struct pcb
{
char name[20];
char state;
int super;
int ntime;
int rtime;
struct pcb *link;
}*ready=NULL*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;
}
}
}
void input() /* 建立进程控制块函数 */
{
int inum;
printf(“\n请输入进程个数“);
scanf(“%d“&num);
for ( i=0;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();
}
}
int space()
{
int l=0; PCB* pr=ready;
while (pr!=NULL)
{
l++;
pr=pr->link;
}
return(l);
}
void disp(PCB * pr) /* 建立进程显示函数,用于显示当前进程 */
{
printf(“\n qname \t state \t super \t ntime \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“);
}
void 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(““p->name);
free(p);
}
void running() /* 建立进程就绪函数 ,进程运行时间到,置就绪状态*/
{
(p->rtime)++;
if (p->rtime==p->ntime)
{
destroy();
}
else
{
(p->super)--;
p->state=‘w‘;
sort();
}
}
void main() /* 主函数 */
{
int lenh=0;
char ch;
input();
len=space();
while ((len!=0)&&(ready!=NULL))
{
ch=getchar();
h++;
printf(“\n The execute number:%d“h);
p=ready;
ready=p->link;
p->link=NULL;
p->state=‘R‘;
check();
running();
printf(“\n请按任意键继续。。。。“);
ch=getchar();
}
printf(“\n\n进程已经完成。\n“);
ch=getchar();
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 45056 2009-10-19 22:40 进程调度模拟算法\试验名称.进程调度模拟算法.doc
文件 2592 2009-10-19 18:26 进程调度模拟算法\ProcessDisp.cpp
目录 0 2009-10-27 19:10 进程调度模拟算法
----------- --------- ---------- ----- ----
47648 3
- 上一篇:14芯和20芯的JTAG的原理图设计
- 下一篇:gmapping论文
相关资源
- VisualStudioUninstaller vs卸载工具
- 组态王驱动开发包3.0.0.7(中文)
- 多窗口后台鼠标连点器
- 使用选择性重传协议实现UDP可靠通信
- VC 获得文件属性 获取文件的创建时
- 读者写者问题(读者优先,写者优先
- 用VC 编写的仿QQ聊天室程序源代码
- 外点法程序
- 外罚函数程序
- qt-电子点菜系统
- 推箱子及人工智能寻路C 源代码
- 自己写的航空订票系统c 版--数据结构
- 数据结构实验魔王语言
- MUSIC算法c 实现
- C 餐厅叫号系统(QT平)
- 国际象棋c 完整版
-
ob
jectARX给Auto CAD加工具条 - 画图程序MFC/VC/VC CRectTracker 串行化
- MFC网络编程实例
- c 课程设计 职工信息管理系统
- VC 游戏编程—附源代码
- IpHlpApi.h&IpHlpApi.lib
- 清华大学 c 郑莉 ppt课件
- c 程序判断离散数学中命题公式
- 多项式求和(数据结构C 版)
- vc 6.0开发的流程图编辑器
- VC 天空盒(skyBox)实现(附源代码)
- c MFC 画多边形
- 用C 实现的对网络上的ARP数据包进行
- Microsoft基本类库 (MFC)(C 库)
评论
共有 条评论