1def main():
2 # intially, file has a single block #1
3 sys_bwrite('file.inode', 'file #1')
4 sys_bwrite('used', '#1')
5 sys_bwrite('#1', '1-old')
6 sys_bwrite('#2', '2-garbage')
7 sys_sync()
8
9 # append a block #2 to the file
10
11 sys_bwrite('file.inode', f'file #1 #2')
12 sys_bwrite('used', '#1 #2')
13 sys_bwrite(f'#1', f'1-new')
14 sys_bwrite(f'#2', f'2-new')
15 sys_crash() # system crash
16
17 # display file system state at crash recovery
18 inode = sys_bread('file.inode')
19 used = sys_bread('used')
20 sys_write(f'{inode} | used {used} | ')
21 for i in [1, 2]:
22 b = sys_bread(f'#{i}')
23 sys_write(f'{b} ')
24
25# Outputs:
26# file #1 #2 | used #1 #2 | 1-new 2-garbage
27# file #1 #2 | used #1 #2 | 1-new 2-new
28# file #1 #2 | used #1 #2 | 1-old 2-garbage
29# file #1 #2 | used #1 #2 | 1-old 2-new
30# file #1 #2 | used #1 | 1-new 2-garbage
31# file #1 #2 | used #1 | 1-new 2-new
32# file #1 #2 | used #1 | 1-old 2-garbage
33# file #1 #2 | used #1 | 1-old 2-new
34# file #1 | used #1 #2 | 1-new 2-garbage
35# file #1 | used #1 #2 | 1-new 2-new
36# file #1 | used #1 #2 | 1-old 2-garbage
37# file #1 | used #1 #2 | 1-old 2-new
38# file #1 | used #1 | 1-new 2-garbage
39# file #1 | used #1 | 1-new 2-new
40# file #1 | used #1 | 1-old 2-garbage
41# file #1 | used #1 | 1-old 2-new