File tree 3 files changed +13
-7
lines changed
3 files changed +13
-7
lines changed Original file line number Diff line number Diff line change @@ -148,7 +148,7 @@ VFS, Virtual File System
148
148
149
149
#### 文件系统基本数据结构
150
150
![ w:700] ( figs/fsoverall.png )
151
-
151
+ ![ bg right:40% 90% ] ( figs/fsall.png )
152
152
153
153
---
154
154
#### 文件卷控制块 (` superblock ` )
@@ -181,6 +181,7 @@ VFS, Virtual File System
181
181
- 文件的 Group ID
182
182
- 链接数:有多少文件名指向这个 inode
183
183
- 文件数据 block 的位置(直接、间接)
184
+ ![ bg right:40% 90%] ( figs/fsall.png )
184
185
185
186
---
186
187
#### bitmap块
@@ -189,6 +190,8 @@ bitmap块( `bitmap inode/dnode`)
189
190
- dnode使用或者未使用标志位
190
191
- 用于空间分配
191
192
193
+ ![ bg right:40% 90%] ( figs/fsall.png )
194
+
192
195
---
193
196
#### 数据块dnode( ` data node ` )
194
197
- 目录和文件的数据块
@@ -197,7 +200,7 @@ bitmap块( `bitmap inode/dnode`)
197
200
- 每个block都有编号,以方便inode记录
198
201
- inode一般为128B
199
202
- data block一般为4KB
200
-
203
+ ![ bg right:40% 90% ] ( figs/fsall.png )
201
204
---
202
205
#### 目录的数据块
203
206
![ w:850] ( figs/fsdir.png )
@@ -463,11 +466,12 @@ bitmap块( `bitmap inode/dnode`)
463
466
---
464
467
#### 文件读操作过程
465
468
![ w:650] ( figs/fsread.jpg )
469
+ ![ bg right:40% 90%] ( figs/fsall.png )
466
470
467
471
---
468
472
#### 文件写操作过程
469
- ![ w:800 ] ( figs/fswrite.jpg )
470
-
473
+ ![ w:700 ] ( figs/fswrite.jpg )
474
+ ![ bg right:40% 90% ] ( figs/fsall.png )
471
475
472
476
473
477
---
Original file line number Diff line number Diff line change @@ -89,7 +89,9 @@ backgroundColor: white
89
89
90
90
考虑一个应用以某种方式更新磁盘结构:将单个数据块附加到原有文件。
91
91
- 通过打开文件,调用` lseek() ` 将文件偏移量移动到文件末尾,然后在关闭文件之前,向文件发出单个4KB写入来完成追加。
92
-
92
+ - lseek + write 并非原子操作。多个进程可能在 lseek 和 write 之间修改文件,导致偏移量失效。
93
+
94
+
93
95
---
94
96
95
97
##### 文件系统数据结构
@@ -562,7 +564,7 @@ fsck不了解用户文件的内容,但目录包含由文件系统本身创建
562
564
- Journal write:将TxB以及对应的文件操作写入到事务中
563
565
- Journal commit:写入TxE,并等待完成。完成后,这个事务是committed。
564
566
- Checkpoint:将事务中的数据,分别各自回写到各自的磁盘位置中。
565
- - Free: 一段时间后,通过更新日记帐 ,超级块将交易记录标记为空闲
567
+ - Free: 一段时间后,通过更新日志记录 ,超级块将交易记录标记为空闲(释放掉)
566
568
567
569
568
570
---
Original file line number Diff line number Diff line change @@ -888,7 +888,7 @@ pub struct BlockCache {
888
888
3 . 从文件系统中获取根目录的 inode 。
889
889
890
890
``` rust
891
- lazy_static! {
891
+ lazy_static! {// 宏定义静态变量
892
892
pub static ref BLOCK_DEVICE = Arc :: new (BlockDeviceImpl :: new ());
893
893
......
894
894
lazy_static! {
You can’t perform that action at this time.
0 commit comments