厦门大学OpenEuler FS lab

本文介绍了如何通过实践实现Linux内存文件系统myRAMFS,学习文件系统底层结构,区分文件与目录,以及如何管理内存中的文件存储。通过完成addDirUnit、changeDir等关键函数,学生将理解读写者问题和信号量的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 实验介绍

本次实验主要学习Linux 文件系统的底层实现,加深学生对文件系统底层存储数据结构的理解。为便于

学生实现,本次实验只要求实现一个与ramfs 类似的内存文件系统,无需关注与硬盘等设备的交互。

在实验开始之前,需要注意以下两点:

① 本次实验服务器已完成内核编译(openEuler 4.19.08),可直接开始实验;

② 本次实验可能用到的内核函数和系统调用均已在正文中给出,若要查看内核函数的详细信息,可前

往https://manpages.org/查询。

2. 实验目的

l 学习掌握Linux 系统中普通文件和目录文件的区别与联系

l 学习掌握Linux 管理文件的底层数据结构

l 学习掌握Linux 文件存储的常见形式

l 加深学生对读写者问题的理解和信号量的使用

3. 实验内容

3.1 任务概述

  1. 内存文件系统myRAMFS 的功能要求

本次实验要求学生在Linux 下实现一个类似于ramfs 的内存文件系统myRAMFS,该文件系统至少 支持下表中

描述的10 条命令,其中实验手册已提供了部分命令的实现,其他命令需要大家自行实现。

数据表格

注意:以上命令只需要在当前目录下正常执行即可,无需提供对非当前路径下文件或目录操作的支持。例

如:touch 命令无需支持在其它路径下创建文件、mkdir 命令无需支持在其它路径下创建目录、read/write 命

令无需支持读写非当前路径下的文件。

  1. 文件系统功能完善与可用性测试

内存文件系统由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任务引导

  1. 内存文件系统——Linux 文件读取和写入的本质

用户和操作系统对文件的读写操作是有差异的,用户进程习惯以字节的方式读写文件;而操作系统内核则

是以数据块的形式读写。文件系统的作用就是屏蔽掉这种差异。本次实验要求学生设计一个基于内存的文

件系统,即文件存储在内存而非硬盘上,相对于 硬盘文件系统,内存文件系统的实现更为简单,也能让学生

专注于文件系统本身。

  1. 内存文件系统——文件的存储

内存文件系统的文件数据需要存储在内存上,与程序在内存中的存放类似,文件在内存中的存放方式主要

有连续空间存放和非连续空间存放两种,其中非连续空间存放又可分为链表方式和索引方式。为了降低实

验难度,本次实验设计的内存文件系统m

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值