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

加入VIP,免费下载资源
 

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

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

下载须知

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

版权提示 | 免责声明

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

模拟文件系统.doc

1、存档资料 成绩: *课 程 设 计 报 告 书所属课程名称 操作系统 题 目 模拟文件系统 分 院 *分院 专业班级 学号 学生姓名 指导教师 2012 年 6 月 20 日 华东交通大学理工学院课程设计报告目录第1章 课程设计内容及要求.3第2章 需求分析.4第3章 系统设计及实现.5第4章 课程设计心得.16第5章 参考文献.17第1章 课程设计内容及要求课程设计题目:模拟文件系统课程设计内容及要求:通过本次实验,建立一个简单的模拟文件管理系统,理解用户界面和操作模拟管理在操作系统中的作用。本模拟文件管理系统实现文件的创建、文件的删除、文件目录的创建、删除文件目录、改变目录显示目录等功能。

2、本次课设由本人独立完成.第2章 需求分析该模拟文件系统包括目录文件(简称目录)、普通文件(简称文件),并实现下面一些基本功能:1改变目录:cd 目录名,工作目录转到指定的目录下。cd . ,返回根目录下2创建文件:create 文件名,创建一个指定名字的新文件,即在目录中增加一项,不考虑文件的内容。3删除文件:delete 文件名,删除指定的文件。4显示目录:ls 目录名,显示目录下全部文件和第一级子目录,如果没有指定路径名,则显示当前目录下的内容。5创建目录:mkdir 目录名,再指定路径下创建指定的目录,或者在没有指定路径时,在当前目录下创建子目录。6删除目录:rmdir目录名,删除指定的

3、目录。7. 获得命令帮助 HELP 8. 退出文件系统 EXIT要考虑的特殊情况:1.各个命令对全路径和相对路径的支持A目录不存在时,给出错误信息B不能用cd 进入文件C相对路径的解析D路径中的空格剔除2.删除目录或文件时的问题A删除不存在的文件或目录,给出错误提示B删除目录时目录不为空; 如果该目录为空,则可删除,否则给出是否做删除,删除操作将该目录下的全部文件和子目录都删除C进入到某个目录下,却要删除本目录或者上级目录第3章 系统设计及实现模拟文件系统处理流程如下:结束安装文件系统选择操作 否 是删除文件delete创建文件creat创建目录mkdir删除目录rmdir浏览目录ls结束文件

4、系统的几个主要数据结构:索引节点的数据结构:struct inode struct inode *i_forw; struct inode *i_back; char I_falg; unsigned int I_ino; unsigned int I_count; unsigned int di_addrNADDR; unsigned short di_number; unsigned short di_mode; unsigned short di_uid; unsigned short di_gid; unsigned short di_size;超级块的数据结构: struct fil

5、sysunsigned short s_isize;unsigned long s_fsize;unsigned int s_nfree;unsigned short s_pfree;unsigned int s_freeNICPREE;unsigned int s_ninode;unsigned short s_pinode;unsigned int s_inodeNICINOD;unsigned int s_rinode;char s_fmod;有关目录的数据结构:struct dinodeunsigned short di_number;unsigned short di_mode;un

6、signed short di_uid;unsigned short di_gid;unsigned short di_size;unsigned int di_addrNADDR;struct directchar d_nameDIRSIZ;unsigned int d_ino;struct dirstruct direct ditectDIRNUM;int size;主要模块说明第 17 页 共 17 页创建文件 int get_file(int parent,char *file_name) /创建文件节点,成功则返回文件的索引号,失败返回-1int index;if(search(pa

7、rent,file_name,1,index)!=-1) /搜索在父目录下是否有同名文件存在,有则创建失败printf(File name repeated!n);return -1;for(int i=0;ifile_count; p-child_filetop=pos;p-file_count+;dir_change_flagparent+;return pos;int create(char *name) /创建文件的主调函数,前提是已经取得要创建文件的索引 /成功返回文件的索引号,否则返回-1int parent,p=0;parent=get_parent(name,p);if(par

8、ent=-1) /找不到父目录,输入错误,创建失败printf(Path name error!n);return -1;return create_file(parent,name+p); /开始创建文件创建目录int create_dir(int parent,char *dir_name) /在指定的目录下创建目录,如果成功则返回目录 /的索引号,否则返回-1if(dirparent.dir_count=8) /如果父目录已满,则创建失败printf(Parent directory is full!n);return -1;int pos=get_dir(parent,dir_name

9、); /开始创建目录if(pos=-1)printf(Create directory error!n);return -1;dir_node *p=&dirparent; /修改父目录的控制信息int top=p-dir_count; p-child_dirtop=pos;p-dir_count+;dir_change_flagparent+;return pos;int md(char *name) /创建目录的主调函数,它的参数只有用户输入 /如果创建成功,则返回目录的索引号,否则int parent,p=0; /返回-1parent=get_parent(name,p);if(pare

10、nt=-1) /父目录找不到,输入有误,创建失败printf(Path name error!n);return -1;return create_dir(parent,name+p); /开始创建目录删除文件void del_file(int pos) /删除文件,调用该函数的前提是已经取得要删除文件的索引号 return_block(pos); /释放磁盘块file_flagpos=0; fileflag_flagpos+;file_change_flagpos=0;int del_file(int parent,char *file_name) /在指定的目录下删除文件,删除成功则返回文

11、件的 /索引号,否则返回-1int del_pos,index;if(del_pos=search(parent,file_name,1,index)=-1)/搜索该文件是否存在,不存在则删除失败printf(The file to delete not exist!n);return -1;del_file(del_pos); /开始删除文件dir_node *p=&dirparent; /修改父目录的控制信息if(p-file_count=2)int top=p-file_count-1; p-child_fileindex=p-child_filetop;p-file_count-;di

12、r_change_flagparent+;return del_pos;int delfile(char *name) /删除文件的主调函数,前提是知道了删除文件的名字int parent,p=0;parent=get_parent(name,p);if(parent=-1)printf(Path name error!n);return -1;return del_file(parent,name+p);删除目录void del_dir(int pos) /删除指定的目录节点,该目录已经为空 dir_flagpos=0; dirflag_flagpos+;dir_change_flagpos

13、=0;void del(int pos) /删除一个指定目录及它下面的所有文件及所有目录 for(int i=0;idirpos.file_count;i+) /删除当前目录下的所有文件del_file(dirpos.child_filei);for(i=0;i=2) /修改父目录的控制信息int top=dirparent.dir_count-1;dirparent.child_dirindex=dirparent.child_dirtop;dirparent.dir_count-;dir_change_flagparent+;保存文件void savefile(int file_id) /

14、显式保存文件的核心函数if(fileflag_flagfile_id%2!=0) /如果创建或删除,需要写回磁盘write_bit(file_id,1);fileflag_flagfile_id=0;if(file_change_flagfile_id0) /如果控制信息被修改,需要写回磁盘write_inode(file_id,1);file_change_flagfile_id=0;for(int i=0;ifilefile_id.block_count;i+)int temp=filefile_id.blocki;if(blockflag_flagtemp%2!=0) /如果磁盘块被释放

15、或被占用,需要写回磁盘write_bit(temp,2);blockflag_flagtemp=0;保存目录void save_dir(int dir_id) /保存空目录函数if(dirflag_flagdir_id%2!=0) /如果删除或创建,需要写回磁盘write_bit(dir_id,0);dirflag_flagdir_id=0;if(dir_change_flagdir_id0) /如果控制信息被修改,需要写回磁盘write_inode(dir_id,0);dir_change_flagdir_id=0;void save(int dir_id) /保存一个目录及它下面的所有目录

16、及文件 /用了递归for(int i=0;idirdir_id.dir_count;i+)save(dirdir_id.child_diri);for(i=0;idirdir_id.file_count;i+)savefile(dirdir_id.child_filei);save_dir(dir_id);改变目录void paste(int dir_id) /用于设置当前路径if(dir_id=0)return;paste(dirdir_id.parent);strcat(curr_path,dirdir_id.dir_name);strcat(curr_path,/);int change

17、_dir(char *name) /改变工作目录,成功则返回该目 /录的索引号,否则返回-1int parent,p=0,pos,index;if(strcmp(name,/)=0)pos=0;else if(strcmp(name,.)=0)pos=curr_dir-parent;elseparent=get_parent(name,p);if(parent=-1)printf(Path name error!n);return -1;pos=search(parent,name+p,0,index);if(pos=-1) /如果该目录不存在,则失败printf(The dictory no

18、t exist!n);return -1;curr_path3=0;paste(pos);curr=pos; /改变当前目录及路径curr_dir=&dircurr; return curr; 显示当前目录下的文件和子目录信息void show_dir(int dir_id) /以下几个函数用于显示当前目录下面的目录和文件, /跟上面不同的是,它不能显示目录及文件之间的关系,printf(%s,dirdir_id.dir_name); /但它可以显示一些细节,如创建时间,文件for(int i=strlen(dirdir_id.dir_name);i20;i+)printf( );printf

19、();for(i=25;i30;i+)printf( );printf(%d-%.2d-%.2d%.2d:%.2d:%.2dn,dirdir_id.ctime.wYear,dirdir_id.ctime.wMonth,dirdir_id.ctime.wDay,dirdir_id.ctime.wHour,dirdir_id.ctime.wMinute,dirdir_id.ctime.wSecond);void show_file(int file_id) /显示一个文件printf(%s,filefile_id.file_name);for(int i=strlen(filefile_id.fi

20、le_name);i20;i+)printf( );printf();for(i=26;i30;i+)printf( );printf(%d-%.2d-%.2d%.2d:%.2d:%.2d,filefile_id.ctime.wYear,filefile_id.ctime.wMonth,filefile_id.ctime.wDay,filefile_id.ctime.wHour,filefile_id.ctime.wMinute,filefile_id.ctime.wSecond);for(i=0;i8;i+)printf( );int length=filefile_id.file_leng

21、th;printf(len: %d bytesn,length);void show(int dir_id) /显示目录及文件的核心函数,用了递归思想 for(int i=0;idirdir_id.file_count;i+)show_file(dirdir_id.child_filei);for(i=0;ifile_count); /统计文件数printf(n%d dirs.n,curr_dir-dir_count); /统计目录数获得系统的命令的帮助void help() /打印命令及解释printf(Commands: Explanation:nn);printf( exit -Exit

22、!n);printf( dir -Show files and directories!n);printf( mkf -Create a new file!n);printf( mkd -Create a new directory!n);printf( delf -Delete a file!n);printf( deld -Delete a directory!n);printf( cd -Change the current directory!n);printf( help -Print commands!n);系统实现相关截图:第4章 课程设计心得课程设计能反映出一个人的编程的综合能

23、力。它不仅要有好的编程功底 ,而且需要对课题有深刻的理解。这个设计的模拟文件系统基本上实现文件系统的部分命令。如format、cd、dir、mkf、mdd、delf、deld等。而且通过采用树型数据结构,以1兆为例可以最多显示64级目录,建立512个文件节点。但仍存在很大不足:没有按照面向对象思想设计程序结构,仍以函数为主,而不是对象为主;使用太多全局变量,浪费太多有用空间,而且存在安全隐患;系统函数多,程序的可读性比较差,使得整个程序显得清晰度不够。文件系统的测试用例还不够多,大量测试时还存在几个bug,特别是删除的文件和目录时有时候难以将控制信息和标志信息写入硬盘。总的来说,通过这次的操作

24、系统课程设计,试我对文件系统有了进一步的认识,理解。在温故C语言、数据结构的同时,对操作系统得文件管理这块内容收获了更多。虽然此次课程设计的工作量比较大,投入的时间和精力也很多,但我觉得非常值得。此外,我还充分体会到交流的重要性,通过与同学交流,获得了很多的帮助和设计灵感,使自己那禁锢的思维灵活起来,视野变得开阔,编程的效率自然就提高了。第6章 参考文献1 许日滨 计算机操作系统 M. 北京:北京邮电大学出版社,2008年1月2 孙英华 计算机操作系统习题解答与实验指导M 北京:北京邮电大学出版,2008年1月3致 谢感谢老师多日来的陪伴以及学校提供的机房等硬件设施,没有这些,这次可能不会这么顺利,再次感谢!

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922