2022年操作系统可变分区存储管理 .pdf

上传人:Q****o 文档编号:25943594 上传时间:2022-07-14 格式:PDF 页数:15 大小:1.13MB
返回 下载 相关 举报
2022年操作系统可变分区存储管理 .pdf_第1页
第1页 / 共15页
2022年操作系统可变分区存储管理 .pdf_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《2022年操作系统可变分区存储管理 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统可变分区存储管理 .pdf(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、实验二、可变分区存储管理一、实验目的熟悉主存的分配与回收。理解在不同的存储管理方式下,如何实现主存空间的分配与回收。 掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理方式及其实现过程。二、实验内容和要求主存的分配和回收的实现是与主存储器的管理方式有关的。所谓分配,就是解决多道作业或多进程如何共享主存空间的问题。所谓回收,就是当作业运行完成时将作业或进程所占的主存空间归还给系统。可变分区管理是指在处理作业过程中建立分区, 使分区大小正好适合作业的需求,并且分区个数是可以调整的。当要装入一个作业时, 根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业

2、;若无,则作业不能装入,作业等待。随着作业的装入、完成,主存空间被分成许多大大小小的分区,有的分区被作业占用, 而有的分区是空闲的。 实验要求使用可变分区存储管理方式,分区分配中所用的数据结构采用空闲分区表和空闲分区链来进行,分区分配中所用的算法采用首次适应算法、最佳适应算法、 最差适应算法三种算法来实现主存的分配与回收。同时,要求设计一个实用友好的用户界面,并显示分配与回收的过程。 同时要求设计一个实用友好的用户界面,并显示分配与回收的过程。三、实验主要仪器设备和材料实验环境硬件环境: IBM-PC或兼容机软件环境: VC+ 6.0 四、实验原理及设计分析某系统采用可变分区存储管理,在系统运

3、行当然开始,假设初始状态下,可用的内存空间为 640KB ,存储器区被分为操作系统分区(40KB)和可给用户的空间区( 600KB) 。 (作业 1 申请 130KB 、作业 2 申请 60KB 、作业 3 申请100KB 、作业 2 释放 60KB 、作业 4 申请 200KB 、作业 3 释放 100KB 、作业 1 释放 130KB 、 作业 5申请 140KB 、 作业 6 申请 60KB 、 作业 7申请 50KB )名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,

4、共 15 页 - - - - - - - - - 当作业 1 进入内存后,分给作业1(130KB) ,随着作业 1、2、3 的进入,分别分配 60KB 、100KB ,经过一段时间的运行后,作业2 运行完毕,释放所占内存。此时,作业 4 进入系统,要求分配 200KB内存。作业 3、1 运行完毕,释放所占内存。此时又有作业5 申请 140KB ,作业 6 申请 60KB ,作业 7 申请50KB 。为它们进行主存分配和回收。1、采用可变分区存储管理,使用空闲分区链实现主存分配和回收。2 空闲分区链:使用链指针把所有的空闲分区链成一条链,为了实现对空闲分区的分配和链接,在每个分区的起始部分设置状

5、态位、分区的大小和链接各个分区的前向指针,由状态位指示该分区是否分配出去了;同时,在分区尾部还设置有一后向指针,用来链接后面的分区;分区中间部分是用来存放作业的空闲内存空间,当该分区分配出去后,状态位就由“ 0”置为“ 1” 。设置一个内存空闲分区链,内存空间分区通过空闲分区链来管理, 在进行内存分配时, 系统优先使用空闲低端的空间。设计一个空闲分区说明链,设计一个某时刻主存空间占用情况表,作为主存当前使用基础。初始化空间区和已分配区说明链的值,设计作业申请队列以及作业完成后释放顺序,实现主存的分配和回收。要求每次分配和回收后显示出空闲内存分区链的情况。 把空闲区说明链的变化情况以及各作业的申

6、请、释放情况显示打印出来。2.采用可变分区存储管理,分别采用首次适应算法、最佳适应算法和最坏适应算法实现主存分配和回收。3、主存空间分配(1)首次适应算法在该算法中,把主存中所有空闲区按其起始地址递增的次序排列。在为作业分配存储空间时,从上次找到的空闲分区的下一个空闲分区开始查找,直到找到第一个能满足要求的空闲区,从中划出与请求的大小相等的存储空间分配给作业,余下的空闲区仍留在空闲区链中。(2)最佳适应算法在该算法中, 把主存中所有空闲区按其起始地址递增的次序排列。在为作业分配存储空间时, 从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲区且该空闲区的大小比其他满足要

7、求的空闲区都小,从中划出与请求的大小相等的存储空间分配给作业,余下的空闲区仍留在空闲区链中4、主存空间回收当一个作业执行完成撤离时,作业所占的分区应该归还给系统。归还的分区如果与其它空闲区相邻,则应合成一个较大的空闲区,登记在空闲区说明链中,此时,相邻空闲区的合并问名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 15 页 - - - - - - - - - 题,要求考虑四种情况:(1)释放区下邻空闲区(低地址邻接)(2)释放区上邻空闲区(高地址邻接)(3)释放区上下都与空

8、闲区邻接(4)释放区上下邻都与空闲区不邻接五、测试及实现效果1、首次适应算法分配内存名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 15 页 - - - - - - - - - 分配结果名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 15 页 - - - - - - - - - 回收内存名师资料总结 - - -精品资料欢迎下载 - - - - - -

9、 - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 15 页 - - - - - - - - - 2、最佳适应算法分配内存查看内存名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 15 页 - - - - - - - - - 释放内存名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 15 页 - -

10、 - - - - - - - 六、附录(实验代码)#include #include #include #include #include #define Free 0 /空闲状态#define Busy 1 /已用状态#define OK 1 /完成#define ERROR 0 /出错#define Status int; int n=0; /判断是否要开创空间表long MAX_length;/最大内存空间名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 15 页 -

11、 - - - - - - - - typedefstructFreeArea/定义一个空闲区说明表结构 int number; /分区号long size; /分区大小long address; /分区地址int state; /状态ElemType; / 线性表的双向链表存储结构typedefstructDuLNode ElemType data; structDuLNode *prior; /前趋指针structDuLNode *next; /后继指针DuLNode,*DuLinkList; DuLinkList first; /头结点DuLinkList last; /尾结点Status

12、 allocation(int);/内存分配Status free(int); /内存回收Status FirstFit(int,int);/首次适应算法Status BestFit(int,int); /最佳适应算法void show();/查看分配Status InitList();/开创空间表Status InitList()/开创带头结点的内存空间链表 first=(DuLinkList)malloc(sizeof(DuLNode); last=(DuLinkList)malloc(sizeof(DuLNode); first-prior=NULL; first-next=last;

13、last-prior=first; last-next=NULL; last-data.address=0; last-data.size=MAX_length; last-data.number=0; last-data.state=Free; return OK; / 分 配 主 存Status allocation(intch) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 15 页 - - - - - - - - - intnumber,request; pri

14、ntf(请输入作业 ( 分区号 ):); scanf(%d,&number); printf(请输入需要分配的主存大小(单位:KB):); scanf(%d,&request); if(requestdata.number=number; DLL-data.size=request; DLL-data.state=Busy; DuLNode *p=first-next; while(p) if(p-data.state=Free & p-data.size=request)/有大小恰好合适的空闲块 p-data.state=Busy; p-data.number=number; return

15、OK; break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 15 页 - - - - - - - - - if(p-data.state=Free & p-data.sizerequest)/有空闲块能满足需求且有剩余 DLL-prior=p-prior; DLL-next=p; DLL-data.address=p-data.address; p-prior-next=DLL; p-prior=DLL; p-data.address=DLL-data.add

16、ress+DLL-data.size; p-data.size-=request; return OK; break; p=p-next; return ERROR; / 最佳适应算法Status BestFit(intnumber,int request) intch; /记录最小剩余空间DuLinkList DLL=(DuLinkList)malloc(sizeof(DuLNode); DLL-data.number=number; DLL-data.size=request; DLL-data.state=Busy; DuLNode *p=first-next; DuLNode *q=N

17、ULL; / 记录最佳插入位置while(p) /初始化最小空间和最佳位置 if(p-data.state=Free &(p-data.sizerequest | p-data.size=request) ) q=p; ch=p-data.size-request; break; p=p-next; while(p) if(p-data.state=Free & p-data.size=request)/空闲块大小恰好合适名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共

18、15 页 - - - - - - - - - p-data.number=number; p-data.state=Busy; return OK; break; if(p-data.state=Free & p-data.sizerequest)/空闲块大于分配需求 if(p-data.size-requestdata.size-request;/更新剩余最小值 q=p;/更新最佳位置指向 p=p-next; if(q=NULL) return ERROR;/没有找到空闲块else / 找到了最佳位置并实现分配 DLL-prior=q-prior; DLL-next=q; DLL-data.

19、address=q-data.address; q-prior-next=DLL; q-prior=DLL; q-data.address+=request; q-data.size=ch; return OK; / 释放内存Status free(int number) DuLNode *p=first; while(p) if(p-data.number=number) p-data.state=Free; p-data.number=Free; if(p-prior-data.state=Free)/与前面的空闲块相连 p-prior-data.size+=p-data.size; 名师

20、资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 15 页 - - - - - - - - - p-prior-next=p-next; p-next-prior=p-prior; if(p-next-data.state=Free)/与后面的空闲块相连 p-data.size+=p-next-data.size; p-next-next-prior=p; p-next=p-next-next; break; p=p-next; return OK; / 显示内存存分配情况v

21、oid show() printf(* 内 存 分 配 情 况 *n); DuLNode *p=first-next; while(p) printf(分 区 号:); if(p-data.number=Free) printf(Freen); else printf(%dn,p-data.number); printf(起始地址: %ldn,p-data.address); printf(分区大小: %ldKBn,p-data.size); printf(状态:); if(p-data.state=Free) printf(空 闲n); else printf(已分配 !n); printf

22、(-n); p=p-next; / 主 函 数void main() /system(color 1D); printf(n); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 15 页 - - - - - - - - - printf(- 动态内存分配管理-n); printf(n); intch,d=0;/算法选择标记printf(- 1.首次适应算法-n); printf(- 2.最佳适应算法-n); printf(- 0.退出-n); printf(n); pr

23、intf(-n); printf(请选择分配算法: ); scanf(%d,&ch); printf(n); printf(请输入内存空间的大小 ( 单位:KB) :); scanf(%ld,&MAX_length); printf(n); if(ch=0|ch=1|ch=2) d+; while(d=0) printf(数字不正确,请选择0-2 之间的数字 n); scanf(%d,&ch); if(ch=0|ch=1|ch=2) d+; if(ch=0) exit(0); if(n=0) InitList(); /开创空间表int selection; /操作选择标记while(1) pr

24、intf(- 动态内存分配管理-n); printf(n); printf(- 1: 分配内存 2: 释放内存-n); printf(- 3: 查看分配 0: 返回-n); printf(n); printf(-n); printf(请输入您的操作:); scanf(%d,&selection); if(selection=1) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 15 页 - - - - - - - - - allocation(ch); / 分配内存n+

25、; else if(selection=2) / 释放内存 int number; printf(请输入您要释放的分区号:); scanf(%d,&number); free(number); n+; else if(selection=3) show();/显示主存n+; else if(selection=0) main(); /退出 n+; else /输入操作有误 printf(输入有误,请重试 !n); continue; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 15 页 - - - - - - - - -

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

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁