欢迎来到天天文库
浏览记录
ID:61499616
大小:104.50 KB
页数:11页
时间:2021-02-07
《操作系统 进程管理 报告.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、昆明理工大学信息工程与自动化学院学生实验报告(200—200学年第学期)课程名称:操作系统开课实验室:计算机中心2042010年4月20日年级、专业、班学号姓名成绩实验项目名称进程管理指导教师教师评语教师签名:年月日注:报告内容按实验须知中七点要求进行。一、实验目的:运用优先权法和轮转法来模拟进程的控制,掌握进程的状态转换、进程的整个控制工作。二、实验原理及基本技术路线图(方框原理图)实验原理:用C语言或C++语言开发。需要定义PCB的数据结构,用链表的形式管理进程,采用多级反馈队列调度的算法模拟进程的控制。要
2、求有创建、撤销、调度、阻塞、唤醒进程等功能。(1)PCB的数据结构:1.进程ID:其中0为idle进程,用户进程为1,2,3……)2.进程优先级priority:idle进程为0,用户优先级大于0且随机产生,数值越大优先级越高3.进程占用CPU的执行时间CPUT:4.进程总共需要运行时间AllT:用随机数生成5.进程状态:0—表示就绪,1—表示运行,2—表示阻塞6.队列指针next,存放多个进程的PCB链表(2)优先数的改变策略1.进程在就绪队列每呆一个时间片优先数+12.进程每运行一次,优先数-3(3)执行可
3、通过循环、睡眠等多种方式模拟,阻塞和唤醒可通过捕获键盘按键来执行。是排放在对手,ready指向p获取就绪队列的长度检查并打印出正在运行的进程和等待中的进程如果执行时间和进程所需时间相同,则释放该进程的空间,否则进程优先数减1,并且将状态改为等待P要进程长度len不为0,就不断循环执行,直至len=0循环比较,将p放在适当的位置否比较进程优先级,p优先级高输入进程信息开始程序框图:三、所用仪器、材料(设备名称、型号、规格等):VC++6.0四、实验方法、步骤源程序:#include#includ
4、e#include#definegetpch(type)(type*)malloc(sizeof(type))//将申请内存空间函数自定义为getpch(type)structpcb{//定义进程控制块的结构charname[10];//进程名称charstate;//进程状态intsuper;//进程优先级intneedtime;//进程总共需要的cpu时间intrtime;inttijiaotime;intstarttime;intfinishtime;intzztim
5、e;intdzztime;structpcb*link;//进程指向下一个进程的指针}*ready=NULL,*p;//ready表示指向就绪队列中首元素的指针,初始化为NULL,p用来存放当前刚输入的PCBtypedefstructpcbPCB;//自定义PCB结构体intpzztime=0;intpdzztime=0;intnum;inttime=10000;voidsort(){PCB*first,*second;intinsert=0;//insert用于记录当前PCBp是否插在就绪队列的尾部if((r
6、eady==NULL)
7、
8、((p->super)>(ready->super)))//如果就绪队列为空或当前process的super比就绪队列中的第一各元素大,则:{//注:就绪队列中的元素按优先级从高到低排的p->link=ready;//把P放在队首,并且让ready指向pready=p;}else//就绪队列不为空,p的super不比首元素大,那就循环进行比较{first=ready;second=first->link;//first和second都是两个用于循环的变量while(second!=NU
9、LL)//一直比较到就绪队列的末尾{if((p->super)>(second->super))//当前进程的优先级大于原就绪队列中second所指向的元素时,就把p插入到first和second所指向的元素之间{p->link=second;first->link=p;second=NULL;insert=1;//插入队列记录符号}else{first=first->link;//两个循环变量继续后移,为下一轮循环做准备second=second->link;}}if(insert==0)first->lin
10、k=p;//循环到最后了,如果insert仍为0的话,就把P放在队尾}}//*******************************PCB输入模块*********************************************voidinput(){inti;printf("请输入进程数:");scanf("%d",&num);for(i=0;i
此文档下载收益归作者所有