操作系统
大
型
实
验
报
告
(二级目录文件系统模拟)
一、 实验要求
使用编程语言编写 cmd 窗口下 Unix 二级文件目录模拟系统,模拟采用
二级目录结构的磁盘文件系统中的文件操作
二、 实现功能
实现功能如下:
三、 设计思路
采用分层结构构造系统。可分为五层:主控层( Unix )、命令解释层
(Command)、文件层( File)、块层( Block)、流层( Stream)、缓冲
层(MFD)。
主控层(Unix)类:实现初始界面,用户登录,若登录成功,允许用户输入
不同的命令,调用命令命令解释层对应的方法,完成用户要求;
命令解释层( Command )类:要求实现各种命令的解释,并调用文件层相
应的方法实现。
文件处理层(File):完成文件系统的各种操作,并将文件操作处理过程和底
层块处理联系起来。
块层(Block):实现块一级的操作;读、写一个块;
流层(Stream):实现流一级的操作。读、写文件 :从文件中读出、写入
字符。
缓冲层(MFD):为用户数据预读和缓存在内存中的数据结构。
由于是模拟系统,对流一层次的文件系统模拟起来比较困难,故使用内存中的数
据结构来实现对二级目录的模拟,在程序启动时从 Disc.txt 中读入所有用户数据到
内存缓冲层,待操作完毕后将缓冲层数据结构写入文件 Disc.txt 中,即所有之间的
操作都是在缓冲层进行。
四、 主要数据结构
块层(Block)大量运用字符数组和字符串,这两者是主要的底层数
据结构,几乎所有的操作都是在字符数组和字符串中进行
缓冲层(MFD)
class MFD {
public byte username[] = null;用户名,长度 13B
public byte userpwd[] = null;用户密码,长度 13B
public byte link[] = null; 该用户的 UFD 所在的物理块号(4B)
public byte 'lenumber[] = null; 该用户所有的文件数量(2B)
public UFD 'le[] = null;该用户的文件组
public UOD open'le[] = null;该用户打开的文件组
class UFD {
public byte 'lename[] = null;文件名 14B
public byte mode[] = null;文件模式 6B
public byte length[] = null;文件长度 4B
public byte discaddr[] = null;文件的块地址 4B
public byte blockaddr[] = null;文件的块内首地址 4B
}
public class UOD {
public byte 'lename[] = null;打开文件名 14B
public byte mode[] = null;打开的文件模式 6B
public byte length[] = null;打开文件的长度 4B
}
}
一个 MFD 项包含一个用户的信息及属于他的文件
五、 测试
创建新用户:
登陆成功:
创建并显示文件成功:
打开、写入和关闭文件成功:
打开、显示和关闭文件成功:
改变文件权限并测试成功:
改变文件名成功: