Filesystems and FAT
CS 4411 Spring 2020
Filesystems and FAT CS 4411 Spring 2020 Announcements Major EGOS - - PowerPoint PPT Presentation
Filesystems and FAT CS 4411 Spring 2020 Announcements Major EGOS update Careful when using Pull Requests to get updates Project 4 Eliminated Outline for Today EGOS File/Storage System FAT Filesystem Design Project 5
CS 4411 Spring 2020
a stack of block stores
the same interface
requests to top of stack
the block store below it
Block Server TreeDisk block store ClockDisk block store ProtDisk (relay) block store
read(inode, block) read(inode, block) read(inode, block) read(block) (to disk server) Block data Block data Block data read(inode, block)
inode 0: 4 blocks
inode 0: 39062500 blocks inode 0: 39062500 blocks ProtDisk ClockDisk TreeDisk
inode 1: 2500 blocks inode 2: 125 blocks inode n: 856 blocks
…
inode 0: 4 blocks
inode 0: 19531250 blocks inode 0: 19531250 blocks ProtDisk ClockDisk TreeDisks
inode 1: 250 blocks inode n: 11 blocks
…
inode 0: 6 blocks
inode 1: 19531250 blocks inode 1: 19531250 blocks
inode 1: 128 blocks inode m: 15 blocks
…
inode 0: 4 blocks
inode 0: 39062500 blocks inode 0: 39062500 blocks ProtDisk ClockDisk TreeDisk
inode 1: 2500 blocks inode 2: 125 blocks inode n: 856 blocks
…
Metadata
BFS
File 1 File 2 File n
…
linked list of blocks
pointer in each block, use a parallel table of next pointers
Data blocks FAT
block 0 block 3 block 1 block 2
null
head
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
data next data next data next
the head of each file’s linked list
Indexed by inode, points to first FAT entry
Data blocks FAT
block 0 block 3 block 1 block 2
null 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Inode Table
Size: 4, Head: 2
1 2 3 4 5 6 7 8 9 Block # FAT entry # Inode #
blocks are free
containing all the free blocks
head
Data blocks FAT
block 0 block 3 block 1 block 2
null 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Inode Table
Size: 4, Head: 2
1 2 3 4 5 6 7 8 9 free_head: 0
Superblock
in FAT
corresponding data block
block 2 of inode 1
Data blocks FAT
block 0 block 3 block 1 block 2
null 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Inode Table
Size: 4, Head: 2
1 2 3 4 5 6 7 8 9
the head of the free list to append
Data blocks FAT
block 0 block 3 block 1 block 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Inode Table
Size: 4, Head: 2
1 2 3 4 5 6 7 8 9 free_head: 0
Superblock
block 4
free_head: 1
Size: 5, Head: 2
null
head of free list
block 4
Data blocks FAT
block 0 block 3 block 1 block 2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Inode Table
Size: 5, Head: 2
1 2 3 4 5 6 7 8 9 free_head: 1
Superblock
free_head: 0
Size: 4, Head: 2
inode 0: 4 blocks
inode 0: 39062500 blocks inode 0: 39062500 blocks ProtDisk ClockDisk FatDisk
inode 1: 2500 blocks inode 2: 125 blocks inode n: 856 blocks
…
Metadata
BFS
File 1 File 2 File n
…
being used by files, assigns new files to unused inodes
inode 0: 4 blocks
inode 0: 39062500 blocks inode 0: 39062500 blocks ProtDisk ClockDisk FatDisk
inode 1: 2500 blocks inode 2: 0 blocks
…
Metadata
BFS
File 1 inode 3: 0 blocks inode n: 0 blocks File 2 inode 2: 9 blocks
int fatdisk_create(block_if below, unsigned int below_ino, unsigned int ninodes);
inode below_ino of block store below
below_ino) with the same below_ino
filesystem! (It happens during bootup.) If so, do nothing.
int fatdisk_read(block_if this_bs, unsigned int ino, block_no offset, block_t *block); int fatdisk_write(block_if this_bs, unsigned int ino, block_no offset, block_t *block);
it with more blocks void fatdisk_free_file(struct fatdisk_snapshot *snapshot, struct fatdisk_state *fs);