位示图模拟文件系统空闲快管理c语言

上传人:第*** 文档编号:32744159 上传时间:2018-02-12 格式:DOC 页数:7 大小:97.50KB
返回 下载 相关 举报
位示图模拟文件系统空闲快管理c语言_第1页
第1页 / 共7页
位示图模拟文件系统空闲快管理c语言_第2页
第2页 / 共7页
位示图模拟文件系统空闲快管理c语言_第3页
第3页 / 共7页
位示图模拟文件系统空闲快管理c语言_第4页
第4页 / 共7页
位示图模拟文件系统空闲快管理c语言_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《位示图模拟文件系统空闲快管理c语言》由会员分享,可在线阅读,更多相关《位示图模拟文件系统空闲快管理c语言(7页珍藏版)》请在金锄头文库上搜索。

1、实验三 文件系统空闲空间管理模拟一、实验内容及要求要求打印或显示程序运行前和运行后的位示图,以及分配和回收磁盘的物理地址过程;二、基本原理用数组表示位示图,其中的每一位对应磁盘一个物理块的状态,0 表示空闲,1 表示分配;当请求分配一个磁盘块时,寻找到数组中为 0 的位,计算相对磁盘块号,并计算其在磁盘中的物理地址(柱面号、磁道号、物理块号) ,并将其状态由 0 变到 1。当释放某一物理块时,已知其在磁盘中的物理地址,计算其相对磁盘块号,再找到位示图数组中的相应位,将其状态由 1 变为 0。三、实验相关公式: 计算公式如下:(1) 已知位示图中的下标 i , j, 计算相对块号Block= I

2、 * sizeof( int )+j(2)已知相对块号计算柱面、磁道、物理块号如下:柱面号 C= 相对块号/(每柱面磁道数*每磁道物理块数)磁道号 H= 相对块号% (每柱面磁道数*每磁道物理块数)/ 每磁道物理块数物理块号 R= 相对块号%每磁道物理块数4. 提出申请磁盘块或释放磁盘块的要求,根据要求完成操作。若申请盘块,则在位示图中找到为 0 的位,计算相对磁盘块号,再计算相应具体物理设备的柱面号 C、磁道号 H 和物理块号 R,计算方法如步骤 3;输出分配的 CHR地址,并将位示图相应位由 0 变为 1,输出位示图;若释放盘块,则从已分配磁盘块表中随机选择一个盘块释放,此时,已知 CHR

3、 地址,计算该盘块的相对磁盘块号,再计算其相应信息在位示图中的位置( i,j)。计算过程如下:相对磁盘块号 = 柱面号*每柱面磁道数*每磁道物理块数+ 磁道号*每磁道物理块数+ 物理块号i = 相对磁盘块号 / sizeof(int)j = 相对磁盘块号 % sizeof(int)四、实验程序清单:#include #include #include #include #define COUNT 1024int size; int *bitmap;char filename32;int zhumianhao;int cidaohao;int shanquhao;struct bitmapinf

4、o int bitmapstoreCOUNT; /内存映射状态char filenameCOUNT32; int need;bitmapinfo info;int fenpei()/计算位示图的大小srand(unsigned)time(NULL);int total;printf(请输入柱面个数:n);scanf(%d,printf(请输入柱面磁道个数:n);scanf(%d,printf(请输入每个磁道扇区个数:n);scanf(%d,total = zhumianhao*cidaohao*shanquhao;if(0 =total%(sizeof(int)*8)size = total/

5、(sizeof(int)*8);printf(数组的大小为:%dn,size);return size;elsesize = total/(sizeof(int)*8)+1;printf(数组的大小为:%dn,size);return size;int showbitmap(int n)/显示位示图信息int i;int count = 0;for(i=0;ij)if( t= 0)count+=1;if(j+1)%8 = 0)printf(n);printf(=map%d=n,i);/ printf(%dn,count);printf(空闲块有:%dn,count);return count;

6、void disklocal(int number,int n)/由用户输入需要的物理块数: int i; int j;int y;/计数int neednum;printf(输入需要分配的块数:n); scanf(%d,info.need = neednum;printf(输入文件名:n); scanf(%s, if( numberj)if(t = 0)bitmapi = (bitmapi|(mj)if(j+1)%8 = 0)printf(n);printf(=map%d= =n,i); system(pause); void diskreturn(int n)char filereturn

7、32; int i; int j;int y;int m = 0x00000001;printf(输入要回收的文件名n); scanf(%s,filereturn);for( i =0;ij)if(j+1)%8 = 0)printf(n);printf(=map%d= =n,i); system(pause); int main()int n;while(1)n = fenpei();/位示图的数组大小bitmap = (int *)malloc(size);int num = showbitmap(n);/返回空闲块disklocal(num,n);/diskreturn(n);return 0;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 工程造价

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