Operating Systems 2019W Lecture 10: Difference between revisions
Created page with "==Video== The video for the lecture given on February 6, 2019 [https://homeostasis.scs.carleton.ca/~soma/os-2019w/lectures/comp3000-2019w-lec10-20190206.m4v is now available]..." |
|||
Line 8: | Line 8: | ||
==Notes== | ==Notes== | ||
===In Class=== | |||
<pre> | |||
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 | |||
</pre> |
Revision as of 00:44, 7 February 2019
Video
The video for the lecture given on February 6, 2019 is now available.
Readings
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