1 introduction
1.1 introduction
1.2 th mandate for change
1.3 looking back, looking forward
1.4 the scope of this book
1.5 references
2 the process and the kernel
2.1 introduction
2.2 mode, space, and context
2.3 the process abstraction
2.4 executing in kernel mode
2.5 synchronization
2.6 process scheduling
2.7 signals
2.8 new processes and programs
2.9 summary
2.10 exercises
2.11 references
3 threads and lightweight processes
3.1 introduction
.3.2 fundamental abstractions
3.3 lightweight process design--issues to consider
3.4 user-level threads libraries
3.5 scheduler activations
3.6 multithreading in solarie and svr4
3.7 threads in mach
3.8 digital unix
3.9 mach 3.0 continuations
3.10 summary
3.11 exercises
3.12 references
4 signals and session management
4.1 introduction
4.2 signal generation and handling
4.3 unreliable signals
4.4 reliable signals
4.5 signals in svr4
4.6 signals implementation
4.7 exceptions
4.8 mach exception handling
4.9 process groups and terminal management
4.10 the svr4 sessions architecture
4.11 summary
4.12 exercises
4.13 references
5 process scheduling
5.1 introduction
5.2 clock interrupt handling
5.3 scheduler goals
5.4 traditional unix scheduling
5.5 the svr4 scheduler
5.6 solaris 2.x scheduling enhancements
5.7 scheduling in mach
5.8 the digital unix real-time scheduler
5.9 other scheduling implementations
5.10 summary
5.11 exercises
5.12 references
6 interprocess communications
6.1 introduction
6.2 universal ipc facilities
6.3 system v ipc
6.4 mach ipc
6.5 messages
6.6 ports
6.7 message passing
6.8 port operations
6.9 extensibility
6.10 mach 3.0 enhancements
6.11 discussion
6.12 summary
6.13 exercises
6.14 references
7 synchronization and multiprocessing
7.1 introduction
7.2 synchronization in traditional unix kernels
7.3 multiprocessor systems
7.4 multiprocessor synchronization issues
7.5 semaphores
7.6 spin locks
7.7 condition variables
7.8 resd-writs locks
7.g reference counts
7.10 other considerations
7.11 case studies
7.12 summary
7.13 exercises
7.14 references
8 file system interface and framework
8.1 introduction
8.2 the user interface to files
8.3 file systems
8.4 special files
8.5 file system framework
8.6 the vnode/vfs architecture
8.7 implementation overview
8.8 file-system-dependent objects
8.9 mounting a file system
8.10 operations on files
8.11 analysis
8.12 summary
8.13 exercises
8.14 references
9 file system implementations
9.1 introduction
9.2 the system v file system (s5fs)
9.3 s5fs kernel organization
9.4 analysis of s5fs
9.5 the berkeley fast file system
9.6 hard disk structure
9.7 on-disk organization
9.8 ffs functionality enhancements
9.9 analysis
9.10 temporary file systems
9.11 special-purpose file systems
9.12 the old buffer cache
9.13 summary
9.14 exercises
9.15 references
10 distributed file systems
10.1 introduction
10.2 general characteristics of distributed file systems
10.3 network file system (nfs)
10.4 the protocol suite
10.5 nfs implementation
10.6 unix semantics
10.7 nfs performance
10.8 dedicated nfs servers
10.9 nfs security
10.10 nfs version 3
10.11 remote file sharing (rfs)
10.12 rfs architecture
10.13 rfs implementation
10.14 client-side caching
10.15 the andrew file system
10.16 afs implementation
10.17 afs shortcomings
10.18 the dce distributed file system (dce dfs)
10.19 summary
10.20 exercises
10.21 references
11 advanced file systems
11.1 introduction
11.2 limitations of traditional file systems
11.3 file system clustering (sun-ffs)
11.4 the journaling approach
11.5 log-structured file systems
1l.6 the 4.4bsd log-structured file system
11.7 metedata logging
11.8 the episode file system
11.9 watchdogs
11.10 the 4.4bsd portal file system
11.11 stackable file system layers
11.12 the 4.4bsd file system interface
11.13 summary
11.14 exercises
11.15 references
12 kernel memory allocation
12.1 introduction
12.2 functional requirements
12.3 resource map allocator
12.4 simple power-of-two free lists
12.5 the mckusick-karels allocator
12.6 the buddy system
12.7 the svr4 lazy buddy algorithm
12.8 the mach-osf/1 zone allocator
12.9 a hierarchical allocator for multiprocessors
12.10 the solaris 2.4 slab allocator
12.11 summary
12.12 exercises
12.13 references
13 virtual memory
13.1 introduction
13.2 demand paging
13.3 hardware requirements
13.4 4.3bsd- a case study
13.5 4.3bsd memory management operations
13.6 analysis
13.7 exercises
13.8 references
14 the svr4 vm architecture
14.1 motivation
14.2 memory-mapped files
14.3 vm design principles
14.4 fundamental abstractions
14.5 segment drivers
14.6 the swap layer
14.7 vm operations
14.8 interaction with the vnode subsystem
14.9 virtual swap space in solaris
14.10 analysis
14.11 performance improvements
14.12 summary
14.13 exercises
14.14 references
15 more memory management topics
15.1 introduction
15.2 mach memory management design
15.3 memory sharing facilities
15.4 memory objects and pagers
15.5 external and internal pagers
15.6 page replacement
15.7 analysis
15.8 memory management in 4.4bsd
15.9 translation lookaside buffer (tlb) consistency
15.10 tlb shootdown in mach
15.11 tlb consistency in svr4 and svr4.2 unix
15.12 other tlb consistency algorithms
15.13 virtually addressed caches
15.14 exercises
15.15 references
16 device drivers and i/o
16.1 introduction
16.2 overview
16.3 device driver framework
16.4 the i/o subsystem
16.5 the poll system call
16.6 block i/o
16.7 the ddi/dki specification
16.8 newer svr4 releases
16.9 future directions
16.10 summary
16.11 exercises
16.12 references
17 streams
17.1 motivation
17.2 overview
17.3 messages and queues
17.4 stream i/o
17.5 configuration and setup
17.6 streams ioctls
17.7 memory allocation
17.8 multiplexing
17.9 fifos and pipes
17.10 networking interfaces
17.11 summary
17.12 exercises
17.13 references
index
· · · · · · (
收起)