midterm solution
lab 2 discussion (?)
lab 3 delayed
concurrency
race conditions are hard to test for because they usually happen rarely (usually, long after the system has gone into production)
cannot prove the absence of race/deadlock conditions in general because you need to reason about all possible execution paths
message passing: easier to reason about
userland vs. kernel
concurrency: processes & threads
filesystems: abstraction/data structure on top of mass storage devices
filesystem API: uniform interface
disk data structure
/
for root filesystem)loopback device
File Control Block: aka inode
multiple filesystem types
directory ("special file"): map name→inode#
open
/read
/close
inode: data structure containing file metadata
name is not an intrinsic property of a file (on Unix-like systems)
need both inode# & device# to uniquely identify file
superblock
memory allocation problem (like malloc
/new
)
latency
clever placement can make orders of magnitude difference
2 basic strategies for disk block allocation
contiguous allocation
linked list allocation
best of both worlds: allocation by large block (überblocks?)