操作系统储存管理程序

上传人:kms****20 文档编号:40381099 上传时间:2018-05-26 格式:DOC 页数:5 大小:26KB
返回 下载 相关 举报
操作系统储存管理程序_第1页
第1页 / 共5页
操作系统储存管理程序_第2页
第2页 / 共5页
操作系统储存管理程序_第3页
第3页 / 共5页
操作系统储存管理程序_第4页
第4页 / 共5页
操作系统储存管理程序_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《操作系统储存管理程序》由会员分享,可在线阅读,更多相关《操作系统储存管理程序(5页珍藏版)》请在金锄头文库上搜索。

1、#include #include #include #include #include#define n 10 /*假定系统允许的最大作业数为 n,假定模拟实验中 n 值为 10*/ #define m 10 /*假定系统允许的空闲区表最大为 m,假定模拟实验中 m 值为 10*/ #define minisize 100 /*空闲分区被分配时,如果分配后剩余的空间小于 minisize,则将该空闲分 区全部分配,若大于 minisize,则切割分配*/struct float address; /*已分配分区起始地址*/ float length; /*已分配分区长度,单位为字节*/ in

2、t flag; /*已分配区表登记栏标志,用“0“表示空栏目*/ used_tablen; /*已分配区表*/ struct float address; /*空闲区起始地址*/ float length; /*空闲区长度,单位为字节*/ int flag; /*空闲区表登记栏标志,用“0“表示空栏目,用“1“表示未分配*/ free_tablem; /*空闲区表*/ void allocate(char J,float xk) /*给 J 作业,采用最佳分配算法分配 xk 大小的空间*/ int i,k; float ad; k=-1; for(i=0;i=xk /*修正空闲区表*/ if(

3、free_tablek.flag=0) /*前面找到的是整个空闲分区*/ free_tablek.flag=1; else /*前面找到的是某个空闲分区的一部分*/ free_tablek.length=free_tablek.length+xk; return; else /*修改已分配表*/ used_tablei.address=ad; used_tablei.length=xk; used_tablei.flag=J; return;/*主存分配函数结束*/ void reclaim(char J) /*回收作业名为 J 的作业所占主存空间*/ int i,k,j,s,t; float

4、 S,L; /*寻找已分配表中对应登记项*/ s=0; while(used_tables.flag!=J|used_tables.flag=0) return; /*修改已分配表*/ used_tables.flag=0; /*取得归还分区的起始地址 S 和长度 L*/ S=used_tables.address; L=used_tables.length; j=-1;k=-1;i=0; /*寻找回收分区的空闲上下邻,上邻表目 k,下邻表目 j*/ while(i=m)/*空闲区表满,回收空间失败,将已分配表复原*/ printf(“主存空闲表没有空间,回收空间失败n“); used_tab

5、les.flag=J; return; free_tablet.address=S; free_tablet.length=L; free_tablet.flag=1; return; /*主存回收函数结束*/ int main( ) int i,a; float xk; char J; /*空闲分区表初始化:*/ free_table0.address=10240; /*起始地址假定为 10240*/free_table0.length=10240; /*长度假定为 10240,即 10k*/free_table0.flag=1; /*初始空闲区为一个整体空闲区*/for(i=1;im;i+

6、) free_tablei.flag=0; /*其余空闲分区表项未被使用*/*已分配表初始化:*/ for(i=0;in;i+) used_tablei.flag=0; /*初始时均未分配*/while(1) printf(“选择功能项(0-退出,1-分配主存,2-回收主存,3-显示主存)n“); printf(“选择功项(03) :“); scanf(“%d“, switch(a) case 0: exit(0); /*a=0 程序结束*/ case 1: /*a=1 分配主存空间*/ printf(“输入作业名 J 和作业所需长度 xk: “); scanf(“%*c%c%f“, allo

7、cate(J,xk); /*分配主存空间*/ break; case 2: /*a=2 回收主存空间*/ printf(“输入要回收分区的作业名“); scanf(“%*c%c“, reclaim(J); /*回收主存空间*/ break; case 3: /*a=3 显示主存情况*/ /*输出空闲区表和已分配表的内容*/ printf(“输出空闲区表:n 起始地址 分区长度 标志n“); for(i=0;im;i+) printf(“%6.0f%9.0f%6dn“,free_tablei.address,free_tablei.length, free_tablei.flag); print

8、f(“ 按任意键,输出已分配区表n“); getch(); printf(“ 输出已分配区表:n 起始地址 分区长度 标志n“); for(i=0;in;i+) if(used_tablei.flag!=0) printf(“%6.0f%9.0f%6cn“,used_tablei.address,used_tablei.length, used_tablei.flag); else printf(“%6.0f%9.0f%6dn“,used_tablei.address,used_tablei.length, used_tablei.flag); break; default:printf(“没有该选项n“); /*case*/ /*while*/ return 1;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号