Operating Systems 2019W Lecture 10
Video
The video for the lecture given on February 6, 2019 is now available.
Readings
There are a number of chapters in the textbook related to filesystems & block devices. You are not responsible for all of this material, but you may benefit from looking through the following for key concepts covered in class - particularly if you are confused about some of the concepts.
Notes
In Class
Lecture 10
----------
What is a filesystem?
- hierarchy of files?
- may or may not have underlying storage
- more formally, hierarchical key-value store
Really, from the kernel's perspective, it is
- functions that can be called to implement filesystem-related system calls
This abstraction is knows as the "virtual filesystem", VFS
In tutorial 4, you're making and manipulating filesystems...stored in block devices
Examples:
/proc proc filesystem
/sys sys filesystem
/ ext4 filesystem
/boot/efi vfat filesystem
/boot ext2 filesystem
...
/boot/efi/UBUNTU <-- what filesystem is this on?
mounting is how we associate a subtree (directory) with a filesystem
BAD IDEA
mount /dev/sdc1 /
(assume /dev/sdc is a USB stick)
local, persistent filesystems are normally associated with block devices
- the filesystem is what allows us to use a block device to store files
a block device is a persistent "array" of "blocks"
- blocks are fixed size (i.e. 4K)
- accessed by index
From a storage perspective, a filesystem is a way of storing a file hierarchy on a block device (i.e., in blocks accessed by indices)
So is a filesystem just a tree?
- kind of
Goals for an on-disk filesystem structure
- fault tolerant
- reliable
- high performance
- takes the characteristics of the block device into account
Normally, block devices (whether hard drives or SSDs)
- sequential access is faster than random access
High level action on an open system call
* process makes open system call, e.g. open("/home/student/foo.txt", ...)
* kernel figures out what filesystem /home/student/foo.txt is on
(ext4 from /dev/sda2 mounted on /home)
* kernel calls ext4 open function for /dev/sda2, gives it /student/foo
* ext4 looks at /dev/sda2, figures out where the blocks are for /student/foo
* ext4 stores this info in file structure, returns
<-- what a file descriptor refers to