版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、目 录TOC o 1-3 h u HYPERLINK l _Toc15573 第一章 课程设计目的和要求 PAGEREF _Toc15573 1 HYPERLINK l _Toc27009 1.1 课程设计目的 PAGEREF _Toc27009 1 HYPERLINK l _Toc15951 1.2 课程设计要求 PAGEREF _Toc15951 2 HYPERLINK l _Toc27233 第二章 课程设计任务内容 PAGEREF _Toc27233 3 HYPERLINK l _Toc30189 2.1课程设计任务 PAGEREF _Toc30189 3 HYPERLINK l _T
2、oc13939 2.2 课程设计原理 PAGEREF _Toc13939 3 HYPERLINK l _Toc21521 2.2.1 固定分区存储管理的原理 PAGEREF _Toc21521 3 HYPERLINK l _Toc917 2.2.2 可变分区存储管理的原理 PAGEREF _Toc917 4 HYPERLINK l _Toc10784 2.2.3重定位 PAGEREF _Toc10784 4 HYPERLINK l _Toc27818 2.3 课程设计内容 PAGEREF _Toc27818 5 HYPERLINK l _Toc16952 第三章 详细设计说明 PAGEREF
3、_Toc16952 6 HYPERLINK l _Toc27389 3.1 模块描述 PAGEREF _Toc27389 6 HYPERLINK l _Toc12693 3.2 性能描述 PAGEREF _Toc12693 7 HYPERLINK l _Toc9094 3.3 输入项 PAGEREF _Toc9094 8 HYPERLINK l _Toc9014 3.4 输出项 PAGEREF _Toc9014 9 HYPERLINK l _Toc28558 3.5 数据结构 PAGEREF _Toc28558 10 HYPERLINK l _Toc1146 3.5.1 固定分区 PAGERE
4、F _Toc1146 10 HYPERLINK l _Toc844 3.5.2 可变分区 PAGEREF _Toc844 10 HYPERLINK l _Toc3018 3.6 算法介绍 PAGEREF _Toc3018 12 HYPERLINK l _Toc4504 3.7 流程图 PAGEREF _Toc4504 13 HYPERLINK l _Toc4462 3.7.1 主程序流程图 PAGEREF _Toc4462 13 HYPERLINK l _Toc13871 3.7.2 算法流程图 PAGEREF _Toc13871 15 HYPERLINK l _Toc3346 3.8 接口描
5、述 PAGEREF _Toc3346 17 HYPERLINK l _Toc25386 3.9 限制条件 PAGEREF _Toc25386 18 HYPERLINK l _Toc4621 第四章 件使用说明 PAGEREF _Toc4621 19 HYPERLINK l _Toc28051 4.1 系统开发与运行环境 PAGEREF _Toc28051 19 HYPERLINK l _Toc28518 42系统的运行说明 PAGEREF _Toc28518 19 HYPERLINK l _Toc1519 4.3 运行结果 PAGEREF _Toc1519 20 HYPERLINK l _To
6、c8892 4.3.1 固定分区运行结果 PAGEREF _Toc8892 20 HYPERLINK l _Toc19914 4.3.2 可变分区的运行结果 PAGEREF _Toc19914 21 HYPERLINK l _Toc8240 第五章 课程设计心得体会 PAGEREF _Toc8240 24 HYPERLINK l _Toc26238 附录1:参考文献 PAGEREF _Toc26238 25 HYPERLINK l _Toc29319 附录2:程序清单 PAGEREF _Toc29319 26存储管理系统的实现 内存管理的分配与回收第一章 课程设计目的和要求1.1 课程设计目的
7、操作系统是计算机系统的核心和灵魂,是计算机系统必不可少的组成部分,也是计算机专业教学的重要内容。该课程概念众多、内容抽象、灵活性与综合性强,不但需要理解操作系统的概念和原理,还需要加强操作系统实验,上机进行编程实践,故进行此次课程设计,使我们更好地掌握操作系统的精髓,真正做到深刻理解和融会贯通。 操作系统课程设计是本课程重要的实践教学环节。课程设计的目的,一方面使学生更透彻地理解操作系统的基本概念和原理,使之由抽象到具体;另一方面,通过课程设计加强学生的实验手段与实践技能,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。此次课程设计给学生更多自行设计、自主实验的机会,充分放手让学生真
8、正培养学生的实践动手能力,全面提高学生的综合素质。本次课程设计的题目为存储管理系统的实现,在熟练掌握计算机分区存储管理方式的原理的基础上,利用C+程序设计语言在windows操作系统下模拟实现操作系统的分区存储管理的功能,一方面加深对原理的理解,另一方面提高根据已有原理通过编程解决实际问题的能力,为进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。1.2 课程设计要求在深入理解操作系统基本原理的基础上,对于选定的题目,以小组为单位,先确定设计方案,设计系统的数据结构和程序结构,设计每个模块的处理流程。要求设计合理,编程序实现系统,要求实现可视化的运行界面,界面应清楚地反映出系统的运
9、行结果,确定测试方案,选择测试用例,对系统进程测试,运行系统并要通过验收,讲解运行结果,说明系统的特色和创新之处,并提交课程设计报告。 对于模拟操作系统分区存储管理功能,要求在掌握存储管理的相关知识的基础上,能够进行主存的分配,并利用各种算法来实现内存分配和回收,掌握各种算法的特点。第二章 课程设计任务内容2.1课程设计任务 模拟实现分区的分配和回收,主要考虑完成两个任务:第一,设计记录主存使用情况的数据结构,用来记录空闲区和作业占用的区域;第二,在该数据结构基础上设计主存分配算法和回收算法。内存的分配与回收的设计分为固定分区和可变分区,使其能够根据用户的请求实现分配与回收,回收后的分区,看是
10、否能与相邻的空闲区拼接。2.2 课程设计原理存储管理系统的目的是方便用户使用和提高主存利用率。存储管理的功能主要包括主存分配、主存保护、主存共享和主存扩充。实现存储管理系统的主存管理方法分为固定分区和可变分区。2.2.1 固定分区存储管理的原理固定分区就是预先把可分配的主存空间分割成若干个连续的区域,称为分区,每个分区的大小可以不同,但划分后固定不变,每个分区装入一个作业,这是支持多道程序的最简单的主存管理方法。固定分区管理可采用静态重定位的方式装入作业。装入程序把作业中的逻辑地址转换为绝对地址,并检查绝对地址是否在指定(装入)的分区内,如果是,就装入这个作业。否则就不能装入。如果装入主存分区
11、的作业占用处理器时(注意,是运行时),进程调度程序必须把作业所在分区的上下限地址存入“下限寄存器”和“上限寄存器”中,这样可以在指令执行中判断其所用到的绝对地址是否越界,达到存储保护的目的。2.2.2 可变分区存储管理的原理 可变式分区是指主存不预先划分,当作业装入时,根据其需求和主存空间的使用情况决定如何分配。若有足够的空间,则按需分割一部分分区给该作业,否则令其等待主存资源。 主存的分配和回收:在系统初始化时,主存除了操作系统所占部分外,整个用户区是一个大的空闲区,可以按作业需要的空间大小顺序分配空闲区直到不够时为止。当作业结束时,它的占用分区被收回。这个空闲区又可以根据新作业的大小重新用
12、于分配,根据实际情况将次空闲区与相邻的空闲区合并。所以主存中的已占分区和空闲区的数目和大小都是在变化的。主存的分配和回收主要是对空闲区的操作,为了便于对主存空间的分配与回收可以用两张表来记录和管理主存的使用情况:“已分配区表”记录作业占用分区,“空闲区表”记录空闲区。可变分区的主存分配算法有最先适应算法、最佳适应算法、最坏适应算法和下次适应算法。在这次可变式存储管理系统的实现中主要采用最先适应算法和最佳适应算法。 最先适应算法:就是在分区表中顺序查找,找到够大的空闲区就分配。但是这样的分配算法可能形成许多不连续的空闲区,造成许多“碎片”,使主存空间利用率降低。最佳适应算法:这种算法总是挑选一个
13、能满足作业要求的最小空闲区。但是这种算法可能形成一些极小的空闲区,以致无法使用,这也会影响主存利用率。2.2.3重定位 为了保证作业的正确执行,必须根据分配给作业的主存区域对作业中指令和数据的存放进行重定位,这种把逻辑地址转换成绝对地址的工作称为“重定位”或“地址转换”。重定位的方式有“静态重定位”和“动态重定位”两种。在装入一个作业时,把作业中的指令地址和数据地址全部转换成绝对地址。这种转换工作是在作业开始前集中完成的,在作业执行过程中无需再进行地址转换。所以称为“静态重定位”。在装入一个作业时,不进行地址转换,而是直接把作业装到分配的主区域中。在作业执行过程中,每当执行一条指令时都由硬件的
14、地址转换机构转换成绝对地址。这种方式的地址转换是在作业执行时动态完成的,所以称为动态重定位。动态重定位由软件(操作系统)和硬件(地址转换机构)相互配合来实现。动态重定位的系统支持“程序浮动”,而静态重定位则不能。2.3 课程设计内容本次课程设计具体为模拟实现分区存储管理,分为固定分区和可变分区。设计内容为编写程序实现动态分区存储管理方式的主存分配与回收。具体内容为:确定主存空间分配表;采用首次适应算法和最佳适应算法完成主存空间的分配和回收;编写主函数对所做工作流程进行测试。 第三章 详细设计说明3.1 模块描述对于固定分区的存储管理,已经划分好若干个固定分区,并设置好分区的编号、大小、起始地址
15、和状态(空闲状态为“N”、已分配为“Y”)系统应实现的功能模块为将作业装入空闲的固定分区、回收作业结束的固定分区、将下一个作业装入此固定分区。其功能模块图如下图3-1所示:固定分区存储管理退出系统回收作业结束的分区将作业装入空闲分区图3-1 固定分区的功能模块图 对于可变式分区的存储管理,系统需要实现的功能包括: 1、内存的初始化;包括内存的起始地址、内存的大小等。 2、要进入内存的程序链表的产生:多个要进入内存运行的程序的产生,包括 程序的编号、所占用存储空间的大小。可以把这些内容以记录式文件的形式保存到磁盘上,也可以把他们存放在二维数组中。 3、为程序分配存储空间,可以采用最先适应算法、最
16、佳适应算法来实现。主要是按照这两种算法的思想对空闲块进行排序,以便找出符合要求的那个空闲块。 4、记录和显示内存被程序占用的情况。 5、记录和显示内存中空闲快的情况。 6、回收存储空间:程序运行完毕后,要及时回收内存空间。 7、碎片拼接:当某个作业执行完成后,将该占用分区变成空闲区,并将其相邻的空闲区合并,以提高主存利用率:可变式分区存储管理的功能模块图如下:可变式分区存储管理系统分配内存回收内存退出查看分配 图3-2 可变分区存储管理系统模块图3.2 性能描述 存储管理系统的设计要求其能在规定的时间内,能够灵活并准确地完成系统的功能,能够实现对固定分区存储管理实现相应作业的装入和回收,并且可
17、以对可变分区存储管理内存的分配、回收、查看分配和退出操作。 动态分区存储管理系统利用两个双端队列分别记录主存空闲区,主存已分配区的情况。将成功分配到主存空间的进程添加到“已分配主存队列”,计算剩余空闲区的情况并将其放入“空闲区队列”,结束进程时则进行相反的操作。用户提出内存空间的申请;系统根据申请者的要求,按照一定的分配策略分析内存空间的使用情况,找出能 满足请求的空闲区,分给申请者;当程序执行完毕或主动归还内存资源时,系统要收回它所占用的内存空间 或它归还的部分内存空间。 模拟实现分区管理存储系统要求在系统性能范围内,正确地实现用户对内存空间 的分配和回收功能,满足用户地需求。3.3 输入项
18、 对于存储管理系统内存的分配与回收功能实现时,需要的输入项包括: 1、程序运行时首先接收输入:空闲区数据文件,包括若干行,每行有两个数据项:起始地址、长度(均为整数),各数据项以逗号隔开,如下表3-1所示。表3-1 空闲区数据文件表数据项名称起始地址长度数据类型intint数据值有效范围自定义自定义输入媒体键盘键盘 2、从用户界面根据用户提示接收一个内存申请,格式为:作业名、申请空间大小,如下表3-2所示。表3-2 接收内存申请的表作业名 作业名1作业名2作业名n申请空间大小小于最大分区 大小小于最大分区大小小于最大分区大小小于最大分区大小数据类型字符串字符串字符串字符串输入媒体键盘键盘键盘键
19、盘 3、按照最佳适应算法或首次适应算法选择一个空闲区,分割并分配,修改相应的数据结构(空闲区表),填写内存已分配区表(起始地址、长度、数据类型、标志位),其中标志位的作用是指出该区域分配给哪个作业,如下表3-3所示。表3-3 内存已分配区表输入项名称分配区号起始地址长度标志位选择算法数据类型intintintcharint有效范围小于10自定义小于60小于10小于10输入媒体文件文件文件文件文件3.4 输出项 对于存储管理系统内存的分配与回收功能实现时,需要的输出项包括: 1、建立空闲区表并在屏幕上显示输出空闲表的内容,空闲区表中记录了内存中可供分配的空闲区的地址和长度,用标志位指出该分区是否
20、是未分配的空闲区。根据这次设计的固定分区,每一分区长度为20,起始地址为钱一分区的末地址+1,空闲区表如下表3-4所示:表3-4 空闲区表输出项名称起始地址长度状态输出位置 第一分区020未分配屏幕第二分区20 20未分配屏幕第三分区4020空表目屏幕屏幕第n分区20未分配或空表目屏幕 其中,状态有两种状态,一种是“未分配”状态,指出对应的由起址指出的某个长度的区域是空闲区;另一种是“空表目”状态,表示表中对应的登记项目是空白(无效),可用来登记新的空闲区。 2、在屏幕上显示输出已分配区表的内容。如下表3-5所示:表3-5 内存已分配区表输出项名称起始地址长度状态输出位置第一分区0自定义已分配
21、屏幕第二分区第一分区末地址+1自定义已分配屏幕第三分区第二分区末地址+1自定义已分配屏幕自定义已分配屏幕第n分区第n-1分区末地址+1自定义已分配屏幕3.5 数据结构3.5.1 固定分区 1、对于空闲区定义一个结构体来说明表的结构。struct partiTabint no;int size;int firstAddr;char state;parTabNUM; 2、对于固定分区,程序中把可分配的主存空间分割成若干个连续区域,划分后每个分区大小固定不变。typedef struct partiTab PARTITAB; typedef struct jcb /*定义作业控制块JCB ,部分信息
22、省略*/ char name10; /作业名 int size;/作业大小 struct jcb* link; /链指针JCB;3.5.2 可变分区 1、对于未分配的出去的部分,定义一个空闲区来说明表的结构。 typedef struct freearea/定义一个空闲区说明表结构。 int ID; /分区号 long size; /分区大小 long address; /分区地址 int state; /状态ElemType; 2、内存管理的方法之一是建立一个链表,来描述已分配和空闲的内存分区。对于每个分区,它可能存放了某个进程,也可能是两个进程之间的空闲区。建立一个线性表的双向链表存储结构
23、。 typedef struct DuLNode /double linked list ElemType data; struct DuLNode *prior; /前趋指针 struct DuLNode *next; /后继指针DuLNode,*DuLinkList; 3、存储管理系统的功能之一是实现主存分配,为作业的程序和数据结构分配主存单元,根据作业号和作业所需分配的主存大小来建立主存分配的结构。 Status alloc(int ch) int ID,request; coutID; coutrequest; if(request0 |request=0) cout分配大小不合适,请
24、重试!data.ID=ID) p-data.state=Free; p-data.ID=Free; if(p-prior-data.state=Free)/与前面的空闲块相连 p-prior-data.size+=p-data.size; p-prior-next=p-next; p-next-prior=p-prior; if(p-next-data.state=Free)/与后面的空闲块相连 p-data.size+=p-next-data.size; p-next-next-prior=p; p-next=p-next-next; break; p=p-next; return OK;3
25、.6 算法介绍 实现分区存储管理内存分配功能,本系统主要采用首次适应算法和最佳适应算法。分配时可将空闲分区先做合适的排序后用对应的适应算法给作业分配存储空间。 最佳适应算法:它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按大小从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。最佳适应算法将可利用空间表中一个不小于“请求”且最接近请求的空闲块的一部分分配给用户。分配和回收都需要对可利用空间表从头至尾查询一遍,为了避免每次分配都要查询整个链表,通常要求节
26、点从大到小排序,由此只需找到第一个足够大的空闲块即可予以分配。但回收时,必须把回收的空闲块放置在符合大小顺序关系的链表位置。在分配时容易产生太小而无法利用的内存碎片,同时这种做法也保留了那些很大的内存块以备响应将来发生的内存量较大的用户“请求”,从而使整个链表逐渐趋向于节点大小差别甚远的状态。这种分配算法适合请求分配内存大小范围较广的系统,此算法比较费时间。首次适应算法:从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。该算法优先使用低址部分空闲区,在低址空间造成许
27、多小的空闲区,在高地址空间保留大的空闲区。首次适应算法分配时从表头指针开始查找可利用的空间表,将找到的第一个大小不小于“请求”的空闲块的一部分分配给用户,可利用空间表本身既不按节点的初始地址有序,也不按节点的大小有序,用户释放内存,回收时只是将空闲块插入在链表的表头即可,此算法比较节省时间。3.7 流程图3.7.1 主程序流程图 存储管理系统分区分配和回收的实现。分为固定分区和可变分区。 1、固定分区程序流程图 固定分区存储管理分配时,首先申请空闲块,然后判断是否有空闲区域,没有则分配失败;有则继续判断内存空间是否足够,不足则分配失败,足够则分配成功,否则分配失败;判断作业完成时,若完成则回收
28、其内存空间,若未完成则继续完成此作业,回首内存后,则此程序结束。其程序流程图如图3-1所示: 开始申请空闲块是否有空闲区域否分配内存失败是大小是否合适否作业是否完成是否继续作业内存分配成功是回收内存结束图3-1 固定分区程序流程图 2、可变分区程序流程图 可变分区存储管理系统首先申请空闲块,然后判断此系统中是否有空闲块,没有则分配失败;有则继续判断内存空间是否足够,不足则分配失败,足够则选择适当的算法分配内存,然后判断作业是否完成,未完成则继续作业,完成则回收其内存,则此程序结束,其程序流程图如图3-2所示: 开始申请空闲块是否有空闲 块否内存分配失败是内存空间是否足够否是选择适当算法作业是否
29、完成否继续进行作业内存分配成功是回收内存结束否继续作业图3-2 可变分区程序流程图3.7.2 算法流程图 分区存储管理系统的实现中用到的算法有首次适应算法和最佳适应算法。对应的算法流程图如下: 首次适应算法:从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业。首次适应算法分配时从表头指针开始查找可利用的空间表,将找到的第一个大小不小于“请求”的空闲块的一部分分配给用户。 首次适应算法的流程图如图3-3所示:从空闲链表第一个条目开始查找当前空闲块是否大于等于请求的空闲块分配成功是是否其后是否还有空闲块否整个链表查找结束均小 于所要求空闲块大小分配失败 结束 图3-3 首次适
30、应算法流程图最佳适应算法:它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。最佳适应算法将可利用空间表中一个不小于“请求”且最接近请求的空闲块的一部分分配给用户。分配和回收都需要对可利用空间表从头至尾查询一遍。最佳适应算法的流程图如图3-4所示: 开始 遍历查找空 闲区链表 是否有空闲块大于等于申请快分配失败否是选择满足要求中的最小的空闲块分配 分配成功结束 图3-4 最佳适应算法流程图3.8 接口描述 1、变量 int Status; 说明:定义有关的内存状态,即分配与未分配 static int block_start_addr=0; 说明:起始地址从零开
31、始 int IDrequest; 说明:定义输入的分区号 int ch; 说明:记录最小剩余空间 2、结构体说明: 设计中用到的数据结构或抽象数据类型的说明及在程序中的作用数据结构:typedef struct freearea/定义一个空闲区说明表结构 int ID; /分区号 long size; /分区大小 long address; /分区地址 int state; /状态ElemType;上面分别表示分区号,分区大小,分区的地址及各分区的状态。typedef struct DuLNode /double linked list ElemType data; struct DuLNod
32、e *prior; /前趋指针 struct DuLNode *next; /后继指针DuLNode,*DuLinkList; 上述为线性表的双向链表的存储结构,定义一个节点的前趋指针和后继指针,进程在内存中存在的位置,指向下一个节点的指针。一个节点包含了一个进程相应的信息,然后把节点连接起来,形成线性链表,便于在进程添加、查找和撤销的操作。 在此实验中我们采用最佳适应算法和首次适应算法来实现内存中的分配问题。还有一些结构体如下所示: 首次适应算法:Status First_fit(int ID,int request)/传入作业名及申请量 /为申请作业开辟新空间且初始化 DuLinkList
33、 temp=(DuLinkList)malloc(sizeof(DuLNode); temp-data.ID=ID; temp-data.size=request; temp-data.state=Busy; 最佳适应算法:Status Best_fit(int ID,int request) int ch; /记录最小剩余空间 DuLinkList temp=(DuLinkList)malloc(sizeof(DuLNode); temp-data.ID=ID; temp-data.size=request; temp-data.state=Busy;3.9 限制条件 存储管理系统内存的分配
34、与回收的限制条件如下: 1、 内存中有该进程时则不能分配内存; 2、一次只能给一个进程分配一个内存; 3、 当请求的内存大小大于最大内存大小时,不能分配。第四章 件使用说明4.1 系统开发与运行环境 要保证基于状态监测的煤矿设备维修管理系统平台的正确运行,首先必须对系统进行配置。 代码实现:C+语言程序 开发工具:Visual Studio Team System 2005 WEB服务器:IIS40及以上 服务器端:WinNT、Win2000 Server、Win2003 Server 客户端:window98以上系统;IE5O以上;Intemet Explorer 60以上以用于系统版本的升
35、级、报表的浏览及设备维修管理信息的访问。 数据库: Microsoft SQL Server 200042系统的运行说明 对存储管理系统分区的分配与回收系统的运行说明如下: 1、对于固定分区的存储管理系统,打开软件后,系统已预先分配好分区,根据系统提示即可完成内存的分配和回收。 2、对于可变式分区的存储管理系统,打开软件后,会出现一个输入主菜单,界面上有详细的操作说明,会提示所需要选择的算法:1、首次适应算法,2、最佳适应算法。 选择完算法后,出现一些具体的操作:1、分配内存,2、回收内存,3、查看分配,0、退出。本系统是一款多功能,操作方便,界面友好的软件。软件所提供的所有功能都可以通过键盘
36、操作实现,简单易行,会给用户的相关操作带来很大方便。4.3 运行结果 4.3.1 固定分区运行结果 1、系统初始界面如图3-5所示(其中“N”表示未分配,“Y”表示已分配):图3-5 系统初始界面 2、为分区分配相应的作业,其界面如图3-6所示:图3-6 分配作业3、当作业完成时,此系统是假如分区号2的作业完成,回收其内存空间,其分配状态由“Y”变为“N”,其界面如图3-7所示: 图3-7 回收内存空间 4、从后备作业中选择适当的作业填入该内存分区,分配成功并退出系统,其界面如图3-8所示:图3-8 重新分配并退出系统4.3.2 可变分区的运行结果 1、实现可变分区存储管理系统的功能时,系统初
37、始界面如图3-9所示:图3-9 系统初始界面 2、根据需要选择适当的算法进行相应的分配,其界面如图3-10所示: 图3-10 选择算法 图3-11 选择算法 3、当所需分配的内存空间大于最大内存时,会分配失败,其界面如图3-11所示: 图3-12 内存分配失败4、进行主存分配操作时,首先选择“1:分配内存”操作,然后假设分配的主存大小分别为80,100,70,120,然后进行相应操作,选择“3:查看分配”,显示的内存分配情况如图3-13所示:图3-13 显示内存分配 5、回收完成作业的内存空间,此系统中假如回收的作业号为1和3,回收情况如图3-14和3-15所示: 图3-14 回收内存 图3-
38、15 回收内存 6、分别选择两种算法进行操作,选择后界面如图3-10和3-11,然后利用这两种算法对系统进行分配主存,空间大小为70,分配后选择“3:查看分配”的界面如图3-16所示: 图3-16 分配内存当选择首次适应算法时,因作业号1主存空间为80的状态为空闲且足够分配空间大小为70 的作业,故将其分配在作业号1;当选择最佳适应算法时,因目前作业号1和作业号3都是空闲状态,故系统会将其分配在作业号3。从下图可看出首次适应算法优先使用低址部分空闲区,在低址空间造成许多小的空闲区,在高地址空间保留大的空闲区,比较节省时间;最佳适应算法使碎片尽量小,该算法保留大的空闲区,但造成许多小的空闲区。分
39、分配完后查看分配的界面如图3-17和图3-18所示:3-17 首次适应算法分配内存图3-18 最佳适应算法分配内存 7、当完成所有操作后,根据提示,按0退出系统其界面如图3-19所示:图3-19 退出系统 第五章 课程设计心得体会 三周的课程设计结束了,这次课程设计是操作系统中存储管理系统分区的分配和回收。通过课程设计我懂得了存储管理分配和回收的一些简单算法的实现,掌握了用高级语言编写和调试存储管理程序的方法,加深了对存储管理各种算法的概念及存储管理算法的理,并且加深了对段页式存储管理的地址转换的理解。 通过这次课程设计我练习了用C+语言写系统软件,对操作系统中分区存储管理有了更深刻的了解。在
40、写程序的时候也遇到了一些困难,比如在设计数据结构时特别犹豫,总想找一个很合适的。但是,后来才知道,关键要多尝试,而空想是没有用的。最后我证实了自己的设计的合理性。在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。在设计过程中,与同学分工设计,和同学们相互探讨,相互学习,相互监督,从中学会了合作,学会了宽容,学会了理解。课程设计是我们专业课程知识综合应用的实践训练,是我们迈向社会,从事职业工作前一个必不少的过程。这三周我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。通过这次存储管理设
41、计,综合运用本专业所学课程的理论和实际知识进行设计工作的实际训练从而培养和提高我们独立工作能力,体会了学以致用、突出自己劳动成果的喜悦心情,从中发现自己平时学习的不足和薄弱环节,从而加以弥补。有些时候细节问题得不到重视则会导致全局的失败,在编程的时候也是如此,基础是成败的关键,平时的时候也要重视细节,好的基础才有好的未来。所以无论什么事情都要认真的对待,把握基础,把握未来。 最后,感谢老师对我的学习的指导!附录1:参考文献1 胡志刚,谭长庚等,计算机操作系统,中南大学出版社2005年2 罗宇,邹鹏等,操作系统(第二版),电子工业出版社2007年4月3 汤子瀛,哲风屏,汤小冉等,计算机操作系统,
42、西安电子科技大学出社,2001年8月4 张尧学,史美林,计算机操作系统课程,清华大学出版社,2000年5 庞丽萍,操作系统原理,华中理工大学出版社,2000年6 马季兰等Linux操作系统,电子工业出版社2002年7 任爱华,李鹏,刘方毅,操作系统实验指导,清华大学出版社,2004年8 谭浩强著.C程序设计,清华大学出版社,1999年12月第2版9 谭浩强著.C+程序设计实践指导,清华大学出版社,2005年7月底1版10【美】D.C.Malik:C+编程从问题分析到程序设计,电子工业出版社,2003年7月第1版附录2:程序清单 固定分区:#include #include#include#de
43、fine NUM 4#define alloMemory(type) (type*)malloc(sizeof(type)struct partiTabint no;int size;int firstAddr;char state;parTabNUM;typedef struct partiTab PARTITAB; typedef struct jcb /*定义作业控制块JCB ,部分信息省略*/ char name10; /作业名 int size;/作业大小 struct jcb* link; /链指针JCB;typedef structJCB *front,*rear;jcbQue;
44、jcbQue *jcbReadyQue;void AllocateMemory(int size);void createTab();void checkTab();void recycleMemory(int i); void AllocateMemory(int size)for(int i=0;isize)parTabi.state=Y;elseprintf(没有空闲分区,无法分配内存!n); void createTab()for(int i=1;i=NUM;i+)/getPartiTab(PARTITAB);parTabi-1.no=i;parTabi-1.size=20; parT
45、abi-1.state=N; parTabi.firstAddr=parTabi-1.firstAddr+20;void checkTab()printf(分区号t大小t起址t状态n);for(int i=0;iNUM;i+)printf(%dt,parTabi.no);printf(%dt,parTabi.size);printf(%dt,parTabi.firstAddr);printf(%ct,parTabi.state);printf(n);void recycleMemory(int i)parTabi-1.state=N;int main(int argc, char* argv)
46、createTab();checkTab();printf(请按回车键继续:n);getchar();printf(每个分区装入一道作业:n);for(int i=0;iNUM;i+)AllocateMemory(i+1)*3);checkTab();printf(请按回车键继续:n);getchar();printf(假如一段时间后,其中一个作业结束,回收给它分配的分区(假如该作业在第2分区)n);recycleMemory(2);checkTab();printf(请按回车键继续:n);getchar();printf(接着,从外存后备作业队列中选择一个作业装入该分区(假如该作业大小为10
47、)n);AllocateMemory(10);checkTab();return 0; 可变式分区:#include#include#define Free 0 /空闲状态#define Busy 1 /已用状态#define OK 1 /完成#define ERROR 0 /出错#define MAX_length 640 /最大内存空间为640KBtypedef int Status; typedef struct freearea/定义一个空闲区说明表结构 int ID; /分区号 long size; /分区大小 long address; /分区地址 int state; /状态El
48、emType; / 线性表的双向链表存储结构 typedef struct DuLNode /double linked list ElemType data; struct DuLNode *prior; /前趋指针 struct DuLNode *next; /后继指针DuLNode,*DuLinkList; DuLinkList block_first; /头结点DuLinkList block_last; /尾结点 Status alloc(int);/内存分配Status free(int); /内存回收Status First_fit(int,int);/首次适应算法Status
49、Best_fit(int,int); /最佳适应算法void show();/查看分配Status Initblock();/开创空间表Status Initblock()/开创带头结点的内存空间链表 block_first=(DuLinkList)malloc(sizeof(DuLNode); block_last=(DuLinkList)malloc(sizeof(DuLNode); block_first-prior=NULL; block_first-next=block_last; block_last-prior=block_first; block_last-next=NULL;
50、 block_last-data.address=0; block_last-data.size=MAX_length; block_last-data.ID=0; block_last-data.state=Free; return OK; / 分 配 主 存 Status alloc(int ch) int ID,request; coutID; coutrequest; if(request0 |request=0) cout分配大小不合适,请重试!endl; return ERROR; if(ch=2) /选择最佳适应算法 if(Best_fit(ID,request)=OK) cou
51、t分配成功!endl; else cout内存不足,分配失败!endl; return OK; else /默认首次适应算法 if(First_fit(ID,request)=OK) cout分配成功!endl; else cout内存不足,分配失败!data.ID=ID; temp-data.size=request; temp-data.state=Busy; DuLNode *p=block_first-next; while(p) if(p-data.state=Free & p-data.size=request) /有大小恰好合适的空闲块 p-data.state=Busy; p-
52、data.ID=ID; return OK; break; if(p-data.state=Free & p-data.sizerequest) /有空闲块能满足需求且有剩余 temp-prior=p-prior; temp-next=p; temp-data.address=p-data.address; p-prior-next=temp; p-prior=temp; p-data.address=temp-data.address+temp-data.size; p-data.size-=request; return OK; break; p=p-next; return ERROR;/ 最佳适应算法 Status Best_fit(int ID,int request) int ch; /记录最小剩余空间 DuLinkLi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高安市九年级上学期语文期中考试卷
- 二年级数学计算题专项练习集锦
- 脱硫废水零排放技术协议书(2篇)
- 高中技术学业水平测试试卷
- 南京工业大学浦江学院《食品标准与法规》2022-2023学年第一学期期末试卷
- 翰林国际(原曹妃甸科教城共享居住及配套)土地固化施工组织设计
- 多种多样的生态系统说课稿
- gkh说课稿第课时
- 《小数的性质》说课稿
- 租地合同范本(2篇)
- 【参考】华为腾讯职位管理0506
- 五年级英语上册Unit1Getupontime!教案陕旅版
- 风机安装工程质量通病及预防措施
- 三角形钢管悬挑斜撑脚手架计算书
- 文件和文件夹的基本操作教案
- 剪纸教学课件53489.ppt
- 旅游业与公共关系PPT课件
- 劳动法讲解PPT-定稿..完整版
- 彩色的翅膀_《彩色的翅膀》课堂实录
- 假如你爱我的正谱
- 铜芯聚氯乙烯绝缘聚氯乙烯护套控制电缆检测报告可修改
评论
0/150
提交评论