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
|