1 System design requirements
1.1 Inherently concurrent systems
1.2 Supporting potentially concurrent applications
1.3 Architectures for software systems
1.4 Defining a concurrent system
1.5 Systems implementation requirements
1,6 Security, protection and fault tolerance in system design
Exercises
PART I SYSTEM DESIGN: TECHNOLOGY AND
PRINCIPLES
2 System structure and dynamic execution
2.1 System structure: Conceptual views
2.2 System structure: Implementational views
2.3 The process concept
2.4 Operating system functions
2.5 Operating system invocation and protection-
2.6 Operating system structure
2.7 Object structuring within and supported by operating systems
2.8 Distributed object systems, platforms and middleware
2.9 Security and protection
2.10 Summary
Study questions and exercises
3 The hardware interface, I/O and
communications
3.1 Overview
3.2 Device interfacing
3.3 Exceptions
3.4 Multiprocessors
3.5 User-level input and output
3.6 Communications management
3.7 Communications networks, interfaces and drivers
3.8 Communications software
3.9 Communications handling within and above an
operating system
3.10 Summary
Exercises
4 Support for processes
4.1 Use of processes in systems
4.2 Processes and processors
4.3 Process state
4.4 Synchronizing with the hardware: Events and the WAIT
operation
4.5 The process data structure
4.6 Scheduling: General approaches
4.7 Scheduling for shared-memory multiprocessors
4.8 Process scheduling to meet real-time requirements
4.9 Process abstraction and implementation
4.10 Operating system structure and placement of processes
4.11 Multi-threaded process implementation
4.12 Processes in languages, runtime systems and
operating systems
4.13 Process state in language systems and operating systems
4.14 Sequential programs with system calls
4.15 Evolution of concurrency in programming languages
4.16 Implementation of processes in language systems
4.17 Thread package architectures
4.18 Java threads and exceptions
4.19 Summary
Study questions and exercises
5 Memory management
5.1 Memory management
5.2 The memory hierarchy
5.3 The address space of a process
5.4 Segmented virtual memory
5.5 Paged virtual memory
5.6 Combining segmentation and paging
5.7 Operating system data structures
5.8 An example of a memory management unit (MMU)
5.9 Memory management in system design
5.10 Summary
Exercises
6 File management
6.1 File management
6.2 An overview of filing system functions
6.3 File and directory structure
6.4 The filing system interface
6.5 The filing system implementation
6.6 Modern file system design
6.7 Network-based file servers
6.8 Integrating virtual memory and storage
6.9 Summary
Exercises
7 Fundamentals of distributed systems
7.1 Introduction
7.2 Evolution of distributed systems for the workplace
7.3 Personal computing
7.4 Model and software architecture
7.5 Special characteristics of distributed systems
7.6 Time in distributed systems
7.7 Naming
7.8 Mobile users, computers and objects
7.9 Summary
Exercises
8 Security
8.1 Scenarios and security requirements
8.2 Threats and risk analysis
8.3 Approaches to encryption
8.4 Algorithms
8.5 Protocols
8.6 Examples
8.7 Summary
Exercises
PART II CONCURRENCY CONTROL IN
MAIN MEMORY
9 System structure
9.1 Processes sharing an address space
9.2 Processes in separate address spaces
9.3 Sharing the operating system
9.4 Summary of process placement in the two models
9.5 Requirements for process interaction
9.6 Types of process interaction
9.7 A process interaction
9.8 Definition of single concurrent actions
Study questions and exercises
10 Low-level synchronization: Implementation
10.1 Process synchronization compared with event signal and wait
10.2 Mutual exclusion
10.3 Hardware support for mutual exclusion
10.4 Semaphores
10.5 Styles of use of semaphores
10.6 Implementation of semaphore operations
10.7 Summary
Study questions and exercises
11 Low-level synchronization: Algorithms
11.1 Introduction
11.2 An example of semaphores in system design: The THE system
11.3 The producer-consumer, bounded buffer Droblem
11.4 Safety and liveness properties
11.5 The multiple readers, single writer problem
11.6 Limitations of semaphores
11.7 Eventcounts and sequencers
11.8 POSIXthreads
11.9 Summary
11.10 Case study with exercises: Management of a disk block cache
12 IPC with shared memory
12.1 Critical regions in programming languages
12.2 Monitors
12.3 Synchronization at the granularity of operations
12.4 Summary
Study questions and exercises
13 IPC and system structure
13.1 Styles of inter-process communication
13.2 System structure and IPC with shared memory
13.3 System structure and IPC without shared memory
13.4 Systems where shared-memory communication is appropriate
13.5 Systems where shared-memory communication is
not appropriate
13.6 Examples from classical UNIX
13.7 Overview of inter-process communication
13.8 Duality of system structures
13.9 Naming
13.10 Summary
Study questions and exercises
14 IPC without shared memory
14.1 Introduction
14.2 Use of files for common data
14.3 UNIX pipes
14.4 Asynchronous message passing
14.5 Variations on basic message passing
14.6 Implementation of asynchronous message passing
14.7 Synchronous message passing
14.8 Message passing in programming languages
14.9 Multi-threading in clients and servers
14.10 Summary
Study questions and exercises
15 Crash resilience and persistent data
15.1 Crashes
15.2 A model of acrash
15.3 Crash resilience or failure transparency
15.4 Idempotent (repeatable) operations
15.5 Atomic operations on persistent objects
15.6 Implementation of atomic operations
15.7 Non-volatile memory
15.8 A single operation on persistent data
15.9 Database management systems' requirements on
operating systems
15.10 Summary
Study questions and exercises
16 Distributed IPC
16.1 Introduction
16.2 Special characteristics of distributed systems
16.3 Distributed IPC: Message passing
16.4 Integration of IPC with communications
16.5 Java's sockets and streams
16.6 Distributed programming paradigms
16.7 Remote procedure call (RPC)
16.8 RPC-language integration
16.9 Java's RMI: RPc in the general object model
16.10 Critique of synchronous invocation
16.11 Naming, location and binding
16.12 Summary of Part II
Study questions and exercises
PART III TRANSACTIONS
17 Composite operations
17.1 Composite operations
17.2 Composite operations in main memory
17.3 Composite operations involving main memory and
persistent memory
17.4 Concurrent execution of composite operations
17.5 Potential problems
17.6 Crashes
17.7 Summary
Study questions and exercises
18 Resource allocation and deadlock
18.1 Requirements for dynamic allocation
18.2 Deadlock
18.3 Livelock and starvation
18.4 Conditions for deadlockto exist
18.6 The dining philosophers problem
18.6 Object allocation graphs
18.7 Data structures and algorithms for deadlock detection
18.8 Deadlock avoidance
18.9 Information on releasing objects: Multiphase processes
18.10 Distributed deadlocks
18.11 Summary
Study questions and exercises
19 Transactions
19.1 Introduction
19.2 Transaction specification and programming
19.3 The definition of serializability and consistency
19.4 The ACID properties of transactions
19.6 Indicating specific orderings of transactions
19.6 A system model for transaction processing
19.7 Dependency graphs for transactions
19.8 Histories and serialization graphs
19.9 Dealing with aborts: More about the property of isolation
19.10 Summary
Study questions and exercises
20 Concurrency control
20.1 Introduction
20.2 Concurrent composite operations in main memory only
20.3 Structure of transaction management systems
20.4 Concurrency control through locking
20.5 Time-stamp ordering (TSO)
20.6 Optimistic concurrency control (OCC)
20.7 Summary
Study questions and exercises
21 Recovery
21.1 Requirements for recovery
21.2 The object model, object state and recovery
21.3 Concurrency, crashes and the properties of transactions
21.4 Logging and shadowing for crash resilience
21.5 Use of a recovery log
21.6 Idempotent undo and redo operations
21.7 Transaction states on a failure
21.8 An algorithm for recovery
21.9 Location databases for mobile objects
21.10 Summary
Exercises
22 Distributed transactions
22.1 An object model for distributed systems
22.2 Distributed transaction processing
22.3 Communication
22.4 Concurrency control:Two-phase locking (2PL)
22.5 Concurrency control: Time-stamp ordering (TSO)
22.6 Optimistic concurrency control (OCC)
22.7 Commit and abort in a distributed system
22.8 Atomic commitment: The two-phase commit (2PC) protocol
22.9 Two-phase validation for OCC
22.10 Summary
Study questions and exercises
23 Distributed computations
23.1 Introduction
23.2 Process groups
23.3 Consistency of data replicas
23.4 Ordering message delivery
23.5 Distributed, N-process mutual exclusion
23.6 Summary of Part III
Exercises
PART IV CASE STUDIES
24 Classical UNIX
24.1 Introduction
24.2 Evolution of UNIX
24.3 System structure and the UNIX kernel
24.4 File system interfaces
24.5 File system implementation
24.6 Process creation, termination and scheduling
24.7 IPC: Pipes and signals
24.8 Summary
Exercises
25 LINUX, Solaris and contemporary UNIX
25.1 Introduction
25.2 Kernel structure
25.3 SVr41PC
25.4 Sockets and file subsystem integrated IPC
25.5 Memory management
25.6 Multiprocessor scheduling
25.7 Summary
Exercises
26 Extensible systems
26.1 Mechanisms for extensibility
26.2 Compile-time specialization
26.3 Microkernel operating systems
26.4 Downloadable code
26.5 Exokernels and vertical structuring
26.6 Nested virtual machines
26.7 Extensible virtual machines
26.8 Summary
Exercises
27 Windows 2000
27.1 Introduction to Windows 2000
27.2 System structure
27.3 The object model and object manager
27.4 The kernel
27.5 Processes, threads, fibres and concurrency control
27.6 The I/O subsystem
27.7 The NTfiling system, NTFS
27.8 Networking
27.9 Summary
Exercises
2.8 The World Wide Web
28.1 A simple web-client, web-server interaction
28.2 Naming web pages
28.3 Communication using HTTP
28.4 Document representation
28.5 Executing programs at server and client
28.6 Security
28.7 Concurrency control
28.8 Scalability issues
28.9 Web-based middleware: XML and SOAP
28.10 Summary
Exercises
29 Middleware
29.1 Middleware paradigms
29.2 Java middleware
29.3 OMG and OMA
29.4 CORBA
29.50DMG
29.6 COM, DCOM and .NET
29.7 Message-oriented middleware (MOM)
29.8 Summary
Exercises
30 Transaction processing monitors and systems
30.1 Transaction processing monitors
30.2 Introduction to some electronic funds transfer (EFT) applications
30.3 International inter-bank payments: SWIFT
30.4 Authentication by PIN
30.5 The international automatic teller machine (ATM) network service
30.6 Load and traffic in TP systems
30.7 Summary and trends
Exercises
Appendix: Evolution of computer systems
A. 1 Evolution and exploitation of technology
A.2 Operating systems and distributed operating systems
A.3 Databases
A.4 Concurrency control
Bibliography
Glossary
Author index
Subject index