文件系统设计
1.目的和要求
本实验的目的是通过一个简单多用户文件系统的设计,加深理解文件系统的内部功能和内部实现。
实验要求:
①在系统中用一个文件来模拟一个磁盘;
②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。
③实现这个文件系统。
④能实际演示这个文件系统。
基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。
2.实验内容
1)设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。
2)程序采用二级文件目录(即设置主目录MFD)和用户文件目录(UFD)。
另外,为打开文件设置了运行文件目录(AFD)。
3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。
4)因系统小,文件目录的检索使用了简单的线性搜索。
5)文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。
6)程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD),打开文件目录(AFD)即运行文件目录。
3.实验环境
VC 6.0
4.实验提示
1) format 格式化
只写打开模拟文件,初始化超级快,初始化dinode 位图 block 位图,初始化主目录,初始化etc 目录,初始化管理员admin 目录,初始化用户xiao 目录,初始化 用户passwd 文件,写入模拟硬盘文件。
2 )install 安装
读写打开模拟文件,读取dinode 位图 block 位图,读取主目录,读取etc 目录,读取管理员admin 目录,读取用户xiao 目录,读取 用户passwd 文件。
3 )login 登陆
用户输入用户名和密码,在passwd 文件中查找是否有此用户,核对密码。
正确则登陆成功,当前目录设定到当前用户文件夹下。
Login
登录
结束是,登录成功
输入用户名
查找是否有改
用户名
输入密码是
否
密码是否正确
否
4 )ialloc 申请inode 空间
先检测inode 位图是否加锁,是则退出。
加锁,检测inode 空间是否还有已满,是则退出。
在inode 位图中顺序查找空闲的inode ,找到则返回inode 地址,block 解锁。
函数结束。
Ialloc
申请inode空间
Inode位图是否加锁
否,加锁Inode空间是否已满
否
在ionde位图顺序查找空闲的inode
找到返回inode地址
Inode位图解锁
结束
申请失败
是
找不到
5 )balloc 申请block空间
先检测block位图是否加锁,是则退出。
加锁,检测block空间是否还有k个空闲,否则退出。
在还有空闲block的组中查找是否有k个空闲,没有则去下一个block组中查找,找到则返回block地址,block解锁。
函数结束。
Balloc(int k)
申请k个block空间
Block位图是否加锁
否,加锁
是否有k个空闲的
block
是
在block位图按照分组查找空闲的block
找到返回block地址
Block位图解锁
结束
申请失败
否
找不到
6) create 创建文本文件
查找当前目录下是否有同名文件,是则退出,否则让用户输入文本文件内容,以‘###’结束。
申请inode空间(ialloc函数),申请硬盘block空间(balloc函数),申请失败则结束。
将文件内容写入inode空间和block空间。
修改当前目录的结构,修改超级快,修改inode位图,block位图,写入模拟硬盘。
7) cdir 创建文件夹
查找当前目录下是否有同名文件,是则退出,否则,申请inode空间(ialloc函数),申请硬盘block空间(balloc函数),申请失败则结束。
将文件夹内容写入inode 空间和block空间。
修改当前目录的结构,修改超级快,修改inode位图,block 位图,写入模拟硬盘。
8) read edit –读取和追加文本文件
Read----查找当前目录下是否该文件,没有则退出,否则调用access()权限判断,有权限则判断是不是文件,不是则退出,是文件则读取文件并显示。
Edit----调用读取文件模块,读取成功则用户输入追加的内容,如果追加的内容大于一个block则申请block空间,失败则退出,申请成功则保存文件。
9) cd –进入子目录或上级目录
查找当前目录是否有该子目录,没有则退出,调用access()判断当前用户是否有权限,无则退出,有则读取该子目录的inode,将当前目录指向该目录。