文件系统存储空间管理模拟实验报告要点.pdf

上传人:tbuqq 文档编号:5208779 上传时间:2020-02-21 格式:PDF 页数:17 大小:458.35KB
返回 下载 相关 举报
文件系统存储空间管理模拟实验报告要点.pdf_第1页
第1页 / 共17页
文件系统存储空间管理模拟实验报告要点.pdf_第2页
第2页 / 共17页
文件系统存储空间管理模拟实验报告要点.pdf_第3页
第3页 / 共17页
文件系统存储空间管理模拟实验报告要点.pdf_第4页
第4页 / 共17页
文件系统存储空间管理模拟实验报告要点.pdf_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《文件系统存储空间管理模拟实验报告要点.pdf》由会员分享,可在线阅读,更多相关《文件系统存储空间管理模拟实验报告要点.pdf(17页珍藏版)》请在三一文库上搜索。

1、课程名称计算机操作系统实验名称文件系统存储空间管理模拟 姓名学号 专业班级实验日期 成绩指导老师 一、实验目的 根据提出的文件分配和释放请求,动态显示磁盘空闲空间的 态以及文件目录的变化, 以位示图和索引分配为例: 每次执行请求后要求显示或 打印位示图的修改位置、分配和回收磁盘的物理块地址、更新的位示图、目录。 二、实验原理 用数组表示位示图,其中的每一位对应磁盘一个物理块的状态,0 表示、 空闲,1 表示分配;当请求分配一个磁盘块时,寻找到数组中为0 的位,计算相 对磁盘块号,并计算其在磁盘中的物理地址(柱面号、磁道号、物理块号),并 将其状态由 0 变到 1。当释放某一物理块时,已知其在磁

2、盘中的物理地址,计算 其相对磁盘块号,再找到位示图数组中的相应位,将其状态由1 变为 0。 三、主要仪器设备 PC机(含有 VC ) 四、实验内容与步骤 实验内容: 1. 模拟文件空间分配、释放过程,可选择连续分配、链式分配、 索引分配方法; 2. 文件空闲空间管理,可采用空白块链、空白目录、位示图方 法; 步骤如下: 1. 输入磁盘基本信息参数,计算位示图大小,并随机初始化位示图; (1)磁盘基本信息:磁盘柱面数m, 每柱面磁道数 p, 每磁道物理块数 q; (2)假设采用整数数组存放位示图,则数组大小为: Size= ceil ( (柱面数 *每柱面磁道数 *每磁道物理块数)/(sizeo

3、f(int)*8) ) (3)申请大小为 size 的整数数组 map ,并对其进行随机初始化。 例如:假设 m=2, p=4, q=8, 共有 64 个磁盘块, 若 sizeof(int)=2, 则 位示图大小为 4,map4如下: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 map0 0 0 1 1 0 1 0 0 1 1 0 0 1 0 1 0 map1 1 0 1 0 1 1 0 0 0 0 1 1 0 0 0 0 map2 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 map3 1 0 0 0 1 0 0 0 0 1 1 0 0 1 1

4、0 位示图中每一位对应的相对磁盘块号如下图,磁盘块号由小到大对应于数组的低 地址到高地址位上。即map0的第 0 位到第 15位分别对应 0 号磁盘块到 15 号 磁盘块的状态, map1的第 0 位到第 15 位对应 16 号磁盘块到 31 号磁盘块的状 态,以此类推。 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 map0 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 map1 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 map2 47 46 45 44 43 42 41 40

5、39 38 37 36 35 34 33 32 map3 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 如上表所示, 29 号磁盘的状态存在map1中,对应于第 13 位; 2. 输出初始位示图信息; 3. 输入文件分配或释放请求, (1)格式: “+ 文件名 申请块数”或“ - 文件名 ” “+”表示申请文件分配,“-”表示删除文件 如: + F1 5 4. 根据请求完成相应操作。 (1)若为分配申请 x 个盘块,则在位示图中找到 x 个为 0 的位,将其修改为 “1” ,计算相应具体物理设备的柱面号C、磁道号 H和物理块号 R,并将 CHR

6、 地 址或相对磁盘块号记录在文件目录中。输出位示图修改位置、分配的磁盘块CHR 地址、修改后的目录和位示图信息。否则,空间不够,退出执行下一条请求; 计算公式如下: a. 已知位示图中的下标i , j, 计算相对块号 Block= i*sizeof( int )*8+j b. 已知相对块号计算柱面、磁道、物理块号如下: 柱面号 C= 相对块号 /( 每柱面磁道数 *每磁道物理块数 ) 磁道号 H= 相对块号 % (每柱面磁道数 *每磁道物理块数) / 每磁道物理 块数 物理块号 R= 相对块号 % 每磁道物理块数 文件目录如下(以索引表分配为例) : 文件名 首个物理块 CHR 地址 块个数索

7、引表 beta (0,0,0) 2 (0,0,0)(0,0,1) Alpha (2,3,0) 3 (2,3,0) Toyota 4 3 (4 9 12) ( Sony 文件名 首个物理块地址 (相对) 块个数索引表 beta 0 2 (0,2,3) Alpha 3 3 (3,6,7) Toyota 8 3 (8, 9,12) (2 )若为删除申请,则从目录中找到要删除的文件所在的目录项,读取索引 表,依次读 取文件相应的盘块CHR 地址, 计算该盘块的相对磁盘块号, 再计算其相应信息在 位示图中的位置 ( i,j),将位示图中的相应位有“1”改为“ 0” , 并从目录中删 除该目录项。 输出删

8、除的磁盘块CHR 地址、相应位示图修改位置、 修改过的位示 图和目录。 计算过程如下: 相对磁盘块号 = 柱面号 *每柱面磁道数 *每磁道物理块数 + 磁道号 *每磁道物理块数 + 物理块号 i = 相对磁盘块号 / (sizeof(int)*8) j = 相对磁盘块号 % (sizeof(int)*8) 五、实验流程图 图一文件空闲区分配算法 图二文件空闲区回收算法 六、实验代码 #include “stdio.h“ #include #include #include int physic100; /文件地址缓冲区 int style=1; /文件的类型 char cur_dir10=“r

9、oot“; /当前目录 struct command char com10; cmd13; struct block int n; /空闲的盘快的个数 int free50; /存放空闲盘快的地址 int a; /模拟盘快是否被占用 memory20449; struct block_super int n; /空闲的盘快的个数 int free50; /存放进入栈中的空闲块 int stack50; /存放下一组空闲盘快的地址 super_block; struct node /i 结点信息 int file_style; /i 结点文件类型 int file_length; /i 结点文件

10、长度 int file_address100; /i 结点文件的物理地址 i_node640; struct dir /目录项信息 char file_name10; /文件名 int i_num; /文件的结点号 char dir_name10; /文件所在的目录 root640; void format() /格式化 int i,j,k; super_block.n=50; for(i=0;i=0;i-) k=physici; /需要提供要回收的文件的地址 m=49-super_block.n; /回收到栈中的哪个位置 if(super_block.n=50) /注意当 super_blo

11、ck.n=50 时 m=-1; 的值 /super_block.n=50 的时候栈满了, 要将这个栈中的所有地址信息写进下一个地 址中 for(j=0;j0) printf(“%d “,Atempj); mark+No=Atempj; else i=MA0; if(i=1) printf(“nThe blocks are all assigned“); else printf(“ngroup1:“); for(j=2;j1) /*若该组不止一个空闲块*/ i=MA0; s=MAi; MA0-; printf(“nnumber of the block:%d“,s); else if(MA0=1

12、) /*只剩一个空闲块*/ if(MA1!=0) /*还有其它空闲块组*/ s=MA1; for(i=0;i=0;i-) printf(“%s/“,); scanf(“%s“,com); /输入命令并且查找命令的相关操作 for(i=0;i13;i+) if(strcmp(com,)=0) p=i; break; if(i=13) /如果没有这个语句以后输入的命令都和第一次输入的效果一样 p=14; / 随便的一个值 switch(p) case 0: format(); /初始化 break; case 1: display_curdir(); /查看当前目录下的文件列表 break; ca

13、se 2: scanf(“%s“,tmp); /查看文件 open_file(tmp); break; case 3: display_sys(); /查看系统信息 break; case 4:scanf(“%s“,tmp); /创建目录 create_dir(tmp); break; case 5: scanf(“%s“,tmp); /创建文件 scanf(“%d“, create_file(tmp,len); break; case 6: scanf(“%s“,tmp); /删除文件 for(i=0;i640;i+) /判断文件是不是正规文件 j=rooti.i_num; if(strcm

14、p(tmp,rooti.file_name)=0 break; if(i=640) printf(“ 这个不是正规文件文件n“); break; case 7: scanf(“%s“,tmp); /删除目录 del_dir(tmp); break; case 8: scanf(“%s“,tmp1); /进入当前目录下的指定目录相当于进入目录cd + 目录名 display_dir(tmp1); break; case 9: back_dir(); /返回上一级目录 break; case 10:help(); break; case 11:write_file(fp); /将磁盘利用信息写进系

15、统文件,退出 return 0; case 12: guolink(); break; default:printf(“SORRY ,没有这个命令 n“); break; int main() int i; printf(“ 操作系统课程设计n“); printf(“ 请输入选择 n“); printf(“input your choice(1 stand for file controln 2 stand for guo control)n“); scanf(“%d“, if(i=1) filecontrol(); else if(i=2) guolink(); else ; return 0; 六、实验结果显示

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1