内存的申请和释放

上传人:xzh****18 文档编号:34517811 上传时间:2018-02-25 格式:DOC 页数:18 大小:288.50KB
返回 下载 相关 举报
内存的申请和释放_第1页
第1页 / 共18页
内存的申请和释放_第2页
第2页 / 共18页
内存的申请和释放_第3页
第3页 / 共18页
内存的申请和释放_第4页
第4页 / 共18页
内存的申请和释放_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《内存的申请和释放》由会员分享,可在线阅读,更多相关《内存的申请和释放(18页珍藏版)》请在金锄头文库上搜索。

1、计 算 机 学 院 网 络 工 程 专 业操 作 系 统 课 程 设 计题 目: 内存的申请和释放 班 级: 网工 11102 班 姓 名:郭阳 学 号: 201117030216 同组人姓名: 起 迄 日 期: 第一周,第二周 课程设计地点: E3A513 指导教师: 贺玉才 评阅意见:成绩评定:评阅人: 日期:完成日期:2014 年 3 月目录一、概述 .11、设计目的 .12、开发环境 .1二、设计要求 .1三、实验基本原理 .1四、程序流程图 .21、整体程序流程图 .32、内存分配 ALLOCATE()流程图 .4五、源程序 .51、数据结构 .52、主要功能函数 .53、源程序代码

2、 .6六、运行结果 .161、测试用例与程序运行结果截图 .162、内存分配正确测试 .183、内存回收错误测试 .184、内存回收正确测试用例 .18七、总结 .21八、参考文献 .21一、概述1、设计目的了解操作系统的内存分配的方法2、开发环境WINDOWS 环境 Visual C+6.0 二、设计要求定义一个自由存储块链表,按块地址排序,表中记录块的大小。当请求分配内存时,扫描自由存储块链表,知道找到一个足够大的可供分配的内存块,若找到的块的大小正好等于所请求的大小时,就把这一块从自由链表中取下来,返回给申请者。若找到的块太大,即对其分割,并从该块的高地址不分往低地址部分分割,取出大小合

3、适的块返还给申请者,愈小的低地址部分留在链表中。若找不到足够大的块,就从操作系统中请求另外一个足够大的内存区域,并把它连接到自由块链表中,然后再继续搜索。释放存储块也要搜索自由链表,目的是找到适当的位置将要释放的块插进去,如果被释放的块的任何一边与链表中的某一块临接,即对其进行合并操作,直到没有合并的临接块为止,这样可以防止存储空间变得零碎。 。 三、实验基本原理分区存储管理是给内存中的进程划分适当大小的存储区,以连续存储各进程的程序和数据,使各进程能并发地执行。最优适应分配算法扫描整个未分配区表或链表,从空闲区中挑选一个能满足用户进程要求的最小分区进行分配。在可变分区模式下,在系统初启且用户

4、作业尚未装入主存储器之前,整个用户区是一个大空闲分区,随着作业的装入和撤离,主存空间被分成许多分区,有的分区被占用,而有的分区时空闲的。为了方便主存空间的分配和去配,用于管理的数据结构可由两张表组成:“已分配区表”和“未分配区表” 。在“未分配表中”将空闲区按长度递增顺序排列,当装入新作业时,从未分配区表中挑选一个能满足用户进程要求的最小分区进行分配。这时从已分配表中找出一个空栏目登记新作业的起始地址和占用长度,同时修改未分配区表中空闲区的长度和起始地址。当作业撤离时已分配区表中的相应状态变为“空” ,而将收回的分区登记到未分配区表中,若有相邻空闲区再将其连接后登记。可变分区的回收算法较为复杂

5、,当一个作业撤离时,可分为 4 种情况:其临近都有作业(A 和 B),其一边有作业(A 或 B) ,其两边均为空闲区。尤其重要的是,在程序中利用“ new 类型 T(初值列表) ”申请分配用于存放 T 类型数据的内存空间,利用 “delete 指针名”释放指针所指向的内存空间。 四、程序流程图1、整体程序流程图2、内存分配 allocate()流程图五、源程序1、数据结构(1)内存块struct space /定义内存空间结构体long startaddress;long length;struct space *next;space *pbc; (2) 、作业块struct work /定义

6、进程结构体 char name20;long startaddress;long length;struct work *next;work *S; 2、主要功能函数allocate() : 实现内存分配,并在当中调用 display(pbc),以及 display(S) 两个函数显示内存分配完后的空闲块链表和进程链表情况。requireback(): 实现内存回收,在满足情况的条件下调用 allocate()对用户申请的内存块进行回收并在当中调用 display(pbc),以及 display(S)显示内存回收完后的空闲块链表和进程链表情况。 callback(): 按内存回收时的四种情况对

7、内存进行回收。display(pbc): 对空闲块链表中的空闲块进行从小到大排序并显示空闲链情况。display(S): 对进程链表中的进程进行从小到大排序并显示进程链情况。main(): 创建并初始化空闲块链表和进程链链表,用户选择操作功能3、源程序代码#include #include#include struct space /定义内存空间结构体long startaddress;long length;struct space *next;space *pbc; /申明结构体指针struct work /定义进程结构体char name20;long startaddress;long length;struct work *next;work *S; /申明结构体指针void callback(work *r); /申明 callback()函数原型void display(space *pbc); /申明 display()函数原型void display(work *S); void allocate()

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

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号