付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1目的和要求通过这次实验, 理解进程调度的过程, 进一步掌握进程状态的转变、 进程调 度的策略,进一步体会多道程序并发执行的特点, 并分析具体的调度算法的特点, 掌握对系统性能的评价方法。2实验内容阅读教材计算机操作系统 第二章和第三章, 掌握进程管理及调度相关概 念和原理。编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的 调度模拟操作,不需要实际程序。假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于 阻塞队列队首的进程。程序要求如下:1)输出系
2、统中进程的调度次序;2)计算CPU利用率。3实验环境Windows操作系统、VC+6.0C语言4设计思想: (1)程序中进程可用PCB表示,其类型描述如下:structPCB_typeintpid; /进程名in tstate;/进程状态2表示“执行”状态1表示“就绪”状态0表示“阻塞”状态intcpu_time; /运行需要的CPU时间(需运行的时间片个数)用PCB来模拟进程;(2)设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。队列类型描述如下:struetQueueNodestruetPCB_typePCB;Str
3、uetQueueNode*next;并设全程量:struetQueueNode*ready_head=NULL,/ready队列队首指针*ready_tail=NULL,/ready队列队尾指针*bloeked_head=NULL,/bloeked队列队首指*bloeked_tail=NULL;/bloeked队列队尾指针3)设计子程序 :start_state();读入假设的数据,设置系统初始状态,即初始化就绪队列和阻塞队列。dispath();模拟调度,当就绪队列的队首进程运行一个时间片后,放到就绪队 列末尾,每次都是队首进程进行调度,一个进程运行结束就从就绪 队列中删除,当到t个时间片后
4、,唤醒阻塞队列队首进程。calculate();就绪进程运行一次,useepu加1当就绪队列为空时unuseepu加1,CPU利用率为use_cpu/(use_cpu+unuse_cpu。)5源代码:#inelude#ineludestruetPCB_typeintp id;/进程名in tstate;/进程状态/2-表示执行状态/1-表示就绪状态/0-表示阻塞状态intepu_time;/运行需要的CPU时间(需运行的时间片个数);struetQueueNodestruetPCB_typePCB;struetQueueNode*next;structQueueNode*ready_head=
5、NULL,/read y队列队首指针*ready_tail=NULL,/ready队列队尾指针*bloek_head=NULL,/bloeked队列队首指针*block_tail=NULL;/blocked队列队尾指针intuse_cpu,unuse_cpu;voidstart_state()渎入假设的数据,设置系统初始状态intn,m;inti;structQueueNode*p,*q;printf(输入就绪节点个数n:); scanf(%d,&n);printf(输入阻塞节点个数m:);scanf(%d,&m); p=(structQueueNode*)malloc(sizeof(stru
6、ctQueueNode);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;q=(structQueueNode*)malloc(sizeof(structQueueNode);q-next=NULL;block_head=block_tail=q;for(i=0;inext=NULL;q-
7、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)printf(进程%d的pid和state和cpu_time:%5d%5d%5dn,i,p-PCB.pid,p-PCB.state,p-PCB.cpu_time); p=p-next;i+;voiddis path()/模拟调度intx=0,t;use_cpu
8、=0;unuse_cpu=0;printf(输入t:);scanf(%d,&t);printf(开始调度n);while(ready_head!=ready_tail|block_head!=block_tail)structQueueNode*p,*q;if(ready_head!=ready_tail)p=ready_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-P CB. pid);use
9、_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(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
10、_tail=q;x=0;voidcalculate()/计算CPU利用率printf(ncpu的利用率%.2fn,(float)use_cpu/(use_cpu+unuse_cpu);voidmain()start_state();dispath(); calculate();6运行结果:7实验总结:实验帮我复习了数据结构和C语言,且巩固课本知识,知道了如何定义结构体, 如何在链接队列中增删节点。模拟进程调度帮我们巩固了进程三状态之间的变 迁。懂得调式的重要性。总之,我们明白了理论联系实际。多看书,多上机。 实验三可变分区存储管理1目的和要求通过这次实验, 加深对内存管理的认识, 进一步掌握内
11、存的分配、 回收算法 的思想。2实验内容阅读教材计算机操作系统第四章,掌握存储器管理相关概念和原理。编写程序模拟实现内存的动态分区法存储管理。内存空闲区使用自由链管 理,采用最坏适应算法从自由链中寻找空闲区进行分配, 内存回收时假定不做与 相邻空闲区的合并。假定系统的内存共640K初始状态为操作系统本身占用64K。在t1时间之后,有作业A、B、C、D分别请求8K、16K、64K 124K的内存空间;在t2时间之后,作业C完成;在t3时间之后,作业E请求50K的内存空间;在t4时间之 后,作业D完成。要求编程序分别输出t1、t2、t3、t4时刻内存的空闲区的状 态。3实验环境Windows操作系
12、统、VC+6.0C语言4.设计思想模拟内存分配和回收, 要设置两个链队列, 一个空闲区链和一个占用区链, 空闲 区链节点有起始地址, 大小和指向下一节点的指针等数据域, 占用区链节点有起 始地址,大小,作业名和指向下一节点的指针等数据域, 本实验用最坏适应算法, 每次作业申请内存都是从空闲链队头节点分配,如果相等,就删除空闲头结点, 如果小于申请的,就不分配,否则就划分内存给作业,剩下的内存大小,重新插 入空闲链队,按从大到小, 接着把作业占用的内存放到占用区链节点的末尾。 每 次作业运行完,就要回收其占用的内存大小, 把作业节点按从大到小插入到空闲 链队中。5.源代码:#include#in
13、clude structfreelinkNode intlen;intaddress; structfreelinkNode*next;structbusylinkNode charname; intlen;intaddress;structbusylinkNode*next; structfreelinkNode*free_head=NULL;/自由链队列(带头结点)队首指针structbusylinkNode*busy_head=NULL;/占用区队列队(带头结点)首指针structbusylinkNode*busy_tail=NULL;/占用区队列队尾指针voidstart(void)/
14、*设置系统初始状态*/structfreelinkNode*p;structbusylinkNode*q;free_head=(structfreelinkNode*)malloc(sizeof(structfreelinkNode); free_head-next=NULL;/创建自由链头结点busy_head=busy_tail=(structbusylinkNode*)malloc(sizeof(structbusylinkNode);busy_head- next=NULL;/创建占用链头结点p=(structfreelinkNode*)malloc(sizeof(structfree
15、linkNode); p-address=64;p-len=640-64;/OS占用了64Kp-next=NULL; free_head-next=p;q=(structbusylinkNode*)malloc(sizeof(structbusylinkNode); q-name=S;/*S表示操作系统占用*/ q-len=64;q-address=0;q-next=NULL;busy_head-next=q;busy_tail=q;voidrequireMemo(charname,intrequire)/*模拟内存分酉己*/freelinkNode*w,*u,*v; busylinkNode
16、*p;if(free_head-next-len=require)p=(structbusylinkNode*)malloc(sizeof(structbusylinkNode);p-name=name;p-address=free_head-next-address; p-len=require;p-next=NULL;busy_tail-next=p;busy_tail=p;else printf(Cantallocate); w=free_head-next; free_head-next=w-next;if(w-len=require)free(w);elsew-address=w-a
17、ddress+require; w-len=w-len-require;u=free_head;v=free_head-next; while(v!=NULL)&(v-lenw-len)u=v;v=v-next;u-next=w;w-next=v;voidfreeMemo(chamame)/*模拟内存回收*/intlen;intaddress;busylinkNode*q,*p;freelinkNode*w,*u,*v;q=busy_head;p=busy_head-next;while(p!=NULL)&(p-name!=name)q=p;p=p-next;if(p=NULL)printf(
18、%cisnotexist,name);elseif(p=busy_tail)busy_tail=q;elseq-next=p-next; len=p-len;address=p-address; free(p);w=(structfreelinkNode*)malloc(sizeof(structfreelinkNode); w-len=len;w-address=address;u=free_head; v=free_head-next; while(v!=NULL)&(v-lenlen)u=v; v=v-next;u-next=w; w-next=v;voidpast(inttime)/*模拟系统过了
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 麻醉护理未来发展趋势图
- 高职护理:护理心理学应用
- 针灸学基础与护理要点
- 2026年户外运动装备租赁协议
- 铺无菌盘法:确保无菌安全的技巧
- 血液透析患者的并发症预防
- 脑病患者的针灸护理心理支持
- 楼梯踩踏事件应急预案
- 村扫雪防冻应急预案
- 食品行业食品安全追溯与冷链物流方案
- 2026供应链管理行业平台模式物流创新合作竞争力评估分析报告文档
- 2026安徽合肥高新区招聘社区工作者96人笔试参考题库及答案解析
- 2024版《建设工程工程量清单计价标准》解读课件
- 2026年高校图书馆采编岗面试题库
- 学堂在线 中国传统装饰 章节测试答案
- 2025年乌兰察布市社区工作者招聘考试真题及答案
- 对外投资合作国别(地区)指南-新加坡(2025年版)
- 污水处理设施运维服务投标方案(技术标)
- 比亚迪集团所属行业分析报告
- 福建省侨情普查工作制度
- 故事写作 课件
评论
0/150
提交评论