操作实验八:文件系统

实验八:文件系统3. 相关函数改进 四、 实验步骤 (三) 练习2: 完成基于文件系统的执行程序机制的实现
一、 实验目的
? 了解基本的文件系统系统调用的实现方法;
? 了解一个基于索引节点组织方式的 FS文件系统的设计与实现;
? 了解文件系统抽象层-VFS的设计与实现;
二、 实验任务
实验七完成了在内核中的同步互斥实验 。
本次实验涉及的是文件系统 , 通过分析了解ucore文件系统的总体架构设计 , 完善读写文件操作 , 从新实现基于文件系统的执行程序机制(即改写) , 从而可以完成执行存储在磁盘上的文件和实现文件读写等功能 。
三、 实验准备 1. 文件系统架构
应用程序操作文件(打开/创建/删除/读写) , 首先需要通过文件系统的通用文件系统访问接口层给用户空间提供的访问接口进入文件系统内部 , 接着由文件系统抽象层把访问请求转发给某一具体文件系统(比如SFS文件系统) , 具体文件系统( FS文件系统层)把应用程序的访问请求转化为对磁盘上的block的处理请求 , 并通过外设接口层交给磁盘驱动例程来完成具体的磁盘操作 。
这里我们可以通过下图可以比较好的理解这四个部分的关系:
(图片引自实验指导书)
2. 数据结构
从ucore操作系统不同的角度来看 , ucore中的文件系统架构包含四类主要的数据结构, 它们分别是:
3. 相关函数改进
在实验指导书的练习0中提到了注意点如下:
注意:为了能够正确执行lab6的测试应用程序 , 可能需对已完成的实验1/2/3/4/5/6/7的代码进行进一步改进 。
根据试验要求 , 我们需要对部分代码进行改进 , 这个实验的改进的地方的提示()一直没有找到 , 后来上网上看了学长的博客发现没有需要改进的 , 直接用就行 , 需要做的就是练习1、2的编程部分 。
四、 实验步骤 (一) 练习0:填写已有实验
lab8会依赖 , 我们需要把做的的代码填到lab8中缺失的位置上面 。练习0 就是—个工具的利用 。这里我使用的是linux的Meld工具 。和lab7操作流程—样 , 我们只需要将已经完成的lab7与待完成的lab8分别导入进来 , 然后点击即可 , 详细细节不再赘述 。需要修改的主要是以下六个文件:proc.c、.c、pmm.c、.c 、vmm.c、trap.c、sche.c
练习0提到的对已做实验的改进已经在上面的准备部分完成 。
(二) 练习1: 完成读文件操作的实现
要求是首先了解打开文件的处理流程 , 然后参考本实验后续的文件读写操作的过程分析 , 编写在.c 中读文件中数据的实现代码 。
1. 打开文件处理大致流程
上面已经提到了ucore操作系统的四类主要数据结构和文件系统架构 , 下面根据它们详细的观察打开文件处理流程 。
文件系统 , 会将磁盘上的文件(程序)读取到内存里面来 , 在用户空间里面变成进程去进—步执行或其他操作 。通过—系列系统调用完成这个过程 。
ucore 文件系统中 , 是这样处理读写硬盘操作的:
(图片截取自清华大学操作系统课程学堂在线)
① 首先是应用程序发出请求 , 请求硬盘中写数据或读数据 , 应用程序通过 FS接口执行系统调用 , 获得 ucore操作系统关于文件的—些服务;
② 之后 , —旦操作系统内系统调用得到了请求 , 就会到达 VFS层面(虚拟文件系统) , 包含很多部分比如文件接口、目录接口等 , 是—个抽象层面 , 它屏蔽底层具体的文件系统;