- 1、本文档共15页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统实验—存储分配? HYPERLINK JavaScript:d=document;t=d.selection?(d.selection.type!=None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(saveit=window.open(/storeit.aspx?t=+escape(d.title)+u=+escape(d.location.href)+c=+escape(t),saveit,scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes));saveit.focus(); \o 收藏到我的网摘中,并分享给我的朋友 收藏
[实验目的]
1.了解动态分区分配方式中使用的数据结构和分配算法,并进一步加深对动态分区存储管理方式及实现过程的理解。
2.通过对页面、页表、地址转换和页面转换过程的模拟,加深对请求调页系统的原理和实现过程的理解。
[实验内容和步骤]
-、动态分区分配方式的模拟
1.??用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程alloc()和回收过程free()。其中,空闲分区通过空闲分区链管理;在进行内存分配时,系统优先使用空闲区低端的空间。
2.??假设初始状态下,可用的内在空间为640KB,并有下列的请求序列:
作业1申请130KB
作业2申请60KB
作业3申请100KB
作业2释放60KB
作业4申请200KB
作业3释放100KB
作业1释放130KB
作业5申请140KB
作业6申请60KB
作业7申请50KB
作业6释放60KB
请分别采用首次适应算法和最佳适应算法进行内存块的分配和回收,要求每次分配和回收后显示出空闲内存分区链的情况。
3.??源代码如下:
//********?????????????动态分区分配方式的模拟???????????*********
#includeiostream.h
#includestdlib.h
#define Free 0 //空闲状态
#define Busy 1 //已用状态
#define OK 1????//完成
#define ERROR 0 //出错
#define MAX_length 640 //最大内存空间为640KB
typedef int Status;
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-data.ID=0;
?????
文档评论(0)