操作系统课程设计--连续动态分区内存管理模拟实现_第1页
操作系统课程设计--连续动态分区内存管理模拟实现_第2页
操作系统课程设计--连续动态分区内存管理模拟实现_第3页
操作系统课程设计--连续动态分区内存管理模拟实现_第4页
操作系统课程设计--连续动态分区内存管理模拟实现_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(操作系统课程设计)连续动态分区内存管理模拟实现目录 1引言 3课程设计目的和内容3需求分析 3概要设计 3开发环境 4系统分析设计4有关了解内存管理的相关理论4内存管理概念4内存管理的必要性4内存的物理组织 4什么是虚拟内存5连续动态分区内存管理方式单一连续分配(单个分区 )5固定分区存储管理5可变分区存储管理(动态分区) 5可重定位分区存储管理5问题描述和分析6程序流程图 6数据结构体分析8主要程序代码分析9分析并实现四种内存分配算法11最先适应算11下次适应分配算法13最优适应算法16最坏适应算法 18回收内存算法 20调试与操作说明 22初始界面 22模拟内存分配 23已分配分区说明表

2、面24空闲区说明表界面24回收内存界面25重新申请内存界面26.总结与体会28参考文献 28引言操作系统是最重要的系统软件, 同时也是最活跃的学科之一。 我们通过操作系统可以理解计算机系统的资源如何组织, 操作系统如何有效地管理这些系统资源,用户如何通过操作系统与计算机系统打交道。存储器是计算机系统的重要组成部分, 近年来,存储器容量虽然一直在不断扩大, 但仍不能满足现代软件发展的需要, 因此, 存储器仍然是一种宝贵而又紧俏的资源。 如何对它加以有效的管理, 不仅直接影响到存储器的利用率, 而且还对系统性能有重大影响。 而动态分区分配属于连续分配的一种方式, 它至今仍在内存分配方式中占有一席之

3、地。课程设计目的和内容:理解内存管理的相关理论,掌握连续动态分区内存管理的理论;通过对实际 问题的编程实现,获得实际应用和编程能力编写程序实现连续动态分区内存管理方式, 该程序管理一块虚拟内存,实现 内存分配和回收功能。 分析并实现四种内存分配算法,即最先适应算法,下次 最先适应算法,最优适应算法,最坏适应算法。内存分配算法和回收算法的实现。 需求分析动态分区分配是根据进程的实际需要, 动态地为之分配内存空间。在实现动 态分区分配时,将涉及到分区分配中所用的数据结构、分区分配算法和分区的分 配和回收操作这样三个问题。常用的数据结构有动态分区表和动态分区链。 在对 数据结构有一定掌握程度的情况下

4、设计合理的数据结构来描述存储空间,实现分区存储管理的内存分配功能,应该选择最合适的适应算法(首次适应算法,最佳 适应算法,最后适应算法,最坏适应算法),在动态分区存储管理方式中主要实 现内存分配和内存回收算法,在这些存储管理中间必然会有碎片的产生,当碎片产生时,进行碎片的拼接等相关的内容概要设计本程序采用机构化模块化的设计方法,共分为四大模块。最先适应算法实现从空闲分区表的第一个表目起查找该表, 把最先能够满足要求的空闲区分配 给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲 区链)中的空闲分区要按地址由低到高进行排序。 该算法优先使用低址部分空闲 区,在低址空间造成许多

5、小的空闲区,在高地址空间保留大的空闲区。 下次适应分配算法实现该算法是最先适应算法的变种。在分配内存空间时,不再每次从表头(链首) 开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满 足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作 业。该算法能使内存中的空闲区分布得较均匀。最优适应算法实现它从全部空闲区中找出能满足作业要求的、 且大小最小的空闲分区,这种方 法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按 从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。最坏算法实现最坏适应分配算法要扫描整个空闲分区或链表, 总是挑

6、选一个最大的空闲分 区分割给作业使用。该算法要求将所有的空闲分区按其容量从大到小的顺序形成一空闲分区链,查找时只要看第一个分区能否满足作业要求。开发环境:win7 下 VC+系统分析设计:相关算法原理,算法流程图,涉及的数据结构内容都相应包含在各章节中有关了解内存管理的相关理论内存管理概念:内存管理, 是指软件运行时对计算机内存资源的分配和使用的技术。 其最主要的目的是如何高效, 快速的分配, 并且在适当的时候释放和回收内存资源。 内存不是预先划分好的,而是在系统运行的过程中建立分区 . 当作业装入主存时,根据作业所需要的主存容量查看是否有足够的主存空间, 若有则按需要分割一个分区给该作业;否

7、则令该作业等待. 分区长度不固定分区个数不固定。这种存储管理的方法克服了固定分区严重浪费主存的问题,提高了主存资源的利用率。内存管理的必要性:内存管理对于编写出高效率的 Windows 程序是非常重要的,这是因为Windows 是多任务系统, 它的内存管理和单任务的 DOS 相比有很大的差异。 DOS是单任务操作系统, 应用程序分配到内存后, 如果它不主动释放, 系统是不会对它作任何改变的;但Windows 却不然,它在同一时刻可能有多个应用程序共享内存, 有时为了使某个任务更好地执行, Windows 系统可能会对其它任务分配的内存进行移动,甚至删除。因此,我们在Windows 应用程序中使

8、用内存时,要遵循 Windows 内存管理的一些约定,以尽量提高 Windows 内存的利用率。内存的物理组织:物理地址:把内存分成若干个大小相等的存储单元,每个存储单元占 8 位,称作字节( byte ) 。每个单元给一个编号,这个编号称为物理地址(内存地址、绝对地址、实地址) 。二、物理地址空间: 物理地址的集合称为物理地址空间(主存地址空间) ,它是一个一维空间。什么是虚拟内存:虚拟内存是内存管理技术的一个极其实用的创新。它是一段程序(由操作系统调度) ,持续监控着所有物理内存中的代码段、数据段,并保证他们在运行中的效率以及可靠性, 对于每个用户层 ( user-level ) 的进程分

9、配一段虚拟内存空间。 当进程建立时, 不需要在物理内存件之间搬移数据, 数据储存于磁盘内的虚拟内存空间, 也不需要为该进程去配置主内存空间, 只有当该进程被被调用的时候才会被加载到主内存。连续动态分区内存管理方式的实现在早期的操作系统中,主存分配广泛采用连续分配方式。 连续分配方式,是指为一个用户程序分配一个连续的内存空间, 该连续内存空间指的的是物理内存。下面介绍连续分配的四种方式。单一连续分配(单个分区)最简单的存储管理方式,用于多道程序设计技术之前。 内存分为系统区和用户区,系统区由操作系统使用。用户区作为一个连续的分区分配给一个作业。分区存储管理是满足多道程序设计的最简单的一种存储管理

10、方法,它允许多 4个用户程序同时存在系统内存中,即共享内存空间。 按分区划分方式可分为固定分区和可变分区。固定分区存储管理把内存的用户区预先划分成多个分区,每个分区大小可以相同,也可以不( 分区的划分由计算机的操作员或者由操作系统给出, 并给出主存分配表) 分 区个数固定,分区的大小固定。 一个分区中可装入一个作业,作业执行过程中不会改变存放区域。 早期的旧M的OS/MFT(具有固定任务数的多道程序系统)采用了这种固定分区的方法。可变分区存储管理(动态分区)内存不是预先划分好的,而是在系统运行的过程中建立分区 . 当作业装入主存时, 根据作业所需要的主存容量查看是否有足够的主存空间, 若有则按

11、需要分割一个分区给该作业; 否则令该作业等待。 分区长度不固定分区个数不固定。 这种存储管理的方法克服了固定分区严重浪费主存的问题, 提高了主存资源的利用率。I BM操作系统O S/MVT采用可变分区存储管理。可重定位分区存储管理解决碎片问题的一种简单方法是采用可重定位分区分配. 。 其中心思想是,把不同程序,且在内存中地址不连续的想法让他们连续。例:内存中现有3 个空闲区,现有一作业到达,要求获得30k 内存空间,没有分区满足容量要求, 若想把作业装入, 可将内存中所有作业进行移动, 这样把原来分散的空闲区汇集成一个大的空闲区。 将内存中的作业进行移动使它们连接在一起把原来分散的多个小分区拼

12、接成一个大的空闲区 . 这个过程称为”紧凑”或”移动” 。 需解决的问题 : 每次”紧凑”后程序或数据装入的物理地址变化采用动态重定位。问题描述和分析系统应利用某种分配算法, 从空闲分区链表中找到所需大小的分区,如果空闲分区大小大于请求分区大小, 则从该分区中按改请求的大小划分出一块内存空间大小划分出一块内存空间分配出去, 余下的部分仍留在空闲链表中。 然后, 将分配区的首址返回给调用者。当进程运行完毕师范内存时, 系统根据回收区的首址, 从空闲区中找到相应的插入点,此时可能出现以下四种情况之一:该空闲区的上下两相邻分区都是空闲区: 将三个空闲区合并为一个空闲区。 新空闲区的起始地址为上空闲区

13、的起始地址, 大小为三个空闲区之和。空闲区合 并后,取消可用表或自由链中下空闲区的表目项或链指针, 修改上空闲区的对应 项。该空闲区的上相邻区是空闲区:将释放区与上空闲区合并为一个空闲区,其起始地址为上空闲区的起始地址,大小为上空闲区与释放区之和。合并后,修 改上空闲区对应的可用表的表目项或自由链指针。该空闲区的下相邻区是空闲区:将释放区与下空闲区合并,并将释放区的 起始地址作为合并区的起始地址。合并区的长度为释放区与下空闲区之和。同理, 合并后修改可用表或自由链中相应的表目项或链指针。两相邻区都不是空闲区:释放区作为一个新空闲可用区插入可用表或自由 链。程序流程图内存分配流程图,如图从头开始

14、查表内存回收流程图,如图开始数据结构体分析进程属性结构体typedef struct readyquechar name10;int size;readyque,*readyqueue;空闲链表结构体typedef struct idlyspaceint from;int size;idlyspace * next;idlyspace,*idly;已分配链表结构体typedef struct busyspace int from;readyque r;busyspace * next;busyspace,*busy主要程序代码分析 主 函 数 统 nn");printf("

15、法 :n");printf("法 n");printf("法 n");printf("3.法 n");printf("法 n");欢迎来到动态分区存储管理系请选择要执行的算1. 最先适应算2. 下次适应算最优适应算4.最坏适应算printf("n");printf(" 请输入您的选择:");scanf("%d",&t);int i;while(i!=5)printf("n");操作菜单如下:(请选printf(&quo

16、t;择) n");printf("1.输 入 进 程 分 配 空间 n");printf(" 2.进程撤销回收空间 n");printf(" 3.输出所有空闲分区 n");printf("4.输 出 所 有 已 分 配 分区 n");printf(" 5.退出 n");printf("n");scanf("%d",&i);switch(i)case 1:switch(t)case 1:t1=FF();break;case 2:t1=NF(

17、);break;case 3:t1=BF();break;case 4:t1=WF();break;default:printf(" 选择算法错误n");return 1;if(t1)printf("分配空间成功n");elseprintf("分配空间失败n");break;case 2:t1=recover();if(t1)printf("回收成功n");elseprintf("回收失败n");break;case 3:Isprint();break;case 4:Bsprint();brea

18、k;return 0;弟二章:分析并实现四种内存分配算法最先适应算法空闲区按地址从小到大的次序排列。分配:当进程申请大小为SIZE的内存时,系统顺序查找空闲区表(链),直到找到容量满足要求(学SIZE)的空闲区为止。从该空闲区中划出大小为SIZE的分区分配给进程,余下的部分仍作为一个空闲区,但要修改其首址和大小。优点:这种算法是尽可能地利用低地址部分的空闲区, 而尽量地保证高地址6 部分的大空闲区,有利于大作业的装入。缺点:主存低地址和高地址分区利用不均衡。在低地址部分集中了许多非常小 的空闲区碎片降低了主存的利用率。最先适应算法int FF()int t=0;”");readyque D;printf"”请输入进程名

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论