计算机为动态分区形式,计算机操作系统实验报告动态分区分配方式的模拟.docx...

计算机操作系统实验报告

姓名:班级:学号:

题目:动态分区分配方式的模拟

实习 内容 简要 描述

本次实验要完成两部分内容:

一是用C语言实现对采用首次适应算法和最佳适应算法的动态分区分配过程ALLOCo

和回收过程FREE(),其中空闲分区由空闲分区链来管理,进行分配时,系统优先使用 空闲区底端空间。

二是假设初始状态下,可用内存空间为640KBO按照题目要求的作业顺序,以及各个作

业分配和回收的内存空间。 分别采用首次适应法和最佳适应法,对内存进行分配和回收,

要求每次分配和回收后显示空闲内存分区链的情况。

实验 分析 算法 介绍

本次实验通过用 C语言进行编程并调试、运行,形象地表现出动态分区的分配方式,直

观地展现了首次适应算法和最佳适应算法对内存的释放和回收方式之间的区别。加深了

我们对两种算法优缺点的理解,帮助我们了解一些数据结构和分配算法,进一步加深我

们对动态分区存储器管理方式及其实现过程的理解。主要的问题在于,如何解决两种算

法对内存的释放和回收空间的表示。

动态分区分配:又称为可变分区分配, 这种分配方式并不事先先将主存划分成一块块的 分区,而是在作业进入主存时,根据作业的大小动态地建立分区。并使分区的大小正好

适应作业的需要。因此系统中分区的大小是可变的,分区的数目也是可变的。

分区分配算法:(两者的空闲块链接方式不冋)

首次适应法:

为作业选择分区时总是按地址从高到低搜索,只要找到可以容纳该作业的空白块,

就把该空白块分配给该作业。

特点:优先利用内存中底地址部分的空闲分区(将所有空闲区,按其地址递增的顺序链

接)

最佳适应算法:

接到内存申请时,在空闲块表中找到一个不小于请求的最小空块进行分配;为作业

选择分区时总是寻找其大小最接近于作业所要求的存储区域。

特点:用最小空间满足要求 (将所有空闲区,按其大小递增的顺序联接成空闲区链 )

结果 分析

(思 考题 解 答; 错误 原因 分 析)

运行结果分析:

1、参考程序方法1中,用两个独立的程序分别实现首次适应算法和最佳适应算法的分

配和回收过程。首次适应算法,在进行内存分配时,从空闲分区链首开始顺序查找, 能满足其大小要求的空闲分区为止。然后,再按照作业大小,从该分区中划出一块 内存空间分配给请求者,余下的空闲分区仍然留在空闲分区链中。最佳适应算法,

在进行内存分配时,从空闲分区链首开始顺序查找,直至找到第一个能满足其大小 要求的空闲分区为止。如果给空闲分区大于作业的大小,则从该分区中划出一块内 存空间分配给请求者,将剩余空闲区仍然留在空闲区分链中。当作业运行完成时, 对已使用完的分区进行 回收,系统根据回收分区的大小及首地址,在空闲分区链中 检查是否有邻接的空闲区,如有相邻空闲区则合并成一个大的空闲区,然后修改有 关的分区状态信息。

2、参考程序方法2中,只用了一个程序来实现整个操作内容:首先确定内存空间分配 表;然后编写主函数实现所需功能;最后分别采用首次和最佳适应算法完成内存空

结果 分析

(思 考题 解 答; 错误 原因 分 析)

间的分配和回收。

思考题解答:

1、 首次适应算法分配时从表头指针开始查找可利用空间表,将找到的第一个大小不小

于“请求”的空闲块的一部分分配给用户。可利用空间表本身既不按节点的初始地址有

序,也不按节点的大小有序。用户释放内存,回收时只是将空闲块插入在链表的表头即

可。

最佳适应算法将可利用空间表中一个大小不小于“请求”且最接近“请求”的

空闲块的一部分分配给用户。分配与回收都需要对可利用空间表从头至尾查询一遍。为

了避免每次分配都要查询整个链表,通常要求节点从大到小排序,由此只需找到第一个

足够大的空闲块即可予以分配。但回收时,必须把回收的空闲块放置在符合大小顺序关

系的链表位置。

因此,首次适应算法分配和回收的速度更快,用时更少。

2、经过一段时间的分配回收后,内存中存在很多很小的空闲块。它们每一个都很小,

不足以满足分配要求;但其总和满足分配要求。这些空闲块被称为碎片。造成存储资源 的浪费,我们可以通过紧凑技术来解决, 即通过在内存移动程序, 将所有小的空闲区域 合并为大的空闲区域(紧缩技术,紧致技术,浮动技术,搬家技术)。

错误原因:

方法1:直接运行便可得到正确的结果。

方法2:参考程序直接运行会出现Ilerrors ,需改正才能正常运行,其涉及错误有:

①用 getch();缺少头函数:#include VConio.h> ;②在程序一开始处缺少函数疋义 int WUm(IOngretUrn Pointer,lOng size,char name[]);:③疋义类型出错,应将Iong

(*test_alloc)();改为 Iong (*te

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机类课程实验报告 (操作系统实验) 实验 二 "实验名称 "动态分区分配方式模拟 " "实验日期 " "实验成绩 " " "实验目的 "(给出本次实验所涉及并要求掌握的知识点及实验内容具体描" "、要求及 "述) " "内容 "实验目的: " " "了解动态分区分配方式中使用的数据结构和分配算法,并进一" " "步加深对动态分区存储管理方式及其实现过程的理解。 " " "实验内容: " " "用C语言分别实现采用首次适应算法最佳适应算法的动态分 " " "区分配过程alloc()和回收过程free()。其中,空闲分区通过 " " "空闲分区链来管理;在进行内存分配时,系统优先使用空闲区" " "低端的空间。 " " "假设初始状态下可用的内存空间为640KB,并有下列的请求序 " " "列: " " "*作业1申请130KB " " "*作业2申请60KB " " "*作业3申请100KB " " "*作业2释放60KB " " "*作业4申请200KB " " "*作业3释放100KB " " "*作业1释放130KB " " "*作业5申请140KB " " "*作业6申请60KB " " "*作业7申请50KB " " "*作业6释放60KB " " "请分别采用首次适应算法最佳适应算法进行内存块的分配和" " "回收,要求每次分配和回收后显示出空闲内存分区链的情况。" "实验环境 "(列出本次实验所使用的平台和相关软件) " " "地点: " " "使用软件:Visual C++ 6.0 " "调试过程 "( 程序源代码截图。详细记录在调试过程中出现的问题及解 " "及实验结 "决方法,截图记录实验执行的结果。) " "果 "#include<iostream.h> " " "#include<stdlib.h> " " "#define Free 0 //空闲状态 " " "#define Busy 1 //已用状态 " " "#define OK 1 //完成 " " "#define ERROR 0 //出错 " " "#define MAX_length 640 //最大内存空间为32767KB " " "typedef int Status; " " "int n=0; " " "typedef struct freearea//定义一个空闲区说明表结构 " " "{ " " "int ID; //分区号 " " "long size; //分区大小 " " "long address; //分区地址 " " "int state; //状态 " " "}ElemType; " " " " " "//---------- 线性表的双向链表存储结构 ------------ " " "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 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; " " "block_last->data.address=0; " " "block_last->data.size=MAX_length; " " "block_last->da

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值