ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:223.32KB ,
资源ID:20893071      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/20893071.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(文件系统存储空间管理模拟实验报告文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

文件系统存储空间管理模拟实验报告文档格式.docx

1、21map0map1map2map3位示图中每一位对应的相对磁盘块号如下图,磁盘块号由小到大对应于数组的低地址到高地址位上。即map0的第0位到第15位分别对应0号磁盘块到15号磁盘块的状态,map1的第0位到第15位对应16号磁盘块到31号磁盘块的状态,以此类推。313029282726252423222120191817164746454443424140393837363534333263626160595857565554535251504948如上表所示, 29号磁盘的状态存在map1中,对应于第13位;2. 输出初始位示图信息;3. 输入文件分配或释放请求, (1)格式:“+ 文件

2、名 申请块数” 或 “ - 文件名 ” “+”表示申请文件分配,“-”表示删除文件 如: + F1 54. 根据请求完成相应操作。 (1)若为分配申请x个盘块,则在位示图中找到x个为0的位,将其修改为“1”,计算相应具体物理设备的柱面号C、磁道号H和物理块号R,并将CHR地址或相对磁盘块号记录在文件目录中。输出位示图修改位置、分配的磁盘块CHR地址、修改后的目录和位示图信息。否则,空间不够,退出执行下一条请求; 计算公式如下:a. 已知位示图中的下标i , j, 计算相对块号 Block= i*sizeof( int )*8+j b. 已知相对块号计算柱面、磁道、物理块号如下: 柱面号 C=

3、相对块号/(每柱面磁道数*每磁道物理块数) 磁道号 H= 相对块号%(每柱面磁道数*每磁道物理块数)/ 每磁道物理块数 物理块号 R= 相对块号%每磁道物理块数 文件目录如下(以索引表分配为例):文件名首个物理块CHR地址块个数索引表beta(0,0,0)(0,0,0)(0,0,1)Alpha(2,3,0)Toyota(4 9 12)(Sony首个物理块地址(相对)(0,2,3)(3,6,7)(8, 9,12)(2)若为删除申请,则从目录中找到要删除的文件所在的目录项,读取索引表,依次读取文件相应的盘块CHR地址, 计算该盘块的相对磁盘块号,再计算其相应信息在位示图中的位置( i,j),将位示

4、图中的相应位有“1”改为“0”, 并从目录中删除该目录项。输出删除的磁盘块CHR地址、相应位示图修改位置、修改过的位示图和目录。计算过程如下:相对磁盘块号 = 柱面号*每柱面磁道数*每磁道物理块数+ 磁道号*每磁道物理块数+ 物理块号i = 相对磁盘块号/ (sizeof(int)*8)j = 相对磁盘块号% (sizeof(int)*8)5、实验流程图图一 文件空闲区分配算法图二 文件空闲区回收算法6、实验代码#include stdio.h#include conio.hstring.hint physic100; /文件地址缓冲区int style=1; /文件的类型char cur_d

5、ir10=root; /当前目录 struct commandchar com10;cmd13;struct block int n; /空闲的盘快的个数 int free50; /存放空闲盘快的地址 int a; /模拟盘快是否被占用memory20449;struct block_superint n; /存放进入栈中的空闲块 int stack50; /存放下一组空闲盘快的地址super_block;struct node /i结点信息int file_style; /i结点 文件类型 int file_length; /i结点 文件长度 int file_address100; /i结

6、点 文件的物理地址 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;i50;i+) /超级块初始化 super_block.freei=i; super_block.stacki=50+i; /存放下一组的盘块 640;i+) /i结点信息初始化 for(j=0;j100;j+) i_nodei.file_addressj=-1;

7、/文件地址 i_nodei.file_length=-1; /文件长度 i_nodei.file_style=-1; /文件类型i+) /根目录区信息初始化 strcpy(rooti.file_name,); rooti.i_num=-1; strcpy(rooti.dir_name, for(i=0;20449;i+) /存储空间初始化 memoryi.n=0; /必须有这个 memoryi.a=0; for(j=0; memoryi.freej=-1;i+) /将空闲块的信息用成组链接的方法写进每组的最后一个块中 /存储空间初始化 if(i+1)%50=0) k=i+1; if(k=0;i

8、-) k=physici; /需要提供要回收的文件的地址 m=49-super_block.n; /回收到栈中的哪个位置 if(super_block.n=50) /注意 当super_block.n=50时 m=-1;的值 /super_block.n=50的时候栈满了,要将这个栈中的所有地址信息写进下一个地址中 memoryk.freej=super_block.freej; super_block.n=0; memoryk.n=50; memoryk.a=0; if(m=-1) m=49; /将下一个文件地址中的盘块号回收到栈底中,这个地址中存放着刚才满栈的地址的信息 super_blo

9、ck.freem=physici; /将下一个文件地址中的盘块号回收到栈中 super_block.n+;void allot(int length) /分配空间 int i,j,k,m,p;length; k=50-super_block.n; /超级块中表示空闲块的指针 m=super_block.freek; /栈中的相应盘块的地址 p=super_block.free49; /栈中的最后一个盘块指向的地址 if(m=-1|memoryp.a=1) /检测是否还有下一组盘块内存不足,不能够分配空间n callback(length); break; if(super_block.n=1)

10、 memorym.a=1; /将最后一个盘块分配掉 physici=m;memorym.n;j+) /从最后一个盘块中取出下一组盘块号写入栈中 super_block.freej=memorym.freej; /要跳过这次循环,下面的语句在IF中已经执行过 /栈中的相应盘块的地址写进 文件地址缓冲区 super_block.n-;void create_file(char filename,int length) /创建文件 int i,j; if(strcmp(filename,rooti.file_name)=0)文件已经存在,不允许建立重名的文件n return; if(rooti.i_

11、num=-1) rooti.i_num=i; strcpy(rooti.file_name,filename); strcpy(rooti.dir_name,cur_dir); /把当前目录名 给新建立的文件 i_nodei.file_style=style; i_nodei.file_length=length; allot(length); i_nodei.file_addressj=physicj;void create_dir(char filename) /创建目录style=0; /0代表文件类型是目录文件 create_file(filename,4); style=1; /用完

12、恢复初值,因为全局变量,否则void del_file(char filename) /删除文件 int i,j,k; if(strcmp(filename,rooti.file_name)=0) k=rooti.i_num;i_nodek.file_length; physicj=i_nodek.file_addressj; callback(i_nodek.file_length); /调用 回收函数j+) /删除文件后要将文件属性和目录项的各个值恢复初值 i_nodek.file_addressj=-1; /地址恢复初值 strcpy(rooti.file_name, /文件名恢复初值

13、/目录项的I结点信息恢复初值 /目录项的文件目录信息恢复初值 i_nodek.file_length=-1; /文件长度恢复 i_nodek.file_style=-1; /文件类型恢复初值 if(i=640)不存在这个文件nvoid del_dir(char filename) /删除目录 需要判断目录下时候为空,不为空就不删除i+) /还要加条件判断要删除的目录是不是当前目录 /找到目录名字 if( strcmp(rooti.file_name,filename)=0 & strcmp(cur_dir,filename)!=0 & (i_nodek.file_style)=0 ) if(s

14、trcmp(filename,rootj.dir_name)=0)目录不为空不能直接删除n if(j=640) del_file(filename);这个不是目录文件 或者不存在这个目录,或者你要删除的是当前目录nvoid display_curdir() /显示当前目录下的文件列表 int i,k;tt文件名字 文件类型 文件长度 所属目录n if(strcmp(cur_dir,rooti.dir_name)=0) /查询文件中 所在目录信息和当前目录信息相同的数据tt %st,rooti.file_name);t%dt,i_nodek.file_style);%dt,i_nodek.fil

15、e_length); /文件的长度%sn,rooti.dir_name);void display_dir(char filename) /进入指定的目录 /判断文件类型是不是目录类型 if(strcmp(filename,rooti.file_name)=0) & (i_nodek.file_style=0) strcpy(cur_dir,filename); /将要进入的指定目录设置为当前目录 赋值不要反了strcpy(目的,源)没有这个目录nvoid open_file(char filename) /打开文件 if(strcmp(filename,rooti.file_name)=0

16、& (i_nodek.file_style=1)tt文件占用的物理地址nj+) /显示物理地址%d ,i_nodek.file_addressj); /文件具体占用的盘块号n没有这个文件 或者这个文件不是正规文件nvoid back_dir() /返回上一级目录i+) /查询和当前目录名相同的目录文件名 if(strcmp(cur_dir,rooti.file_name)=0 & strcpy(cur_dir,rooti.dir_name); /将查询到的目录文件名 所在的目录赋值给当前目录void display_sys() /显示系统信息(磁盘使用情况) int i,m,k=0; if(memoryi.a=0) m=20449-k;空闲的盘块数是:t%dn,k);使用的盘块数是:,m);void help() /显示帮助信息printf(*

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1