本书是对4.4BSD操作系统的设计和实现的全面描述,在讨论设计理论的同时,也注重介绍实现的细节。\r\n\r\n 全书分为五个部分,共有14章。第一部分介绍了BSD的历史,简单介绍了操作系统设计的几个基本方面,还介绍了内核服务的基本内容。第二部分介绍了进程管理和内存管理的内容。第三部分介绍I/O系统,包括本地和网络文件系统以及终端处理。第四部分介绍了进程间通信、网络通信以及网络协议。第五部分介绍了系统操作知识。\r\n\r\n 本书适合作为高等院校计算机专业操作系统课程教材,也适合开放系统下的管理人员和开发人员阅读参考。\r\n
\r\n
1. OVERVIEW. \r\n\r\n \r\n\r\n \r\n\r\n 1. History and Goals. \r\n\r\n \r\n\r\n History of the UNIX System. \r\n\r\n \r\n\r\n Origins. \r\n\r\n Research UNIX. \r\n\r\n AT&T UNIX System III and System V. \r\n\r\n Other Organizations. \r\n\r\n Berkeley Software Distributions. \r\n\r\n UNIX in the World. \r\n\r\n \r\n\r\n \r\n\r\n BSD and Other Systems. \r\n\r\n \r\n\r\n The Influence of the User Community. \r\n\r\n \r\n\r\n \r\n\r\n Design Goals of 4BSD. \r\n\r\n \r\n\r\n 4.2BSD Design Goals. \r\n\r\n 4.3BSD Design Goals. \r\n\r\n 4.4BSD Design Goals. \r\n\r\n \r\n\r\n \r\n\r\n Release Engineering. \r\n\r\n References. \r\n\r\n \r\n\r\n \r\n\r\n 2. Design Overview of 4.4BSD. \r\n\r\n \r\n\r\n 4.4BSD Facilities and the Kernel. \r\n\r\n \r\n\r\n The Kernel. \r\n\r\n \r\n\r\n \r\n\r\n Kernel Organization. \r\n\r\n Kernel Services. \r\n\r\n Process Management. \r\n\r\n \r\n\r\n Signals. \r\n\r\n Process Groups and Sessions. \r\n\r\n \r\n\r\n \r\n\r\n Memory Management. \r\n\r\n \r\n\r\n BSD Memory-Management Design Decisions. \r\n\r\n Memory Management Inside the Kernel. \r\n\r\n \r\n\r\n \r\n\r\n I/O System. \r\n\r\n \r\n\r\n Descriptors and I/O. \r\n\r\n Descriptor Management. \r\n\r\n Devices. \r\n\r\n Socket IPC. \r\n\r\n Scatter/Gather I/O. \r\n\r\n Multiple Filesystem Support. \r\n\r\n \r\n\r\n \r\n\r\n Filesystems. \r\n\r\n Filestores. \r\n\r\n Network Filesystem. \r\n\r\n Terminals. \r\n\r\n Interprocess Communication. \r\n\r\n Network Communication. \r\n\r\n Network Implementation. \r\n\r\n System Operation. \r\n\r\n Exercises. \r\n\r\n References. \r\n\r\n \r\n\r\n \r\n\r\n 3.Kernel Services. \r\n\r\n Kernel Organization. \r\n\r\n \r\n\r\n System Processes. \r\n\r\n System Entry. \r\n\r\n Run-Time Organization. \r\n\r\n Entry to the Kernel. \r\n\r\n Return from the Kernel. \r\n\r\n \r\n\r\n \r\n\r\n System Calls. \r\n\r\n \r\n\r\n Result Handling. \r\n\r\n Returning from a System Call. \r\n\r\n \r\n\r\n \r\n\r\n Traps and Interrupts. \r\n\r\n \r\n\r\n Traps. \r\n\r\n I/O Device Interrupts. \r\n\r\n Software Interrupts. \r\n\r\n \r\n\r\n \r\n\r\n Clock Interrupts. \r\n\r\n \r\n\r\n Statistics and Process Scheduling. \r\n\r\n Timeouts. \r\n\r\n \r\n\r\n \r\n\r\n Memory-Management Services. \r\n\r\n Timing Services. \r\n\r\n \r\n\r\n Real Time. \r\n\r\n Adjustment of the Time. \r\n\r\n External Representation. \r\n\r\n Interval Time. \r\n\r\n \r\n\r\n \r\n\r\n User, Group, and Other Identifiers. \r\n\r\n \r\n\r\n Host Identifiers. \r\n\r\n Process Groups and Sessions. \r\n\r\n \r\n\r\n \r\n\r\n Resource Services. \r\n\r\n \r\n\r\n Process Priorities. \r\n\r\n Resource Utilization. \r\n\r\n Resource Limits. \r\n\r\n Filesystem Quotas. \r\n\r\n \r\n\r\n \r\n\r\n System-Operation Services. \r\n\r\n \r\n\r\n Accounting. \r\n\r\n \r\n\r\n \r\n\r\n Exercises. \r\n\r\n References. \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n II. PROCESSES. \r\n\r\n \r\n\r\n \r\n\r\n 4. Process Management. \r\n\r\n \r\n\r\n Introduction to Process Management. \r\n\r\n \r\n\r\n Multiprogramming. \r\n\r\n Scheduling. \r\n\r\n \r\n\r\n \r\n\r\n Process State. \r\n\r\n \r\n\r\n The Process Structure. \r\n\r\n The User Structure. \r\n\r\n \r\n\r\n \r\n\r\n Context Switching. \r\n\r\n \r\n\r\n Process State. \r\n\r\n Low-Level Context Switching. \r\n\r\n Voluntary Context Switching. \r\n\r\n Synchronization. \r\n\r\n \r\n\r\n \r\n\r\n Process Scheduling. \r\n\r\n \r\n\r\n Calculations of Process Priority. \r\n\r\n Process-Priority Routines. \r\n\r\n Process Run Queues and Context Switching. \r\n\r\n \r\n\r\n \r\n\r\n Process Creation. \r\n\r\n Process Termination. \r\n\r\n Signals. \r\n\r\n \r\n\r\n Comparison with POSIX Signals. \r\n\r\n Posting of a Signal. \r\n\r\n Delivering a Signal. \r\n\r\n \r\n\r\n \r\n\r\n Process Groups and Sessions. \r\n\r\n \r\n\r\n Sessions. \r\n\r\n Job Control. \r\n\r\n \r\n\r\n \r\n\r\n Process Debugging. \r\n\r\n Exercises. \r\n\r\n References. \r\n\r\n \r\n\r\n \r\n\r\n 5. Memory Management. \r\n\r\n \r\n\r\n Terminology. \r\n\r\n \r\n\r\n Processes and Memory . \r\n\r\n Paging. \r\n\r\n Replacement Algorithms. \r\n\r\n Working-Set Model. \r\n\r\n Swapping. \r\n\r\n Advantages of Virtual Memory. \r\n\r\n Hardware Requirements for Virtual Memory. \r\n\r\n \r\n\r\n \r\n\r\n Overview of the 4.4BSD Virtual-Memory System. \r\n\r\n Kernel Memory Management. \r\n\r\n \r\n\r\n Kernel Maps and Submaps. \r\n\r\n Kernel Address-Space Allocation. \r\n\r\n Kernel Malloc. \r\n\r\n \r\n\r\n \r\n\r\n Per-Process Resources. \r\n\r\n \r\n\r\n 4.4BSD Process Virtual-Address Space. \r\n\r\n Page-Fault Dispatch. \r\n\r\n Mapping to Objects. \r\n\r\n Objects. \r\n\r\n Objects to Pages. \r\n\r\n \r\n\r\n \r\n\r\n Shared Memory. \r\n\r\n \r\n\r\n Mmap Model. \r\n\r\n Shared Mapping. \r\n\r\n Private Mapping. \r\n\r\n Collapsing of Shadow Chains. \r\n\r\n Private Snapshots. \r\n\r\n \r\n\r\n \r\n\r\n 5.6 Creation of a New Process. \r\n\r\n \r\n\r\n Reserving Kernel Resources. \r\n\r\n Duplication of the User Address Space. \r\n\r\n Creation of a New Process Without Copying. \r\n\r\n \r\n\r\n \r\n\r\n Execution of a File. \r\n\r\n Process Manipulation of Its Address Space. \r\n\r\n \r\n\r\n Change of Process Size. \r\n\r\n File Mapping. \r\n\r\n Change of Protection. \r\n\r\n \r\n\r\n \r\n\r\n Termination of a Process. \r\n\r\n The Pager Interface. \r\n\r\n \r\n\r\n Vnode Pager. \r\n\r\n Device Pager. \r\n\r\n Swap Pager. \r\n\r\n \r\n\r\n \r\n\r\n Paging. \r\n\r\n Page Replacement. \r\n\r\n \r\n\r\n Paging Parameters. \r\n\r\n The Pageout Daemon. \r\n\r\n Swapping. \r\n\r\n The Swap-In Process. \r\n\r\n \r\n\r\n \r\n\r\n Portability . \r\n\r\n \r\n\r\n The Role of the pmap Module. \r\n\r\n Initialization and Startup. \r\n\r\n Mapping Allocation and Deallocation. \r\n\r\n Change of Access and Wiring Attributes for Mappings. \r\n\r\n Management of Page-Usage Information. \r\n\r\n Initialization of Physical Pages. \r\n\r\n Management of Internal Data Structures. \r\n\r\n \r\n\r\n \r\n\r\n Exercises. \r\n\r\n References. \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n III. I/O System. \r\n\r\n \r\n\r\n \r\n\r\n 6. I/O System Overview. \r\n\r\n \r\n\r\n I/O Mapping from User to Device. \r\n\r\n \r\n\r\n Device Drivers. \r\n\r\n I/O Queueing. \r\n\r\n Interrupt Handling. \r\n\r\n \r\n\r\n \r\n\r\n Block Devices. \r\n\r\n \r\n\r\n Entry Points for Block-Device Drivers. \r\n\r\n Sorting of Disk I/O Requests. \r\n\r\n Disk Labels. \r\n\r\n \r\n\r\n \r\n\r\n Character Devices. \r\n\r\n \r\n\r\n Raw Devices and Physical I/O. \r\n\r\n Character-Oriented Devices. \r\n\r\n Entry Points for Character-Device Drivers. \r\n\r\n \r\n\r\n \r\n\r\n Descriptor Management and Services. \r\n\r\n \r\n\r\n Open File Entries. \r\n\r\n Management of Descriptors. \r\n\r\n File-Descriptor Locking. \r\n\r\n Multiplexing I/O on Descriptors. \r\n\r\n Implementation of Select. \r\n\r\n Movement of Data Inside the Kernel. \r\n\r\n \r\n\r\n \r\n\r\n The Virtual-Filesystem Interface. \r\n\r\n \r\n\r\n Contents of a Vnode. \r\n\r\n Vnode Operations. \r\n\r\n Pathname Translation. \r\n\r\n Exported Filesystem Services. \r\n\r\n \r\n\r\n \r\n\r\n Filesystem-Independent Services. \r\n\r\n \r\n\r\n The Name Cache. \r\n\r\n Buffer Management. \r\n\r\n Implementation of Buffer Management. \r\n\r\n \r\n\r\n \r\n\r\n Stackable Filesystems. \r\n\r\n \r\n\r\n Simple Filesystem Layers. \r\n\r\n The Union Mount Filesystem. \r\n\r\n Other Filesystems. \r\n\r\n \r\n\r\n \r\n\r\n Exercises. \r\n\r\n References. \r\n\r\n \r\n\r\n \r\n\r\n 7. Local Filesystems. \r\n\r\n \r\n\r\n Hierarchical Filesystem Management. \r\n\r\n Structure of an Inode. \r\n\r\n \r\n\r\n Inode Management. \r\n\r\n \r\n\r\n \r\n\r\n Naming. \r\n\r\n \r\n\r\n Directories. \r\n\r\n Finding of Names in Directories. \r\n\r\n Pathname Translation. \r\n\r\n Links. \r\n\r\n \r\n\r\n \r\n\r\n Quotas. \r\n\r\n File Locking. \r\n\r\n Other Filesystem Semantics. \r\n\r\n \r\n\r\n Large File Sizes. \r\n\r\n File Flags. \r\n\r\n \r\n\r\n \r\n\r\n Exercises. \r\n\r\n References. \r\n\r\n \r\n\r\n \r\n\r\n 8. Local Filestores. \r\n\r\n \r\n\r\n Overview of the Filestore. \r\n\r\n The Berkeley Fast Filesystem. \r\n\r\n \r\n\r\n Organization of the Berkeley Fast Filesystem. \r\n\r\n Optimization of Storage Utilization. \r\n\r\n Reading and Writing to a File. \r\n\r\n Filesystem Parameterization. \r\n\r\n Layout Policies. \r\n\r\n Allocation Mechanisms. \r\n\r\n Block Clustering. \r\n\r\n Synchronous Operations. \r\n\r\n \r\n\r\n \r\n\r\n The Log-Structured Filesystem. \r\n\r\n \r\n\r\n Organization of the Log-Structured Filesystem. \r\n\r\n Index File. \r\n\r\n Reading of the Log. \r\n\r\n Writing to the Log. \r\n\r\n Block Accounting. \r\n\r\n The Buffer Cache. \r\n\r\n Directory Operations. \r\n\r\n Creation of a File. \r\n\r\n Reading and Writing to a File. \r\n\r\n Filesystem Cleaning. \r\n\r\n Filesystem Parameterization. \r\n\r\n Filesystem-Crash Recovery. \r\n\r\n \r\n\r\n \r\n\r\n The Memory-Based Filesystem. \r\n\r\n \r\n\r\n Organization of the Memory-Based Filesystem. \r\n\r\n Filesystem Performance. \r\n\r\n Future Work. \r\n\r\n \r\n\r\n \r\n\r\n Exercises. \r\n\r\n References. \r\n\r\n \r\n\r\n \r\n\r\n 9. The Network Filesystem. \r\n\r\n \r\n\r\n History and Overview. \r\n\r\n NFS Structure and Operation. \r\n\r\n \r\n\r\n The NFS Protocol. \r\n\r\n The 4.4BSD NFS Implementation. \r\n\r\n Client-Server Interactions. \r\n\r\n RPC Transport Issues. \r\n\r\n Security Issues. \r\n\r\n \r\n\r\n \r\n\r\n Techniques for Improving Performance. \r\n\r\n \r\n\r\n Leases. \r\n\r\n Crash Recovery. \r\n\r\n \r\n\r\n \r\n\r\n Exercises. \r\n\r\n References. \r\n\r\n \r\n\r\n \r\n\r\n 10. Terminal Handling. \r\n\r\n \r\n\r\n Terminal-Processing Modes. \r\n\r\n Line Disciplines. \r\n\r\n User Interface. \r\n\r\n The tty Structure. \r\n\r\n Process Groups, Sessions, and Terminal Control. \r\n\r\n C-lists. \r\n\r\n RS-232 and Modem Control. \r\n\r\n Terminal Operations. \r\n\r\n \r\n\r\n Open. \r\n\r\n Output Line Discipline. \r\n\r\n Output Top Half. \r\n\r\n Output Bottom Half. \r\n\r\n Input Bottom Half. \r\n\r\n Input Top Half. \r\n\r\n The stop Routine. \r\n\r\n The ioctl Routine. \r\n\r\n Modem Transitions. \r\n\r\n Closing of Terminal Devices. \r\n\r\n \r\n\r\n \r\n\r\n Other Line Disciplines. \r\n\r\n \r\n\r\n Serial Line IP Discipline. \r\n\r\n Graphics Tablet Discipline. \r\n\r\n \r\n\r\n \r\n\r\n Exercises. \r\n\r\n References. \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n IV. INTERPROCESS COMMUNICATION. \r\n\r\n \r\n\r\n \r\n\r\n 11. Interprocess Communication. \r\n\r\n \r\n\r\n Interprocess-Communication Model. \r\n\r\n \r\n\r\n Use of Sockets. \r\n\r\n \r\n\r\n \r\n\r\n Implementation Structure and Overview. \r\n\r\n Memory Management. \r\n\r\n \r\n\r\n Mbufs. \r\n\r\n Storage-Management Algorithms. \r\n\r\n Mbuf Utility Routines. \r\n\r\n \r\n\r\n \r\n\r\n Data Structures. \r\n\r\n \r\n\r\n Communication Domains. \r\n\r\n Sockets. \r\n\r\n Socket Addresses. \r\n\r\n \r\n\r\n \r\n\r\n Connection Setup. \r\n\r\n Data Transfer. \r\n\r\n \r\n\r\n Transmitting Data. \r\n\r\n Receiving Data. \r\n\r\n Passing Access Rights. \r\n\r\n Passing Access Rights in the Local Domain. \r\n\r\n \r\n\r\n \r\n\r\n Socket Shutdown. \r\n\r\n Exercises. \r\n\r\n References. \r\n\r\n \r\n\r\n \r\n\r\n 12. Network Communication. \r\n\r\n \r\n\r\n Internal Structure. \r\n\r\n \r\n\r\n Data Flow. \r\n\r\n Communication Protocols. \r\n\r\n Network Interfaces. \r\n\r\n \r\n\r\n \r\n\r\n Socket-to-Protocol Interface. \r\n\r\n \r\n\r\n Protocol User-Request Routine. \r\n\r\n Internal Requests. \r\n\r\n Protocol Control-Output Routine. \r\n\r\n \r\n\r\n \r\n\r\n Protocol-Protocol Interface. \r\n\r\n \r\n\r\n pr_output. \r\n\r\n pr_input. \r\n\r\n pr_ctlinput. \r\n\r\n Interface between Protocol and Network Interface. \r\n\r\n Packet Transmission. \r\n\r\n Packet Reception. \r\n\r\n \r\n\r\n \r\n\r\n Routing. \r\n\r\n \r\n\r\n Kernel Routing Tables. \r\n\r\n Routing Lookup. \r\n\r\n Routing Redirects. \r\n\r\n Routing-Table Interface. \r\n\r\n User-Level Routing Policies. \r\n\r\n User-Level Routing Interface: Routing Socket. \r\n\r\n \r\n\r\n \r\n\r\n Buffering and Congestion Control. \r\n\r\n \r\n\r\n Protocol Buffering Policies. \r\n\r\n Queue Limiting. \r\n\r\n \r\n\r\n \r\n\r\n Raw Sockets. \r\n\r\n \r\n\r\n Control Blocks. \r\n\r\n Input Processing. \r\n\r\n Output Processing. \r\n\r\n \r\n\r\n \r\n\r\n Additional Network-Subsystem Topics. \r\n\r\n \r\n\r\n Out-of-Band Data. \r\n\r\n Address Resolution Protocol. \r\n\r\n \r\n\r\n \r\n\r\n Exercises. \r\n\r\n References. \r\n\r\n \r\n\r\n \r\n\r\n 13. Network Protocols. \r\n\r\n \r\n\r\n Internet Network Protocols. \r\n\r\n \r\n\r\n Internet Addresses. \r\n\r\n Subnets. \r\n\r\n Broadcast Addresses. \r\n\r\n Internet Multicast. \r\n\r\n Internet Ports and Associations. \r\n\r\n Protocol Control Blocks. \r\n\r\n \r\n\r\n \r\n\r\n User Datagram Protocol (UDP). \r\n\r\n \r\n\r\n Initialization. \r\n\r\n Output. \r\n\r\n Input. \r\n\r\n Control Operations. \r\n\r\n \r\n\r\n \r\n\r\n Internet Protocol (IP). \r\n\r\n \r\n\r\n Output. \r\n\r\n Input. \r\n\r\n Forwarding. \r\n\r\n \r\n\r\n \r\n\r\n Transmission Control Protocol (TCP). \r\n\r\n \r\n\r\n TCP Connection States. \r\n\r\n Sequence Variables. \r\n\r\n \r\n\r\n \r\n\r\n TCP Algorithms. \r\n\r\n \r\n\r\n Timers. \r\n\r\n Estimation of Round-Trip Time. \r\n\r\n Connection Establishment. \r\n\r\n Connection Shutdown. \r\n\r\n \r\n\r\n \r\n\r\n TCP Input Processing. \r\n\r\n TCP Output Processing. \r\n\r\n \r\n\r\n Sending of Data. \r\n\r\n Avoidance of the Silly-Window Syndrome. \r\n\r\n Avoidance of Small Packets. \r\n\r\n Delayed Acknowledgments and Window Updates. \r\n\r\n Retransmit State. \r\n\r\n Slow Start. \r\n\r\n Source-Quench Processing. \r\n\r\n Buffer and Window Sizing. \r\n\r\n Avoidance of Congestion with Slow Start. \r\n\r\n Fast Retransmission. \r\n\r\n \r\n\r\n \r\n\r\n Internet Control Message Protocol (ICMP). \r\n\r\n OSI Implementation Issues. \r\n\r\n Summary of Networking and Interprocess Communication. \r\n\r\n \r\n\r\n Creation of a Communication Channel. \r\n\r\n Sending and Receiving of Data. \r\n\r\n Termination of Data Transmission or Reception. \r\n\r\n \r\n\r\n \r\n\r\n Exercises. \r\n\r\n References. \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n V. SYSTEM OPERATION. \r\n\r\n \r\n\r\n \r\n\r\n 14. System Startup. \r\n\r\n \r\n\r\n Overview. \r\n\r\n Bootstrapping. \r\n\r\n \r\n\r\n The boot Program. \r\n\r\n \r\n\r\n \r\n\r\n Kernel Initialization. \r\n\r\n \r\n\r\n Assembly-Language Startup. \r\n\r\n Machine-Dependent Initialization. \r\n\r\n Message Buffer. \r\n\r\n System Data Structures. \r\n\r\n \r\n\r\n \r\n\r\n Autoconfiguration. \r\n\r\n \r\n\r\n Device Probing. \r\n\r\n Device Attachment. \r\n\r\n New Autoconfiguration Data Structures. \r\n\r\n New Autoconfiguration Functions. \r\n\r\n Device Naming. \r\n\r\n \r\n\r\n \r\n\r\n Machine-Independent Initialization. \r\n\r\n User-Level Initialization. \r\n\r\n \r\n\r\n /sbin/init. \r\n\r\n /etc/rc. \r\n\r\n /usr/libexec/getty. \r\n\r\n /usr/bin/login. \r\n\r\n \r\n\r\n \r\n\r\n System-Startup Topics. \r\n\r\n \r\n\r\n Kernel Configuration. \r\n\r\n System Shutdown and Autoreboot. \r\n\r\n System Debugging. \r\n\r\n Passage of Information To and From the Kernel. \r\n\r\n \r\n\r\n \r\n\r\n Exercises. \r\n\r\n References. \r\n\r\n \r\n\r\n \r\n\r\n Glossary. \r\n\r\n Index. \r\n
\r\n
从1969年Bell实验室开发出第一版UNIX系统至今已经有30多年的时间了. 1976年, Bell实验室以外第一个可用的UNIX分时系统第六版(即V6)正式发布. 在此后20多年的时间里, UNIX系统得到了长足的发展, 各种研究开发机构和大学都开发了不同版本的UNIX操作系统, 其中由加利福尼亚大学伯克利分校研究开发的 BSD(Berkeley Software Distributions)系统是最具影响的系统之一. 先后有IBSD. 2BSD. 3BSD. 4BSD等, 特别是4BSD, 又有4.0BSD. 4. 1BSD. 4. 2BSD. 4. 3BSD和4. 4BSD等不同的版本. 4. 4BSD不仅可以运行在原来的VAX计算机上, 而且已可以运行在68000. SPARC. MIPS. Intel PC等体系结构的计算机上.
The Design and Implementation of the 4. 4 BSD Operating System讨论了 4. 4BSD操作系统的设计和实现, 主要内容分为五部分共14章, 各章的主要内容如下:
第一部分:总论
第1章历史与目标. 主要介绍UNIX和4.4BSD操作系统的历史和设计目标.
第2章4. 4BSD的设计概述. 描述了系统提供的服务及内核的组织概况, 还讨论了系统开发过程中的设计决策.
第3章内核服务. 描述了系统如何调用和工作, 详细描述了内核的几种基本服务.
第二部分:进程
第4章进程管理. 描述了进程结构. 进程调度算法, 以及系统为保证常驻内核的数据结构能够被正常访问所采用的同步机制, 为后面的章节奠定基础.
第5章存储管理. 对虚拟存储管理进行了详细讨论.
第三部分:I/O系统
第6章I/O系统概述. 说明了系统I/O接口以及支持这些I/O接口的设备结构.
第7章本地文件系统. 从应用程序的角度详细叙述了文件系统实现过程中用到的数据结构和算法.
第8章本地文件存储. 描述了本地文件系统如何与本地介质接口.
第9章网络文件系统. 从服务器和客户机的视角分析网络文件系统.
第10章面向字符的终端的处理人I论对字符终端的支持以及面向对象字符终端的设备驱动.
第四部分:进程通信
第11章进程通信. 描述了相关进程之间的通信机制.
第12章网络通信.
第13章网络协议.
这两章密切相关, 前者所提到的设备通过后者所提到的具体协议来实现.
第五部分:系统操作
第14章系统启动. 讨论系统启动. 关闭和配置, 从过程级来讨论系统初始化, 区别于对用户登录时内核初始化的讨论.
本书的四位作者都参加过UNIX. BSD系统的开发. 教学. 咨询等各种活动, 亲身经历了该系统的发展过程, 熟悉系统内核, 具有丰富的实践经验. 因此, 他们在书中对UNIX发展历程. 各个阶段的版本的设计目标和特点做出了简明和清晰的概括, 对4. 4BSD的核心设计思想和技术特征进行了准确的描述, 特别是对4. 4BSD的系统调用. 中断处理. 进程管理. 处理机调度. 虚拟存储管理. I/O系统和设备处理. 文件系统. 进程间通信. 网络通信. 网络协议(尤其是TCP/IP协议的实现)等都进行了不同程度的讨论. 对于对操作系统的基本原理已有一个全面了解的读者而言, 本书是对基本原理的一个实现实例的全面分析, 使读者可以生动地理解到操作系统的基本原理是如何体现在一个真实的操作系统中的.
1989年, 本书的前身 The Desgu and Implementation of the 4. 3 BSD UNIX Operating System问世, 成为其时第一本介绍BSD操作系统内核的技术图书, 一直是各技术网站. 操作系统专家和海外学子们热衷推荐阅读的图书. 遗憾的是, 那时候国内的读者接触英文原版图书的机会很少. 随着BSD系统的发展, 1996年专门针对的4.4BSD的这本书出版了. 在本书中, 增加了新版本的技术信息, 从系统结构出发的独特视角. 符合逻辑的认识方法. 清晰详尽的分析过程等特色都得到了很好的延继, 因此, 本书在专业技术领域的全面. 权威. 及时的形象和地位得到了巩固. 现在, 人民邮电出版社以影印方式把本书引入国内, 将会给计算机专业的高年级本科生和研究牛提供一个很有实用价值的UNIX操作系统教材. 对于分布操作系统领域的研究和工发人员, 本书也有很好的参考价值.
清华大学计算机系教授博导
史美林
Marshall Kirk McKusick writes books and articles, consults, and teaches classes on UNIX- and BSD-related subjects. While at the University of California at Berkeley, he implemented the 4.2BSD fast file system, and was the Research Computer Scientist at the Berkeley Computer Systems Research Group (CSRG) overseeing the development and release of 4.3BSD and 4.4BSD. His particular areas of interest are the virtual-memory system and the filesystem. One day, he hopes to see them merged seamlessly. He
This book is an extensive revision of the first authoritative and full-length description of the design and implementation of the research versions of the UNIX system developed at the University of California at Berkeley. Most detail is given about 4.4BSD, which incorporates the improvements of the previous Berkeley versions. Although 4.4BSD includes nearly 500 utility programs in addition to the kernel, this book concentrates almost exclusively on the kernel.
The UNIX System
The UNIX system runs on computers ranging from personal home systems to the largest supercomputers. It is the operating system of choice for most multiprocessor, graphics, and vector-processing systems, and is widely used for its original purpose of timesharing. It is the most common platform for providing network services (from FTP to WWW) on the Internet. It is the most portable operating system ever developed. This portability is due partly to its implementation language, C Kernighan & Ritchie, 1978 (which is itself one of the most widely ported languages), and partly to the elegant design of the system. Many of the system's features are imitated in other systems O'Dell, 1987.
Since its inception in 1969 Ritchie & Thompson, 1978, the UNIX system has developed in a number of divergent and rejoining streams. The original developers continued to advance the state of the art with their Ninth and Tenth Edition UNIX inside AT&T Bell Laboratories, and then their Plan 9 successor to UNIX. Meanwhile, AT&T licensed UNIX System V as a product, before selling it to Novell. Novell passed the UNIX trademark to X/OPEN and sold the source code and distribution rights to Santa CruzOperation (SCO). Both System V and Ninth Edition UNIX were strongly influenced by the Berkeley Software Distributions produced by the Computer Systems Research Group (CSRG) of the University of California at Berkeley.
Berkeley Software Distributions
These Berkeley systems have introduced several useful programs and facilities to the UNIX community:
2BSD (the Berkeley PDP-11 system): the text editor vi
3BSD (the first Berkeley VAX system): demand-paged virtual-memory support
4.0BSD: performance improvements
4.1BSD: job control, autoconfiguration, and long C identifiers
4.2BSD and 4.3BSD: reliable signals; a fast filesystem; improved networking, including a reference implementation of TCP/IP; sophisticated interprocess-communication (IPC) primitives; and more performance improvements
4.4BSD: a new virtual memory system; a stackable and extensible vnode interface; a network filesystem (NFS); a log-structured filesystem, numerous filesystem types, including loopback, union, and uid/gid mapping layers; an ISO9660 filesystem (e.g., CD-ROM); ISO networking protocols; support for 68K, SPARC, MIPS, and PC architectures; POSIX support, including termios, sessions, and most utilities; multiple IP addresses per interface; disk labels; and improved booting
4.2BSD, 4.3BSD, and 4.4BSD are the bases for the UNIX systems of many vendors, and are used internally by the development groups of many other vendors. Many of these developments have also been incorporated by System V, or hav e been added by vendors whose products are otherwise based on System V.
The implementation of the TCP/IP networking protocol suite in 4.2BSD and 4.3BSD, and the availability of those systems, explain why the TCP/IP networking protocol suite is implemented so widely throughout the world. Numerous vendors have adapted the Berkeley networking implementations, whether their base system is 4.2BSD, 4.3BSD, 4.4BSD, System V, or even Digital Equipment Corporation's VMS or Microsoft's Winsock interface in Windows '95 and Windows/NT.
4BSD has also been a strong influence on the POSIX (IEEE Std 1003.1) operating-system interface standard, and on related standards. Several features—such as reliable signals, job control, multiple access groups per process, and the routines for directory operations—have been adapted from 4.3BSD for POSIX.
Material Covered in this Book
This book is about the internal structure of 4.4BSD Quarterman et al, 1985, and about the concepts, data structures, and algorithms used in implementing 4.4BSD's system facilities. Its level of detail is similar to that of Bach's book about UNIX System V Bach, 1986; however, this text focuses on the facilities, data structures, and algorithms used in the Berkeley variant of the UNIX operating system. The book covers 4.4BSD from the system-call level down—from the interface to the kernel to the hardware itself. The kernel includes system facilities, such as process management, virtual memory, the I/O system, filesystems, the socket IPC mechanism, and network protocol implementations. Material above the system-call level—such as libraries, shells, commands, programming languages, and other user interfaces—is excluded, except for some material related to the terminal interface and to system startup. Like Organick's book about Multics Organick, 1975, this book is an in-depth study of a contemporary operating system.
Where particular hardware is relevant, the book refers to the Hewlett-Packard HP300 (Motorola 68000-based) architecture. Because 4.4BSD was developed on the HP300, that is the architecture with the most complete support, so it provides a convenient point of reference.
Readers who will benefit from this book include operating-system implementors, system programmers, UNIX application developers, administrators, and curious users. The book can be read as a companion to the source code of the system, falling as it does between the manual CSRG, 1994 and the code in detail of treatment. But this book is specifically neither a UNIX programming manual nor a user tutorial (for a tutorial, see Libes & Ressler, 1988). Familiarity with the use of some version of the UNIX system (see, for example, Kernighan & Pike, 1984), and with the C programming language (see, for example, Kernighan & Ritchie, 1988) would be extremely useful.
Use in Courses on Operating Systems
This book is suitable for use as a reference text to provide background for a primary textbook in a second-level course on operating systems. It is not intended for use as an introductory operating-system textbook; the reader should have already encountered terminology such as memory management, process scheduling, and I/O systems Silberschatz & Galvin, 1994. Familiarity with the concepts of network protocols Tanenbaum, 1988; Stallings, 1993; Schwartz, 1987 will be useful for understanding some of the later chapters.
Exercises are provided at the end of each chapter. The exercises are graded into three categories indicated by zero, one, or two asterisks. The answers to exercises that carry no asterisks can be found in the text. Exercises with a single asterisk require a step of reasoning or intuition beyond a concept presented in the text. Exercises with two asterisks present major design projects or open research questions.
Organization
This text discusses both philosophical and design issues, as well as details of the actual implementation. Often, the discussion starts at the system-call level and descends into the kernel. Tables and figures are used to clarify data structures and control flow. Pseudocode similar to the C language is used to display algorithms. Boldface font identifies program names and filesystem pathnames. Italics font introduces terms that appear in the glossary and identifies the names of system calls, variables, routines, and structure names. Routine names (other than system calls) are further identified by the name followed by a pair of parenthesis (e.g., malloc() is the name of a routine, whereas argv is the name of a variable).
The book is divided into five parts, organized as follows:
Part 1, Overview
Three introductory chapters provide the context for the complete operating system and for the rest of the book. Chapter 1, History and Goals, sketches the historical development of the system, emphasizing the system's research orientation. Chapter 2, Design Overview of 4.4BSD, describes the services offered by the system, and outlines the internal organization of the kernel. It also discusses the design decisions that were made as the system was developed. Sections 2.3 through 2.14 in Chapter 2 give an overview of their corresponding chapter. Chapter 3, Kernel Services, explains how system calls are done, and describes in detail several of the basic services of the kernel.
Part 2, Processes
The first chapter in this part—Chapter 4, Process Management—lays the foundation for later chapters by describing the structure of a process, the algorithms used for scheduling the execution of processes, and the synchronization mechanisms used by the system to ensure consistent access to kernel-resident data structures. In Chapter 5, Memory Management, the virtual-memory!=management system is discussed in detail.
Part 3, I/O System
First, Chapter 6, I/O System Overview, explains the system interface to I/O and describes the structure of the facilities that support this interface. Following this introduction are four chapters that give the details of the main parts of the I/O system. Chapter 7, Local Filesystems, details the data structures and algorithms that implement filesystems as seen by application programs. Chapter 8, Local Filestores, describes how local filesystems are interfaced with local media. Chapter 9, The Network Filesystem, explains the network filesystem from both the server and client perspectives. Chapter 10, Terminal Handling, discusses support for character terminals, and provides a description of a character-oriented device driver.
Part 4, Interprocess Communication
Chapter 11, Interprocess Communication, describes the mechanism for providing communication between related or unrelated processes. Chapters 12 and 13, Network Communication and Network Protocols, are closely related, as the facilities explained in the former are implemented by specific protocols, such as the TCP/IP protocol suite, explained in the latter.
Part 5, System Operation
Chapter 14, System Startup, discusses system startup, shutdown, and configuration, and explains system initialization at the process level, from kernel initialization to user login.
The book is intended to be read in the order that the chapters are presented, but the parts other than Part 1 are independent of one another and can be read separately. Chapter 14 should be read after all the others, but knowledgeable readers may find it useful independently.
At the end of the book are a Glossary with brief definitions of major terms and an Index. Each chapter contains a Reference section with citations of related material.
Getting 4.4BSD
Current information about the availability of 4.4BSD source code can be found at Addison-Wesley's web site. See the catalog listing for this book. At press time, the source code for the 4.4BSD-Lite Release 2 system, as well as that for the FreeBSD version of 4.4BSD, which is compiled and ready to run on PC-compatible hardware, are available from Walnut Creek CDROM. Contact Walnut Creek for more information at 1-800-786-9907, or use orders@cdrom.com, or http://www.cdrom.com/. The NetBSD distribution is compiled and ready to run on most workstation architectures. For more information, contact the NetBSD Project at majordomo@NetBSD.ORG (send a message body of "lists"), or http://www.NetBSD.ORG/. A fully supported commercial release, BSD/OS, is available from Berkeley Software Design, Inc., at 1-800-800-4273, bsdi-info@bsdi.com, or http://www.bsdi.com/. The 4.4BSD manuals are jointly published by Usenix and O'Reilly. O'Reilly sells the five volumes individually or in a set (ISBN 1-56592-082-1): 1-800-889-8969, order@ora.com, or http://www.ora.com.
For you diehards who actually read to the end of the preface, your reward is finding out that you can get T-shirts that are a reproduction of the the original artwork drawn by John Lasseter for the cover of this book (yes, he is the John Lasseter of Walt Disney/Pixar fame who masterminded the production of "Toy Story"). These shirts were made available to the people who helped with the creation, reviewing, and editing of the book and to those folks who first reported errors in the book. A variation on these shirts that is clearly different from the originals (so as not to diminish the rarity of the ones that people had to work to get) is now available. For further information on purchasing a shirt, send a self-addressed envelope (United States residents please include return postage) to
M. K. McKusick
1614 Oxford St.
Berkeley, CA 94709-1608
USA
Alternatively, you can send mail to mckusick@McKusick.COM with subject line "T-shirt Information Request" or visit the "History of BSD T-shirts" web page at http://www.zilker.net/users/beastie/index.html.
Acknowledgments
We extend special thanks to Mike Hibler (University of Utah) who coauthored Chapter 5 on memory management, and to Rick Macklem (University of Guelph), whose NFS papers provided much of the material on NFS for Chapter 9.
We also thank the following people who read and commented on nearly the entire book: Paul Abrahams (Consultant), Susan LoVerso (Orca Systems), George Neville-Neil (Wind River Systems), and Steve Stepanek (California State University, Northbridge).
We thank the following people, all of whom read and commented on early drafts of the book: Eric Allman (Pangaea Reference Systems), Eric Anderson (University of California at Berkeley), Mark Andrews (Alias Research), Mike Beede (Secure Computing Corporation), Paul Borman (Berkeley Software Design), Peter Collinson (Hillside Systems), Ben Cottrell (NetBSD user), Patrick Cua (De La Salle University, Philippines), John Dyson (The FreeBSD Project), Sean Eric Fagan (BSD developer), Mike Fester (Medieus Systems Corporation), David Greenman (The FreeBSD Project), Wayne Hathaway (Auspex Systems), John Heidemann (University of California at Los Angeles), Jeff Honig (Berkeley Software Design), Gordon Irlam (Cygnus Support), Alan Langerman (Orca Systems), Sam Leffler (Silicon Graphics), Casimir Lesiak (NASA/Ames Research Center), Gavin Lim (De La Salle University, Philippines), Steve Lucco (Carnegie Mellon University), Jan-Simon Pendry (Sequent, UK), Arnold Robbins (Georgia Institute of Technology), Peter Salus (UNIX historian), Wayne Sawdon (Carnegie Mellon University), Margo Seltzer (Harvard University), Keith Sklower (University of California at Berkeley), Keith Smith (Harvard University), and Humprey C. Sy (De La Salle University, Philippines).
This book was produced using James Clark's implementations of pic, tbl, eqn, and groff. The index was generated by awk scripts derived from indexing programs written by Jon Bentley and Brian Kernighan Bentley & Kernighan, 1986. Most of the art was created with xfig. Figure placement and widow elimination were handled by the groff macros, but orphan elimination and production of even page bottoms had to be done by hand.
We encourage readers to send us suggested improvements or comments about typographical or other errors found in the book; please send electronic mail to bsdbook-bugs@McKusick.COM.
References
Bach, 1986.
M. J. Bach, The Design of the UNIX Operating System,Prentice-Hall, Englewood Cliffs, NJ, 1986.
Bentley & Kernighan, 1986.
J. Bentley & B. Kernighan, "Tools for Printing Indexes," Computing Science Technical Report 128, AT&T Bell Laboratories, Murray Hill, NJ, 1986.
CSRG, 1994.
CSRG, in 4.4 Berkeley Software Distribution, O'Reilly & Associates, Inc., Sebastopol, CA, 1994.
Kernighan & Pike, 1984.
B. W. Kernighan & R. Pike, The UNIX Programming Environment, Prentice-Hall, Englewood Cliffs, NJ, 1984.
Kernighan & Ritchie, 1978.
B. W. Kernighan & D. M. Ritchie, The C Programming Language, Prentice-Hall, Englewood Cliffs, NJ, 1978.
Kernighan & Ritchie, 1988.
B. W. Kernighan & D. M. Ritchie, The C Programming Language, 2nd ed, Prentice-Hall, Englewood Cliffs, NJ, 1988.
Libes & Ressler, 1988.
D. Libes & S. Ressler, Life with UNIX, Prentice-Hall, Englewood Cliffs, NJ, 1988.
O'Dell, 1987.
M. O'Dell, "UNIX: The World View," Proceedings of the 1987 Winter USENIX Conference, pp. 35-45, January 1987.
Organick, 1975.
E. I. Organick, The Multics System: An Examination of Its Structure, MIT Press, Cambridge, MA, 1975.
Quarterman et al, 1985.
J. S. Quarterman, A. Silberschatz, & J. L. Peterson, "4.2BSD and 4.3BSD as Examples of the UNIX System,"ACM Computing Surveys, vol. 17, no. 4, pp. 379-418, December 1985.
Ritchie & Thompson, 1978.
D. M. Ritchie & K. Thompson, "The UNIX Time-Sharing System," Bell System Technical Journal, vol. 57, no. 6, Part 2, pp. 1905!=1929, JulynAugust 1978. The original version Comm. ACM vol. 7, no. 7, pp. 365-375 (July 1974) described the 6th edition; this citation describes the 7th edition.
Schwartz, 1987.
M. Schwartz, Telecommunication Networks, Series in Electrical and Computer Engineering, Addison-Wesley, Reading, MA, 1987.
Silberschatz & Galvin, 1994.
A. Silberschatz & P. Galvin, Operating System Concepts, 4th Edition, Addison-Wesley, Reading, MA, 1994.
Stallings, 1993.
R. Stallings, Data and Computer Communications, 4th Edition, Macmillan, New York, NY, 1993.
Tanenbaum, 1988.
A. S. Tanenbaum, Computer Networks, 2nd ed, Prentice-Hall, Englewood Cliffs, NJ, 1988.