您好,欢迎来到飒榕旅游知识分享网。
搜索
您的当前位置:首页操作系统-实验一-进程管理

操作系统-实验一-进程管理

来源:飒榕旅游知识分享网
昆明理工大学信息工程与自动化学院学生实验报告

( 2010 — 2011 学年 第 二 学期 )

课程名称:操作系统 开课实验室:计算机中心204 2010年04月20日 专业、年级、班 实验项目名称 教 师 评 语 教师签名: 年 月 日 进程管理 学号 姓名 成绩 指导教师 注:报告内容按实验须知中七点要求进行。

一、实验目的:运用优先权法和轮转法来模拟进程的控制,掌握进程的状态转换、进程的整个控制工作。

二、实验原理及基本技术路线图(方框原理图):

实验原理:用C语言或C++语言开发。需要定义PCB的数据结构,用链表的形式管理进程,采用多级反馈队列调度的算法模拟进程的控制。要求有创建、撤销、调度、阻塞、唤醒进程等功能。

基本技术路线图: 开始

输入进程数n 输入进程信息 设置3个优先级队列

-1-

将不同优先级的进程依次插入不同队列 Ch>n Ch=y或n 不打印 Ch=y 调用run函数,没运行过一次,将优先级降低,插入下一队列中,若所需时间为0,则释放空间 否 结束 若三个优先级队列为空 是 结束 -2-

三、所用仪器、材料(设备名称、型号、规格等):VC++ 6.0。

四、实验方法、步骤: 源程序:

#include \"stdio.h\" #include #include

#define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0

struct pcb { /* 定义进程控制块PCB */ char name[10]; char state; int super; int ntime; int rtime; int retime;

int jsuper;//静态优先级 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;

-3-

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=5; //有5个进程

for(i=0;iprintf(\"\\n 进程号No.%d:\\n\

-4-

p=getpch(PCB);

printf(\"\\n 输入进程名:\"); scanf(\"%s\

printf(\"\\n 输入进程静态优先数:\"); scanf(\"%d\p->retime=i;

printf(\"\\n 输入进程运行时间:\"); scanf(\"%d\

p->super=(p->jsuper-(p->ntime+p->retime))+10;//使优先级不为负数 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

进程名\

状态\

动态优先级\

静态优先级

\Needtime\Runtime\RStime\\n\"); //不好打印 就只能将就了 哈

printf(\"|%s\\printf(\"|%c\\

-5-

printf(\"|%d\\\printf(\"|%d\\\printf(\"|%d\\\printf(\"|%d\\printf(\"|%d\printf(\"\\n\"); }

check() /* 建立进程查看函数 */ { PCB* pr;

printf(\"\\n **** 当前正在运行的进程是:%s\显示当前运行进程*/ disp(p); pr=ready;

printf(\"\\n ****当前就绪队列状态为:\\n\"); /*显示就绪队列状态*/ while(pr!=NULL) { disp(pr); pr=pr->link; } }

destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ {

printf(\"\\n 进程 [%s] 已完成.\\n\free(p); }

running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ {

(p->rtime)++;

if(p->rtime==p->ntime)

destroy(); /* 调用destroy函数*/ else

-6-

{

(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\p=ready; ready=p->link; p->link=NULL; p->state='R'; check(); running();

printf(\"\\n 按任一键继续......\"); ch=getchar(); }

printf(\"\\n\\n 进程已经完成.\\n\"); ch=getchar(); }

-7-

五、实验过程原始记录:

六、实验总结:

操作系统是计算机系统中必不可少的系统软件,它是计算机系统中各种资源的管理者和各种活动的组织者、指挥者。操作系统采用时间片法调度进程,是系统资源得到充分利用,用户可以花更少的时间完成过多的工作。通过这次实验,将以前只会做题的过程转化外程序执行的过程,模拟了在单处理机情况下的处理及调度问题,体会到了程序执行的过程,加深了对进程调度的理解。

-8-

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- sarr.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务