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