M. Rosenblum and J. K. Ousterhout @ UC-Berkely
Proccedings of the Thirteenth ACM Symposium on Operating System Principles, October 13-16, 1991, pages 1-15
![]() |
Applications call read a lot more than write. But real access to disk is predominated by write because:
|
||||||
![]() |
Also write is usually slower than read, because:
|
![]() |
Gather dirty pages |
||||
![]() |
Calculate disk addresses for each block |
||||
![]() |
Update inode & indirect blocks with the new disk addresses |
||||
![]() |
Package those data blocks, including the indirect blocks, and meta data into a segment |
||||
![]() |
Update inode map: Note that inode map is not included in the segment |
||||
![]() |
Write the segment to the disk
|
![]() |
Find a place to write checkpoint in disk | ||
![]() |
Write inode map and segment usage table to the disk | ||
![]() |
Update
Check point region with the disk address found
|
||
![]() |
Note
that at this point file system is consistent!
|
![]() |
Locate inode of the file
|
||||||||
![]() |
Reading data blocks is same as that of FFS |
![]() |
Load inode map and segment usage table from the latest checkpoint into memory |
||||
![]() |
Replay the logs of segments which follow the checkpoint segment
|
||||
![]() |
Stop if a segment with older timestamp or end-of-segment-chain is reached |
![]() |
Append only logging should somehow wrap-around huh? |
||||||||||||
![]() |
Overwritten data, meta-data blocks are dead |
||||||||||||
![]() |
Also blocks of deleted file are dead too |
||||||||||||
![]() |
Cleaning segments and making a room for next logging is done by cleaner process |
||||||||||||
![]() |
Procedure
|