实用标准文案
实验内容:
模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。
采用最先适应法、最佳适应法、最坏适应法分配主存空间。
当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。
当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。
运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。
实验要求:
详细描述实验设计思想、程序结构及各模块设计思路; 详细描述程序所用数据结构及算法; 明确给出测试用例和实验结果;
为增加程序可读性,在程序中进行适当注释说明;
认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等; 实验报告撰写要求结构清晰、描述准确逻辑性强;
【实验过程记录(源程序、测试用例、测试结果及心得体会等)】
精彩文档
实用标准文案
#include
#define LEN1 sizeof(struct job)//作业大小 #define LEN2 sizeof(struct idle)//空闲区单元大小 #define LEN3 sizeof(struct allocate)//已分配区单元大小 int SPACE=100;//定义内存空间大小 int ORIGI=1;//定义内存起始地址 struct job//定义作业 { };
struct idle//定义空闲区 { };
struct allocate//定义已分配区 {
int size; int address; struct idle *next; int name; int size; int address;
精彩文档
实用标准文案
};
int name; int size; int address;
struct allocate *next;
struct idle *creatidle(void)//建立空闲表 { }
struct allocate *creatallocate(void)//建立已分配表 { }
struct allocate *head; head=NULL; return(head); 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 job *creatjob(void)//建立作业 { }
struct idle *init1(struct idle *head,struct job *p)//首次适应算法分配内存 {
struct idle *p0,*p1; struct job *a; a=p; p0=head; struct job *p;
p=(struct job*)malloc(LEN1);
printf(\请输入要运行的作业的名称与大小:\\n\scanf(\return(p);
p1=p0;
while(p0->next!=NULL&&p0->size
if(p0->size>a->size) {
p0->size=p0->size-a->size; p0=p0->next;
精彩文档
实用标准文案
}
a->address=p0->address;
p0->address=p0->address+a->size; } else { }
return(head);
printf(\无法分配\\n\
struct idle *init2(struct idle *head,struct job *p)//最优 {
struct idle *p0,*p1; struct job *a; a=p; p0=head;
if(p0==NULL) {
}
while(p0->next!=NULL&&p0->size
p0=p0->next;
printf(\无法进行分配!\\n\
精彩文档
实用标准文案
}
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->size
}
{ }
p1=p0; p0=p0->next;
精彩文档