深圳大学实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

深圳大学实验报告

课程名称:连续式与分页式主存管理的模拟实现

实验项目名称:进程的控制

学院:信息工程学院(软件学院)

专业:软件工程

指导教师:白鉴聪

报告人:罗城龙学号:20XX151095班级:软件1班

实验时间:20XX/6/20

实验报告提交时间:20XX/6/20

教务处制

实验目的与要求:

模拟在连续分配与分页管理两种方式下,主存空间的分配与回收,帮助学生加深了解存储器管理的工作过程。

方法、步骤:

1、根据例程,尝试采用首次适应算法、循环首次适应算法、最佳适应算法其中的一种

或多种算法实现3.2.1的动态分区分配。算法思想请参考课本P108-109的分区分配算法。

2、根据例程,尝试实现3.2.1的分区回收功能。

3、根据例程,尝试实现3.2.2的分页系统功能

4、至少完成上述三项实验内容中的一个。

5、自行设定内存总空间,大小单位为KB,分页管理需要设定每个页的大小。

6、随机设置当前内存分配状态。

7、自行设计作业队列,队列中至少要有5个作业,设定各个作业空间大小,大小要适

中。

8、输出结果要尽量详细清晰,如果输出内容比较多,可以考虑把输出结果保存到文件

中,通过文件来查看。

9、程序代码要尽量加入注释,提高程序的清晰度与可读性。

10、在实验报告中,一方面可以对实验结果进行分析,一方面可以对两种分配方式

进行比较,分析它们的优劣。

实验过程及内容:

循环首次适应算法:

关键源代码:

1.MEM * temp=NULL;//声明一个MEM的指针,用于保留循环的开始位置2.void init() //在初始化函数init()最后加一个语句,用于

{ //指针temp的初始化,因为它开始也要指向空

……… //链的起始

temp = empty;

}

3.实现关键函数

void mem_alloc_loop(MEM *pjob)

{ MEM * pr;

//循环首次适应算法

pr = temp;

while (pr != NULL)

{

if (pr->length > pjob->length)

{ pjob->head = pr->head; //直接把作业数据块插入已分配队列

alloc_insert(pjob);//插入作业数据块到已分配队列

//产生碎片,需要修改被分配空闲区的参数

//产生小碎片,pr指向它

pr->head = pr->head + pjob->length;

pr->length = pr->length - pjob->length;

temp=pr->link;//指向分配后的下一个指针

printf("!!!!!%s分配成功!!!!!\n", pjob->name);

break;

}

if (pr->length == pjob->length) //刚好满足

{ pjob->head = pr->head; //直接把作业数据块插入已分配队列

temp=pr->link;//指向分配后的下一个指针

alloc_insert(pjob);

empty_remove(pr); //从空闲队列中删除该空闲区

printf("!!!!!%s分配成功!!!!!\n", pjob->name);

break;

}

//空闲块太小,则指向下一个空闲块。

if (pr->length < pjob->length)

{

pr = pr->link;

}

}

if(pr==NULL)

{

pr=empty;

while(pr!=temp)

{

if (pr->length > pjob->length)

{ pjob->head = pr->head; //直接把作业数据块插入已分配队列

alloc_insert(pjob);//插入作业数据块到已分配队列

//产生碎片,需要修改被分配空闲区的参数

//产生小碎片,pr指向它

pr->head = pr->head + pjob->length;

pr->length = pr->length - pjob->length;

temp=pr->link;//指向分配后的下一个指针

printf("!!!!!%s分配成功!!!!!\n", pjob->name);

break;

}

if (pr->length == pjob->length) //刚好满足

{ pjob->head = pr->head; //直接把作业数据块插入已分配队列

temp=pr->link;//指向分配后的下一个指针

alloc_insert(pjob);

empty_remove(pr); //从空闲队列中删除该空闲区

printf("!!!!!%s分配成功!!!!!\n", pjob->name);

break;

}

//空闲块太小,则指向下一个空闲块。

if (pr->length < pjob->length)

{

pr = pr->link;

}

}

}

printf("!!!!!当前空闲区不能满足%s的大小%dK!\n", pjob->name, pjob->length); }

分页系统:

关键源码:

1.关键函数

bool mem_alloc(int jobno) //分配内存

{ int i=0, j=0, k=0;

jobtable[jobno][0]=jobs[jobno]/blksize;

if(jobs[jobno]%blksize!=0)jobtable[jobno][0]+=1;

// 检查当前剩余空间能否满足作业

if (jobtable[jobno][0] > freenum)

{ printf("!!!!!当前空闲区还剩%dK, 不能满足作业[%d]的大小%dK!\n", freenum*blksize,jobno,blksize*jobtable[jobno][0]);

return false;

}

else

相关文档
最新文档