基本分页存储管理系统的设计-操作系统课程设计.doc

上传人:豆**** 文档编号:24102188 上传时间:2022-07-03 格式:DOC 页数:27 大小:507KB
返回 下载 相关 举报
基本分页存储管理系统的设计-操作系统课程设计.doc_第1页
第1页 / 共27页
基本分页存储管理系统的设计-操作系统课程设计.doc_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《基本分页存储管理系统的设计-操作系统课程设计.doc》由会员分享,可在线阅读,更多相关《基本分页存储管理系统的设计-操作系统课程设计.doc(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-date基本分页存储管理系统的设计-操作系统课程设计教学内容及过程课程设计任务书及成绩评定课题名称基本分页存储管理系统的设计、题目的目的和要求: 巩固和加深对操作系统(OS)原理的理解,初步掌握操作系统组成模块和应用接口的使用方法,提高进行工程设计和系统分析的能力;通过选做上面的课题,实现OS最基本模块的管理功能,重点放在数据结构设计、文档规范化和程序设计风格。、设计进度及完

2、成情况日 期内 容6.16-7.18选取参考书,查阅有关文献资料,完成课程设计说明书内容1部分。 完成课程设计说明书内容2-4部分6.196.23创建相关数据结构,录入源程序6.246.25调试程序并记录调试中的问题,完成课程设计说明书第5部分。6.26系统测试,演示设计成果,考核成绩。6.27整理课程设计说明书,上午11时,由学习委员交课程设计说明书(计算机科学系9#213或直接交给指导教师)、主要参考文献及资料1 汤子赢等. 计算机操作系统(第二版).西安电子科技大学出版社,2006.82 冯耀霖等. 操作系统,西安电子科技大学出版社.19923 谭耀铭. 操作系统.中国人民大学出版社,2

3、003.4 4 任爱华 操作系统实用教程 清华大学出版社,2001 5 张尧学 史美林 计算机操作系统教程(第2版) 清华大学出版社2000、成绩评定:设计成绩: (教师填写)指导老师: (签字)二八 年 六 月二十七日-目 录第一章 概述1第二章 系统分析2第三章 系统设计3第四章 程序设计流程图或N-S图5第五章 源程序清单8第六章 调试过程中的问题及系统测试情况14第七章 结束语16第一章 概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。

4、计算机操作系统一门重要的专业课,是开发操作系统和软件系统的理论和应用基础。存储器是计算机系统的重要组成部分。近几年,虽然存储器的容量一直在不断的扩大,价格也越来越便宜,但是仍然不能满足现代软件发展的需要。因此存储器仍是一种宝贵的资源。因此尽可能的方便用户和提高主存储器的使用效率,使主存储器在成本、速度和规模之间获得较好的权衡是存储器管理的主要任务。存储器管理应具有内存分配、内存保护、地址映射和内存扩充等功能。本设计的目的是熟悉存贮器管理系统的设计方法;加深对所学基本分页存储管理方案的了解;设计地址变换机构,并将变换后的结果显示出来。模拟环境应尽量接近真实。此次设计利用了大量数据结构中关于链表的

5、相关知识,对以前所学的数据结构相关内容进行了回顾,从而掌握的更加深刻。另外,对存储器的结构和工作过程也有了直观而深刻的理解。语言方面,本次课程设计运用了C+语言。原因是通过分析认为只有C+和C语言比较合适,而C+在结构上更加清晰,也比较容易表达,并且代码较少。通过代码编写和结构表达,对C+的内容有了更进一步的掌握。总之,对所学的数据结构和C+知识进行了很好的回顾和掌握,收获很大。第二章 系统分析本设计的目的是熟悉存贮器管理系统的设计方法;加深对所学各种存贮器管理方案的了解;要求采用一些常用的存贮器分配算法,设计一个存贮器管理系统模拟系统并调试运行。模拟环境应尽量接近真实。因此根据设计要求,本存

6、储器管理系统利用最佳适应算法和首次适应算法实现了一定大小的分区分配和分区回收,并以次来模拟存储器管理。本系统模拟实现可变分区管理,存储管理主要是对存储空间的分配和回收,当有用户申请空间时,进行分配,空间不用了,及时回收,以免造成游离空间,使得该空间再也无法使用,可变分区管理的分配和回收功能类似于visual c+的reclaim()和free()的功能,分区收回算法,才用首次使用算法和最佳适应算法。在多道程序环境下,要使程序运行,必须先为之创建进程。而创建进程的第一步是将程序和数据装入内存。存储器实现的功能主要是内存分配等功能,本模拟系统所要实现的就是将进程的程序和数据装入内存(物理块)。具体

7、需要实现的功能如下:1、退出,输入0然后按任意键退出;2、分配主存,输入作业名和作业所需长度,回到主菜单;3、回收主存,选择后输入要回收的作业名,有则显示回收,无则显示无该作业;4、显示主存,能够显示分配的页面的状态信息,包括地址范围和读入的内存物理块号(未读入与读入的区别显示),页面是否在主存中。第三章 系统设计3.1 数据结构的设计#define n 10 /*假定系统允许的最大作业数为n,假定模拟实验中n值为10*/ #define m 10 /*假定系统允许的空闲区表最大为m,假定模拟实验中m值为10*/3.1.1已分配区表的设计struct float address; /*已分配分

8、区起始地址*/ float length; /*已分配分区长度,单位为字节*/ int flag; /*已分配区表登记栏标志,用0表示空栏目*/ used_tablen; /*已分配区表*/3.1.2 空闲区表的设计struct float address; /*空闲区起始地址*/ float length; /*空闲区长度,单位为字节*/ int flag; /*空闲区表登记栏标志,用0表示空栏目,用1表示未分配*/ free_tablem; /*空闲区表*/3.2 存储器分配算法设计本次设计采用最佳适应分配算法:allocate(char J,float xk)分配分区给用户,在这个过程中

9、,每当分配一个分区给用户时,可能造成空闲区表和已分配区表。分配时从空闲区表中找到一块可以容纳要分配的空间的最小空闲区。然后分配,空闲分区被分配时,如果分配后剩余的空间小于minisize,则将该空闲分区全部分配,若大于minisize,则切割分配。分配时修改相应的空闲区表和已分配区表。如果没有找到可以容纳要分配的空间的空闲区就返回“无可用空闲区”信息。3.4存储器回收算法设计最佳适应策略的结点是按照空闲区大小从小到大排列的,可分4种情况:(1) 上邻空闲区,下邻空闲区,三项合并;(2) 上邻空闲区,下邻非空闲区,与上邻合并;(3) 上邻非空闲区,下邻为空闲区,与下邻合并;(4) 上下邻均为非空

10、闲区,回收区域直接填入。3.4 主函数模块的设计首先提供一个功能菜单,接受用户的输入;然后根据用户的输入,分别提供相应的功能,功能有以下几个:0-退出1-分配主存2-回收主存3-显示主存。用户输入数字后执行相应模块。第四章 程序设计流程图或N-S图4.1主程序流程图:4.2分配函数流程图:4.3回收函数流程图:第五章 源程序清单#include#include #include#include#include#define n 10 /*假定系统允许的最大作业数为n,假定模拟实验中n值为10*/ #define m 10 /*假定系统允许的空闲区表最大为m,假定模拟实验中m值为10*/ #de

11、fine minisize 100 /*空闲分区被分配时,如果分配后剩余的空间小于minisize,则将该空闲分区全部分配,若大于minisize,则切割分配*/struct float address; /*已分配分区起始地址*/ float length; /*已分配分区长度,单位为字节*/ int flag; /*已分配区表登记栏标志,用0表示空栏目*/ used_tablen; /*已分配区表*/ struct float address; /*空闲区起始地址*/ float length; /*空闲区长度,单位为字节*/ int flag; /*空闲区表登记栏标志,用0表示空栏目,用

12、1表示未分配*/ free_tablem; /*空闲区表*/ void allocate(char J,float xk) /*给J作业,采用最佳分配算法分配xk大小的空间*/ int i,k; float ad; k=-1; for(i=0;i=xk&free_tablei.flag=1) if(k=-1|free_tablei.lengthfree_tablek.length) k=i; if(k=-1)/*未找到可用空闲区,返回*/ printf(无可用空闲区n); return; /*找到可用空闲区,开始分配:若空闲区大小与要求分配的空间差小于minisize大小,则空闲区全部分配;若

13、空闲区大小与要求分配的空间差大于minisize大小,则从空闲区划出一部分分配*/ if(free_tablek.length-xk=minisize) free_tablek.flag=0; ad=free_tablek.address; xk=free_tablek.length; else free_tablek.length=free_tablek.length-xk; ad=free_tablek.address+free_tablek.length; /*修改已分配区表*/ i=0; while(used_tablei.flag!=0&i=n) /*无表目可填写已分配分区*/ pr

14、intf(无表目填写已分分区,错误n); /*修正空闲区表*/ if(free_tablek.flag=0) /*前面找到的是整个空闲分区*/ free_tablek.flag=1; else /*前面找到的是某个空闲分区的一部分*/ free_tablek.length=free_tablek.length+xk; return; else /*修改已分配表*/ used_tablei.address=ad; used_tablei.length=xk; used_tablei.flag=J; return; /*主存分配函数结束*/ void reclaim(char J) /*回收作业名

15、为J的作业所占主存空间*/ int i,k,j,s,t; float S,L; /*寻找已分配表中对应登记项*/ s=0; while(used_tables.flag!=J|used_tables.flag=0)&s=n)/*在已分配表中找不到名字为J的作业*/ printf(找不到该作业n); return; /*修改已分配表*/ used_tables.flag=0; /*取得归还分区的起始地址S和长度L*/ S=used_tables.address; L=used_tables.length; j=-1;k=-1;i=0; /*寻找回收分区的空闲上下邻,上邻表目k,下邻表目j*/ w

16、hile(im&(j=-1|k=-1) if(free_tablei.flag=1) if(free_tablei.address+free_tablei.length=S)k=i;/*找到上邻*/ if(free_tablei.address=S+L)j=i;/*找到下邻*/ i+; if(k!=-1) if(j!=-1) /* 上邻空闲区,下邻空闲区,三项合并*/ free_tablek.length=free_tablej.length+free_tablek.length+L; free_tablej.flag=0; else /*上邻空闲区,下邻非空闲区,与上邻合并*/ free_t

17、ablek.length=free_tablek.length+L; else if(j!=-1) /*上邻非空闲区,下邻为空闲区,与下邻合并*/ free_tablej.address=S; free_tablej.length=free_tablej.length+L; else /*上下邻均为非空闲区,回收区域直接填入*/ /*在空闲区表中寻找空栏目*/ t=0; while(free_tablet.flag=1&t=m)/*空闲区表满,回收空间失败,将已分配表复原*/ printf(主存空闲表没有空间,回收空间失败n); used_tables.flag=J; return; free

18、_tablet.address=S; free_tablet.length=L; free_tablet.flag=1; return; /*主存回收函数结束*/ int main( ) int i,a; float xk; char J; /*空闲分区表初始化:*/ free_table0.address=10240; /*起始地址假定为10240*/ free_table0.length=10240; /*长度假定为10240,即10k*/ free_table0.flag=1; /*初始空闲区为一个整体空闲区*/ for(i=1;im;i+) free_tablei.flag=0; /*

19、其余空闲分区表项未被使用*/ /*已分配表初始化:*/ for(i=0;in;i+) used_tablei.flag=0; /*初始时均未分配*/ while(1) printf(选择功能项:n0-退出n1-分配主存n2-回收主存n3-显示主存)n); printf(选择功项(0-3):n); scanf(%d,&a); switch(a) case 0: exit(0); /*a=0程序结束*/ case 1: /*a=1分配主存空间*/ printf(输入作业名J和作业所需长度xk: ); scanf(%*c%c%f,&J,&xk); allocate(J,xk); /*分配主存空间*/

20、 break; case 2: /*a=2回收主存空间*/ printf(输入要回收分区的作业名); scanf(%*c%c,&J); reclaim(J); /*回收主存空间*/ break; case 3: /*a=3显示主存情况*/ /*输出空闲区表和已分配表的内容*/ printf(输出空闲区表:n起始地址 分区长度 标志n); for(i=0;im;i+) printf(%6.0f%9.0f%6dn,free_tablei.address,free_tablei.length, free_tablei.flag); printf( 按任意键,输出已分配区表n); getch(); p

21、rintf( 输出已分配区表:n起始地址 分区长度 标志n); for(i=0;in;i+) if(used_tablei.flag!=0) printf(%6.0f%9.0f%6cn,used_tablei.address,used_tablei.length, used_tablei.flag); else printf(%6.0f%9.0f%6dn,used_tablei.address,used_tablei.length, used_tablei.flag); break; default:printf(没有该选项n); /*case*/ /*while*/ return 1;/*主

22、函数结束*/第六章 调试过程中的问题及系统测试情况系统测试情况:61功能主菜单:62选择功能1,输入作业名和长度:63选择功能3,显示系统主存空间表,按任意键显示已分配区表:64选择功能2,回收以输入的作业:第七章 结束语通过实践,我也发现我的好多不足之处,首先在源程序的录入上就遇到了很大的麻烦,由于英文录入的速度比较慢,在源程序代码的录入上就花费了很多的功夫,还有就是C语言的基本功还不够扎实,出现了很多不该出现的毛病,还好在设计过程,让我深深体会到老师在课堂上讲的内容和要注意的地方的重要性,也正是老师在课堂上提前给我们做了提醒和学习,我在设计时才没花费太多的时间去更正这些问题。在以后的学习中,我一定要注意基本功的学习。谢谢老师对我的指导与教诲,在今后的学习中一定会用心再用心,不辜负老师对学生的教诲!参考文献:1 汤子赢等. 计算机操作系统(第二版).西安电子科技大学出版社,2006.82 冯耀霖等. 操作系统,西安电子科技大学出版社.19923 谭耀铭. 操作系统.中国人民大学出版社,2003.4 4 任爱华 操作系统实用教程 清华大学出版社,2001 5 张尧学 史美林 计算机操作系统教程(第2版) 清华大学出版社2000

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

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁