操作系统课程设计报告多用户、多级目录结构文件系统的设计与实现.doc
《操作系统课程设计报告多用户、多级目录结构文件系统的设计与实现.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计报告多用户、多级目录结构文件系统的设计与实现.doc(31页珍藏版)》请在三一办公上搜索。
1、课 程 设 计 报 告设计题目:多用户、多级目录结构文件系统的设计与实现班 级:组长学号:组长姓名:指导教师:设计时间:2015年7月设计分工组长学号及姓名: 分工:构建系统框架,实现磁盘i节点调入内存,以及内存i节点的申请分配与回收,新建文件和目录,文件的读写组员1学号及姓名:分工:实现成组链接法分配与回收,实现用户登陆和注销,实现格式化初始化函数,参与系统界面的设计组员2学号及姓名:分工:组员3学号及姓名:分工:组员4学号及姓名:分工:摘要文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。
2、操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。关键词:操作系统,文件系统摘要31概述52课程设计任务与要求62.1设计任务62.2设计要求63算法及数据结构73.1算法的总体流程73.2超级块83.2.1功能83.2.2数据结构83.2.3算法93.3磁盘i节点与内存i节点93.
3、3.1功能103.3.2数据结构103.3.3算法113.4文件夹操作123.4.1功能133.4.2数据结构133.4.3算法133.5文件的操作143.5.1功能153.5.2数据结构153.5.3算法154程序设计与实现164.1程序流程图174.2程序说明174.3实验结果235结论246参考文献257收获、体会和建议261概述UNIX采用树型目录结构,每个目录表称为一个目录文件。一个目录文件是由目录项组成的。每个目录项包含16B,一个辅存磁盘块(512B)包含32个目录项。在目录项中,第1、2字节为相应文件的外存i节点号,是该文件的内部标识;后14B为文件名,是该文件的外部标识。所以
4、,文件目录项记录了文件内、外部标识的对照关系。根据文件名可以找到辅存i节点号,由此便得到该文件的所有者、存取权、文件数据的地址健在等信息。UNIX的存储介质以512B为单位划分为块,从0开始直到最大容量并顺序加以编号就成了一个文件卷,也叫文件系统。UNIX中的文件系统磁盘存储区分配图如下:0#1#2#K#K+1#K+2#K+3#n#i节点区文件存储区引导区管理区本次课程设计是要实现一个简单的模拟UNIX文件系统。我们在磁盘中申请一个二进制文件模拟UNIX内存,依次初始化建立位示图区,I节点区,数据块区。并给已打开的文件建立文件打开表。本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应
5、于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。 首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2并以编号作为物理地址,在目录中进行登记。2课程设计任务与要求2.1设计任务多用户、多级目录结构文件系统的设计与实现。2.2设计要求1、在深入理解操作系统基本原理的基础上,对于选定的题目,以小组为单位,先确定设计方案;2、设计系统的数据结构和程序结构,设计每个模块的处理流程。要求设计合理;3、编程序实
6、现系统,要求实现可视化的运行界面,界面应清楚地反映出系统的运行结果;4、确定测试方案,选择测试用例,对系统进行测试;5、运行系统并要通过验收,讲解运行结果,说明系统的特色和创新之处,并回答指导教师的提问;6、提交课程设计报告。3算法及数据结构3.1算法的总体流程3.2超级块3.2.1功能 超级块位于块组的最前面,描述文件系统整体信息的数据结构,主要描述文件系统的目录和文件的静态分布情况,以及描述文件系统的各种组成结构的尺寸、数量等。3.2.2数据结构/超级块#define NICFREE 50/成组链接法中的每组50块#define NICINOD 50/超级块中空闲节点的最大块typedef
7、 structunsigned short s_isize;/索引节点块块数unsigned long s_fsize;/数据块块数unsigned int s_nfree;/空闲块块数unsigned short s_pfree;/栈深unsigned int s_freeNICFREE;/空闲块堆栈unsigned int s_ninode;/空闲索引节点数unsigned short s_pinode;/空闲索引节点指针unsigned int s_inodeNICINOD;/空闲索引节点数组unsigned int s_rinode;/铭记索引节点char s_fmod;/超级块修改标
8、志Filsys;#endif3.2.3算法3.3磁盘i节点与内存i节点3.3.1功能linux中,文件查找不是通过文件名称来查找的。实际上是通过i节点来实现文件的查找定位的。我们可以形象的将i节点看做是一个指针。当文件存储到磁盘上去的时候,文件肯定会存放到一个磁盘位置上,i节点其实就是可以这么认为,把i节点看作是一个指向磁盘上该文件存储区的地址。事实上,i节点不仅包含了文件数据存储区的地址,还包含了很多信息,比如数据大小,等等文件信息。文件名是保存在一个目录项中。每一个目录项中都包含了文件名和i节点。我们可以通过一个图来看看目录项,i节点,文件数据四者之间的关系。3.3.2数据结构/内存i节点
9、#define NADDR 10/每个i节点最多指向10块typedef struct inodestruct inode *i_forw;char i_flag; unsigned int i_ino;/磁盘索引节点编号unsigned int i_count;/引用计数unsigned short di_number;/关联计数unsigned short di_mode;/文件模式unsigned short di_uid;/所属用户unsigned short di_gid;/所属用户组unsigned long di_size;/文件大小unsigned short di_addrN
10、ADDR;/物理块号Inode;/磁盘索引节点#define NADDR 10/每个i节点最多指向10块typedef struct unsigned short di_number;/关联文件数unsigned short di_mode;/存取权限unsigned short di_uid;/所属用户unsigned short di_gid;/所属用户组unsigned long di_size;/文件大小unsigned short di_addrNADDR;/物理块号Dinode; 开始3.3.3算法N 结束Y返回该i节点的指针查看磁盘i节点在内存利用iget()函数将磁盘i节点调入
11、内存插入到hash链表中从当前目录查找文件名对应的磁盘i节点编号3.4文件夹操作3.4.1功能新建一个文件夹,文件夹的跳转,当前目录下的文件展示。对应的函数原型为:void _dir()/显示当前目录列表; void mkdir(char *dirname)/目录创建函数; void cd(char *dirname)/跳转到指定目录下;3.4.2数据结构/目录结构#define DIRNUM 128/每个目录所包含的最大文件数typedef struct Direct directDIRNUM;/最大存储128个文件int size;/实际文件的个数Dir;/目录项结构#define DIR
12、SIZ 14/每个目录项文件名所占字节数typedef struct char d_nameDIRSIZ;/目录名unsigned short d_ino;/目录对应的磁盘i节点编号Direct;3.4.3算法 总得来说就是根据目录的数据结构,再结合i节点去实现对文件夹的操作。显示列表函数:因为我们的direct数据结构里每次保存的都是当前目录下的列表,所以调用_dir()函数就等于把当前direct结构里的文件名显示出来。新建一个文件夹:创建一个目录时,先申请一个内存i节点,再分配相应的磁盘i节点,在当前目录表中进行登记,初始化自己的一些信息,记录该目录的上级目录,跳转的时候要用到。文件夹跳
13、转:因为在新建的时候已经把当前目录的上级目录给记录下来,所以只需找到上级目录的磁盘i节点信息,然后保存当前目录,调出上级目录的磁盘i节点,再重新显示上级目录的列表信息。3.5文件的操作3.5.1功能新建一个文件,我们可以对其进行读、写、删除操作。关闭文件之后如果还想对其进行读、写、删除操作,那么我们就要重新打开文件,即将其i节点信息先调入内存。具体函数原型如下:int create(int user_id,char *filename,short mode)/返回值代表用户打开文件的编号;int open(int user_id,char *filename,short openmode)/从
14、用户打开文件表找到系统打开文件表再找到文件的i节点;void close(int user_id,int fd1)/修改一下系统打开文件表和用户打开文件表;bool _delete(char *filename)/更新目录表,释放i节点;int read(int fd1,char *&buf,int size)/读文件操作;int write(int fd1,char *buf,int size)/文件内存i节点指针,数据,数据大小;3.5.2数据结构/系统打开表#includeinode.htypedef structunsigned short f_flag;/文件操作标志unsigned
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 报告 多用户 多级 目录 结构 文件系统 设计 实现
链接地址:https://www.31ppt.com/p-2388266.html