Directories and Links
Optional readings for this topic from Operating Systems: Principles and Practice: Sections 13.1-13.2.
Naming: how do users refer to their files? How does OS find file, given name?
First step: inode has to be stored on disk, so it will persist across system reboots.
Early UNIX versions: all inodes stored in a fixed-size array on disk.
- Originally: entire inode array was at the outer edge of the disk. Result: long seeks between inodes and file data. First improvement: place inode array mid-way across disk. Second improvement: many small inode arrays spread across disk, so inodes can be near to file data.
Space for inodes is fixed when the disk is initialized, and can't be changed.
- Index of inode in the inode array: i-number. Internally the OS uses the i-number as an identifier for the file.
When a file is open, its inode is kept in main memory. When the file is closed, the inode is written back to disk.
File naming: users want to use text names to refer to files. Special disk structures called directories are used to map names to i-numbers.
Early approaches to directory management:
- A single directory for the entire disk:
- Many early personal computers worked this way.
- A single directory for each user (e.g. TOPS-10):
- Avoids problems between users, but still makes it hard to organize information.
Modern systems support hierarchical directory structures. UNIX/Linux approach:
- Directories are stored on disk just like regular files (i.e. inode with 14 pointers, etc.) except inode has special "type" bit set to indicate that it's a directory.
- A simple approach: each directory contains <name, i-number> pairs in no particular order.
- The file referred to by the i-number may be another directory. Hence, get hierarchical tree structure. Names have slashes separating the levels of the tree.
- There is one special directory, called the root. This directory has no name; it has i-number 2 (i-numbers 0 and 1 have other special purposes).
- Only the operating system can read and write directories.
Cumbersome to specify the full path name for all files.
Have OS remember the i-number for one distinguished directory per process, called the working directory.
If a file name doesn't start with "/" then it is looked up starting in the working directory.
Names starting with "/" are looked up starting in the root directory.
UNIX hard links:
- It is possible for more than one directory entry to refer to a single file.
- UNIX uses reference counts in inodes to keep track of hard links referring to a file.
- Files are deleted when the last directory entry goes away.
- Must prevent circularities (don't allow links to directories).
- A file whose contents are another file name.
- Stored on disk like regular files, but with special flag set in inode.
- If a symbolic link is encountered during file lookup, prepend link value to remaining path, continue lookup.