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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

操作系统原理文件管理.docx

1、操作系统原理文件管理计算机科学技术学院操作系统原理课程设计报告 题 目:文件管理系统专 业:网络工程班 级:网络09-1姓 名:邵岩学 号:21指导老师:*2011年12月操作系统原理课程设计任务书一、题目:文件系统管理 二、设计要求(1)鲁建成负责设计与实现。(2)查阅相关资料,自学具体课题中涉及到的新知识。(3)采用结构化、模块化程序设计方法,功能要完善,具有一定的创新。(4)所设计的程序应有输入、输出。(5)按要求写出课程设计报告,并于设计结束后1周内提交。其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、软件总体设计、详细设计、软件的调试、总结、谢启、附录:带中文注

2、释的程序清单、参考文献。报告一律用A4纸打印,中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。总体设计应配合软件总体模块结构图来说明软件应具有的功能。详细设计应用传统或N-S流程图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。四、课程设计工作计划2007年6月18日,指导教师讲课,学生根据题目准备资料;2007年6月19日,进行总体方案设计;2007年6月20日2007年6月25日,完成程序模

3、块并通过独立编译;2007年6月26日2007年6月27日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;2007年6月27日2007年6月29日,验收、撰写报告;2007年6月29日下午,验收或总结。 指导教师签章: 教研室主任签章 操作系统原理课程设计指导教师评语与成绩指导教师评语:课程设计表现成绩: 课程设计验收成绩: 课程设计报告成绩: 课程设计 总成绩: 指导教师签章 2007年 7 月 10 日一 概述1.课程设计的目的1理解重要数据结构的意义2掌握文件系统的工作原理3通过本次课程设计加深文件系统内部功能及内部实现的理解2.课程设计的要求1需要的基本知识:文件:一组带

4、标志的在逻辑上有完整意义的信息项的序列,这个标识为文件名。文件系统:操作系统中统一管理信息资源的一种软件,管理文件的存储、检索、更新。提供安全可靠的共享和保护手段,并且方便用户使用。2技能:具有用C语言编程的能力,懂得文件系统调用处理的算法及一些操作系统文件系统的实现的基本思想。3尚未掌握的知识点:高速缓存管理和磁盘管理算法4参阅操作系统原理书籍中文件管理的相关知识。5老师提出的要求:在理解文件系统的层次结构,掌握高速缓存管理和磁盘管理的基本思想和算法的基础上,掌握文件系统的系统调用处理算法和运用,分析流行操作系统文件系统的实现的基本思想,尝试设计简单的文件系统3.课程设计的主要设计思想在任一

5、OS下,建立一个大文件,把它假想成一张盘,在其中实现一个简单的模拟UNIX(LINUX)文件系统。本次文件系统具有以下的功能: 1、初始化 2、建立文件(需给出文件名,文件长度) 3、建立子目录 4、打开文件(显示文件所占的盘块) 5、删除文件 6、删除目录 7、显示目录(即显示目录下的信息,包括文件、子目录等) 8、显示整个系统信息 二 总体方案设计21 算法的整体思路进入UNIX文件系统界面,提示有初始化,查看当前目录文件列表,查看文件,查看系统信息,创建目录、文件,删除目录、文件,进入当前目录的指定目录,返回上一级目录,显示帮助命令和退出文件模拟12项功能,根据各个命令的提示命令,输入命

6、令提示符,运行各个动能。22主要特点此课程设计的功能完善,由于学习过在LINUX的环境编程,此课程设计仿照LINUX环境,命令符并未改变,这样可以使同学们很快的熟悉在此程序的环境中练习。23我所承担的设计工作是整个文件系统。以下是整体框图。整体框图 N Y 图2.3框图三 详细设计31所完成的具体功能初始化,查看当前目录文件列表,查看文件,查看系统信息,创建目录、文件,删除目录、文件,进入当前目录的指定目录,返回上一级目录,显示帮助命令和退出文件模拟12项功能。32程序流程图3.2.1 Format()1超级块初始化 图3.2.1.1 2 信息初始化 图3.2.1.23 存储空间初始化 图3.

7、2.1.34 将空闲块的信息用成组链接的方法写进每组的最后一个块中 图3.2.1.43.2.2 Callback(int length) 图3.2.23.2.3 Allot(int length) 图3.2.33.2.4 create_file(char filename,int length)图 图3.2.43.2.5 del_file(char filename) 图3.2.53.2.6 del_dir(char filename) 图3.2.63.2.7 void display_curdir() 图3.2.73.2.8 display_dir(char filename) 图 3.2.

8、83.2.9 void open_file(char filename 图3.2.9四 程序的调试与运行结果说明经过调试,程序运行一切正常。运行结果如下进入界面建立目录,建立文件,查看,进入子目录等功能界面五 课程设计总结此次的课程设计从总体上来看,功能比较齐全,并能准确的模拟简单的UNIX文件系统。但是由于时间原因和经验的知识的匮乏,踏还是存在不少功能上的不足和不完善。在登录正规的文件系统时,都会有用户登录界面和退出登录的界面,但是此文件系统课程设计中就缺少这一功能。这一问题需要有用户帐号和密码。解决这一个问题,就要加入一个代码,即登录代码和退出代码。代码如下:int login(uid,p

9、asswd)unsigned short uid;char *passwd; int i,j;for(i=0;iPWDNUM;i+) if(uid=pwdi.p_uid)&(!strcmp(passwd,pwdi.password) for(j=0;jUSERNUM;j+) if(userj.u_uid=0) break; if(j=USERNUM) printf(ntoo much user in the system,please wait to login n); return 0; else userj.u_uid=uid; userj.u_gid=pwdi.p_gid; userj.

10、u_default_mode=DEFAULTMODE; break; if(i=PWDNUM) printf(nincorrect password n); return 0; else return 1;int logout(uid) /*logout*/unsigned short uid; int i,j,k,sys_no;struct inode *inode;for(k=0;kUSERNUM;k+) if(uid=userk.u_uid) i = k; break; if(k=USERNUM) printf(n no such a user n); return NULL; for(

11、j=0;jNOFILE;j+) if (useri.u_ofilej!=SYSOPENFILE+1) /* iput the inode free the sys_ofile and clear the user_ofile*/ sys_no=useri.u_ofilej; inode=sys_ofilesys_no.f_inode; iput(inode); sys_ofilesys_no.f_count-; useri.u_ofilej=SYSOPENFILE+1; return 1;六 后记在老师和同学们的帮助下,顺利完成了本次的课程设计。通过本次的课程设计,掌握了文件系统的工作原理,通

12、过文件系统的设计,加深文件系统的内部功能及内部实现的理解。在理解程序的过程中,对分配空间和磁盘管理方面的知识理解的不是很透彻。 此次的课程设计也涉及到了一些结构体和成组链接法方面的知识。通过本次课程设计,我学到了很多知识,对我本身能力也是一种锻炼,锻炼了我分析与创新能力,借鉴成功人士的经验,并应用到自己的程序中,使得程序更加完善。 感谢学校给了我们这次机会,让我们自己独立的完成本次课程设计,感谢给我们这次机会锻炼自己。另外我还要感谢我们的指导老师-张玲玲老师对我的帮助。在编程过程中我们遇到了一些难题和困难。对于一些技术难题给予了我们点拨和指导。从而使我们的程序得到了顺利完成。 此外,我还要感谢

13、一直帮助我的同学们! 最后,还请大家对我们的程序给予批评和指正!七 附录/* HELLO.C - Hello, world */#include stdio.h#include #include #include int physic300; /* 文件地址缓冲区 */int style=1; /* 文件的类型 */char cur_dir10=c; /* 当前目录 */ struct command char com10;cmd12;struct block int n; /* 空闲的盘快的个数 */ int free50; /* 存放空闲盘快的地址 */ int a; /* 模拟盘快是否被

14、占用 */memory200;struct block_super int n; /* 空闲的盘快的个数 */ int free50; /* 存放进入栈中的空闲块 */ int stack50; /* 存放下一组空闲盘快的地址 */super_block;struct node /* i结点信息 */ int file_style; /* i结点 文件类型 */ int file_length; /* i结点 文件长度 */ int file_address100; /* i结点 文件的物理地址 */ i_node64;struct dir /* 目录项信息 */ char file_name

15、10; /* 文件名 */ int i_num; /* 文件的结点号 */ char dir_name10; /* 文件所在的目录 */ c64;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;i64;i+) /* i结点信息初始化 */ for(j=0;j100;j+) i_nodei.file_address

16、j=-1;/* 文件地址 */ i_nodei.file_length=-1; /* 文件长度 */ i_nodei.file_style=-1; /* 文件类型 */ for(i=0;i64;i+) /* 根目录区信息初始化 */ strcpy(ci.file_name,); ci.i_num=-1; strcpy(ci.dir_name,); for(i=0;i200;i+) /* 存储空间初始化 */ memoryi.n=0; /* 必须有这个 */ memoryi.a=0; for(j=0;j50;j+) memoryi.freej=-1; for(i=0;i200;i+) /* 将空

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

18、moryi.n=0; printf(已经初始化完毕n); printf(欢迎进入UNIX文件模拟系统nn);void write_file(FILE *fp) /* 将信息读入系统文件中 */ int i; fp=fopen(system,wb); for(i=0;i200;i+) fwrite(&memoryi,sizeof(struct block),1,fp); fwrite(&super_block,sizeof(struct block_super),1,fp); for(i=0;i64;i+) fwrite(&i_nodei,sizeof(struct node),1,fp); f

19、or(i=0;i64;i+) fwrite(&ci,sizeof(struct dir),1,fp); fclose(fp);void read_file(FILE *fp) /* 读出系统文件的信息 */ int i; fp=fopen(system,rb); for(i=0;i200;i+) fread(&memoryi,sizeof(struct block),1,fp); fread(&super_block,sizeof(struct block_super),1,fp); for(i=0;i64;i+) fread(&i_nodei,sizeof(struct node),1,fp

20、); for(i=0;i=0;i-) k=physici; /* 需要提供要回收的文件的地址 */ m=49-super_block.n; /* 回收到栈中的哪个位置 */ 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=4

21、9; /* 将下一个文件地址中的盘块号回收到栈底中,这个地址中存放着刚才满栈的地址的信息 */ 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; /* 栈中的最后一个盘块指向的地

22、址 */ if(m=-1|memoryp.a=1) /* 检测是否还有下一组盘块 */ printf(内存不足,不能够分配空间n); callback(length); break; if(super_block.n=1) memorym.a=1; /* 将最后一个盘块分配掉 */ physici=m; super_block.n=0; for(j=0;jmemorym.n;j+) /* 从最后一个盘块中取出下一组盘块号写入栈中 */ super_block.freej=memorym.freej; super_block.n+; continue; /* 要跳过这次循环,下面的语句在IF中已

23、经执行过 */ physici=m; /* 栈中的相应盘块的地址写进 文件地址缓冲区 */ memorym.a=1; super_block.n-; void create_file(char filename,int length) /* 创建文件 */ int i,j; for(i=0;i64;i+) if(strcmp(filename,ci.file_name)=0) printf(文件已经存在,不允许建立重名的文件n); return; for(i=0;i64;i+) if(ci.i_num=-1) ci.i_num=i; strcpy(ci.file_name,filename);

24、 strcpy(ci.dir_name,cur_dir); /* 把当前目录名 给新建立的文件 */ i_nodei.file_style=style; i_nodei.file_length=length; allot(length); for(j=0;jlength;j+) i_nodei.file_addressj=physicj; break; void create_dir(char filename) /* 创建目录 */ style=0; /* 0代表文件类型是目录文件 */ create_file(filename,4); style=1; /* 用完恢复初值,因为全局变量,否

25、则 */void del_file(char filename) /* 删除文件 */ int i,j,k; for(i=0;i64;i+) if(strcmp(filename,ci.file_name)=0) k=ci.i_num; for(j=0;ji_nodek.file_length;j+) physicj=i_nodek.file_addressj; callback(i_nodek.file_length); /* 调用 回收函数 */ for(j=0;j100;j+) /* 删除文件后要将文件属性和目录项的各个值恢复初值 */ i_nodek.file_addressj=-1;

26、 /* 地址恢复初值 */ strcpy(ci.file_name,); /* 文件名恢复初值 */ ci.i_num=-1; /* 目录项的I结点信息恢复初值 */ strcpy(ci.dir_name,); /* 目录项的文件目录信息恢复初值 */ i_nodek.file_length=-1; /* 文件长度恢复 */ i_nodek.file_style=-1; /* 文件类型恢复初值 */ break; if(i=64) printf(不存在这个文件n); void del_dir(char filename) /* 删除目录 需要判断目录下时候为空,不为空就不删除 */ int i,j,k; for(i=0;i64;i+) /* 还要加条件判断要删除的目录是不是当前目录 */ k=ci.i_num; /* 找到目录名字 */ if( strcmp(ci.file_name,filename)=0 & strcmp(cur_dir,filename)!=0 & (i_nodek.file_style)=0 ) for(j=0;j64;j+) if(strcmp(filename,cj.dir_name)=0) printf(目录不为空不能直接删除n); break; if(j=64)

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

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