课前准备
- 阅读文档第六章: 文件系统.log相关的内容可以跳过.
- 阅读xv6源码中,
bio.c
,fs.c
,sysfile.c
以及file.c
.
xv6 文件系统分层
+-------------------+
| File Descriptor |
+-------------------+
| Pathname |
+-------------------+
| Directory |
+-------------------+
| Inode |
+-------------------+
| Logging |
+-------------------+
| Buffer cache |
+-------------------+
| Disk |
+-------------------+
ide.c
Disk layer
bio.c
buffer cache layer bread() bwrite() brelse()
fs.c
inode layer inode cache directory layer
sysfile.c
用户进程操作文件系统 调用接口
file.c
file descriptor layer
xv6磁盘结构
+----|-----|---|------|-------|----|----|----+
| | | | | | | | |
|boot|super|log|inodes|bit map|data|....|data|
| | | | | | | | |
+----|-----|---|------|-------|----|----|----+
xv6 on-disk node结构
dinode
+---------+
|type |
+---------+
|major | +-----+
+---------+ |data |
|minor | ++----+
+---------+ ^
|nlink | | +-----+
+---------+ | |data |
|size | | +-|---+
+---------+ | ^
|address 1+--------------+ |
+---------+ |
|... | | +-------+
+---------+ | | data |
|address 2+----------------------------+ +---|---+
+---------+ ^ +-----+
|indirect +----------------------+ | |data |
+---------+ | | +--|--+
| | ^
v | |
+---|-------+ | |
|address 1 +-------------+ |
+-----------+ |
|.... | |
+-----------+ |
|address 128+--------------------------+
+-----------+
indirect block
文件系统
目的
- 组织和存储数据
- 在用户和进程间共享数据.
- 持久化存储
挑战
- 在磁盘上,持久存储文件树结构
- 记录每个文件所使用的磁盘block
- 记录磁盘上空闲的区域
- 文件系统必须支持crash recovery.
- 不同进程同时操作文件系统的并发问题
- IDE读取速度远慢于内存,因此必须缓存常用的block.
关键词
- 持久化 persistence
- 崩溃恢复 crash recovery
- 事务处理 transaction
- vfs模型 inode