C语言 固定分区存储管理实验

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

实验三固定分区存储管理

一、实验目的

通过编写固定分区存储管理的模拟程序,加深对操作系统存储管理功能中的固定分区管理方式、主存分配表等相应知识的理解。

二、实验内容

1、实现固定分区存储管理方式下存储空间的分配和去配。

2、已知当前内存分配表如下:

分区号起始地址长度占用标志

1 0K 10K 0

2 10K 18K J1

3 28K 16K J2

4 44K 6K 0

5 50K 21K 0

6 71K 30K 0

3、有若个作业申请或释放内存空间,请求如下:

(1)作业J3请求资源,申请5K大小的内存空间;

(2)作业J4申请33K大小的内存空间;

(3)作业J1执行完毕,释放空间

4、编写程序实现相应存储空间的分配和去配,若请求成功,修改主存分配表,并输出该表,若请求不能满足,输出“分配失败”。(其中不考虑空闲分区的移动)。

三、实验步骤

实验程序如下:

#include

#define N 50

typedef struct subarea //分区结构体

{

int start;

int longth;

int work;

}subarea;

subarea s[N];

void distribute1(int n,int w1,int size) //申请空间

{

int i=0,j;

while(i

{

if(s[i].longth>size && s[i].work==0)

{

s[i].work=w1;

printf("分区号起始地址长度占用标志\n");

for(j=0;j

printf("%5d %5d %5d %5d\n",j+1,s[j].start,s[j].longth,s[j]. work);

break;

}

i++;

}

if(i==n) printf("分配失败\n");

}

void distribute2(int n,int w2) //释放空间

{

int i;

for(i=0;i

if(s[i].work==w2) s[i].work=0;

printf("分区号起始地址长度占用标志\n");

for(i=0;i

printf("%5d %5d %5d %5d\n",i+1,s[i].start,s[i].longth ,s[i].work);

}

void main() //主函数

{

int i,n,w1,w2,size,k;//k=1表示为申请内存,k=0表示释放内存。请说明作业是申请还是释放空间,

printf("请输入分区个数:");

scanf("%d",&n);

printf("请输入分区说明表:");

for(i=0;i

scanf("%d%d%d",&s[i].start,&s[i].longth,&s[i].work);

printf("输入k值:");

scanf("%d",&k);

if(k==1)

{

printf("请输入要申请的作业:");

scanf("%d",&w1);

printf("请输入要申请的空间大小:");

scanf("%d",&size);

distribute1(n,w1,size);

}

if(k==0)

{

printf("请输入要完成的作业:");

scanf("%d",&w2);

distribute2(n,w2);

}

}

四、实验结果

(1)作业J3请求资源,申请5K大小的内存空间,结果如下:

(2)作业J4申请33K大小的内存空间,实验结果如下:

(3)作业J1执行完毕,释放空间,实验结果如下:

相关文档
最新文档