|
|
经过相关资料的调研和对比赛题目的分析,我们得出下列结论:
|
|
|
|
|
|
# 一、无需自行实现 FAT32 格式化工具
|
|
|
# 1. 无需自行实现 FAT32 格式化工具
|
|
|
|
|
|
阅读《操作系统设计与实现——基于LoongArch架构》书中《第 8 章:xtfs 文件系统》,8.2节对格式化 xtfs 文件系统的说明和8.3.6节的复制实例,我们小组发现:无论是从使用 `dd` 命令生成硬盘镜像文件 `xtfs.img`,到使用 `gcc` 命令编译链接 `format.c` 文件生成的 `format` 可执行文件对硬盘镜像文件 `xtfs.img`进行格式化的整个流程,还是复制常规文件 `hello` 到 `xtfs.img`,都是在 GNU/Linux 上完成的。
|
|
|
|
|
|
参照这种方式,我们认为无需自行在 MaQueOS 上实现用户态 FAT32 文件系统格式化工具。
|
|
|
|
|
|
# 二、需要修改当前的系统调用,以支持 FAT32
|
|
|
# 2. FAT32 的一些限制
|
|
|
|
|
|
## 分析 MaQueOS 对 xtfs 的实现
|
|
|
>这有助于设计正确的测试用例
|
|
|
|
|
|
- 引导扇区只使用4B来记录磁盘的扇区总数,即最多只支持2^32个扇区,每个扇区512B,因此**支持的磁盘容量最大值为2TB**;
|
|
|
- FAT32 卷(volume,也被称为分区)必须至少包含65537个簇(cluster),**不支持容量小于512MB的分区**;
|
|
|
- FAT32 表项中的高4位不用,因此表项数最多为2^28个,**在簇的大小为4KB时,支持的最大分区大小为1TB**
|
|
|
- **单个文件的长度不能大于4GB**
|
|
|
|
|
|
|
|
|
# 3. 需要修改当前的系统调用,以支持 FAT32
|
|
|
|
|
|
## 3.1 分析 MaQueOS 对 xtfs 的实现
|
|
|
|
|
|
《操作系统设计与实现——基于LoongArch架构》书中《第 9 章:进程 1 加载可执行文件》在第 8 章的工作之上,实现了:
|
|
|
|
... | ... | @@ -19,11 +29,11 @@ |
|
|
|
|
|
《操作系统设计与实现——基于LoongArch架构》书中《第 12 章:文件操作》中包含`create`、`destroy`、`open`、`close`、`write`和`read` 六个分别用于创建、删除、打开、关闭和读写的系统调用,外加一个将内存缓冲区的内容写回硬盘对应的数据块中的`sync`系统调用。
|
|
|
|
|
|
### 总结
|
|
|
### 3.1.1 总结
|
|
|
|
|
|
综上所述,我们计划修改上面提到的总共 `9` 个系统调用来使MaQueOS支持FAT32。
|
|
|
|
|
|
# 三、Linux 对文件系统的支持的实现
|
|
|
# 4. Linux 对文件系统的支持的实现
|
|
|
|
|
|
```
|
|
|
+--------------------+
|
... | ... | |