| |
| |
Foreword | |
| |
| |
Introduction | |
| |
| |
| |
UNIX Evolution and Standardization | |
| |
| |
A Brief Walk through Time | |
| |
| |
How Many Versions of UNIX Are There? | |
| |
| |
Why Is UNIX So Successful? | |
| |
| |
The Early Days of UNIX | |
| |
| |
The Evolution of BSD UNIX | |
| |
| |
Sun Microsystems and SunOS | |
| |
| |
System V Release 4 and Variants | |
| |
| |
Novell's Entry into the UNIX Market | |
| |
| |
Linux and the Open Source Movement | |
| |
| |
UNIX Standardization | |
| |
| |
Summary | |
| |
| |
| |
File-Based Concepts | |
| |
| |
UNIX File Types | |
| |
| |
File Descriptors | |
| |
| |
Basic File Properties | |
| |
| |
The File Mode Creation Mask | |
| |
| |
Changing File Permissions | |
| |
| |
Changing File Ownership | |
| |
| |
Changing File Times | |
| |
| |
Truncating and Removing Files | |
| |
| |
Directories | |
| |
| |
Special Files | |
| |
| |
Symbolic Links and Hard Links | |
| |
| |
Named Pipes | |
| |
| |
Summary | |
| |
| |
| |
User File I/O | |
| |
| |
Library Functions versus System Calls | |
| |
| |
Which Header Files to Use? | |
| |
| |
The Six Basic File Operations | |
| |
| |
Duplicate File Descriptors | |
| |
| |
Seeking and I/O Combined | |
| |
| |
Data and Attribute Caching | |
| |
| |
File and Record Locking | |
| |
| |
File Control Operations | |
| |
| |
Vectored Reads and Writes | |
| |
| |
Asynchronous I/O | |
| |
| |
Memory Mapped Files | |
| |
| |
64-Bit File Access (LFS) | |
| |
| |
Sparse Files | |
| |
| |
Summary | |
| |
| |
| |
The Standard I/O Library | |
| |
| |
The FILE Structure | |
| |
| |
Standard Input, Output, and Error | |
| |
| |
Opening and Closing a Stream | |
| |
| |
Standard I/O Library Buffering | |
| |
| |
Reading and Writing to/from a Stream | |
| |
| |
Seeking through the Stream | |
| |
| |
Summary | |
| |
| |
| |
Filesystem-Based Concepts | |
| |
| |
What's in a Filesystem? | |
| |
| |
The Filesystem Hierarchy | |
| |
| |
Disks, Slices, Partitions, and Volumes | |
| |
| |
Raw and Block Devices | |
| |
| |
Filesystem Switchout Commands | |
| |
| |
Creating New Filesystems | |
| |
| |
Mounting and Unmounting Filesystems | |
| |
| |
Repairing Damaged Filesystems | |
| |
| |
The Filesystem Debugger | |
| |
| |
Per Filesystem Statistics | |
| |
| |
User and Group Quotas | |
| |
| |
Summary | |
| |
| |
| |
UNIX Kernel Concepts | |
| |
| |
5th to 7th Edition Internals | |
| |
| |
The UNIX Filesystem | |
| |
| |
Filesystem-Related Kernel Structures | |
| |
| |
System Call Handling | |
| |
| |
Pathname Resolution | |
| |
| |
Putting It All Together | |
| |
| |
Summary | |
| |
| |
| |
Development of the SVR4 VFS/Vnode Architecture | |
| |
| |
The Need for Change | |
| |
| |
Pre-SVR3 Kernels | |
| |
| |
The File System Switch | |
| |
| |
The Sun VFS/Vnode Architecture | |
| |
| |
The SVR4 VFS/Vnode Architecture | |
| |
| |
Summary | |
| |
| |
| |
Non-SVR4-Based Filesystem Architectures | |
| |
| |
The BSD Filesystem Architecture | |
| |
| |
Digital UNIX / True64 UNIX | |
| |
| |
The AIX Filesystem Architecture | |
| |
| |
The HP-UX VFS Architecture | |
| |
| |
Filesystem Support in Minix | |
| |
| |
Pre-2.4 Linux Filesystem Support | |
| |
| |
Microkernel Support for UNIX Filesystems | |
| |
| |
Summary | |
| |
| |
| |
Disk-Based Filesystem Case Studies | |
| |
| |
The VERIT AS Filesystem | |
| |
| |
The UFS Filesystem | |
| |
| |
The ext2 and ext3 Filesystems | |
| |
| |
Summary | |
| |
| |
| |
Mapping Filesystems to Multiprocessor Systems | |
| |
| |
The Evolution of Multiprocessor UNIX | |
| |
| |
Traditional UNIX Locking Primitives | |
| |
| |
Symmetric Multiprocessing UNIX | |
| |
| |
Summary | |
| |
| |
| |
Pseudo Filesystems | |
| |
| |
The / proc Filesystem | |
| |
| |
The Specfs Filesystem | |
| |
| |
The BSD Memory-Based Filesystem (MFS) | |
| |
| |
The Sun tmpfs Filesystem | |
| |
| |
Other Pseudo Filesystems | |
| |
| |
Summary | |
| |
| |
| |
Filesystem Backup | |
| |
| |
Traditional UNIX Tools | |
| |
| |
Frozen-Image Technology | |
| |
| |
Block-Level Incremental Backups | |
| |
| |
Hierarchical Storage Management | |
| |
| |
Summary | |
| |
| |
| |
Clustered and Distributed Filesystems | |
| |
| |
Distributed Filesystems | |
| |
| |
Clustered Filesystems | |
| |
| |
Summary | |
| |
| |
| |
Developing a Filesystem for the Linux Kernel | |
| |
| |
Designing the New Filesystem | |
| |
| |
Obtaining the Linux Kernel Source | |
| |
| |
Installing Debugging Support | |
| |
| |
Building the uxfs Filesystem | |
| |
| |
Creating a uxfs Filesystem | |
| |
| |
Module Initialization and Deinitialization | |
| |
| |
Mounting and Unmounting the Filesystem | |
| |
| |
Directory Lookups and Pathname Resolution | |
| |
| |
Inode Manipulation | |
| |
| |
File Creation and Link Management | |
| |
| |
Creating and Removing Directories | |
| |
| |
File I/O in uxfs | |
| |
| |
The Filesystem Stat Interface | |
| |
| |
The Filesystem Source Code | |
| |
| |
Suggested Exercises | |
| |
| |
Summary | |
| |
| |
Glossary | |
| |
| |
References | |
| |
| |
Index | |