操作系统课程设计-二级文件系统(java)

上传人:pu****.1 文档编号:558496559 上传时间:2023-06-15 格式:DOC 页数:21 大小:98KB
返回 下载 相关 举报
操作系统课程设计-二级文件系统(java)_第1页
第1页 / 共21页
操作系统课程设计-二级文件系统(java)_第2页
第2页 / 共21页
操作系统课程设计-二级文件系统(java)_第3页
第3页 / 共21页
操作系统课程设计-二级文件系统(java)_第4页
第4页 / 共21页
操作系统课程设计-二级文件系统(java)_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《操作系统课程设计-二级文件系统(java)》由会员分享,可在线阅读,更多相关《操作系统课程设计-二级文件系统(java)(21页珍藏版)》请在金锄头文库上搜索。

1、操作系统课程设计报告二级文件系统(java)姓名:李爱军 班级:计091-2 学号:200925501211 指导教师:翟一鸣 日期:2012-08-30目录一、实验目的3二、实验内容3三、实验过程3四、设计思路4五、实现的功能5六、实验感悟5附录:程序主要代码5一、实验目的 通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能及内部实现。二、实验内容 为linux系统设计一个简单的二级文件系统。要求做到以下几点: 1、可以实现下列几条命令(至少4条); login用户登陆 dir 列文件目录 create创建文件 delete删除文件 open 打开文件 close关闭文件 read

2、 读文件 write写文件 2、列目录时要列出文件名、物理地址、保护码和文件长度; 3、源文件可以进行读写保护。三、实验过程1、 程序流程登录输入用户名用户存在进入目录管理注册登陆完成否是 用户登录流程列出目录文件读取文件展示文件完成是否当前用户文件否是列文件目录流程2、 主要类介绍(1) 、public class Systems 文件系统的主类(2) 、public class MyFile自定义的文件结构体类(3) 、public class MyDirectory 自定义的目录的结构体类(4) 、public class SuperBlock implements Serializab

3、le 超级快结构体类(5) 、public class INode implements Serializable, Comparable 自定义INode节点实体类(6) 、public class FileTools 自定义数据文件的读写工具类四、设计思路1、一个磁盘的有扇区(超级块)、索引块区(Inode节点区)、存储区(数据块区)2、扇区中主要是存储磁盘的总大小、空闲Inode节点、使用的Inode节点、已使用空间、空闲空间。3、Inode节点主要存储 :当前的地址、文件的长度、用户名、读写的权限、文件是否打开、文件的类型(0代表目录,1代表普通文件)、对应文件块的地址(即序号)、父节

4、点块号、自己的当前节点的序号。4、自定义目录:文件对应Inode的索引、文件的名字、当前目录下的Inode和文件的对应关系(private TreeMap tree)5、自定应文件:文件对应Inode的索引、文件名字、/数据内容。6、控制类:得到用户的输入操作调用相应的操作。五、实现的功能1、用户的注册和登陆2、 dir 列文件目录3、 create创建文件4、 delete删除文件5、 read读文件6、 write写文件7、 cd 更改目录8、 rename 重命名文件名六、实验感悟首先想说一句话:“没被逼着是不会出大力的”。解释一下,看到同学们用的都是以前的C或者是C+的文件代码。我自己

5、考来一份,这个悲催啊,自己的CC+的功底实在是太差劲的,直接看不懂,也没那耐心烦。从网上down了几份java的代码。其中有一份写的不错,很巧妙的实现了老师的要求。可是以真正的课程设计的原理真是风马牛不相及啊。怕老师不让过,于是下决心自己写一下(觉得自己对相应的原理还是知道一些的)。我的痛苦的过程也就开始了。我真的有一次体味到写程序最难得不是代码的编写,而是思路、思路、思路。前一天很容易的就实现了用户登录相应的操作。同时数据读写的工具类和项目的框架也算是粗糙的完成了。可是接下来就写不下去了,原因是Inode和file或者directory之间是如何关联的。这三个类的属性是如何定义和分配的。自己

6、拿笔也在纸上画,又和舍友李新等同学探讨。有思考了一天多,模模糊糊的开始写,又改有写。就这样一点一点的写着改着,痛苦着并高兴着。终于粗糙的写完了。时间太短啊,还有许多可以优化的地方还没来得修改。周五下午,怀着一颗忐忑的心找老师验程序。当听到老师的一句:“写的还不错么!”那种高兴无法用言语来形容!这几天的痛苦、熬夜都值了。谢谢老师的夸奖!附录:程序主要代码1. Systems.javaimport java.util.ArrayList;import java.util.Iterator;import java.util.Scanner;import java.util.Set;import ja

7、va.util.StringTokenizer;/* * 文件管理系统 主类 * * author liaijun * */public class Systems Scanner sc = new Scanner(System.in);/ 从控制台读取数据public static SuperBlock sb = null;/ 超级块 记录虚拟磁盘的总信息public static ArrayList users;/ 用户名数组;public static INode inodes = new INode100;/ i节点记录数据结构public static Object blocks =

8、 new Object100;/ 文件块的结构;public static String name = null;/ 当前登录用户名public static INode now_inode = null;/ 当前节点public static Object now_file = null;/ public static INode father;/父节点/ public static INode me;/自己的当前节点/* * param args */public static void main(String args) Systems sts = new Systems();sts.i

9、nit();/ 初始化数据;sts.login();public void init() users = (ArrayList) FileTools.read(f:users.dat);/* * if(null!=FileTools.read(f:users.dat) /inodes=(INode) * FileTools.read(f:users.dat); */sb = (SuperBlock) FileTools.read(f:super.dat);if (null = sb | sb.getAlreadyuse() = 0) for (int i = 0; i 100; i+) ino

10、desi = new INode();sb = new SuperBlock();for (int i = 0; i 100; i+) sb.setInode_free(i);FileTools.write(f:super.dat, sb);if (null = users) users = new ArrayList();/ 存放整个文件系统users.add(admin);FileTools.write(f:users.dat, users);public void login() System.out.println(*欢迎使用该文件管理系统*);System.out.println(请

11、先登录-);name = sc.next();if (!this.isInNames(name) System.out.println(该用户名不存在!是否注册该用户?y/n);if (y.equals(sc.next() if (regeist(name) System.out.println(name + 注册成功!);login(); else System.out.println(注册失败!);System.exit(0); else login(); else now_inode = getInode(name + -);/ 得到当前的inodenow_file = blocksno

12、w_inode.getAddress();/ 得到当前的目录System.out.println(登录成功);execute();/* * 命令执行的主方法 */public void execute() String commond = null;String cmd = null;/ 操作命令数组 cmd0 操作的命令 cmd1操作的文件/* * INode id = new INode();/ 文件的节点 int fileNumber = 0;/ 拥有文件的总数 int * getNumber = 0;/ 存储打开文件的节点索引号,或者说是虚拟的内存地址 int emptyNumber = 0;/ * 空的文件目录的索引 */ System.out.println(now_inode.getPath();while (true) System.out.print(now_inode.getPath();commond = sc.nextLine();if (commond.equals()commond = sc.nextLine();cmd = commond.trim().split( );/ 列举同一个人用户名的文件目录if (cmd0.trim().equals(dir) int m = 0;System.out.println(文件名

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 试题/考题 > 初中试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号