河南城建学院《操作系统》课程设计报告课程名称:《计算机操作系统》课程设计设计题目:模拟文件管理系统指导教师:李蓓耿永军班级:0844121学号:学生姓名:同组人员:计算机科学与工程学院2014年6月19日成绩:评语:前言在现在计算机更新如此迅速的时代要学好计算机软件技术,特别是操作系统的学习,不仅要努力学好课本上的基础知识,还要经常在图书馆看些有关这方面的书籍,而更重要的是要有足够的实践经验,也要注重和同学的交流,经常尝试性的做些小的操作系统,对自己技术的提升会有很大的帮助。同时,学习计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。但由于我们的条件和学时有限,在理论学习过程中没有给同学们提供更多的实验机会。本操作系统课程设计,是给同学提供一个集中实验的机会。希望同学们通过该设计加深对所学习课程的理解。本设计是一个文件系统模拟程序设计,模拟文件管理的工作过程。我做的课程设计是:模拟文件管理系统。本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理,文件物理结构,目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解。同时通过编程实现这些算法更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。--1目录一.系统环境............................................................................................21.1硬件环境........................................................................................21.2软件环境........................................................................................2二.设计目的及要求................................................................................2三.总体设计............................................................................................4四.详细设计............................................................................................5五.调试与测试........................................................................................9六.设计中遇到的问题及解决方法......................................................10七.多用户多级目录文件系统分析源程序清单..................................117.1头文件.........................................................................................117.2示例程序........................................................错误!未定义书签。八.运行结果及分析..............................................................................26九.心得体会..........................................................................................26十.参考文献..........................................................................................27--2一.系统环境1.1硬件环境内存1GB,处理器1,硬盘(SCSI)50GB,网络适配器NAT。1.2软件环境1)MicrosoftWindowsXPProfessional版2002ServicePack32)VmwareWorkstation10.0.1build-13797763)RedHatLinux9--3二.设计目的及要求2.1设计目的学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法恐怕就是在实践中练习。例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作源代码等。但由于条件和学时有限,在理论学习过程中没有给提供更多的实验机会。本操作系统课程设计,是提供了一个集中实验的机会。应该通过该设计加深对所学习课程的理解。2.2设计要求1)在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。2)文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。3)设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:(1)具有login(用户登录)(2)系统初始化(建文件卷、提供登录模块)(3)文件的创建:create(4)文件的打开:open(5)文件的读:read(6)文件的写:write(7)文件关闭:close(8)删除文件:delete(9)创建目录(建立子目录):mkdir(10)改变当前目录:cd(11)列出文件目录:dir(12)退出:logout4)系统必须可实际演示,选用程序设计语言C语言。2.3设计内容模拟文件管理系统:本课程设计要求设计一个模拟的多用户多级目录的文件系统。通过具体的文件存储空间的管理,文件物理结构,目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解。同时通过编程实现这些算法更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。--4三.总体设计系统模块图:删除文件夹创建文件读文件创建文件夹打开文件显示文件删除用户删除文件创建用户写文件关闭文件执行文件用户系统--5程序流程图:初始化用户界面,等待用户选择操作创建用户删除用户创建文件删除文件创建文件夹删除文件夹选择关闭文件显示文件打开文件执行文件写文件读文件退出结束123456789101112开始--6四.详细设计1、实现原理本程序是一个文件系统模拟程序,模拟文件管理的工作过程。本程序设计一个最多有10个用户的文件系统,实现文件系统的模拟管理程,可以进行创建用户、删除用户、创建文件、删除文件、创建文件夹、删除文件夹、读文件、写文件、执行文件、打开文件、关闭文件、显示目录等操作。程序设置了主目录MFD、用户文件目录UFD和用户文件夹目录UDD,为打开文件设置了运行目录AFD。文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0则表示不允许读写、执行。MFDUFDUDDAFD用户名文件目录指针文件夹目录指针文件名文件内容属性指向下一个文件指针打开文件名打开文件内容打开文件属性文件夹名指向同级文件夹指向该文件夹的第一个文件--72、实现原理图UFDUFD文件名文件内容属性指向下一个文件指针文件名文件内容属性指向下一个文件指针文件夹名指向同级文件夹指向该文件夹的第一个文件用户名文件目录指针文件夹目录指针文件夹名指向同级文件夹指向该文件夹的第一个文件文件名文件内容属性指向下一个文件指针MFDUDDUDDUFD--83、实现用到的数据结构结构体UFD:typedefstructufd{charfilename[10];/*文件名*/charfilecon[100];/*文件内容*/charprocode[8];/*属性*/intlength;/*文件长度*/structufd*nextfile;/*指向下一个文件*/}UFD;结构体UDDtypedefstructudd{charfoldername[10];/*文件夹名*/structufd*clink;/*指向该文件夹的第一个文件*/structudd*cnext;/*指向该文件夹的第一个文件夹*/structudd*link;/*指向同级文件夹*/}UDD;结构体MFDtypedefstructmfd{charusername[10];/*用户名*/structufd*link;/*指向该用户的第一个文件*/structudd*clink;/*指向该用户的第一个文件夹*/}MFD;结构体PROtypedefstructprotected_flag{charcode[4];}PRO;结构体AFDtypedefstructafd{/*运行文件目录*/charfilename[10];/*打开文件名*/charfilecon[100];charprocode[4];intrwpointer;/*读写指针*/}AFD;AFD*afd=NULL;PROflag[3]={100,/*只读*/110,/*读写*/001/*可执行*/};--9五.调试与测试--10六.设计中遇到的问题及解决方法首先我们组是第十题,然后没看懂,直接在网上找的代码,全部都是linux下的代码,根本看不懂,也没问老师怎么办,星期一就在虚拟机与代码之间度过了,到头来还是不懂,星期二中午知道有人换题目了,我们的题比他们的还难,所以就请求老师换了题目,下面就是这个题目带来的诸多问题,这个题目本来打算自己敲代码,可是还是懵懵懂懂,不知道怎么用代码实现,题目很抽象,然后就找个一个代码,找到的代码不能运行,开始改代码,十七页的代码看了一遍搞懂了,接着找出里面的错误,开始修改里面错误非常多,改完以后发现和题目要求的功能不对,并且还不能在Linux虚拟机下运行。--11七.多用户多级目录文件系统分析源程序清单#includestdio.h#includestring.h#includemalloc.h#includestdlib.h#includeconio.hintchoice;/*操作类型*/intex,num;typedefstructufd{charfilename[10];/*文件名*/charfilecon[100];/*文件内容*/charprocode[8];/*属性*/structufd*nextfile;/*指向下一个文件*/}UFD;UFD*rw_pointer;typedefstructudd{charfoldername[10];/*文件夹名*/structufd*clink;/*指向该文件夹的第一个文件*/structudd*cnext;/*指向该文件夹的第一个文件夹*/structudd*link;/*指向同级文件夹*/}UDD;typedefstructmfd{charusername[10];/*用户名*/structufd*link;/*指向该用户的第一个文件*/structudd*clink;/*指向该用户的第一个文件夹