操作系统实验报告材料

上传人:壹****1 文档编号:560143267 上传时间:2024-02-06 格式:DOC 页数:11 大小:78KB
返回 下载 相关 举报
操作系统实验报告材料_第1页
第1页 / 共11页
操作系统实验报告材料_第2页
第2页 / 共11页
操作系统实验报告材料_第3页
第3页 / 共11页
操作系统实验报告材料_第4页
第4页 / 共11页
操作系统实验报告材料_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《操作系统实验报告材料》由会员分享,可在线阅读,更多相关《操作系统实验报告材料(11页珍藏版)》请在金锄头文库上搜索。

1、实验二 进程调度1目的和要求通过这次实验, 理解进程调度的过程, 进一步掌握进程状态的转变、 进程调 度的策略,进一步体会多道程序并发执行的特点, 并分析具体的调度算法的特点, 掌握对系统性能的评价方法。2实验容阅读教材 计算机操作系统 第二章和第三章, 掌握进程管理及调度相关概 念和原理。编写程序模拟实现进程的轮转法调度过程,模拟程序只对 PCB 进行相应的 调度模拟操作,不需要实际程序。假设初始状态为:有 n 个进程处于就绪状态, 有 m 个进程处于阻塞状态。采用轮转法进程调度算法进行调度 ( 调度过程中,假 设处于执行状态的进程不会阻塞 ) ,且每过 t 个时间片系统释放资源,唤醒处于

2、阻塞队列队首的进程。程序要求如下:1)输出系统中进程的调度次序;2)计算CPU利用率。3实验环境Windows操作系统、VC+6.0C 语言4 设计思想:(1) 程序中进程可用 PCB 表示,其类型描述如下:struct PCB_typeint pid ;/进程名int state ; /进程状态2表示“执行”状态1表示“就绪”状态0表示“阻塞”状态int cpu_time ; /运行需要的 CPU 时间(需运行的时间片个数)用 PCB 来模拟进程;(2)设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。队列类型描述如下:

3、struct QueueNodestruct PCB_type PCB;Struct QueueNode *next;并设全程量:struct QueueNode *ready_head=NULL,/ready 队列队首指针 *ready_tail=NULL , /ready 队列队尾指针 *blocked_head=NULL,/blocked 队列队首指针 *blocked_tail=NULL; /blocked 队列队尾指针( 3)设计子程序 :start_state();读入假设的数据, 设置系统初始状态, 即初始化就绪队列和阻塞队列。dispath();模拟调度, 当就绪队列的队首进程

4、运行一个时间片后, 放到就绪队列末尾,每次都是队首进程进行调度, 一个进程运行结束就从就绪队列中删除,当到 t 个时间片后,唤醒阻塞队列队首进程。calculate();就绪进程运行一次,usecpu加1,当就绪队列为空时unusecpu加1,CPU 利用率为 use_cpu/(use_cpu+unuse_cpu)。5 源代码:#include#includestruct PCB_typeint pid ;/ 进程名int state ;/ 进程状态/2-表示执行 状态/1-表示就绪 状态/0-表示阻塞 状态/运行需要的 CPU 时间(需运行的时间片个数)int cpu_time ;struc

5、t QueueNodestructstruct;PCB_type PCB; QueueNode *next;/ready 队列队首指针/ready 队列队尾指针 /blocked 队列队首指针 /blocked 队列队尾指针struct QueueNode *ready_head=NULL,*ready_tail=NULL, *block_head=NULL, *block_tail=NULL;int use_cpu,unuse_cpu;void start_state() /读入假设的数据,设置系统初始状态int n,m;int i;struct QueueNode *p,*q;printf

6、( 输入就绪节点个数 n:);scanf(%d,&n);printf( 输入阻塞节点个数 m:);scanf(%d,&m);p=(struct QueueNode *)malloc(sizeof(struct QueueNode); p-next =NULL;ready_head=ready_tail=p;for(i=0;inext =NULL;p-PCB.state=1;printf( 输入就绪进程 %d 的 pid 和 cpu_time:,i+1); scanf(%d%d,&p-PCB.pid,&p-PCB.cpu_time); ready_tail-next=p;ready_tail=p

7、;q=(struct QueueNode *)malloc(sizeof(struct QueueNode); q-next =NULL;block_head=block_tail=q;for(i=0;inext=NULL;q-PCB.state=0;printf( 输入阻塞进程 %d 的 pid 和 cpu_time:,i+1); scanf(%d%d,&q-PCB.pid,&q-PCB.cpu_time); block_tail-next=q;block_tail=q;printf(n 处于就绪状态的进程有 :n);p=ready_head-next;i=1;while(p)state 和

8、printf( “ 进 程 %d 的 pid 和 cpu_time:%5d%5d%5dn,i,p-PCB.pid,p-PCB.state,p-PCB.cpu_time); p=p-next;i+;void dispath()/模拟调度int x=0,t;use_cpu=0;unuse_cpu=0;printf( 输入 t:);scanf(%d,&t);printf( 开始调度 n); while(ready_head!=ready_tail|block_head!=block_tail)struct QueueNode *p,*q;if(ready_head!=ready_tail)p=rea

9、dy_head-next;ready_head-next=p-next;p-next=NULL;if(ready_head-next=NULL)ready_tail=ready_head;p-PCB.state=2;printf( 进程 %d 调度 t,p-PCB.pid);use_cpu+;x+;p-PCB.cpu_time-;if(p-PCB.cpu_time)ready_tail-next=p; ready_tail=p;elseprintf( 进程 %d 完成 t,p-PCB.pid); free(p);elseunuse_cpu+;x+;printf( 空闲一个时间片 t); if(

10、x=t&block_head!=block_tail) q=block_head-next; block_head-next=q-next; q-next=NULL;if(block_head-next=NULL) block_tail=block_head; ready_tail-next=q; ready_tail=q;x=0;void calculate()/计算 CPU 利用率printf(ncpu 的利用率 %.2fn,(float)use_cpu/(use_cpu+unuse_cpu);void main()start_state();dispath();calculate();6

11、运行结果:|入密拿卫点个鈿诅|遷鬆41;屜pg 入就絃进程2的pF机pu_t ime : 2 | 人 B.S52S1 的 P id 和 C pu_t imc: 3 j人沮塞逬翟2的pid和cpu time:4 A 阻羞逬程 3 的 pidQcpu_tine ;5处主就第伏态的进程有:进程1 的 pidQstate 和 cjpu_ 匕 inu:pldQtitrtLedu pu_L Lm : At:6 liJg3jig 进S4S 井誓5调辛 pu5嘛用率0一83re is any key co continue进聲戈调康 进母2害成 蠶it匕 翰諦片片nr成K度 刖调 1 - 3 4 5 5 栓程

12、 -1- -/ -hl- - 逬空进进进讲闊完 13- 455 进进空进进讲片可2 3-45sa-刑险K-进进MW7实验总结:实验帮我复习了数据结构和 c语言,且巩固课本知识,知道了如何定义结构体,如何在队 列中增删节点。模拟进程调度帮我们巩固了进程三状态之间的变迁。懂得调式的重要性。总之,我们明白了理论联系实际。多看书,多上机。实验三 可变分区存储管理1目的和要求通过这次实验, 加深对存管理的认识, 进一步掌握存的分配、 回收算法的思 想。2实验容阅读教材计算机操作系统第四章,掌握存储器管理相关概念和原理。编写程序模拟实现存的动态分区法存储管理。 存空闲区使用自由链管理, 采 用最坏适应算法

13、从自由链中寻找空闲区进行分配, 存回收时假定不做与相邻空闲 区的合并。假定系统的存共640K,初始状态为操作系统本身占用64K。在t1时间之后, 有作业A B C、D分别请求8K、16K、64K、124K的存空间;在t2时间之后, 作业C完成;在t3时间之后,作业E请求50K的存空间;在t4时间之后,作业 D完成。要求编程序分别输出t1、t2、t3、t4时刻存的空闲区的状态。3实验环境Windows操作系统、VC+6.0C 语言4.设计思想模拟存分配和回收, 要设置两个链队列, 一个空闲区链和一个占用区链, 空闲区链节点有起 始地址,大小和指向下一节点的指针等数据域,占用区链节点有起始地址,大

14、小, 作业名和指向下一节点的指针等数据域, 本实验用最坏适应算法, 每次作业申请存都是从空闲链队头 节点分配,如果相等,就删除空闲头结点,如果小于申请的,就不分配,否则就划分存给作 业,剩下的存大小, 重新插入空闲链队, 按从大到小,接着把作业占用的存放到占用区链节 点的末尾。 每次作业运行完, 就要回收其占用的存大小, 把作业节点按从大到小插入到空闲 链队中。5.源代码:#include#includestruct freelinkNodeint len;int address;struct freelinkNode *next;struct busylinkNodechar name;int len;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号