实 验 报 告
实验题目:文件系统
姓名: 学号: 课程名称: 所在学院: 专业班级: 任课教师:
操作系统 信息科学与工程学院
计算机
实验项目名称 文件系统 一、实验目的与要求: 1、通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及其内部实现。 2、熟悉文件管理系统的设计方法,加深对所学各种文件操作的了解及其操作方法的特点。 3、通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。 4、通过编程实现这些算法 ,更好地掌握操作系统的原理及实现方法 ,提高综合运用各专业课知识的能力。 二、实验设备及软件: 一台PC(Linux系统) 三、实验方法(原理、流程图) 试验方法 (1)首先应当确定文件系统的数据结构:主目录、子目录以及活动文件等。主目录和子 目录都以文件的形式存放于磁盘,这样便于查找和修改。 (2)用户创建文件,可以编号存储于磁盘上。如 file0,file1,file2…并以编号作为物理地 址,在目录中登记。 文件系统功能流程图 图1.文件系统总体命令分析 图2.登录流程图 图3. ialloc流程图 图4.balloc流程图 图5.密码修改流程图 图6.初始化磁盘 图 7.显示所有子目录 dir/ls 操作流程图 图8. 创建文件 creatfile 、创建目录 mkdir 流程图 图9. 改变当前路径 cd 操作流程图 实验原理 1.文件操作
◆mkdir 创建目录文件模块,输入 mkdir 命令,回车,输入文件名,回车,即会在当前目录文件下创建一个名为刚刚输入的文件名的目录文件。 在该创建过程中首先要判断该目录中有没有同名的文件, 如果有的话就创建失败, 还要判断在该目录下有没有创建文件的权限,有权限才可以创建。具体流程图查看第二节,系统流程图设计部分。
◆del 删除文件模块,输入 del命令,回车,输入文件名,回车,即会在当前目录文件下删除一个名为刚刚输入的文件名的数据文件。 在该删除过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了, 还要判断在该目录下有没有删除文件的权限, 有权限才可以删除。具体流程图查看第二节,系统流程图设计部分。
◆ls 显示当前目录下所有目录的模块,输入 ls 命令,回车 ,即会在屏幕上显示当前目录下的所有目录。在该过程中要判断该目录中是否为空,如果为空就没有必要执行该操作了。执行操作时,要调用 readdir (INode inode )函数 ,先读入文件内容到 content 里面,然后直接输出。如果子目录里面还有子目录,则通过递归,一并输出来。具体流程图查看第二节,系统流程图设计部分。 ◆chmod 改变文件权限模块,输入 chmod 命令,回车,输入文件名,回车,即会根据不同类别的用户在屏幕上提示要改变哪一类用户的权限。 如果是文件拥有者执行该操作, 他可以选择修改自己、 其他用户的权限; 如果是文件所属组成员执行该操作, 他可以选择修改自己、 其他用户的权限; 如果是其他用户执行该操作,他只能选择修改自己的权限;在该过程中要判断该目录中是否存在该文件,如果不存在就没有必要执行该操作了。执行操作时,要判断对该文件有没有执行写操作的权利, 没有就不能进行。 具体流程图查看第二节, 系统 流程图设计部分。
◆cd 改变当前所在目录的模块。输入 cd,回车,相应的字符串,回车,则会根据输入字符串的不同跳转到不同的目录下。如果字符串是‘ .’ ,则到当前目录;如果字符串是‘ ..’ ,则到父目录;如果字符串是‘ /’ ,则到根目录;如果字符串是当前目录下的子目录, 则到该子目录;如果字符串是一个决定路径, 则到该绝对路径。 当然在执行的时候要判断有没有该子目录或者该绝对路径, 如果没有的话, 就不能执行。 具体流程图查看第二节, 系统流程图设计部分。
2. 用户操作
◆login 用户注销模块,输入 login ,回车,当前用户就退出了,需要重新登录。
◆pw 用户修改口令模块,输入 pw ,回车,则会提示输入原始密码,输入正确 了才可以提示输入新密码,并且要求新密码输入两次,两次一样了才能通过修改密码成功。具体流程图查看第二节,系统流程图设计部分。
◆logout 用户退出系统模块,输入 logout ,回车,系统自动退出。
四、实验过程、步骤及内容 实验内容 为 LINUX 系统设计一个简单的二级文件系统,要求 (1)文件实现下列几条命令 login 用户登录 logout 注销用户 dir 列文件目录 creatfile 创建文件 del删除目录或文件 cd 改变目录 mkdir 创建目录 adduser 增加用户 deluser 删除用户 shell命令解析 chmod 改变文件权限 pw修改用户密码 edit 编辑文件 fileopen 打开文件 fileclose关闭文件 fileread 读文件 filewrite写文件 access文件访问控制 format格式化文件系统 install装载文件系统 iput 将磁盘 i 结点放入指定的 i 结点块中 ialloc分配一个 i 结点,返回 i 结点号 ifree 将指定的 i 结点释放 balloc分配一块磁盘块,返回盘块号 bfree将指定的磁盘块释放 psw_get读 psw 信息 psw_put写 psw 信息 psw_read将 psw 中的用户信息读入内存 thepsw 中 psw_writeback将 thepsw 写回磁盘 sub_dir_get根据 i 结点号,返回目录表 (2)列目录时要列出文件名、物理地址、保护码和文件长度: DISKSIZE 1024*1024 //磁盘文件大小 BLOCKSIZE 512 //磁盘块大小 FILENAME \"disk.txt\" // 超级块参数 SUPBLOCK 5 // 超级块所需盘块 bSTACKSIZE 50 // 空闲盘块栈大小 iSTACKSIZE 500 // 空闲 i 接点栈大小 SUPSTART BLOCKSIZE // 超级块起始的物理地址 SUPSIZE sizeof(struct superblock) // 超级块大小 结点参数 INODESIZE sizeof(struct dinode) // 一个 i 结点大小 INODENUM_B 5 // 每个盘块 i 结点个数 INODEBLOCK 100 // i 结点所需盘块 INODENUM 500 // i 结点数目 ADDRNUM 13 // i 结点可连接的盘块数 INODESTART 6*BLOCKSIZE // i 界点起始的物理地址 用户密码区参数 USERSIZE 20 // 用户名长度 PWSIZE 30 // 密码长度 GROUPSIZE 20 // 组名长度 USERNUM 68 // 最多用户个数(其实比最大数多几个) USERBLOCK 14 // 用户密码去所需盘块 PSWORDSTART 111*BLOCKSIZE // 用户密码区起始地址 PSWORDSIZE sizeof(struct psword) // 密码记录项长度 主用户目录区参数(特殊的文件目录,初始化就确定) ROOTSTART 106*BLOCKSIZE // /目录块地址 DIRBLOCK 4 // 主用户目录所需磁盘块数 DIRSTART 107*BLOCKSIZE // 主用户目录起始地址 文件目录一般参数 DIRECTSIZE sizeof(struct direct) // 目录项长度 DIRECTNUM 16 // 每块最多可分配目录项的数目 DIRECTSIZE_A 30 // 实际分配目录项长度 DIRSIZE 20 // 目录文件名长度 DIRNUM (10*DIRECTNUM) // 最大子目录数(i结点可连接10个盘块,每块可放17项) DATASTART 131 // 数据区开始地址 DATANUM 1917 // 数据区块数 HASHNUM 10 // HASH 表长度 DEFAULTMODE 00770 //默认权限 (3)源文件可以进行读写保护 (4)在系统中用一个文件来模拟一个磁盘; (5)能实际演示这个文件系统。基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求: 1)设计一个 多个用户的文件系统,每次用户可保存 多个文件。 2)程序采用二级文件目录和用户文件目录。另外,为打开文件设置了运行文件目录( AFD)。 3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。 4)因系统小,文件目录的检索使用了简单的线性搜索。 5)文件保护简单使用了三位保护码:允许读写执行、对应位为 1,对应位为 0,则表示不允许读写、执行。 6)程序中使用的主要设计结构如下:主文件目录和用户文件目录,打开文件目录即运行文件目录, 五、实验数据(现象)处理分析 实验现象 成功运行文件系统,并开始登录: 列出目录: 添加新用户密码不一致而添加失败: 添加新用户: 退出登录: 添加新用户退出登录到重新登录新用户: 修改用户密码: 创建目录以及列出新建的目录: 删除文件目录: 改变目录(进入指定目录): 没有权限创建文件目录的情况: 删除用户失败的情况: 尝试改变文件权限: 用户删除操作的权限控制: 本文件系统还有很多功能,修改文件权限、 文件拥有者、 文件所属组与前面的目录操作是相同的,在这里不必全部截图了。每个命令的实现或者实现过程当中的各式各样的错误,加深了文件系统命令的理解。 六、实验结论 通过本次实验最大的体会就是体验一下完成一个完整的文件系统的感受。 刚开始的时候我认真去看了,然后还仔细翻看了书本上的内容。因为一开始对于各种概念都很模糊,都不知道那么多参考代码怎么运行,一直研究成组连接运行的方法,最后全部合到一起成功运行了。实现了一个完整的文件系统功能。最主要的问题还是怎么实现空盘块的管理,应该如何设计, 文件目录的管理等等内容的理解工作。理解了这些内容以后, 我就开始着手每个功能实现。它的逻辑要比人脑严谨得多。 哪怕出现一点点错误它就会运行错误。 只能够通过一步步断点调试, 看每一步的变量情况才会发现这种错误。Linux 系统文件管理各种功能的理解,功能的流程设计,代码的实现。所以整个流程下来理解的知识要更多更深刻,函数的理解更深,每一个功能都要理解的基础上不断地改正实现。以完成的任务, 结果却反反复复得修改程序代码, 最后总算还是完成了。现在感 觉不论是对操作系统这门课的理解, 还是对一个程序员的编写者的感悟, 或者是对于一份报告的编写,都学到了很多新的知识。 七、教师批阅意见: 成绩评定: 教师签字: 年 月 日
八、备注:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务