《操作系统-文件系统课程设计报告》由会员分享,可在线阅读,更多相关《操作系统-文件系统课程设计报告(34页珍藏版)》请在金锄头文库上搜索。
1、操作系统操作系统课程设计课程设计题目名称 多用户多级目录共享文件系统的实现 _学生学院 计算机学院 专业班级 10 级计算机科学与技术 7 班 学 号 学生姓名 指导教师 刘老师 20 年月 日一、一、可行性分析可行性分析随着信息化进程,文件管理越来越受到重视,并且逐渐成为国内外业界研究的热点。 在现有的操作系统中,几乎都是通过文件系统来组织和管理计算机中所存储的程序和数据 等大量的文件。 在现代 OS 中,几乎毫毛例外地是通过文件系统来组织和管理在计算机中存储 和大量 程序和数据的;或者说,文件系统的管理功能,是通过把它所管理的程序和数据组织成一 系列文件的方法来实现的。而文件则是指具有文件
2、名的若干相关元素的集合。元素通常是 记录,而记录又是一组有意义的数据项的集合。 通过分析,可知文件系统对大多数文件的操作,器过程大致都是这样两步:第一步是 通过检索文件目录来找到指定文件的属性及其在外存上的位置;第二步是对文件实施相应 的操作,如读文件或写文件。为了便于管理和控制文件,根据系统管理员或用户所规定的 存取控制属性,将文件分为只读文件、读写文件和只执行文件三类。而文件系统的模型主 要分为三个层次,分别是对象及其属性、对对象的操纵和管理的软件集合、文件系统接口, 其最底层的是对象及其属性;中间层对对象进行操纵和管理的软件集合;最高层是文件系 统提供给用户的接口。 用户通过文件系统所提
3、供的系统调用实施对文件的操作,如创建文件、删除无文件、 读文件、写文件等,为了方便用户使用文件而提供了更多对文件的操作,如打开和关闭文 件。 软硬件可行性分析:软硬件可行性分析:本模拟系统的实现需要一台 PC 机作为硬件设备,此外,软件开 发环境包括:Win7、VC+6.0,.因此,该模拟系统具备实现条件,综合分析,系统在成本、 技术、操作上,都是可行的。 技术可行性分析:技术可行性分析:在当前的技术条件下,该系统的各个功能模块在理论上而言都是能 实现的;根据自己掌握的技术情况,在规定的期限内,系统的开发设计能完成。二、二、需求分析需求分析1、 功能需求分析功能需求分析 功能划分:本模拟系统主
4、要针对文件的管理和操作名主要有:创建用户、文件、文件 夹,读文件,写文件,执行文件,关闭文件,删除用户、文件夹、文件的功能。 创建用户、文件、文件夹:在对系统发出操作命令之前必须先登录用户,然而登录之 前必须要已经创建该用户。在创建完用户后,可通过登录用户来创建文件和文件夹。在创 建文件时可设置文件的属性和输入文件的内容。 读文件:可通过登录用户来读取任何已创建的只读或读写文件的内容;如果所要读的 文件不是可读文件时,系统会显示该文件不可读;如果所读文件不存在,系统会显示文件 不存在。 写文件:登录用户后,用户可写或重写读写文件中的内容,并保存文件中的重写内容, 以供下次读取;当所要写的文件不
5、是可写的文件时,系统会显示该文件不可写;当所要写 的文件并不存在时,系统会显示该文件不存在。 执行文件:登录用户后,用户可执行系统中已创建的执行文件;当该文件不是可执行 文件时,系统会显示该文件不可执行;当该文件不存在时,系统将会显示该文件不存在。 关闭文件:可通过选择关闭文件的功能选项,来关闭系统中所有打开的文件,如果没 有文件被打开,则系统会显示没有文件打开。 删除用户、文件、文件夹:登录用户后,用户可通过选择删除的功能选项来删除不想再保存的文件和文件夹,删除后,用户会自动注销;当选择删除用户的功能选项时,系统 会删除该用户,以及该用户所创建的所有文件和文件夹。2、 非功能需求分析非功能需
6、求分析 在现代计算机系统中,要用到大量的程序和数据,因内存容量有限,且不能长期保存, 故而平时总是把它们以文件的形式存放在外存中,需要时再随时将它们调入内存。如果有 用户注解管理外存上的文件,不仅要求用户熟悉外存特性,了解各文件的属性,以及它们 在外存上的位置,而且在多用户环境下,还必须能保持数据的安全性和一致性。显然,这 是用户所不能胜任、也不愿意承担的工作。于是,取而代之的便是在操作系统中又增加了 文件管理功能,即构成一个文件系统,负责管理在外存上的文件,并把对文件的存取、共 享和保护等手段提供给用户。这不仅方便了用户,保证了文件的安全性,还可有效地提高 系统资源的利用率。 在该课程设计中
7、,主要设计了一个模拟的多用户的二级共享的文件系统。通过对用户 的管理,文件和文件夹的物理结构,目录的结构和对文件、文件夹的操作的实现,来对系 统中的所有文件进行管理。三、三、概要设计概要设计1、整体思路概述、整体思路概述 运行程序时,首先系统要进行初始化,然后等待输入操作类型,但是在未创建用户之 前,只能进行显示目录(此时为空目录)和退出的操作。当用户创建成功后,即可通过登 录用户来创建文件和文件夹。在输入操作选项之后,必须先登录用户,当确认用户身份正 确后,系统才能根据指定的命令进行操作,否则,不能进行操作,必须创建用户后,才能 以该用户的身份进行操作。操作完之后,用户会自动退出,没发出一个
8、操作命令,用户必 须登录一次。只有在发出的命令是显示目录或退出或返回上级目录时,才不需要用户的登 录。2、 数据流图数据流图创建用户创建文件创建文件夹上级菜单删除用户删除文件删除文件夹上级菜单读文件 写文件 执行文件 打开文件 关闭文件 显示目录 上级菜单显示目录42513主菜单输入界面模拟 文件 系统创建删除文件操作退出3、 功能流程图功能流程图四、四、详细设计详细设计1 1、实现原理、实现原理本程序是一个文件系统模拟程序,模拟文件管理的工作过程。 本程序设计一个最多有 10 个用户的文件系统,实现文件系统的模拟管理过程,可 以 进行创建用户、删除用户、创建文件、删除文件、创建文件夹、删除文
9、件夹、读文件、写 文件、执行文件、打开文件、关闭文件、显示目录等操作。 程序设置了主目录 MFD、用户文件目录 UFD 和用户文件夹目录 UDD,为打开文件设 置了运行目录 AFD。 文件保护简单使用了保护码:只读为r,读写为wr,只执行为do,其他则表示不允 许读写、执行。开始输入功能选项创建文件操作删除退出显示目录创建文件创建用户创建文件夹删除文件删除用户删除文件夹读文件写文件执行文件打开文件关闭文件显示目录用户名文件目录指针文件夹目录指针用户名文件目录指针文件夹目录指针文件名保护码文件长度文件内容文件夹名下一文件夹指针下一文件指针子文件夹指针下一文件指针打开文件名保护码文件内容读写指针M
10、FDUFDUDDAFD。 。2 2、重要数据结构说明、重要数据结构说明typedef struct ufd是文件的数据结构,即用户文件目录。 typedef struct udd是文件夹的数据结构,即用户文件夹目录。 typedef struct mfd是用户的数据结构,即主文件目录。 typedef struct afd是运行中文件的数据结构。 typedef struct sfile是指向文件的索引节点的数据结构。1)用户的数据结构)用户的数据结构 typedef struct mfd char username10;/*用户名*/ struct ufd *link;/*指向该用户的第一个
11、文件*/ struct udd *clink;/*指向该用户的第一个文件夹*/ MFD; 用来描所创建用户的信息的结点,包含用户名、指向用户文件和文件夹的两个指针。 所以的结点都存放在一个名字为 filesysten 的数组中。2)文件夹的数据结构)文件夹的数据结构typedef struct udd char foldername10;/*文件夹名*/ struct ufd *clink;/*指向该文件夹的第一个文件*/ struct udd *cnext;/*指向该文件夹的第一个文件夹*/ struct udd *link;/*指向同级文件夹*/ UDD; 用来描述文件夹的信息的结点。3)
12、文件的数据结构)文件的数据结构 typedef struct ufd char filename10;/*文件名*/ char filecon100;/*文件内容*/ char procode8;/*属性*/ int length;/*文件长度*/ struct ufd *nextfile;/*指向下一个文件*/ UFD; 用来描述文件信息的数据结构,同个用户的文件结点用一条链链接在一起。4)运行文件的数据结构)运行文件的数据结构 typedef struct afd/*运行文件目录*/ char filename10;/*打开文件名*/ char filecon100;/文件内容 char
13、procode4;/属性 int rwpointer;/*读写指针*/ AFD; 存放着运行文件的信息,标示着某文件正在执行,当关闭文件时,释放结点。5)共享文件的结点的数据结构)共享文件的结点的数据结构 typedef struct sfile char username10; /用户名 struct ufd *file; /共享的文件 struct sfile *next; /指向下一个共享文件的指针 SFILE; 每一个文件都有一个共享的结点,该节点存放文件的信息、文件的创造者的名字和指 向下一个共享文件的指针,所有文件的共享结点链接在一起,由 sharefile 指针指向该共享 链。3
14、 3、重要函数说明、重要函数说明void displayallfile()是用于显示目录的函数;在实验中,我将创建的所有用户都存储在 一个结点数组中,每个用户结点都有指向其文件和文件夹的指针,通过遍历结点数组来遍 历用户,通过用户的指针来遍历用户的文件和文件夹。 void createuser()是用于创建用户的函数;将创建的用户以 mfd 结点的结构存储在 filesystem 数组中。int findusername(char * username)是用户查找用户的函数,当找到函数时返回保存用户 的节点的下标;当返回值大于等于用户个数时,表示找不到用户。 void deleteuser()
15、是用于删除用户的函数;在 filesystem 数组中寻找指定名字的用户,当 找到该用户时,将用户从数组中删除,并将数组中该用户后面的其他用户的下标往前移一 位,即减一;如果找不到指定用户,则输出:“用户不存在!删除失败!” 。 sfile* findsharefile(char *filename)是用于查找共享文件的函数,当找到共享文件锁时返 回指向该文件的节点指针,如果找不到,则返回空。 UFD * findfilename(char *filename,UFD *filepointer)是查找文件的函数,返回指向特定 文件名的指针,或返回值为 NULL。 UDD * findfolde
16、rname(char *foldername,UDD *folderpointer)是查找文件夹的函数,返回 指向特定文件名的指针,或返回值为 NULL。 void displayfile(UFD *link)是用于显示文件属性的函数。 void createfile()是用于创建文件的函数;当要创建文件时,首先输入登录的用户名,如 果该用户不存,输入是否创建用户,否则退出,是的话则创建用户,然后再创建文件;当 用户存在时,则直接创建文件。创建文件时,若该登录的用户的文件中没有同名文件,则 直接创建,否则输出:“文件名已存在,请输入新的文件名!” ,通过输入新的文件名后再 创建文件。每创建一个文件,都会为文件创