操作系统原理课程设计-Linux文件系统仿真实现

上传人:na****u 文档编号:60945609 上传时间:2022-03-09 格式:DOC 页数:20 大小:415.50KB
收藏 版权申诉 举报 下载
操作系统原理课程设计-Linux文件系统仿真实现_第1页
第1页 / 共20页
操作系统原理课程设计-Linux文件系统仿真实现_第2页
第2页 / 共20页
操作系统原理课程设计-Linux文件系统仿真实现_第3页
第3页 / 共20页
资源描述:

《操作系统原理课程设计-Linux文件系统仿真实现》由会员分享,可在线阅读,更多相关《操作系统原理课程设计-Linux文件系统仿真实现(20页珍藏版)》请在装配图网上搜索。

1、 操作系统原理课程设计实践报告全套设计加扣 3012250582题 目: Linux文件系统仿真实现 姓 名: 学 院: 信息科技学院 专 业: 计算机科学技术系 班 级: 计科121 学 号: 指导教师: 职称: 教授 2015年3月 25日一、摘要: 在计算机操作系统的功能中,对文件存储设备的管理是一项非常重要的任务,文件在存储器上按一定的顺序有组织地存放,使得用户访问高效,操作方便。 文件系统是指操作系统中用于管理文件信息的机构。文件系统既要建立在一定的物理存储设备上,但却是一个逻辑上的概念。对用户来说,关于文件的各种操作及访问都需要通过文件系统进行,文件系统成为用户和存储设备之间的一个

2、重要界面。本实验主要讨论在Linux系统中文件以及文件系统管理的各种操作。理解Linux文件系统的另一个重要概念是inode。文件系统需要利用一个数据结构来记录文件以及目录的基本信息,这个数据结构在linux系统中称为inode。通过inode节点,文件系统可以对某个文件进行寻址,找到它在存储设备上的具体位置,因此inode即为文件的索引。作为系统管理者要知道inode是用户使用文件系统的重要软件资源。每个文件需要有inode记录其基本信息。linux系统中inode在建立文件系统时已经初始化且数量是固定的,换言之管理员要对inode的使用作出合理的管理。二、关键词:文件系统、物理位置、逻辑位

3、置、inode、索引三、实践目的及意义: 在对linux文件系统的仿真实现,不但能对操作系统的文件系统管理有着更加深刻的理解,而且对linux的环境也有了一定的了解。此外,仿真文件系统的设计过程中,也加深理解了文件系统的内部功能及内部实现。四、总体思路1、整体流程图:2、重要函数流程图int ParseCommand(); 分解命令函数五、具体解决方案1. 模拟磁盘系统文件A的组织方式: 将文件A分为101块,每块大小为512字节。其中,第0块存储一个大小为101的int行数组,用来表示A中每块的占用情况。这里注意,一个int行变量占用4个字节,101个占用404个字节,小于512。剩余的10

4、0块中,每块可以存储一个目录或文件,也可用用来存储文件的内容。块和块之间没有真正的界线。所谓界线,是通过文件读写时的定位来实现。2、 公共数据结构体:typedef struct FileNode int isdir;/目录文件识别标志char filenameFILENAME_LEN;/文件/目录名short ChildLocationCHILDNUMBER;/文件内容的磁盘地址 如果是文件 则表示文件内容所在的块short adr;/文件的地址short parent;/父目录的位置*PFileNode;3、 初始化: 文件初始时生成一个文件A,初始化根目录,并将其存放于第一块中。4、 主

5、要功能的实现方法:沈伦超: void Init();/初始化文件树 int ParseCommand();/接受输入的命令并把其分解成操作名和路径文件名 void ExecuteCommand();/执行命令 void ExecuteCommand( );/执行命令子函数,根据参数Para1调用相应的功能处理模块 FileNode* CreateFileNode(char filename,int isdir);/创建结点 Int ParseCommand();/分解命令子函数int FindPath(char *ph); 根据ph寻找路径,将“当前结点”指向该路径算法思想:1. 保存当前结点

6、currentFile和当前路径path,i初始化为零。2. 判断ph是否等于/,如果是,说明是根目录,将根目录读入currentFile,将path赋值为/,程序结束。3. 如果ph不等于/,判断ph第一个字符是不是/,如果是,则说明路径是从根目录开始的决定路径,于是将将根目录读入currentFile,i加1。4. 执行以下循环:(1) 判断phi是否为结束符,如果是,则程序结束。(2) 将ph中下一个目录名存入curpath中。通过目录名,在当前结点中需找对应目录名curpath的结点,如果有,则进入下一个节点。如果没有,或者curpath对应的不是目录而是文件,则回复当前结点和当前路径

7、并结束程序。 void defragComd(); int filedefragComd();/磁盘文件整理子程序 算法思想:(1) 整理文件和目录对应的块。定义整形变量i和j,i用来寻找空闲块,j用来寻找需要移位的块。从第二块开始,执行以下循环:1) 如果i和j二者有一个大于总块数,程序终止。2) 需找下一个空闲块(i为该块的位置),将j赋值为i+13) 如果j所对应的块为存储结点的块,则将该结点移动到i块中,更改结点自身的信息和其父结点的信息。(2) 整理文件内容所对应的块。定义整形变量i和j,i用来寻找空闲块,j用来寻找存储文件的块。从第二块开始,执行以下循环:1) 如果i和j二者有一个

8、大于总块数,程序终止。2) 寻找下一个空闲块(i为该块的位置),寻找下一个存储文件的块(j为该块的位置),读取j所对应的文件,查看文件内容所在的块数,如果块数大于i则将该快移动到i块中,并更改文件信息。3) 当检查完该文件后,j加1,以备寻找下一个文件。闫少博:1、 课程设计内容: 1、创建目录 2、显示目录下的内容包括文件及子目录的路径 3、当前目录名称的显示及修改 4、目录的返回与跳转 5、目录名称的重命名 6、删除目录二、操作函数的设计与实现:int cdComd();/处理cd命令 目录的跳转以及目录的返回int rdComd();/处理rd命令 删除目录int dirComd();/

9、处理dir命令 显示当前目录下文件信息int mdComd();/处理md命令 创建一个目录int helpComd();/处理help命令 命令选项的显示int renComd();/处理ren命令 文件或目录重命名int FindPath(char *ph);/寻找参数ph所指向的路径int FindFilename(char Para2);/从参数Para2中找到要建立或删除的文件、目录名,并把指针指向其父亲结点功能函数的思想:cdCond命令:cd是常用命令之一,他的主要作用是用来切换路径或者叫目录,这个命令经常结合dir命令来使用.两个常用的cd命令格式:CD+空格+一个点(cd.)

10、,这个命令是切换到当前目录,在网页设计中常用来表示相对路径,还有常见的压缩软件会经常看见一个点,两个点,第二个:cd+空格+二个点(cd.),这个命令是切换到上层目录。mdCond命令:是创建一个目录的命令,如果不待绝对路径的话,是在当前目录下创建。md kkk 就是在当前目录下创建kkk目录,md /user/kkk就是在user文件夹下创建文件夹kkk。 dirComd命令:dir 是查看目录的功能。并不能进入文件夹。只能是显示当前目录下的各种文件以及子目录的信息。如果想显示当前父目录下其他子目录的信息,就直接dir加上目录名称就可以了。rdComd命令:就是将当前目录下的子目录进行删除操

11、作,如果想要删除的目录是当前所处目录位置,则需要返回上一级目录进行删除,否则删除无效。renComd命令:首先返回或者进入到要操作的目录,更改其目录名称,然后重新写入父目录。李鹭:2、 课程设计内容: 1、从实际物理磁盘拷贝文件 2、创建文件 3、删除文件 4、显示文件内容 5、移动文件 6、重命名文件 7、复制文件3、 操作函数的设计与实现:int editComd();/处理edit命令int delComd();/处理del命令int renComd();/处理ren命令 文件或目录重命名int xcopyComd(); /复制文件int moveComd(); /移动文件int mor

12、eComd(); /显示文件int copyComd();/从外界拷贝txt文件到模拟系统中int FindPath(char *ph);/寻找参数ph所指向的路径int FindFilename(char Para2);/从参数Para2中找到要建立或删除的文件、目录名,并把指针指向其父亲结点FileNode* CreateFileNode(char filename,int isdir);/创建结点FileNode* GetFileNode(int pos);/从A中获取结点FileNode* GetNextFileNode(PFileNode cp);/根据路径获取下一个节点void c

13、lone(FileNode FN);int GetInput(char* buffer,unsigned int buffer_len);/获取输入int CheckCommand();/命令检查int GetDir(int begin,char* path,char* curDir);/获取路径功能函数的思想:copyCond命令:思想是,将真实磁盘上的文件,分块的读入一个临时数组中,然后再虚拟磁盘上寻找空闲块,一次放入。这里首先计算该文件的大小,确定读写次数,和剩余读写长度。通过循环,每次读取文件的一个块的长度,然后再虚拟磁盘上寻找空闲块,将其存入,随之更新虚拟文件中的信息,即让其和内容所

14、在块相关联。delCond命令:删除文件,无需操作文件所在的块,只需要更改其父结点的信息就可以,也就是说,实际上该块还存在原本的信息,但是系统会将和该块相关联的父目录的信息更改,从而无法找到该块,同时,该块被记录为空。这就是为什么有时候不小心删除东西后,还可以通过软件恢复。除非该部分磁盘被新的内容占用。editComd命令:创建一个文件。用int FindFilename(char Para2)函数,将Para2分开成路径和文件名,要创建的文件的文件名存入filename中,通过刚刚得到的路径定位到父目录,然后寻找空闲块,写入文件,同时更新父目录中的信息。moreComd命令:显示文件的内容。

15、通过FindFilename(Para2)来定位,如果找到文件,则检查其内容所在块数,然后依次读取每块,显示出来。moveComd命令:移动文件,实际效果就是复制文件+删除文件xcopyComd命令:首先通过FindFilename(Para2)定位到要操作的文件,用clone()函数克隆该结点,寻找空闲的块,将其写入,在通过FindFilename(Para3)定位到要复制到的父目录,更改其信息。renComd命令:首先通过FindFilename(Para2)定位到要操作的目录或文件,更改其文件名,然后重新写入目录。六、运行结果及分析1、 创建一个目录a。可见在根目录下存在一个新创建的名为

16、a的子目录。2、 进入目录a并在目录a下创建一个子目录b。可见在目录a下存在一个我们新创建的a的子目录b。3、 进入目录b创建两个子目录c和d。可见我们的仿真是可以进行多级多个目录操作的。4、 在目录b下删除目录d。可见在当前父目录下可以对子目录进行删除,如果想在父目录下直接对父目录进行删除则会出现错误。5、 返回目录a并在目录a下直接删除目录b。找b中的子目录也没有进入目录项,则b一下所有的目录被连带删除。6、 对于目录a重新命名为目录f。7、创建文件b edit b8、将文件a中的内容复制到b copy a.txt b9、显示文件b中的内容 more b 文件a中的内容如图所示显示b中的内

17、容10、删除文件删除文件b,显示b时显示文件不存在11、重命名文件将文件b重命名为c12、复制文件要调用目录函数y文件复制成x13、移动文件要调用用目录函数将x移动到b下并重新命名为y6、 存在问题: 此次课程设计中没有实现用户登录功能。文件权限的设置没有实现。程序的结构体设计也有待进一步优化。七、实践体会及心得:沈伦超:操作系统课程设计是本课程重要的实践教学环节。课程设计的目的,一方面使学生更透彻地理解操作系统的基本概念和原理,使之由抽象到具体;另一方面,通过课程设计加强学生的实验手段与实践技能,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。与本课程的实验教学相比,课程设计独立设

18、课,具有更多的学时,给学生更多自行设计、自主实验的机会,充分放手让学生真正培养学生的实践动手能力,全面提高学生的综合素质。 在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。 在设计的过程中遇到问题,可以说得是困难重重,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,加上自己本来基础就差,只能通过借鉴别人的程序来完成设计。通过一步一步的读懂慢慢转化成自己的东西。在设计中同样遇到了很多编程问题,最后在向同学的请教

19、下,问题得以解决。同时,在老师的身上我学得到很多实用的知识,在这向给过我们小组帮助的所有同学和老师表示感谢。闫少博: 这次操作系统课程设计是仿照Linux文件系统进行仿真实现。经过大家的共同努力,我们将程序按要求进行了设计并修改完善,基本实现了课程设计要求的功能。 通过课程设计,我们进一步了理解教材内容,掌握了各功能模块的工作原理,相互之间的联系,完整地建立系统的概念,激发我们的学习热情和主动性,培养我们的合作能力。在实践活动中,将所学知识运 用到实际,对于操作系统有了更深刻的理解。通过这次实验,我们对编程语言+有了更深一层次的认识,但还是很多的不足有待改进,对于编程来说还需要大量的实践,才能

20、不断前进与提高。李鹭:为了完成这一次课程设计,假期当中复习了C语言和C+的知识,同时也在网上参考了一部分关于模拟实现Linux文件系统的相关资料资料,对Linux文件系统有了初步的了解。在这次课程设计当中,我主要负责文件部分,例如文件的创建、删除、显示等功能。这里有一部分是从网上借鉴而来,比如说创建文件等,也有一部分是根据网上写的自己进行了部分修改,有小部分是自己独立写出来,开学后通过老师的讲解和书上的学习对Linux文件系统有了更深一层的了解。了解的文件系统的组织方式,通过数据结构的知识,组织相关数据,实现相关算法,对c+语言更加熟悉。文件系统的组织方式和相关的数据结构很重要,直接关系到相关

21、功能和其算法的实现。不足之处就是在创建文件的时候,不可以直接对文件进行写入,只可以通过copy函数将物理磁盘当中的内容复制到Linux文件当中去。总之通过这次课程设计,对自己的编程能力有了一定的提高,锻炼了自己的思考能力,对文件系统的管理有了更多的理解。 八、参考文献:1. 徐虹等编著.操作系统实验指导基于Linux内核.北京: 清华大学出版社.2004.2. 陈向群等编著. Windows内核实验教程. 北京: 机械工业出版社.2002.3. 周苏等编著. 操作系统原理实验. 北京: 科学出版社.2003.4. 张尧学编著. 计算机操作系统教程习题解答与实验指导. 北京: 清华大学出版社.2

22、000.5.操作系统课本九、核心部分源码:/创建结点FileNode* CreateFileNode(char filename,int isdir)strcpy(newFile.filename,filename);newFile.isdir = isdir;if(currentFile.adr!=0)newFile.parent = currentFile.adr;newFile.adr = EmptyPiece();elsenewFile.parent = 0;newFile.adr = 1;for(int i=0;iCHILDNUMBER;i+)newFile.ChildLocatio

23、ni=0;return &newFile;FileNode* GetFileNode(int pos)Read.seekg(pos)*ONE_PIECE_SIZE);Read.read(char*)&nextFile,sizeof(FileNode);return &nextFile;bool GetNextFileNode(FileNode cp,char* filename)for(int i = 0;i1)Read.seekg(cp.ChildLocationi*ONE_PIECE_SIZE);Read.read(char*)&nextFile,sizeof(FileNode);if(s

24、trcmp(nextFile.filename,filename)=0)delNumber = i;return true;return false;void clone(FileNode &FN,FileNode TFN)FN.adr = TFN.adr;for(int i = 0;iCHILDNUMBER;i+)FN.ChildLocationi = TFN.ChildLocationi;strcpy(FN.filename,TFN.filename);FN.isdir = TFN.isdir;FN.parent = TFN.parent;/初始化文件树void Init()Disc.op

25、en(A,ios:trunc);Write.open(A,ios:out);Read.open(A,ios:in);Write.seekg(101*ONE_PIECE_SIZE);Write.write(0,1);currentFile.adr=0;CreateFileNode(A,1);Write.seekg(1*ONE_PIECE_SIZE);Write.write(char*)&newFile,sizeof(FileNode);Write.flush();for(int i=0;i101;i+)ifEmptyi=0;ifEmpty1 = 1;ifEmpty0 = 3;/不属于任何一种情况

26、Write.seekg(0);Write.write(char*)ifEmpty,SIZE);Write.flush();clone(currentFile,newFile);int EmptyPiece()int i;for(i=1;i,path); /获取输入if(GetInput(Inputs,INPUT_LEN)=-1)printf(输入行太长。n);return 0;Para10=Para20=Para30=0; /获取参数Para1,即操作名while(Inputsi!= &Inputsi!=0 & iCOMMAND_LEN-1) Para1i=Inputsi;i+;/whileP

27、ara1i=0;/输入命令太长if(i=(COMMAND_LEN-1)return 1;/获取参数2,即路径文件名if(Inputsi!=0) while(Inputsi= & iINPUT_LEN-1) i+;j=0;while(Inputsi!= & Inputsi!=0 & iINPUT_LEN-1) Para2j=Inputsi;i+; j+;Para2j=0;/获取参数3,即文件名(重命名)if(Inputsi!=0)while(Inputsi= & iINPUT_LEN-1) i+;j=0;while(Inputsi!=0 & iINPUT_LEN-1) Para3j=Inputs

28、i;i+; j+;Para3j=0;Trim(Para1);Trim(Para2);Trim(Para3);/将操作名全部转换成小写字母for(k=0;k=0)filenamej=Para2i;i-; j+;filenamej=0;/获得逆序的文件或目录名,存入filename中if(i0) Para2i+1=0;else Para2i=0;j-; /filename逆转,获得正确的文件或目录名for(i=0;i0)int sign=FindPath(Para2);if(sign=0) return 0;return 1;/缓冲区安全输入子函数/如果输入超过buffer_len,则截取前buf

29、fer_len-1长度的输入,/buffer_len处字符用/0代替int GetInput(char* buffer,unsigned int buffer_len)int count=0;while(count,path); /获取输入if(GetInput(Inputs,INPUT_LEN)=-1)printf(输入行太长。n);return 0;Para10=Para20=Para30=0; /获取参数Para1,即操作名while(Inputsi!= &Inputsi!=0 & iCOMMAND_LEN-1) Para1i=Inputsi;i+;/whilePara1i=0;/输入命

30、令太长if(i=(COMMAND_LEN-1)return 1;/获取参数2,即路径文件名if(Inputsi!=0) while(Inputsi= & iINPUT_LEN-1) i+;j=0;while(Inputsi!= & Inputsi!=0 & iINPUT_LEN-1) Para2j=Inputsi;i+; j+;Para2j=0;/获取参数3,即文件名(重命名)if(Inputsi!=0)while(Inputsi= & iINPUT_LEN-1) i+;j=0;while(Inputsi!=0 & iINPUT_LEN-1) Para3j=Inputsi;i+; j+;Para3j=0;Trim(Para1);Trim(Para2);Trim(Para3);/将操作名全部转换成小写字母for(k=0;kstrlen(Para1);k+)ch=tolower(int)Para1k);Para1k=ch;return 1;

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!