操作系统课程设计报告-多用户、多级目录结构文件系统的设计与实现.doc_第1页
操作系统课程设计报告-多用户、多级目录结构文件系统的设计与实现.doc_第2页
操作系统课程设计报告-多用户、多级目录结构文件系统的设计与实现.doc_第3页
操作系统课程设计报告-多用户、多级目录结构文件系统的设计与实现.doc_第4页
操作系统课程设计报告-多用户、多级目录结构文件系统的设计与实现.doc_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 报 告设计题目:多用户、多级目录结构文件系统的设计与实现班 级:组长学号:组长姓名:指导教师:设计时间:2015年7月设计分工组长学号及姓名: 分工:构建系统框架,实现磁盘i节点调入内存,以及内存i节点的申请分配与回收,新建文件和目录,文件的读写组员1学号及姓名:分工:实现成组链接法分配与回收,实现用户登陆和注销,实现格式化初始化函数,参与系统界面的设计组员2学号及姓名:分工:组员3学号及姓名:分工:组员4学号及姓名:分工:31摘要文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于nand flash的固态硬盘)或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:文件系统的接口,对对象操纵和管理的软件集合,对象及属性。从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。关键词:操作系统,文件系统摘要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.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为文件名,是该文件的外部标识。所以,文件目录项记录了文件内、外部标识的对照关系。根据文件名可以找到辅存i节点号,由此便得到该文件的所有者、存取权、文件数据的地址健在等信息。unix的存储介质以512b为单位划分为块,从0开始直到最大容量并顺序加以编号就成了一个文件卷,也叫文件系统。unix中的文件系统磁盘存储区分配图如下:0#1#2#k#k+1#k+2#k+3#n#i节点区文件存储区引导区管理区本次课程设计是要实现一个简单的模拟unix文件系统。我们在磁盘中申请一个二进制文件模拟unix内存,依次初始化建立位示图区,i节点区,数据块区。并给已打开的文件建立文件打开表。本文件系统采用两级目录,其中第一级对应于用户账号,第二级对应于用户帐号下的文件。另外,为了简便文件系统未考虑文件共享,文件系统安全以及管道文件与设备文件等特殊内容。 首先应确定文件系统的数据结构:主目录、子目录及活动文件等。主目录和子目录都以文件的形式存放于磁盘,这样便于查找和修改。用户创建的文件,可以编号存储于磁盘上。如:file0,file1,file2并以编号作为物理地址,在目录中进行登记。2课程设计任务与要求2.1设计任务多用户、多级目录结构文件系统的设计与实现。2.2设计要求1、在深入理解操作系统基本原理的基础上,对于选定的题目,以小组为单位,先确定设计方案;2、设计系统的数据结构和程序结构,设计每个模块的处理流程。要求设计合理;3、编程序实现系统,要求实现可视化的运行界面,界面应清楚地反映出系统的运行结果;4、确定测试方案,选择测试用例,对系统进行测试;5、运行系统并要通过验收,讲解运行结果,说明系统的特色和创新之处,并回答指导教师的提问;6、提交课程设计报告。3算法及数据结构3.1算法的总体流程3.2超级块3.2.1功能 超级块位于块组的最前面,描述文件系统整体信息的数据结构,主要描述文件系统的目录和文件的静态分布情况,以及描述文件系统的各种组成结构的尺寸、数量等。3.2.2数据结构/超级块#define nicfree 50/成组链接法中的每组50块#define nicinod 50/超级块中空闲节点的最大块typedef 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;/超级块修改标志filsys;#endif3.2.3算法3.3磁盘i节点与内存i节点3.3.1功能linux中,文件查找不是通过文件名称来查找的。实际上是通过i节点来实现文件的查找定位的。我们可以形象的将i节点看做是一个指针。当文件存储到磁盘上去的时候,文件肯定会存放到一个磁盘位置上,i节点其实就是可以这么认为,把i节点看作是一个指向磁盘上该文件存储区的地址。事实上,i节点不仅包含了文件数据存储区的地址,还包含了很多信息,比如数据大小,等等文件信息。文件名是保存在一个目录项中。每一个目录项中都包含了文件名和i节点。我们可以通过一个图来看看目录项,i节点,文件数据四者之间的关系。3.3.2数据结构/内存i节点#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_addrnaddr;/物理块号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节点调入内存插入到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 dirsiz 14/每个目录项文件名所占字节数typedef struct char d_namedirsiz;/目录名unsigned short d_ino;/目录对应的磁盘i节点编号direct;3.4.3算法 总得来说就是根据目录的数据结构,再结合i节点去实现对文件夹的操作。显示列表函数:因为我们的direct数据结构里每次保存的都是当前目录下的列表,所以调用_dir()函数就等于把当前direct结构里的文件名显示出来。新建一个文件夹:创建一个目录时,先申请一个内存i节点,再分配相应的磁盘i节点,在当前目录表中进行登记,初始化自己的一些信息,记录该目录的上级目录,跳转的时候要用到。文件夹跳转:因为在新建的时候已经把当前目录的上级目录给记录下来,所以只需找到上级目录的磁盘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)/从用户打开文件表找到系统打开文件表再找到文件的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 int f_count;/引用计数inode *f_inode;/指向内存索引节点unsigned long f_off;/读写指针file;#endif3.5.3算法总得来说就是根据系统打开文件表去找到内存i节点指针,只有找到了内存i节点指针才能对文件进行操作。创建一个新的文件:先查看要创建的这个名字是否存在,若存在就不允许在继续创建了,因为不允许重名是文件系统的基本要求。若不存在就说明允许创建此文件。先申请一个内存i节点,在当前目录表中进行登记,在系统打开文件表中也进行登记一下,返回该文件在系统打开文件表的位置,以便将接下来进行读写操作。打开一个文件:当我们把一个文件关闭之后又想继续对此文件进行操作就必须先把文件的i节点信息调入内存。关闭一个文件:当我们对一个文件读写完毕之后,不想再对此文件操作,出于保护的目的,防止别的用户找到我们的内存i节点信息,就需要我们把该文件的i节点信息从内存里注销掉,即关闭一个文件。删除一个文件:更新目录表,释放i节点。释放i节点信息时还要考虑有没有被别的用户关联。读一个文件:从系统打开文件表中获取内存i节点信息,找到其对应的文件物理块信息,将其读入到内存并显示出来。写一个文件:从系统打开文件表中找到内存i节点信息,获取相应的物理磁盘块的分配情况以及文件的访问模式(涉及到权限问题),根据将要写入的信息的大小为其分配相应的磁盘块,写入之后保存。4程序设计与实现4.1程序流程图 结束4.2程序说明运行程序,首先跳出界面为一个欢迎界面,如图4-1所示: 图4-1运行程序欢迎界面点击确定进入用户登陆界面,如图4-2所示:(第一次必须格式化登陆)图4-2用户登陆界面格式化登陆后的界面如图4-3所示: 图4-3用户操作界面新建文件夹界面,如图4-3-1所示: 图4-3-1新建文件夹界面 新建文件界面,如图4-3-2所示:(单选按钮一定要选到文件,然后再点击新建。本来想实现文件夹一个图片,文件一个图片,能力有限没有实现) 图4-3-2用户新建文件界面 单击想要删除的文件夹,单击之后点击删除文件夹按钮,会弹出一个对话框,询问是否删除。点是就会删除,点取消就会取消。界面如图4-4所示:图4-4删除文件夹操作界面新建一个文件之后,我们可能要对其进行读、写、删除操作,单击文件会弹出功能对话框让你进行选择。例如我们新建了一个名字为su的文件,当我们单击这个文件的时候就会弹出一个界面,界面如图4-5所示: 图4-5用户对文件操作功能选择界面如果我们选择了写功能,就在目录右边的编辑框里输入我们想要写入的信息,写完之后点击输入完毕,即可保存。界面效果如图4-5-1所示: 图4-5-1写操作界面提示如果我们选择了读功能,他会读出文件内容并显示在目录右边的编辑框里,这个时候我们可以在其后面追加信息,追加完毕之后点击输入完毕按钮,即可保存我们追加的信息,这个算是隐藏的功能。别如我们在写文件时对su这个文件写了“我是东北大学的一名学生”,在读的时候就应该读出刚才写的信息。界面如图4-5-2所示: 图4-5-2用户读文件界面如果我们选择了删除文件的功能,那我们就会删除该文件,不在记录中出现。比如我们要删除su这个文件,点完确定之后再次显示该目录列表时就不会显示出su这个文件。界面如图4-5-3所示: 图4-5-3用户删除一个文件操作停机按钮,是我们最后退出程序的时候,要对我们的信息进行一下保存。保存到相应的文件中,以便下次非格式化登陆时能读取出来信息。这个就不用界面来演示了。隐藏的功能还有文件夹的跳转,这个我们在实现的时候就是想做到跟windows一样双击文件夹进入文件夹里面显示里面的内容,然后我们根据mfc利用双击函数实现了类似windows的文件跳转功能,这个地方有必要说明一下。 另外,多用户登陆和切换用户这个地方也有实现,但是功能比较低级就不再演示。4.3实验结果 我们的系统基本实现了老师的要求,多用户下的多级目录,用户登陆和退出,系统的初始化,文件的创建,文件的打开,文件的读,文件的写,文件的关闭,删除文件,创建目录,改变目录,列出文件目录,格式化登陆,以及非格式化登陆。其实实验结果在程序说明的时候已经举出了实例,我们这里不再重复说明,只说在说明里没有提到的非格式化登陆一个用户。指定用户名3966,用户密码20123966。假定在main目录里创建一个文件夹3966,跳转到3966文件夹里,在3966文件夹里创建一个名字叫3966的文件(逻辑上是可以的,实际上我们也实现了),对这个文件进行写操作,写入“我们是东北大学的学生,来自计算机1206班,我们班的学生操作系统课设都做的可好了。我们是东北大学的学生,来自计算机1206班,我们班的学生操作系统课设都做的可好了。我们是东北大学的学生,来自计算机1206班,我们班的学生操作系统课设都做的可好了。我们是东北大学的学生,来自计算机1206班,我们班的学生操作系统课设都做的可好了。我们是东北大学的学生,来自计算机1206班,我们班的学生操作系统课设都做的可好了。我们是东北大学的学生,来自计算机1206班,我们班的学生操作系统课设都做的可好了。我们是东北大学的学生,来自计算机1206班,我们班的学生操作系统课设都做的可好了。(重复7遍,内容尽量多一点)”。停机之后,我们非格式化登陆,依然可以找到这些信息。这一点老师在验收的时候已经看到了,所以就不再继续展示了。5结论操作系统课程设计是本课程重要的实践教学环节。课程设计的目的,一方面使学生更透彻地理解操作系统的基本概念和原理,使之由抽象到具体;另一方面,通过课程设计加强学生的实验手段与实践技能,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。与本课程的实验教学相比,课程设计独立设课,具有更多的学时,给学生更多自行设计、自主实验的机会,充分放手让学生真正培养学生的实践动手能力,全面提高学生的综合素质。现代操作系统都有文件管理功能,通过本次操作系统的课程设计我对于c+语言中的磁盘文件输入和输出操作的运用有了很大的进步,基本搞懂了操作系统中文件的管理方法和文件的读取方式。同时也对于操作系统中的文件存取方式,文件的逻辑结构和文件在系统中的存储方法有了比较清晰的理解。在本次实验中开始的时候遇到了很多困难,比如对人文件的存储方式,怎样管理多用户下的文件都不了解,但是通过看书、网上查资料有了了解。通过开始的简单的实现一两个模块来慢慢的前进,最终基本实现了系统的设计,虽然还是有一些缺陷但是已经比较接近指导书上的要求。6参考文献1. 徐虹等编著.操作系统实验指导基于linux内核.北京: 清华大学出版社.2004.2. 陈向群等编著. windows内核实验教程. 北京: 机械工业出版社.2002.3. 周苏等编著. 操作系统原理实验. 北京: 科学出版社.2003.4. 张尧学编著. 计算机操作系统教程习题解答与实验指导. 北京: 清华大学出版社.2000.5.msdn帮助文档7收获、体会和建议 操作系统是计算机科学与技术领域中最为活跃的学科之一,因而操作系统课程也自然是计算机专业的一门核心专业基础课。操作系统课程内容综合了基础理论教学、课程实践教学、最新技术追踪等多项内容。但由于操作系统的高度复杂性,使得它成为专业课中最难学的课程之一。通过对操作系统原理的学习,要求理解操作系统在计算机系统中的作用、地位和特点,熟练掌握和运用操作系统在进行计算机软硬件资源管理和调度时常用的概念、方法、策略、算法、手段等。 操作系统课程概念多、内容广、难度大,抽象强。因此,操作系统课程的学习面临这样一些难题:如何形象化地学习和理解抽象的操作系统概念及原理,如何紧跟飞速发展的操作系统技术。为了解决这些问题,我们认为不但要学好操作系统原理,还要加强操作系统实验。操作系统实验可帮助学生理论联系实际,巩固和复习所学过的操作系统概念与原理;也增强学生的实践能力,培养学生的动手能力,提高学生综合分析问题和解决问题的能力。 linux是目前常用的流行操作系统之一,其最大的特点是开放源代码。使用linux操作系统和分析nux内核代码是学习操作系统课程的很好选择。通过对linux操作系统内核源代码的分析和实践,可以帮助学生对操作系统的用户界面和编程界面、体系结构、各组成部分的实现技术等,有更深入的整体认识;帮助学生进一步掌握操作系统原理。linux内核的学习可以分两个阶段:在linux内核分析阶段,通过阅读linux内核源代码,改变部分内核源程序,改变系统行为,从而学习操作系统各个组成部分的实现机理,巩固操作系统原理知识。在linux内核改进阶段,通过深人、综合分析linux操作系统的实现机理,通过一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论