资源简介
试验名称:进程调度模拟算法
试验内容:设计一个有N个进程并行的进程调度程序。
调度算法:采用最高优先数优先的调度算法。每个进程由一个进程控制块(PCB)表示。进程控制块可以包含以下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间,进程状态等。
代码片段和文件信息
#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论文
相关资源
- QT_A+_记事本
- Qt 控件 实现 QComboBox输入自动提示功能
- 事件驱动 银行模拟系统
- OPENGL 字母模型
- question 6-student score management system.rar
- 八路抢答器代码
- 链表实现学生管理
- 数据结构实验-链式存储和顺序存储实
- 基于qt开发的会员管理系统
- 数据结构插队问题代码
- 输入10个整数,将其中最小的数与第一
- 科学计算导论实验报告
- 球体背面消隐课程设计及报告
- G.729的实现代码
- 东方电子DF9300通讯管理机包含规约:
- opencv检查图片中是否有人
- glaux系列包
- 无向连通图最小生成树
- 设计一个模拟计算器的程序,要求能
- 三次样条函数插值实现(第二边界条
- 太阳天顶角计算工具
- TDI驱动源代码
- KinectSDK2.0面部获取
- 种子填充算法VC程序.rar
- 实现了异常管理流程QtSharpCore.zip
- VC编写的简单聊天程序
- 利用USB虚拟总线驱动模拟USB摄像头的
- C经典教材-C和指针课后习题答案
- Poco:TCPServer框架
- 基于开源库tufao,一个C + +的异步 We
评论
共有 条评论