操作系统课程设计连续存储空间管理仿真实现.doc
《操作系统课程设计连续存储空间管理仿真实现.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计连续存储空间管理仿真实现.doc(51页珍藏版)》请在三一办公上搜索。
1、 操作系统原理课程设计实践报告题 目: 连续存储空间管理仿真实现 姓 名: 学 院: 专 业: 班 级: 学 号: 指导教师: 职称: 教授 2014年3月 10 日连续存储空间管理仿真实现摘要:连续分配方式,是指为一个用户程序分配一个连续的内存空间。模拟连续存储空间固定分区、可变分区、伙伴系统三种分配方法,其中可变分区采用四种适应算法。整个系统中包括以下功能:查询、分配、回收、退出,并能通过良好的用户界面体现出来,为了深刻理解操作系统中的内存分配技术,动态地为进程分配内存空间,本系统可按照用户分配的作业自动完成内存管理的模拟演示。这对深入理解操作系统内存分配原理,透析作业执行的各种情况,发现
2、和探究新的更加高效的内存管理方式有重大意义。关键字:存储空间管理;固定分区;可变分区;伙伴系统;仿真1 目的及意义存储器是计算机系统的重要组成部分,而如何有效地管理存储器对系统地性能有很大的影响,存储器管理的主要对象是内存。连续分配方式,是指为一个用户程序分配一个连续的内存空间。这种分配方式曾被广泛应用于20世纪6070 年代的OS中,它至今仍在内存分配方式中占有一席之地;又可把连续分配方式进一步分为单一连续分配、固定分区分配、动态分区分配以及动态重定位分区分配四种方式。由于在一台计算机中的内存分配过程的不可视性、算法的复杂性、内存情况的多样性和不确定性,使得算法分析与其它算法间的比较相当困难
3、。用模拟系统的方法将整个内存的分配使用的过程可视化,这对深入理解操作系统的存储器管理,透析算法原理,创新算法具有重要意义。2 理论基础 2.1 固定分区理论基础固定分区式分配是最简单的一种可运行多道程序的存储管理方式。这是将内存用户空间划分为若干个固定大小的区域,在每个分区中只装入一道作业,这样,把用户空间划分为几个分区,便允许有几道作业并发运行。当有一空闲分区时,便可以再从外存的后备作业队列中选择一个适当大小的作业装入该分区,当该作业结束时,又可再从后备作业队列中找出另一作业调入该分区。1划分分区的方法分区大小不等。为了克服分区大小相等而缺乏灵活性的这个缺点,可把内存区划分成含有多个较小的分
4、区、适量的中等分区及少量的大分区。这样,便可根据程序的大小为之分配适当的分区。2内存分配为了便于内存分配,通常将分区按大小进行排队,并为之建立一张分区使用表,其中各表项包括每个分区的起始地址、大小及状态(是否已分配),见图1所示。当有一用户程序要装入时,由内存分配程序检索该表,从中找出一个能满足要求的、尚未分配的分区,将之分配给该程序,然后将该表项中的状态置为“已分配”;若未找到大小足够的分区,则拒绝为该用户程序分配内存。1图1:固定分区分区示意及内存分配图2.2 可变分区理论基础动态分区分配是根据进程的实际需要,动态地为之分配内存空间。在实现可变分区分配时,将涉及到分区分配中所用的数据结构、
5、分区分配算法和分区的分配与回收操作这样三个问题。1分区分配中的数据结构 空闲分区链:为了实现对空闲分区的分配和链接,在每个分区的起始部分,设置一些用于控制分区分配的信息,以及用于链接各分区所用的前向指针;在分区尾部则设置一后向指针,通过前、后向链接指针,可将所有的空闲分区链接成一个双向链。 2分区分配算法(1) 首次适应算法(first fit)在分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止;然后再按照作业的大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲链中。若从链首直至链尾都不能找到一个能满足要求的分区,则此次内存分配失败,返回。 1(2)
6、 循环首次适应算法(next fit)该算法是由首次适应算法演变而成的。在为进程分配内存空间时,不再是每次都从链首开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。1 3(3) 最佳适应算法(best fit)所谓“最佳”是指每次为作业分配内存时,总是把能满足要求、又是最小的空闲分区分配给作业,避免“大材小用”。为了加速寻找,该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。1 (4) 最坏适应算法(worst fit)最坏适应分配算法要扫描整个空闲分区表或链表,总是挑选一个最大的空闲
7、区分割给作业使用。1 32.3 伙伴系统理论基础12伙伴系统规定,无论已分配分区或空闲分区,其大小均为2 的k 次幂,k 为整数,lkm,其中:21 表示分配的最小分区的大小,2m 表示分配的最大分区的大小,通常2m是整个可分配内存的大小。假设系统的可利用空间容量为2m个字,则系统开始运行时,整个内存区是一个大小为2m的空闲分区。在系统运行过程中,由于不断的划分,可能会形成若干个不连续的空闲分区,将这些空闲分区根据分区的大小进行分类,对于每一类具有相同大小的所有空闲分区,单独设立一个空闲分区双向链表。这样,不同大小的空闲分区形成了k(0km)个空闲分区链表。当需要为进程分配一个长度为n 的存储
8、空间时,首先计算一个i 值,使2i1n2i,然后在空闲分区大小为2i 的空闲分区链表中查找。若找到,即把该空闲分区分配给进程。否则,表明长度为2i的空闲分区已经耗尽,则在分区大小为2i1的空闲分区链表中寻找。若存在2i1 的一个空闲分区,则把该空闲分区分为相等的两个分区,这两个分区称为一对伙伴,其中的一个分区用于分配,而把另一个加入分区大小为2i 的空闲分区链表中。若大小为2i1的空闲分区也不存在,则需要查找大小为2i2的空闲分区,若找到则对其进行两次分割:第一次,将其分割为大小为2i1 的两个分区,一个用于分配,一个加入到大小为2i1的空闲分区链表中;第二次,将第一次用于分配的空闲区分割为2
9、i 的两个分区,一个用于分配,一个加入到大小为2i的空闲分区链表中。若仍然找不到,则继续查找大小为2i3的空闲分区,以此类推。由此可见,在最坏的情况下,可能需要对2k的空闲分区进行k 次分割才能得到所需分区。一次分配可能要进行多次分割一样,一次回收也可能要进行多次合并,如回收大小为2i的空闲分区时,若事先已存在2i的空闲分区时,则应将其与伙伴分区合并为大小为2i1的空闲分区,若事先已存在2i1的空闲分区时,又应继续与其伙伴分区合并为大小为2i2的空闲分区,依此类推。33 设计思想及设计功能说明 3.1 固定分区设计思想一开始对于固定分区的连续内存分配我的想法是利用二维数组设计内存分配表,将内存
10、块的起始地址、占用长度、占用标志等信息用数组的一项进行表示,然后我用了40分钟写了100行左右的代码,并且有比较简介清晰的显示界面。但是之后跟其他同学交流,与组员的沟通使我明白,连续内存分配的固定分区方式不是简单地用数组进行标识模拟,这只是理论上的分配,并没有真正的实现内存的分配。借鉴了可变分区的实现,我决定采用链表去做,建立了相应的数据结构,建了一个空闲区链表,一个已分配链表,将手动输入的信息动态建立结点,插入到相对应的链表中,以此来模拟分配内存,由于固定分区是固定大小的内存块,所以要查找比输入所需内存容量大的内存块,有就放置,没有就给出提示。再之后跟老师交流之后,尤其是助教的讲解,使得我们
11、明白,在操作系统中的连续内存分配的过程中是与CPU紧密联系的,动态的建立进程,不确定的生成进程信息,可以被CPU执行的进程才会进入就绪队列,其余的进程则是在后备等待队列中等待系统资源的满足。对此我们小组经过几次激烈的讨论,最终确定代码的各项规范以及数据结构的最终版本,并紧赶时间完成代码,并且将之前的手动输入进程信息改成随机数生成,将之前的文本形式的输出改成图形化可控制输出显示,很好的提高了用户交互的友好性。3.2 可变分区设计思想对于首次适应算法:从空闲分区中从头遍历,低地址开始直到找到一个大于等于申请内存大小的分区,直接在已分区中按照地址递增顺序增加该进程。同时判断该分区长度是否等于零。若等
12、于零,则删除该分区,分配完毕。回收某区时,首先在已分配区中找到该进程,释放该进程所占的分区,并将该分区插入到空闲分区中。插入到空闲分区中时要从头遍历空闲分区判断该分区是否能与相邻分区拼接。拼接有三种情况:与左分区、与右分区、与左右分区拼接,拼接后相应的改变分区的地址和长度。若不能进行拼接,则按照地址递增顺序作为独立分区加入到空闲分区当中,回收完毕。6对于下次适应算法:与首次适应算法类似,不同的是,总是从空闲区的上次扫描结束处顺序查找空闲区表,直到找到第一个能满足长度要求的空闲区为止。图2:首次适应算法及下次适应算法分配内存流程图判断后备等待队列是否有进程N拼接与左结点相邻与右结点相邻Y与左右结
13、点相邻N新分区空闲结点N回收内存地址空闲区最大地址拼接可与左结点拼接YY图3:首次适应算法及下次适应算法回收内存流程图对于最优适应算法:分配内存时,先把空闲区按长度递增顺序排列,通过扫描整个空闲区从空闲区中挑选一个能满足进程要求的最小分区进行分配。具体分配过程与最先适应算法相同,分配完毕。回收分去时,现在已分配区中找到该进程,并释放进程节点,首先把该回收的分区插在空闲区的链尾,从头遍历空闲分区,判断左拼接和右拼接,若可以拼接,则直接修改链尾分区的地址和长度,同时删除与之拼接的分区,回收完毕。将空闲区大小排序NYY分区长度-=size进程加入已分配链表在空闲区遍历查找最佳分区分区长度=0分区长度
14、=sizefree分区PCB进入后备WaitListN对于最差适应算法:与最优适应算法类似,不同的是再分配内存时,首先把空闲区按长度递减顺序排列,使分配内存时总是挑选一个最大的空闲区分割给作业使用。3图4:最优适应算法及最差适应算法分配内存流程图NYNNY回收内存无空闲区链在链尾并遍历空闲区加入空闲区按分区大小排序合并分区合并分区Y与右分区相邻 Y与左分区相邻 与右分区相邻 N图5:最优适应算法及最差适应算法回收内存流程图3.3 伙伴系统设计思想24假设系统的可利用内存空间容量为2m个字(地址从0到2m-1),则在开始运行时,整个内存区是一个大小为2m的块。空闲将所有的大小相同的空闲块建于一张
15、子表中。每个子表是一个双重链表,这样的链表可能有m+1个,将这m+1个表头指针用向量结构组织成一个表,称为可利用空间表。3程序模拟把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页框的页框块。最大可以申请1024个连续页框,对应4MB大小的连续内存。每个页框块的第一个页框的物理地址是该块大小的整数倍。 2要申请一个256个页框的块,先从256个页框的链表中查找空闲块,如果没有,就去512个页框的链表中找,找到了则将页框块分为2个256个页框的块,一个分配给应用,另外一个移到256个页框的链表中。如果512个页框
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 连续 存储空间 管理 仿真 实现
链接地址:https://www.31ppt.com/p-2388284.html