预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共13页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

昆明理工大学信息工程与自动化学院学生实验报告 (201—201学年第二学期) 课程名称:操作系统开课实验室:年月日 年级、专业、班学号姓名成绩 实验项目名称进程管理指导教师 教 师 评教师签名: 语年月日 一、实验目的 通过编写进程管理的算法,要求学生掌握整个进程管理的各个环节,进程的数据结 构描述,进程的各种状态之间的转换,以及进程的调度算法。以加深对进程的概念及进 程调度算法的理解,并且提高链表的应用能力,达到提高编程能力的目的。 二、实验原理及基本技术路线图(方框原理图) 用C语言或C++语言开发。需要定义PCB的数据结构,用链表的形式管理进程,采用 多级反馈队列调度的算法模拟进程的控制。要求有创建、撤销、调度、阻塞、唤醒进程等功 能。 进程的状态转换图: 多级反馈队列调度算法: (1)应设置多个就绪队列,并为各个队列赋予不同的优先级。第一个队列的优先级最高, -1- 其余各队列的优先权逐个降低。该算法赋予各个队列中进程执行时间片的大小也各不相 同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。(2)当一个新进 程进入内存后,首先将它放入第一队列的末尾,按FCFS原则排队等待调度。当轮到该 进程执行时,如它能在该时间片内完成,便可准备撤离系统;如果它在第二队列中运行 一个时间片后仍未完成,再依次将它放入第三队列,……,如此下去,在第n队列中便 采取按时间片轮转的方式运行。(3)仅当第一队列空闲时,调度程序才调度第二队列中 的进程运行;仅当第1~(i-1)队列均空时,才会调度第i队列中的进程运行。如果处理 机正在第i队列中为某进程服务时,又有新进程进入优先权较高的队列(第1~(i-1)中的 任何一个队列),则此时新进程将抢占正在运行进程的处理机 程序功能结构图: -2- 流程图: Process 有r态就 绪进程? 有w态就 绪进程? 有无执行选取优先数最小pd 进程? 有无执行者 (≠)? exeNIL return(NIL) pd优先数 <exe优先数? 恢复现行进行现场 置exe进程状态为“r” 置pd进程状态为“e” 恢复进程pd的现场 exe←pd return(exe) -3- 三、所用仪器、材料(设备名称、型号、规格等)。 计算机一台 四、实验方法、步骤 #include<stdio.h> #include<stdlib.h> #include<conio.h> #definegetpch(type)(type*)malloc(sizeof(type))//将申请内存空间函数自定义为 getpch(type) structpcb{//定义进程控制块的结构 charname[10];//进程名称 charstate;//进程状态 intsuper;//进程优先级 intneed_time;//进程总共需要的cpu时间 intrun_time; intarrival_time; intstart_time; intfinish_time; intzztime; intdzztime; structpcb*link;//进程指向下一个进程的指针 }*ready=NULL,*p;//ready表示指向就绪队列中首元素的指针,初始化为 NULL,p用来存放当前刚输入的PCB typedefstructpcbPCB;//自定义PCB结构体 intpzztime=0; intpdzztime=0; intnum; -4- inttime=0; voidsort() { PCB*first,*second; intinsert=0;//insert用于记录当前PCBp是否插在就绪队列的尾部 if((ready==NULL)||((p->super)>(ready->super))) {//就绪队列中的元素按优先级从高到低排的 p->link=ready;//把P放在队首,并且让ready指向p ready=p; } else//就绪队列不为空,p的super不比首元素大,那就循环进行比较 { first=ready; second=first->link;//first和second都是两个用于循环的变量 while(second!=NULL)//一直比较到就绪队列的末尾 { if((p->super)>(second->super))//当前进程的优先级大于原就绪队列中 second所指向的元素时,就把p插入到first和second所指向的元素之间 { p->link=s