Modern software systems rely on the concepts of concurrency, modularity and distribution, both within the design of the operating system and those systems that it supports. Underlying this book is the premise that distributed systems are now commonplace and a reader is more likely to be using one than a centralized time-sharing system. This modern approach therefore avoids the focus on centralized systems, instead placing the operating system within its context and providing an overview of system components and their relationships. The book is divided into four parts:System Design, covering the basic operating system functions and describing the abstraction and implementation of a system as a community of (possibly distributed) concurrent processes. Distributed systems are introduced and a chapter on system security is included.Concurrency Control in Main Memory, focusing on concurrency control in operating systems and application-level systems and exploring inter-process communication (IPC) in the context of (distributed) system design.Transactions, demonstrating the general applicability of concurrent composite operations.Case Studies, considering different systems in the light of the perspective developed in the book: Classical UNIX; Linux, Solaris and Contemporary Unix; Extensible Systems; Windows 2000; Web Programming; Middleware; and Transaction Processing Systems.The Java language has been used throughout to illustrate object-oriented concepts, concurrent algorithms and distributed programming and the book includes a chapter on system security. The case studies, covering a full suite of professional operating systems, enable the course to be taught as a blend of theory and practice, so that on completion of the course a student is able to adapt and build real operating systems that function within a distributed environment.