操作系统实验报告-可变分区存储管理方式的内存分配回收.doc_第1页
操作系统实验报告-可变分区存储管理方式的内存分配回收.doc_第2页
操作系统实验报告-可变分区存储管理方式的内存分配回收.doc_第3页
操作系统实验报告-可变分区存储管理方式的内存分配回收.doc_第4页
全文预览已结束

下载本文档

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

文档简介

实验三 可变分区存储管理方式的内存分配回收一实验目的(1)深入了解可变分区存储管理方式的内存分配回收的实现。二实验内容编写程序完成可变分区存储管理方式的内存分配回收,要求有内存空间分配表,并采用最优适应算法完成内存的分配与回收。三实验原理 在可变分区模式下,在系统初启且用户作业尚未装入主存储器之前,整个用户区是一个大空闲分区,随着作业的装入和撤离,主存空间被分成许多分区,有的分区被占用,而有的分区时空闲的。为了方便主存空间的分配和去配,用于管理的数据结构可由两张表组成:“已分配区表”和“未分配区表”。在“未分配表中”将空闲区按长度递增顺序排列,当装入新作业时,从未分配区表中挑选一个能满足用户进程要求的最小分区进行分配。这时从已分配表中找出一个空栏目登记新作业的起始地址和占用长度,同时修改未分配区表中空闲区的长度和起始地址。当作业撤离时已分配区表中的相应状态变为“空”,而将收回的分区登记到未分配区表中,若有相邻空闲区再将其连接后登记。可变分区的回收算法较为复杂,当一个作业撤离时,可分为4种情况:其临近都有作业(A和B),其一边有作业(A或B),其两边均为空闲区。尤其重要的是,在程序中利用“new类型T(初值列表)”申请分配用于存放T类型数据的内存空间,利用“delete指针名”释放指针所指向的内存空间。四实验部分源程序#include using namespace std;typedef struct SNode / Space Node int start,end; / 起始,结束 int length; / 长度大小 struct SNode *next; / 指向下一结点的指针* SP;SP Head=(SP)malloc(sizeof(SNode); / 全局变量,内存空间头结void DispSpace() / 显示内存空间分配情况 SP p=Head-next; coutn 空闲区说明表 n -地址-长度-n; while (p) cout start lengthnext; coutstart=14; p-length=12; p-end=26; q-start=32; q-length=96; q-end=128; / 指导书上的作业分配 Head-next=p; / 与头结点连接 p-next=q; q-next=NULL; DispSpace();void Allocation(int len) / 分配内存给新作业 SP p=Head-next,q; while (p) if (p-length next; else if (p-length len) p-start=p-start+len; p-length=p-length-len; coutnext; p-next=q-next; cout分配成功!n; DispSpace(); return; coutnext,r; / 开始地址和长度 p-end=0; int en=sta+len; while (q) if (sta = 0) / 初始地址为0 if (en = q-start) / 正好回收 q-start=0; q-length=q-end; return; else r=(SP)malloc(sizeof(SNode); r-start=sta; r-length=len; r-end=en; p-next=r; r-next=q; return; else if (p-end start en) / 上邻区 r=(SP)malloc(sizeof(SNode); r-start=sta; r-length=len; r-end=en; p-next=r; r-next=q; return; else if (p-end start = en) / 邻区相接 q-start=sta; q-length=q-end-sta; return; else if (p-end = sta) & (q-start end=en; p-length=en-p-start; return; else if (p-end=sta & q-start=en) / 邻区相接 p-end=q-end; p-length=p-end-p-start; p-next=q-next; return; else p=p-next; q=q-next; void main() Initial(); cout现在分配大小为 6K 的作业 4 申请装入主存: ; Allocation(6); / 分配时参数只有长度 /-指导书测试数据演示- cout现回收作业 3 (起址10,长度4)n; CallBack(10,4);

温馨提示

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

最新文档

评论

0/150

提交评论