Sucha's Homepage ~ Small UNIX Filesystem

小型 UNIX 磁盘文件系统

最近更新: 2006-07-01

本页目录

简单介绍
下载、运行需求
使用说明
编程相关
已知臭虫

简单介绍

这是一个纯模拟性质的小型 UNIX 磁盘文件系统,实现了如下的一些功能:

  1. 使用了固定容量的磁盘存储空间,作为文件存储系统,并提供了虚拟磁盘转储 功能,可将信息存入磁盘,还可从磁盘读入内存
  2. 建立了简单的 UNIX 文件系统,使用索引节点、混合分配方式、成组链接法来 管理存储空间,实现了对目录、文件,磁盘空闲空间、已分配空间的管理等
  3. 提供了一个小型的模拟 shell,可以显示磁盘文件系统的状态和空间的使用情 况,并提供了文件的创建、删除、移位、改名等功能

下载、运行需求

Small UNIX Filesystem (download)

需要 gcc 来的编译,Win 下和 Linux 下都可以运行,终端显示。解压源码后,只 需进入源码目录,运行 make 就可以编译,运行二进制码即可,也可以加一个参数, 给定文件名作为磁盘。源码内的 README 也有详细的使用说明。

编译出现 “warning: integer overflow” 是因为磁盘文件系统采用了 UNIX 的混合 分配方式,其多次间接寻址的数值超过了一个 int 的表示范围,但是在这个程序的 实际使用上是不会有这样的情况的。

使用说明

运行程序后即进入了小型的模拟 shell,进入了 根 目录,同时程序列出了模拟 shell 支持的命令,大部分跟 UNIX 或是 Linux 下的命令相仿,加了括号的参数 意味着有默认值,如下:

命令参数描述
exit离开程序
echo无空格分割的单词打印单词
help打印这个帮助
mkdir目录名建立目录
mkfile文件 (大小)建立指定大小的文件,不指定的默认为空(0)
ls列出当前目录的目录及文件
date打印日期及时间
cd(路径)改变当前目录至路径,可以是绝对或相对,默认(当前路径)
status显示文件系统的状态1
rm文件或目录名删除文件2
rn文件一 文件二对文件或目录改名
pwd打印当前目录相对于根目录的绝对路径
mv文件 路径将文件或目录移动到路径,可以是绝对路径或相对路径
link文件 路径将文件链接到路径,硬链接3


[1] 文件系统的状态包括磁盘使用率,总的磁盘块数,空闲磁盘块数,空闲索引号, remember 号(用于对索引号表的搜索),以及记录空闲磁盘块号栈以及空闲索引 号栈的状态

[2] 对目录中包含文件或目录的情况没有处理,所以删除目录后,被删除目录中的 文件以及目录还没有被删除,但是已经无法搜索到了,这是一个 bug。

[3] 实现的是硬链接,链接到路径里的文件名和被链接的文件名字相同。若链接的 是目录,会出现这样的情况,因为链接到的目录和当前被链接目录是同一个“文件”, 所以其目录项是一样的,当你进入路径里链接到的目录中时,其实就是来到了被链 接的目录中,当你“cd ..”时,相当于在被链接目录里键入“cd ..”,也就是回到了 被链接目录的父目录,而不是链接到的目录的父目录。这样的描述确实有点坳口。

编程相关

磁盘文件系统可以设定使用的磁盘大小以及每个磁盘块的大小,在 src/disk.h 中, 不过磁盘块不能小于 1024 B,因为我默认将 boot 区和 super 区都算在了同一个 磁盘块里。

已知臭虫

除了上面提到的删除问题和链接问题,还有就是磁盘文件系统不检查当前是否有足 够的磁盘空间提供建立指定大小的文件,建立超过磁盘文件系统所能提供空间的文 件,会出现这样的情况,即文件会一直申请磁盘,直到用完所有空闲磁盘,接下来 申请到的磁盘块号将是出错的信息。

若还有有什么问题或建议,都可以联系我 EmailMe