[it计算机]操作系统实验进程管理存储器管理设备管理实验代码报告内容摘要:

timeint 的语句。 当 timeint 的返回值为TURE 时,表示时间片到限,进程中止执行,返回主控程序。 调试程序出现的问题及解决的方法 调试程序过程中发现一些问题主要问题如下: 输出内容多,在屏幕上一闪而过,可采用在程序中预先设置断点或将输出信息发送到文件中的方法来处理。 设计体会 计算机操作系统实验指导书 13 操作系统是现代计算机系统工作的基石,而且进行程序离不开操作系统的支持。 本程序完成后对于进程管理有了整体的定义和 理解。 进程:可并发执行的程序,在某个数据集合上的一次运行过程。 而进程控制块是为使程序(含数据)能独立运行,为之配置一进程控制块,即 PCB。 进程有三种基本状态为就绪态( Ready),执行态( Running),阻塞态( Blocked)在程序中还涉及到进程的阻塞与唤醒 ,系统有 3 个进程,执行时涉及到高低就绪态和优先数的选择。 经过本次试验加深了对于进程管理的理解和认识,对于它的执行过程和整体的结构有了一定的了解, 熟悉了进程管理中主要数据结构的设计及进程调度算法,进程控制机构,同步机构,通讯机构的实施。 通过本次实验把理 论知识转化成了实际结果,强化了理论知识的学习把课本知识生动的得到了验证。 对今后从事实验工作打下了坚实的基础。 实验二 存储器管理 一、目的 本课题实验的目的是,使学生实验存储器管理系统的设计方法;加深对所学各种存储器管理方案的了解;要求采用一些常用的存储器分配算法,设计一个存储器管理模拟系统并调试运行。 二、 题目 存储器管理 三、要求及提示 要求采用一种常用的存储器分配算法,设计一个存储器管理模拟系统。 允许进行多次的分配和释放,并可向用户反馈分配和释放情况及当前内存的情况;采用“命令菜单”选择和键盘 命令输入的会话方式,根据输入请求调用分配模块,或回收模块,或内存查询模块,或最终退出系统。 编程实现。 工具: C语言或其它高级语言 实验时间: 3学时 四、实验报告 写出存储器管理的思想。 画出算法流程图和设置的数据结构。 写出调试程序出现的问题及解决的方法。 打印实验报告及程序清单。 报告给出测试的结果。 五、范例 采用可变分区存储器管理方案的模拟系统。 计算机操作系统实验指导书 14 问题描述 该模拟系统的外部特性与真实系统基本一样。 存储分配算法采用首次适应法。 用“拼,接”和“紧凑”技术来处理存储器碎 片。 算法 存储分配算法采用首次适应( FF)法。 根据指针 freep查找自由链,当找到第一块可满足分配请求的空闲区时便分配之。 当某空闲区被分配后的剩余空闲区空间大于规定的碎片最小容量 min 时,则形成一个较小的空闲区留在自由链中。 回收时,根据 MAT 将指定分区链入自由链。 若该分区有前邻或后邻空闲分区,则将他们拼接成一块加大的空闲区。 当某个分配请求不能被满足,但此时系统中所有碎片总量满足分配请求的容量时,系统立即进入内存“紧凑”以消除碎片。 即将各作业占用区集中下移到用户内存区的下部(高地址部分),形成一片连 接的作业区,而在用户内存区的上部形成一块较大的空闲区。 然后再进行分配。 本系统的主要程序模块包括:分配模块 ffallocation,回收模块 ffcolection,紧凑模块coalesce 及命令处理模块 menu。 Menu用以模拟系统的输入,采用“命令菜单”选择和键盘命令输入的会话方式,根据输入请求调用分配模块,或回收模块,或内存查询模块,或最终退出系统。 系统的主流程如图 3 所示。 数据结构 ( 1) 自由链与区头。 内存空闲区采用自由链结构。 链首由 freep 指向,链中各个空闲区按地址递增次序排列。 初启时整个用户内存 区为一个空闲区。 在每个空闲区首部设置一个区头( freearca)结构。 区头信息包括: size 空闲区大小(以字节计),包括区头所占空间; next 前向链指针,指向下一个空闲区; back 反向链指针,指向上一个空闲区; address 本空闲区首地址。 ( 2) 内存分配表 MAT。 系统设置一个 MAT,每个运行作业都在 MAT 中占有一个表目,回收分区时清除相应表目。 表目信息包括: name 用户作业名; length 作业区大小; addr 作业区首地址; 程序清单 include include define TOTAL 5000 define SETADDRESS 2020 define MIN 100 define MAX 10 typedef struct freearea 计算机操作系统实验指导书 15 { int address。 int size。 struct freearea *next。 struct freearea *back。 }*freeptr。 typedef struct mat { char name。 int address。 int length。 struct mat *next。 struct mat *back。 }*jobptr。 char string[10]。 long totalfree。 char jobnumber。 freeptr freep。 jobptr jobp。 /********初始化 **********/ init() { freep=(freeptr)malloc(sizeof(struct freearea))。 freepsize=TOTAL。 freepaddress=SETADDRESS。 freepnext=NULL。 freepback=NULL。 totalfree=TOTAL。 jobp=NULL。 jobnumber=0。 return(0)。 } /******分配模块 *******/ fengpei(int jl,char jn) {freeptr fp。 jobptr jp,jp1,jp2。 jp2=(jobptr)malloc(sizeof(struct mat))。 if(totalfreejl) return(1)。 fp=freep。 计算机操作系统实验指导书 16 while(fp!=NULL) {if(fpsizejl) fp=fpnext。 else {jobnumber=jobnumber+1。 totalfree=totalfreejl。 jp2name=jn。 jp2length=jl。 jp2address=freepaddress。 if(jobp==NULL) { jp2next=NULL。 jp2back=NULL。 jobp=jp2。 } else { jp=jobp。 while(jp!=NULLamp。 amp。 (jp2addressjpaddress)) { jp1=jp。 jp=jpnext。 } jp2next=jp。 if(jp==NULL) { jp2back=jp1。 jp1next=jp2。 } else { jp2back=jpback。 if(jpback!=NULL) jp1next=jp2。 else jobp=jp2。 jpback=jp2。 } } if((fpsizejl)MIN) { if(fpnext!=NULL) fpnextback=fpback。 if(fpback!=NULL) fpbacknext=fpnext。 else freep=fpnext。 /* return()。 */ } else 计算机操作系统实验指导书 17 { fpsize=fpsizejl。 fpaddress=fpaddress+jl。 } return(2)。 } if(totalfree=jl) return(0)。 } } /*********显示模块 *********/ xianshi() {jobptr jp。 /****清屏 ****/ if(jobnumber=0) printf(NO JOB!)。 else { printf(name\t\tlength\t\taddress\n)。 jp=jobp。 while(jp!=NULL) { printf(%c\t\t%d\t\t%d\n,jpname,jplength,jpaddress)。 jp=jpnext。 } } printf(\nthe total left is %d bytes:,totalfree)。 } /******回收模块 ********/ huishou(char jn) { freeptr fp,fp1,fp2。 jobptr jp。 int f=0。 jp=jobp。 while((jp!=NULL)amp。 amp。 (jpname!=jn)) jp=jpnext。 if(jp!=NULL) { 计算机操作系统实验指导书 18 jobnumber=jobnumber1。 totalfree=totalfree+jplength。 if(freep==NULL) { freep=(freeptr)malloc(sizeof(struct freearea))。 freepaddress=jpaddress。 freepsize=jpaddress。 freepnext=NULL。 freepback=NULL。 } else { fp=freep。 while((fp!=NULL)amp。 amp。 (fpaddressjpaddress)) { fp1=fp。 fp=fpnext。 } if(fp!=NULL) { if((fpnext!=NULL)amp。 amp。 (fpnextaddress=jpaddress+jplength)) f=f+1。 if((fpback!=NULL)amp。 amp。 (jpaddress=fp1address+fp1size)) f=f+2。 } else if((jpaddress)=(fp1address+fp1size)) f=f+2。 switch(f) { case 0: { fp2=(freeptr)malloc(sizeof(struct freearea))。 fp2address=jpaddress。 fp2size=jplength。 fp2next=fp。 if(fp!=NULL) { fp2back=fpback。 if(fpback!=NULL) fp1next=fp2。 else freep=fp2。 计算机操作系统实验指导书 19 fpback=fp2。 } else { fp2back=fp1。 fp1next=fp2。 } } case 1: { fpsize=fpsize+jplength。 fpaddress=jpaddress。 } case 2: fp1size=fp1size+jplength。 case 3: { fp1size=fp1size+jplength+fpsize。 fp1next=fpnext。 if(fpnext!=NULL) fpnextback=fp2。 free(fp)。 } } } if(jp==jobp) jobp=jpnext。 if(jpnext!=NULL) jpnextback=jpback。 if(jpback!=NULL) jpback。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。