成组链接模拟unix系统.doc

上传人:鲁** 文档编号:545981537 上传时间:2023-08-09 格式:DOC 页数:14 大小:54.01KB
返回 下载 相关 举报
成组链接模拟unix系统.doc_第1页
第1页 / 共14页
成组链接模拟unix系统.doc_第2页
第2页 / 共14页
成组链接模拟unix系统.doc_第3页
第3页 / 共14页
成组链接模拟unix系统.doc_第4页
第4页 / 共14页
成组链接模拟unix系统.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《成组链接模拟unix系统.doc》由会员分享,可在线阅读,更多相关《成组链接模拟unix系统.doc(14页珍藏版)》请在金锄头文库上搜索。

1、问题描述在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的 模拟UNIX文件系统 。基本要求 1在现有机器硬盘上开辟20M的硬盘空间,作为设定的硬盘空间。 2编写一管理程序对此空间进行管理,以模拟UNIX(linux)文件系统,具体要求如下:(1)要求盘块大小1k (2) i 结点文件类型 正规文件目录文件(共1byte)块设备 管道文件 。物理地址(索引表) 共有13个表项,每表项2byte 。文件长度 4byte 。联结计数 1byte (3)0号块 超级块 栈长度50 空闲盘块的管理:成组链接 ( UNIX) 位示图法 (Linux) (4)每建一个目录,分配4个物理块

2、 文件名 14byte (5)目录项信息 i 结点号 2byte(6)结构: 0#: 超级块 1#20#号为 i 结点区 20#30#号为根目录区(7)功能: 1、初始化 2、建立文件(需给出文件名,文件长度) 3、建立子目录 4、打开文件(显示文件所占的盘块) 5、删除文件 6、删除目录 7、显示目录(即显示目录下的信息,包括文件、子目录等) 8、显示整个系统信息 2、模拟文件系统问题描述 在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的小型文件系统。基本要求该小型文件系统没有子目录机制,文件连续分配,不考虑分区。做一个简单的 操作界面,提供四条简单的命令:简单的ls、c

3、at、cp、rd.进一步增强:上题中的文件系统功能:文件系统不连续分配,可以有子目录 机制,(如两级子目录机制)。附录 课程设计报告内容一实验题目与要求。二总的设计思想及环境说明、工具等。三本题所需数据结构与模块说明。四运行结果与运行情况。五自我评析与总结。1你认为你完成的哪些比较好或比较出色;2差距与局限,什么做的不太好或什么地方可以做的更好以待改进;3从本作业得到的收获:对编写与调试过程中经验教训的总结;4完成本题的其他方法或你的设想;5对本实验题的评价和改进意见。#include stdio.h #include #include #include int physic100;/文件地址

4、缓冲区int style=1;/文件的类型char cur_dir10=root;/当前目录 struct commandchar com10;cmd12;struct blockint n;/空闲的盘快的个数int free50;/存放空闲盘快的地址int a;/模拟盘快是否被占用memory20449;struct block_superint n;/空闲的盘快的个数int free50;/存放进入栈中的空闲块int stack50;/存放下一组空闲盘快的地址super_block;struct node/i结点信息int file_style;/i结点 文件类型int file_leng

5、th;/i结点 文件长度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;i50;i+)/超级块初始化super_block.freei=i;/存放进入栈中的空闲块super_block.stacki=50+i;/存放下一组的盘块for(i=0;i640;i+)/i结点信息初始化for(j

6、=0;j100;j+)i_nodei.file_addressj=-1;/文件地址i_nodei.file_length=-1;/文件长度i_nodei.file_style=-1;/文件类型for(i=0;i640;i+)/根目录区信息初始化strcpy(rooti.file_name,);rooti.i_num=-1;strcpy(rooti.dir_name,);for(i=0;i20449;i+)/存储空间初始化 memoryi.n=0;/必须有这个memoryi.a=0;for(j=0;j50;j+)memoryi.freej=-1;for(i=0;i20449;i+)/将空闲块的信

7、息用成组链接的方法写进每组的最后一个块中/存储空间初始化if(i+1)%50=0)k=i+1;for(j=0;j50;j+)if(k20450)memoryi.freej=k;/下一组空闲地址memoryi.n+;/下一组空闲个数 注意在memoryi.n+之前要给其赋初值k+;elsememoryi.freej=-1;memoryi.a=0;/标记为没有使用continue;/处理完用于存储下一组盘块信息的特殊盘块后,跳过本次循环for(j=0;j50;j+)memoryi.freej=-1;memoryi.n=0;printf(已经初始化完毕n);printf(进入UNIX文件模拟.nn)

8、;void write_file(FILE *fp)/将信息读入系统文件中int i;fp=fopen(system,wb);for(i=0;i20449;i+)fwrite(&memoryi,sizeof(struct block),1,fp);fwrite(&super_block,sizeof(struct block_super),1,fp); for(i=0;i640;i+)fwrite(&i_nodei,sizeof(struct node),1,fp);for(i=0;i640;i+)fwrite(&rooti,sizeof(struct dir),1,fp);fclose(fp

9、);void read_file(FILE *fp)/读出系统文件的信息int i;fp=fopen(system,rb);for(i=0;i20449;i+)fread(&memoryi,sizeof(struct block),1,fp);fread(&super_block,sizeof(struct block_super),1,fp);for(i=0;i640;i+)fread(&i_nodei,sizeof(struct node),1,fp);for(i=0;i=0;i-)k=physici;/需要提供要回收的文件的地址m=49-super_block.n;/回收到栈中的哪个位置

10、if(super_block.n=50)/注意 当super_block.n=50时 m=-1;的值/super_block.n=50的时候栈满了,要将这个栈中的所有地址信息写进下一个地址中for(j=0;j50;j+)memoryk.freej=super_block.freej;super_block.n=0; memoryk.n=50;memoryk.a=0;if(m=-1)m=49;/将下一个文件地址中的盘块号回收到栈底中,这个地址中存放着刚才满栈的地址的信息super_block.freem=physici;/将下一个文件地址中的盘块号回收到栈中super_block.n+;void allot(int length)/分配空间int i,j,k,m,p;for(i=0;ilength;i+)k=50-super_block.n;/超级块中表示空闲块的指针m=super_block.freek;/栈中的相应盘块的地址p=super_block.free49;/栈中的最后一个盘块指向的地址if(m=-1|memoryp.a=1)/检测是否还有下一组盘块printf(内存不足,不能够分配空间n);callback(length);break;if(super_block.n=1) memorym.a=1;/将最

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

当前位置:首页 > 生活休闲 > 社会民生

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