C语言 固定分区存储管理实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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执行完毕,释放空间,实验结果如下: