1. 实验介绍
本次实验主要学习Linux 文件系统的底层实现,加深学生对文件系统底层存储数据结构的理解。为便于
学生实现,本次实验只要求实现一个与ramfs 类似的内存文件系统,无需关注与硬盘等设备的交互。
在实验开始之前,需要注意以下两点:
① 本次实验服务器已完成内核编译(openEuler 4.19.08),可直接开始实验;
② 本次实验可能用到的内核函数和系统调用均已在正文中给出,若要查看内核函数的详细信息,可前
往https://manpages.org/查询。
2. 实验目的
l 学习掌握Linux 系统中普通文件和目录文件的区别与联系
l 学习掌握Linux 管理文件的底层数据结构
l 学习掌握Linux 文件存储的常见形式
l 加深学生对读写者问题的理解和信号量的使用
3. 实验内容
3.1 任务概述
- 内存文件系统myRAMFS 的功能要求
本次实验要求学生在Linux 下实现一个类似于ramfs 的内存文件系统myRAMFS,该文件系统至少 支持下表中
描述的10 条命令,其中实验手册已提供了部分命令的实现,其他命令需要大家自行实现。
注意:以上命令只需要在当前目录下正常执行即可,无需提供对非当前路径下文件或目录操作的支持。例
如:touch 命令无需支持在其它路径下创建文件、mkdir 命令无需支持在其它路径下创建目录、read/write 命
令无需支持读写非当前路径下的文件。
- 文件系统功能完善与可用性测试
内存文件系统由Disk 模块和File 模块组成,其中Disk 模块用于与内存交互,提供存储接口,完成内存的分配与回收操作;File 模块负责实现基于内存的虚拟文件系统。请你根据任务引导完成myRAMFS 文件系统中 File 功能模块的编写。
实验手册已给出Makefile、myRAMFS.cpp、Disk.h、Disk.cpp 和File.h 的完整代码以及待填充的File.cpp,请你 根据任务引导完善 File.cpp,要求编译并运行 myRAMFS.cpp 后能够类似于 shell 命令窗口,实时从命令行中 读取命令,解析并执行。
代码 1. Makefile
代码2. myRAMFS.cpp
代码3. Disk.h
代码4. File.h
代码5. Disk.cpp
代码6. File.cpp
3.2任务引导
- 内存文件系统——Linux 文件读取和写入的本质
用户和操作系统对文件的读写操作是有差异的,用户进程习惯以字节的方式读写文件;而操作系统内核则
是以数据块的形式读写。文件系统的作用就是屏蔽掉这种差异。本次实验要求学生设计一个基于内存的文
件系统,即文件存储在内存而非硬盘上,相对于 硬盘文件系统,内存文件系统的实现更为简单,也能让学生
专注于文件系统本身。
- 内存文件系统——文件的存储
内存文件系统的文件数据需要存储在内存上,与程序在内存中的存放类似,文件在内存中的存放方式主要
有连续空间存放和非连续空间存放两种,其中非连续空间存放又可分为链表方式和索引方式。为了降低实
验难度,本次实验设计的内存文件系统m