《2022年动态优先权算法 .pdf》由会员分享,可在线阅读,更多相关《2022年动态优先权算法 .pdf(11页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、华北科技学院计算机系综合性实验实 验 报 告课程名称C操作系统实验学期至学年第学期学生所在系部计算机系年级专业班级学生姓名 SORRY, 枪走火学号任课教师实验成绩计算机系制名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 11 页 - - - - - - - - - 华北科技学院计算机系综合性实验报告第 1 页C 操作系统课程综合性实验报告开课实验室:基础六2011年 5 月 20日实验题目进程调度算法设计一、实验目的通过对进程调度算法的模拟,进一步理解进程的基本概念,加
2、深对进程运行状态和进程调度过程、调度算法的理解。二、设备与环境1. 硬件设备: PC 机一台2. 软件环境:安装Windows 操作系统或者Linux 操作系统,并安装相关的程序开发环境,如CC+Java 等编程语言环境。三、实验内容(1)用 C/C+ 语言(或其它语言,如Java)实现对 N 个进程采用某种进程调度算法(如动态优先权优先)的调度。(2) 每个用来标识进程的进程控制块PCB 可用结构来描述,包括以下字段:进程标识数ID 。进程优先数PRIORITY ,并规定优先数越大的进程,其优先权越高。进程还需占用CPU 时间 CPUTIME 。进程进入 ready 队列还需等待时间WAIT
3、T 。进程被阻塞时间BLOCKT 。进程周转时间ALLTIME 。进程状态标记STATE。队列指针 NEXT ,用来将 PCB 排成队列。(3)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。(4)分析程序运行的结果,谈一下自己的认识。四、实验结果及分析1.实验设计说明用 C 语言实现动态优先权优先进程调度算法设计。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 11 页 - -
4、- - - - - - - 华北科技学院计算机系综合性实验报告第 2 页2.算法分析首先构造2 个队列 ready 和 block,将若干进程有序的插入block 队列中,并使block 队列中waitt 时间最小的排在队首。如若 block 队列和 ready 队列不同时为空, 那么每经过一个个时间片,使 waitt 减少 1,当 waitt 时间减少为0 时,将此进程调度到ready 队列中,执行一个时间片,并显示 block 和 ready 队列中的进程情况。若block 队列和 ready 队列同时为空,则进程调度完成。3.实验代码#include#include#define nul
5、l 0int n=0;/时间片typedef struct pcbint id;int priority;intcputime;int waitt;/还需等待时间(进入ready 队列)int blockt;/在 ready 中阻塞的时间int alltime; /进程完成的总时间;int state;struct pcb *next;pcb,*Queuenode;typedef structQueuenode front;Queuenode rear;queue;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 -
6、 - - - - - - 第 3 页,共 11 页 - - - - - - - - - 华北科技学院计算机系综合性实验报告第 3 页void init(queue &q)q.rear=q.front=(Queuenode)malloc(sizeof(pcb);q.front-next=null;void inblock(queue &q,int id,int priority,int cputime,int waitt,int blockt,int alltime,int state)Queuenode p,mp,tp;p=(Queuenode)malloc(sizeof(pcb);p-id=
7、id;p-priority=priority;p-cputime=cputime;p-waitt=waitt;p-blockt=blockt;p-alltime=alltime;p-state=state;p-next=null;q.rear-next=p;q.rear=p;void del(queue &q)Queuenode p;if(q.front=q.rear)printf( 队列为空,不能删除);p=q.front-next;q.front-next=p-next;if(q.rear=p) q.rear=q.front;free(p);名师资料总结 - - -精品资料欢迎下载 - -
8、 - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 11 页 - - - - - - - - - 华北科技学院计算机系综合性实验报告第 4 页void display(queue &q)/ 函数参数传值! ! ! !Queuenode p;if(q.rear=q.front)printf( 队列为空 n);p=q.front-next;while(p!=null)printf(%-2d%-2d%-2d%-2d%-2d%-2d%-2dn,p-id,p-priority,p-cputime,p-waitt,p-blockt,p
9、-alltime,p-state);p=p-next;printf(n);void alldisplay(queue &q1,queue &q2)/每个时间片显示ready 和 block 队列printf( 第%d 个时间片 n,n);printf(ready 队列中的进程如下:n);printf(IDPRIORITYCPUTIMEWAITTBLOCKTALLTIMESTATEn);display(q1);printf(n);printf(block队列中的进程如下:n);printf(IDPRIORITYCPUTIMEWAITTBLOCKTALLTIMESTATEn);display(q2
10、);printf(n);printf(n);printf(n);名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 11 页 - - - - - - - - - 华北科技学院计算机系综合性实验报告第 5 页void deploy(queue &q1,queue &q2)/ 调度 block 中首节点到队列ready;Queuenode p;void inready(queue &q,Queuenode &p);/孤立出 q2 中的首节点p=q2.front-next;q2.f
11、ront-next=p-next;if(q2.rear=p) q2.rear=q2.front;/inready(q1,p);void inready(queue &q1,Queuenode &p)/p节点有序的插入ready 队列首节点 (PRIORITY从大到小排列)Queuenode tp,mp;p-next=null;mp=q1.front;tp=q1.front-next;if(q1.rear=q1.front)q1.rear-next=p;q1.rear=p;while(tp!=null)if(p-priority=tp-priority)mp-next=p;p-next=tp;b
12、reak;mp=tp;tp=tp-next;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 11 页 - - - - - - - - - 华北科技学院计算机系综合性实验报告第 6 页if(mp=q1.rear)q1.rear-next=p;q1.rear=p;break;void run(queue &q1,queue &q2)Queuenode p,p2,tp;n+;/ 时间片加 1/block 队列中进程变化p2=q2.front-next;if(q2.rear!=q
13、2.front)if(p2-waitt=0)deploy(q1,q2);tp=q2.front-next;while(tp!=null)tp-waitt-;tp=tp-next;if(q1.rear!=q1.front)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 11 页 - - - - - - - - - 华北科技学院计算机系综合性实验报告第 7 页/ready 队列中阻塞进程的变化if(q1.rear=q1.front)printf( 队列为空 );/找到 rea
14、dy 中的首节点p=q1.front-next;while(p-next!=null)/注意 WHILE 是循环, if 是条件跳转p=p-next;p-priority+;p-blockt+;p-alltime+;p-state=0;/ready 队列中正在运行进程的变化/取出 ready 首节点p=q1.front-next;q1.front-next=p-next;if(q1.rear=p)q1.rear=q1.front;/p-cputime-;p-alltime+;p-state=1;p-priority-=3;if(p-cputime=0)free(p);/ 若进程结束 ,释放 p
15、 节点,而不是删除ready 头结点elseinready(q1,p);/否则将取出的首节点插回ready 中void main()queueblock;queueready;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 11 页 - - - - - - - - - 华北科技学院计算机系综合性实验报告第 8 页init(block);init(ready);inblock(block,1,5,4,2,0,0,0);inblock(block,2,4,3,3,0,0,0)
16、;inblock(block,3,6,2,5,0,0,0);inblock(block,4,7,5,7,0,0,0);while(ready.rear!=ready.front)|(block.rear!=block.front)alldisplay(ready,block);run(ready,block);alldisplay(ready,block);printf( 恭喜 !进程全部调度完成!n);3.实验结果图 1.名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共
17、11 页 - - - - - - - - - 华北科技学院计算机系综合性实验报告第 9 页图 2.4.实验结果分析实验结果详细的列出了每个时间片block 和 ready 队列中各个进程的情况。通过图 1 可以看到,调度进程之前,ready 和 block 队列各个进程的情况。通过图 2 可以看到, 2 个队列均为空,总共执行了16 个时间片,等于4 个进程所需cpu 时间再加上第一个进程的waitt 时间( 2+4+3+2+5=16 ) 。经过手动计算验证每一个时间片的结果均正确。5.实验心得。教师评价评定项目ABCD评定项目ABCD算法正确界面美观,布局合理程序结构合理操作熟练语法、语义正确解析完整名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 11 页 - - - - - - - - - 华北科技学院计算机系综合性实验报告第 10 页实验结果正确文字流畅报告规范题解正确其他:评价教师签名:年月日名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 11 页 - - - - - - - - -