Reading: 2.4, 5.3
A file system is an OS interface to disk storage.
A virtual file system sits between the application programs and the actual file system. It is implemented in the kernel and is an abstraction for interacting with different types of file systems.
A DFS is a file system that allows files to be stored on multiple servers while appearing that they are stored on a single file system.
Requirements:
- Transparency
- Concurrent access
- File replication
- Security (access control)
- Fault tolerance
- Consistency
- Efficiency
NFS (Network File System)

Design Principles:
- Access transparency (no distinction between local and remote files)
- Reasonable performance
- Simple design (stateless)
Lookup is done iteratively to provide flexibility to clients and simplicity to servers.
NFS requests done through RPCs**
Remote access model vs upload/download model*
In remote access model, clients is offered an interface containing various file operations, server is responsible for implementing those operations. In upload/download model, the client access the files locally after downloading from the server.
Semantics:
UNIX semantics: every operation on a file is instantly visible to all processes Session semantics: No changes are visible until file is closed Immutable files: No updates possible Transactions: All changes occur atomically
Optimizations
Client side caching: file pages, dir and file attributes
Commit protocol: server delays writing to disk until client commits.
Sun NFS V3 to V4
- Compound procedures (several methods in one call)
- Full path lookup instead of iterative lookup
- Delegation
Andrew File System
Assumptions
- Small files
- More reads than writes
- Sequential access
- Most files are used by one user
- Burstiness, if a file has been used, it will be used in the nearer future with higher probability
Design decisions
- Whole-file serving
- Whole-file caching
Callback Mechanism
Ensures that cached copies of files are updated when another client performs a close operation on that file.