《河南自考操作系统实验报告电子稿.docx》由会员分享,可在线阅读,更多相关《河南自考操作系统实验报告电子稿.docx(21页珍藏版)》请在第一文库网上搜索。
1、河南省高等教育自学考试实验报告册计算机及应用专业(本科段)操作系统姓名准考证号一所属地市实验地点实验日期2014.09.14实验总成绩指导教师签名实验单位(实验室)意见:主考院校审核意见:河南科技大学自学考试办公室2014年9月14日目录一、实验报告要求1二、实验一:单处理器系统的进程调度模拟2三、 实验二:可变分区管理方式的主存分配回收模拟5四、 实验三:文件操作模拟8五、 实验四:银行家算法的模拟10实验报告要求1、实验报告应包括以下的内容:(I)程序清单(2)实验结果(3)分析与讨论2、实验报告应写明实验名称、班号、实验者姓名、学号、将实验报告整理装订好,按指导教师规定的时间上交。基本实
2、验方法本实践环节要求学生能够顺利完成数据库原理、数据结构、操作系统、面向对象程序设计几门课程的实践操作实验所用器件、设备的简单介绍所有实验在586以上的微机上进行,运行环境为VFP、C语言、C+语言和Windows、1inux操作系统。实验一:单处理器系统的进程调度模拟一、 实验学时:2学时二、 实验目的:通过模拟单处理器系统的进度调度,了解进程的构成、进程的组织及进程的状态及其转换,掌握进程调度策略。三、 实验设备:本实验在586以上的微机上进行,运行环境为TurboC语言。四、 样例:(参看实践性环节培训与考核基本要求P45)五、实验内容:数据结构及说明:(模拟实验采用时间片轮调度)Pcb
3、-Iist是用于存放进程控制块的一个结构数组,每个元素都是一个PCb结构。Ck)Ck是自定义时钟Times1tice是时间片大小NUMBER是系统允许并发执行的最大进程数1ist/tai1是进程就绪队列的头/尾指针算法:定义变量;初始化就绪队列;初始化PCB-1ISTCPU查询有多少进程输入,查到值赋给N;对每个进程输入到达进程的名称和运行时间调用函数Peb-maoc()给进程分配pcb块;将进程加入就绪队列;系统调度;(用SChedUIe()实现)if(运行完毕)输出结束条件:用用户控制结束。(一)、实验目的通过模拟单处理器系统的进度调度,了解进程的构成、进程的组织及进程的状态及其转换,掌握
4、进程调度策略。(二)、程序清单ttinc1ude*stdio.h*definerunning1/*用running表示进程处于运行态*/defineaready2/*用arcady表示进程处于就绪态*/defineb1ocking3/*用b1ocking表示进程处于等待态*/ttdefinesometime5/*用sometime表示时间片大小*/definen10/*假定系统允许进程个数为10*/struct(intname;/*进程标识符*/intstatus;/*进程状态*/intax,bx,ex,dx;/*进程现场信息,通用寄存器内容*/intpc;/*进程现场信息,程序计数器内容*/
5、intpsw;/*进程现场信息,程序状态字寄存器内容*/intnext;/*下一个进程控制块的位置*/pcbarcan;/*定义模拟进程控制块区域的数组*/intPSW,AX,BX,CX,DX,PC,TIME;/*模拟寄存器*/intrun;/*定义指向正在运行进程的进程控制块的指针*/struct(inthead;inttai1;ready;/*定义指向就绪队列的头指针head和尾指针tai1*/intb1ock;/*定义指向等待队列的指针*/intPfree;/*定义指向空闲进程控制块队列的指针*/shedu1ing()/*进程调度函数*/inti;if(ready,head=1)/*空闲
6、进程控制块队列为空,退出*/Printf(无就绪进程n);return0;)i=ready.head;/*就绪队列头指针赋给i*/ready,head=pcbareaready,head,next;/*就绪队列头指针后移*/if(ready,head=-1)ready,taiI=T;/*就绪队列为空,修正尾指针ready,tai1*/pcbareai.StatUS=running;/*修改进程控制块状态*/TIME=Sometime;/*设置相对时钟寄存器*/*恢复该进程现场信息:*/AX=pcbarearun.ax;BX=pcbarearun.bx;CX=pcbarearun.ex;DX=p
7、cbarearun.dx;PC=pcbarearun.pc;PSW=pcbarearun.psw;*修改指向运行进程的指针*/run=i;return0;/*进程调度函数结束*/create(intx)/*创建进程*/(inti;if(pfree=-1)/*空闲进程控制块队列为空*/Printf(无空闲进程控制块,进程创建失败n);returnO;)i=pfree;/*取空闲进程控制块队列的第一个*/pfree=pcbareapfree.next*pfree后移*/*填写该进程控制块内容:*/pcbareai.name=x;pcbareai.status=aready;pcbareai.ax=
8、x;pcbareai.bx=x;pcbareai.cx=x;pcbareai.dx=x;pcbareai.pc=x;pcbareai.psw=x;if(ready,head!=-1)*就绪队列不空时,挂入就绪队列方式*/pcbareaready,tai1,next=i;ready,tai1=i;pcbareaready,tai1.next=-1;)e1se(*就绪队列空时,挂入就绪队列方式:*/ready,head=i;ready,tai1=i;pcbareaready,tai1,next=-1;)*进程创建函数结束*/main()(/*系统初始化*/intnum,j;run=ready.he
9、ad=ready.tai1=b1ock=1;pfree=0;for(j=0;j0)(create(num);scanf(%d,&num);)shcdu1ing();if(run!=-1)(Printf(进程名进程状态寄存器内容:axbxexdxpcpsw:n);printf(z,%4d%10d%14d%3d%3d%3d%3d%3dnz,pcbarearun,name,pcbarearun.status,pcbarearun.ax,pcbarearun.bx,pcbarearun.ex,pcbarearun,dx,pcbarearun,pc,pcbarearun,psw);)return0;*m
10、ain()结束*/(三)、实验中出现的问题及解决的方法这个实验模拟单处理器系统的进度调度,了解进程的构成、进程的组织及进程的状态及其转换,掌握进程调度策略。实验二:可变分区管理方式的主存分配回收模拟一、 实验学时:2学时二、 实验目的:通过模拟可变分区管理方式下主存的分配和回收,主要了解内存的管理思想,以及掌握分区的几种策略。三、实验设备:本实验在586以上的微机上进行,运行环境为TurboC语言。四、样例:(参看实践性环节培训与考核基本要求P54)五、实验内容:数据结构及说明:(模拟试验采用首次适应策略)空闲区链表FBC,分配区链表ABC;表中纪录块的起始地址和大小,块按照地址大小从小到大排
11、列。功能实现分配时:根据作业的大小,从第一个空闲块查找,将找到的第一个足够大的空闲块分配给该作业,返回给用户该块始地址。回收时:根据用户提供的作业的始地址,在分配区表中查找,若找到,加入空闲区链表,提示用户释放成功。显示:用户可随时选择查看内存分配状态图。主要子函数Voidshow-b1ockvoiddisp1ay-men(void)voidvoidassign()voiddisp1ay(void)voidadd-abcNodeadd-fbcNodevoidre1ease(void)(一)、实验目的通过模拟可变分区管理方式下主存的分配和回收,主要了解内存的管理思想,以及掌握分区的几种策略。(二
12、)、程序清单动态分区存储管理方式的主存分配回收inc1udettinc1udettinc1udettinc1udeinc1udedefinen10假定系统允许的最大作业为,假定模拟实验中n值为10definem10假定系统允许的空闲区表最大为m,假定模拟实验中m值为10ttdefineminisize100ofstreamOUt(output,txt);typedefstructf1oataddress;已分分区起始地址f1oat1ength;己分分区长度,单位为字节intf1ag;己分配区表登记栏标志,用表示空栏目,实验中只支持一个字符的作业名used;己分配区表usedusedtab1en
13、;typedefstruct(f1oataddress;空闲区起始地址f1oat1ength;/空闲区长度,单位为字节intf1ag;/空闲区表登记栏标志,用0表示空栏目,用1表示未分配freed;空闲区表freedfree_tab1em;采用最优分配算法分配xk大小的空间voida11ocate(charJ,f1oatxk)(inti,k;f1oatad;k=-1;for(i=0;i=xk&free_tab1ei.f1ag=1)if(k=-1Ifree_tab1ei.1engthfreetab1ek.1ength)k=i;if(k=-D未找到可用空闲区,返回CoUt”无可用空闲区end1;return;)找到可用空闲区,开始分配:若空闲区大小与要求分配的空间差小于InSiZe大小,则空闲区全部分配;若空闲区大小与要求分配的空间差大于IniniSiZe大小,则从空闲区划出一部分分配if(freetab1ek.1ength-k=minisize)freetab1ek.fIag=O;ad=freetab1ek.address;xk=freetab1ek.1ength;)e1se(free_tab1ek,1ength=free_tab1ek.1ength-k;ad=freetab1