(完整word版)固定分区存储管理 操作系统

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

昆明理工大学信息工程与自动化学院学生实验报告

(2013 —2014 学年第一学期)

课程名称:操作系统开课实验室: 2014年 11 月 6日

年级、专业、班学号姓名成绩实验项目名称固定分区存储管理指导教师

教师评语该同学是否了解实验内容与要求:A.了解□ B.基本了解□ C.不了解□

设计思想或流程图是否正确: A.正确□ B.基本正确□ C.较差□

该同学的实验能力: A.强□ B.中等□ C.差□

该同学的实验是否达到要求: A.达到□ B.基本达到□ C.未达到□

实验报告是否规范: A.规范□ B.基本规范□ C.不规范□

是否有运行结果与分析: A.详细□ B.一般□ C.没有□

是否有总结与体会: A.详细□ B.一般□ C.没有□

教师签名:

年月日

注:报告内容按下列的要求进行。

一、实验目的

1.通过编写固定分区存储管理的模拟程序,加深对操作系统存储管理功能中的固定分区管理方

式、主存分配表等相应知识的理解。

2.通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解,熟悉可变分区存储管理的

内存分配和回收。

二、实验题目

设计一个固定分区分配的存储管理方案,并模拟实现分区的分配和回收过程。

必须建立分区表,记录空闲区与占用区的状况。流程图按选定的算法自己完成。三、算法设计的思想或流程图

本算法将内存的用户区分成大小相等的四个的分区,设一张分区说明表用来记录分区的大小、起始地址和分区的状态,当系统为某个作业分配主存空间时,根据所需要的内存容量,在分区表中找到一个足够大的空闲分区分配给它,然后将此作业装入内存。如果找不到足够大的空闲分区,则这个作业暂时无法分配内存空间,系统将调度另一个作业。当一个作业运行结束时,系统将回收改作业所占据的分区并将该分区改为空闲。

四、源程序代码

#include

#include

#include

#define NUM 4

#define alloMemory(type) (type*)malloc(sizeof(type)) struct partiTab

{

int no;

int size;

int firstAddr;

char state;

}parTab[NUM];

typedef struct partiTab PARTITAB;

typedef struct jcb {

char name[10];

int size;

struct jcb* link;

}JCB;

typedef struct

{

JCB *front,*rear;

}jcbQue;

jcbQue *jcbReadyQue;

void AllocateMemory(int size);

void createTab();

void checkTab();

void recycleMemory(int i);

void AllocateMemory(int size)

{

for(int i=0;i

{

PARTITAB p=parTab[i];

if(p.state='N' && p.size>size)

parTab[i].state='Y';

else

printf("没有空闲分区,无法分配内存!\n");

}

}

void createTab()

{

for(int i=1;i<=NUM;i++)

{

//getPartiTab(PARTITAB);

parTab[i-1].no=i;

parTab[i-1].size=20;

parTab[i-1].firstAddr=21;

parTab[i-1].state='N';

}

}

void checkTab()

{

printf("分区号\t大小\t起址\t状态\n");

for(int i=0;i

{

printf("%d\t",parTab[i].no);

printf("%d\t",parTab[i].size);

printf("%d\t",parTab[i].firstAddr);

printf("%c\t",parTab[i].state);

printf("\n");

} }

void recycleMemory(int i)

{

parTab[i-1].state='N';

}

int main(int argc, char* argv[])

{

createTab();

checkTab();

printf("请按任意键继续:\n");

getchar();

printf("每个分区装入一道作业:\n");

for(int i=0;i

{

AllocateMemory((i+1)*3);

}

checkTab();

printf("请按任意键继续:\n");

getchar();

printf("假如一段时间后,其中一个作业结束,回收给它分配的分区(假如该作业在第2分区)\n");

recycleMemory(2);

checkTab();

printf("请按任意键继续:\n");

getchar();

printf("接着,从外存后备作业队列中选择一个作业装入该分区(假如该作业大小为

10)\n");

AllocateMemory(10);

checkTab();

return 0;

}

五、运行结果与分析

固定分区式分配是最简单的一种可运行多道程序的存储管理方式。将内存用户空间划分为若干个固定大小的区域,在每个分区中只装入一道作业,把用户空间划分为几个分区,便允许有几道作业并发运行。当有一空间时,便可以再从外存的后备作业队列中选择一个适当大小的作业装入该分区,当该作业结束时,又可再从后备作业队列中找出另一作业调入该分区。

六、总结体会

相关文档
最新文档