好文档 - 专业文书写作范文服务资料分享网站

存储器的分配与回收算法实现

天下 分享 时间: 加入收藏 我要投稿 点赞

实验内容:

模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。

采用最先适应法、最佳适应法、最坏适应法分配主存空间。

当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。

当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。

运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。

实验要求:

详细描述实验设计思想、程序结构及各模块设计思路; 详细描述程序所用数据结构及算法; 明确给出测试用例和实验结果;

为增加程序可读性,在程序中进行适当注释说明;

认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等; 实验报告撰写要求结构清晰、描述准确逻辑性强;

【实验过程记录(源程序、测试用例、测试结果及心得体会等)】

#include #include #define NULL 0

#define LEN1 sizeof(struct job)//作业大小

#define LEN2 sizeof(struct idle)//空闲区单元大小

#define LEN3 sizeof(struct allocate)//已分配区单元大小 int SPACE=100;//定义内存空间大小 int ORIGI=1;//定义内存起始地址 struct job//定义作业 {

int name; int size; int address; };

struct idle//定义空闲区 {

int size; int address;

struct idle *next; };

struct allocate//定义已分配区 {

int name; int size; int address;

struct allocate *next;

};

struct idle *creatidle(void)//建立空闲表 {

struct idle *head; struct idle *p1;

p1=(struct idle*)malloc(LEN2); p1->size=SPACE; p1->address=ORIGI; p1->next=NULL; head=p1;

return(head); }

struct allocate *creatallocate(void)//建立已分配表 {

struct allocate *head; head=NULL; return(head); }

struct job *creatjob(void)//建立作业 {

struct job *p;

p=(struct job*)malloc(LEN1);

printf(\请输入要运行的作业的名称与大小:\\n\ scanf(\ return(p); }

struct idle *init1(struct idle *head,struct job *p)//首次适应算法分配内存 {

struct idle *p0,*p1; struct job *a; a=p; p0=head; p1=p0;

while(p0->next!=NULL&&p0->sizesize) {

p0=p0->next; }

if(p0->size>a->size) {

p0->size=p0->size-a->size; a->address=p0->address;

p0->address=p0->address+a->size; } else {

printf(\无法分配\\n\ }

return(head); }

struct idle *init2(struct idle *head,struct job *p)//最优 {

struct idle *p0,*p1; struct job *a; a=p; p0=head;

if(p0==NULL) {

printf(\无法进行分配!\\n\ }

while(p0->next!=NULL&&p0->sizesize) {

p0=p0->next; }

if(p0->size>a->size) {

p1=p0;

p0=p0->next; } else {

printf(\无法分配!\\n\ }

while(p0!=NULL) {

if(p0->size>p1->size) {

p0=p0->next; }

else if((p0->sizesize)&&(p0->size>a->size)) {

p1=p0;

p0=p0->next; } }

p1->size=(p1->size)-(a->size); a->address=p1->address;

p1->address=(p1->address)+(a->size); return(head); }

struct idle *init3(struct idle *head,struct job *p)//最差

{

struct idle *p0,*p1; struct job *a; a=p; p0=head; if(p0==NULL) {

printf(\无法进行分配!\

}

while(p0->next!=NULL&&p0->sizesize) {

p0=p0->next; }

if(p0->size>a->size) {

p1=p0;

p0=p0->next; }

else {

printf(\无法分配!\\n\ }

while(p0!=NULL) {

if(p0->sizesize) {

p0=p0->next; }

else if(p0->size>p1->size) {

p1=p0;

p0=p0->next; } }

p1->size=(p1->size)-(a->size); a->address=p1->address;

p1->address=(p1->address)+(a->size); return(head); }

struct allocate *reallocate(struct allocate *head,struct job *p)//重置已分配表 {

struct allocate *p0,*p1,*p2;//*p3,*p4; struct job *a; //struct idle *b; a=p;

p0=(struct allocate*)malloc(LEN3); p1=(struct allocate*)malloc(LEN3); if(head==NULL) {

p0->name=a->name; p0->size=a->size; p0->address=ORIGI; p0->next=NULL; head=p0; } Else {

p1->name=a->name; p1->size=a->size;

p1->address=a->address; p2=head;

while(p2->next!=NULL) {

p2=p2->next; } p2->next=p1; p1->next=NULL; }

return(head); }

struct allocate *del(struct allocate *head,struct job *p)//删除指定的作业 {

struct job *p1;

struct allocate *p2,*p3; p2=head; p1=p;

while((p1->name!=p2->name)&&(p2->next!=NULL)) {

p3=p2;

p2=p2->next; }

if(p1->name==p2->name) {

if(p2==head)

head=p2->next; else

p3->next=p2->next; }

return(head); }

struct job *delejob(struct allocate *head)

存储器的分配与回收算法实现

实验内容:模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。采用最先适应法、最佳适应法、最坏适应法分配主存空间。当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。当一个
推荐度:
点击下载文档文档为doc格式
9joi36fdhp2wkqq4mj6h371qz5d0ci00kp2
领取福利

微信扫码领取福利

微信扫码分享