A project for operating systems simulation
SIGCSE '86 Proceedings of the seventeenth SIGCSE technical symposium on Computer science education
A structural view of the Cedar programming environment
ACM Transactions on Programming Languages and Systems (TOPLAS)
Beyond the chalkboard: computer support for collaboration and problem solving in meetings
Communications of the ACM
About the semantic nested monitor calls
ACM SIGPLAN Notices
The decline and fall of Operating Systems I
SIGCSE '87 Proceedings of the eighteenth SIGCSE technical symposium on Computer science education
On synchronization in hard-real-time systems
Communications of the ACM
ACM SIGCSE Bulletin
CC-modula: a modula-2 tool to teach concurrent programming
ACM SIGCSE Bulletin
Concurrent programming in an upper level operating systems course
SIGCSE '89 Proceedings of the twentieth SIGCSE technical symposium on Computer science education
Programming languages for distributed computing systems
ACM Computing Surveys (CSUR)
Memory coherence in shared virtual memory systems
ACM Transactions on Computer Systems (TOCS)
Complete sequential specification allows for concurrent execution
CSC '89 Proceedings of the 17th conference on ACM Annual Computer Science Conference
Self-assessment procedure XXI: a self-assessment procedure on concurrency
Communications of the ACM
Implementing JSD designs in Ada: a tutorial
ACM SIGSOFT Software Engineering Notes
Parallel module specification on SLPX
ACM SIGPLAN Notices
Synchronization of the producer/consumer problem using semaphores, monitors, and the Ada rendezvous
ACM SIGOPS Operating Systems Review
Implementation of classical mutual exclusion algorithms in Ada
ACM SIGAda Ada Letters
Monitors and concurrent Pascal: a personal history
HOPL-II The second ACM SIGPLAN conference on History of programming languages
Tools for teaching CCRs, monitors, and CSP concurrent programming concepts
ACM SIGCSE Bulletin
ACM Computing Surveys (CSUR)
Process synchronization and IPC
ACM Computing Surveys (CSUR)
Implementing Atomic Actions in Ada 95
IEEE Transactions on Software Engineering
The mutual exclusion problem has been solved
Communications of the ACM
Simulation of a flexible manufacturing system-applications of computer operating system techniques
ANSS '85 Proceedings of the 18th annual symposium on Simulation
Software engineerng applied to discrete event simulations
WSC '86 Proceedings of the 18th conference on Winter simulation
MULTISAFE—a modular multiprocessing approach to secure database management
ACM Transactions on Database Systems (TODS)
Differential files: their application to the maintenance of large databases
ACM Transactions on Database Systems (TODS)
Measurement of processor occupancy in a cyclic non-preemptive real-time control system
CSC '85 Proceedings of the 1985 ACM thirteenth annual conference on Computer Science
On the use of personal computers in teaching the principles of concurrent processing (abstract only)
CSC '87 Proceedings of the 15th annual conference on Computer Science
Device driver development in Ada: a case study
WADAS '88 Proceedings of the fifth Washington Ada symposium on Ada
Exclusion for composite objects
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Object-oriented real-time concurrency
OOPSLA '00 Proceedings of the 15th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Concurrent Programming Concepts
ACM Computing Surveys (CSUR)
Surveyor's Forum: An Error Recovery
ACM Computing Surveys (CSUR)
Surveyor's Forum: An Error Recovery
ACM Computing Surveys (CSUR)
Corrigenda: “A Tutorial on Algol 68”
ACM Computing Surveys (CSUR)
Concurrency Control in Distributed Database Systems
ACM Computing Surveys (CSUR)
Concepts and Notations for Concurrent Programming
ACM Computing Surveys (CSUR)
Synthesis of Resource Invariants for Concurrent Programs
ACM Transactions on Programming Languages and Systems (TOPLAS)
A Statement-Oriented Approach to Data Abstraction
ACM Transactions on Programming Languages and Systems (TOPLAS)
ACM Transactions on Programming Languages and Systems (TOPLAS)
ACM Transactions on Programming Languages and Systems (TOPLAS)
An experimental distributed modeling system
ACM Transactions on Information Systems (TOIS)
Parallel programs: proofs, principles, and practice
Communications of the ACM
Low contention semaphores and ready lists
Communications of the ACM
Experience with processes and monitors in Mesa
Communications of the ACM
Communications of the ACM
Distributed processes: a concurrent programming concept
Communications of the ACM
Toward a discipline of real-time programming
Communications of the ACM
An encoding method for multifield sorting and indexing
Communications of the ACM
Communications of the ACM
Tools and philosophy for software education
Communications of the ACM
Monitors: an operating system structuring concept
Communications of the ACM
Improving locality by critical working sets
Communications of the ACM
A real bottom-up operating systems course
ACM SIGOPS Operating Systems Review
Introductory concurrent programming with Modula-2
ACM SIGCSE Bulletin
Procedures and comments vs. the banker's algorithm
ACM SIGCSE Bulletin
Design requirements of a single-user operating system
ACM SIGSMALL/PC Notes
Implementation of integrity constraints and views by query modification
SIGMOD '75 Proceedings of the 1975 ACM SIGMOD international conference on Management of data
ACM-SE 20 Proceedings of the 20th annual Southeast regional conference
Fault-tolerance support in distributed systems
EW 4 Proceedings of the 4th workshop on ACM SIGOPS European workshop
A top-down operating systems course
ACM SIGOPS Operating Systems Review
Synchronization in actor systems
POPL '77 Proceedings of the 4th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
The architecture of concurrent programs
The architecture of concurrent programs
POPL '81 Proceedings of the 8th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Principles of proving concurrent programs in Gypsy
POPL '79 Proceedings of the 6th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
POPL '82 Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Modular verification of concurrent programs
POPL '82 Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Continuation-Based Multiprocessing Revisited
Higher-Order and Symbolic Computation
Storage Management in Virtual Tree Machines
IEEE Transactions on Computers
A Resilient Mutual Exclusion Algorithm for Computer Networks
IEEE Transactions on Parallel and Distributed Systems
Preserving Abstraction in Concurrent Programming
IEEE Transactions on Software Engineering
Another general purpose computer architecture
ACM SIGARCH Computer Architecture News
Multiprocessor architectures for concurrent programs
ACM SIGARCH Computer Architecture News
A machine-oriented resource management architecture
ISCA '75 Proceedings of the 2nd annual symposium on Computer architecture
IEEE Annals of the History of Computing
AOP: Does It Make Sense? The Case of Concurrency and Failures
ECOOP '02 Proceedings of the 16th European Conference on Object-Oriented Programming
A Combinatorial Characterization of Properties Preserved by Antitokens
Euro-Par '00 Proceedings from the 6th International Euro-Par Conference on Parallel Processing
Improving the FreeBSD SMP Implementation
Proceedings of the FREENIX Track: 2001 USENIX Annual Technical Conference
Communication and Synchronisation Using Interaction Objects
FM '99 Proceedings of the Wold Congress on Formal Methods in the Development of Computing Systems-Volume II
Run-Time Fault Detection in Monitor Based Concurrent Programming
DSN '01 Proceedings of the 2001 International Conference on Dependable Systems and Networks (formerly: FTCS)
The invention of concurrent programming
The origin of concurrent programming
Monitors: an operating system structuring concept
The origin of concurrent programming
The programming language concurrent Pascal
The origin of concurrent programming
The Solo operating system: processes, monitors and classes
The origin of concurrent programming
Distributed processes: a concurrent programming concept
The origin of concurrent programming
Joyce: a programming language for distributed systems
The origin of concurrent programming
SuperPascal: a publication language for parallel scientific computing
The origin of concurrent programming
A proposal for certain process management and intercommunication primitives
ACM SIGOPS Operating Systems Review
Scheduling in Concurrent Pascal
ACM SIGOPS Operating Systems Review
Operation Serializability for Embedded Systems
EDTC '96 Proceedings of the 1996 European conference on Design and Test
An operating systems programming laboratory course
SIGCSE '83 Proceedings of the fourteenth SIGCSE technical symposium on Computer science education
Schemata for teaching structured assembly language programming
SIGCSE '83 Proceedings of the fourteenth SIGCSE technical symposium on Computer science education
An operating systems course using stand alone computers
SIGCSE '82 Proceedings of the thirteenth SIGCSE technical symposium on Computer science education
A heterogeneous multiprocessor design and the distributed scheduling of its task group workload
ISCA '82 Proceedings of the 9th annual symposium on Computer Architecture
MP/C: A multiprocessor/computer architecture
ISCA '81 Proceedings of the 8th annual symposium on Computer Architecture
Towards a parallel SIMULA machine
ISCA '81 Proceedings of the 8th annual symposium on Computer Architecture
The use of APL in a concurrent data flow environment
APL '82 Proceedings of the international conference on APL
Minimal multitasking operating systems for real-time controllers
SIGSMALL '81 Proceedings of the 1981 ACM SIGSMALL symposium on Small systems and SIGMOD workshop on Small database systems
An algorithm to support code-skeleton generation for concurrent systems
ICSE '81 Proceedings of the 5th international conference on Software engineering
Software architecture based on communicating residential environments
ICSE '81 Proceedings of the 5th international conference on Software engineering
ICSE '81 Proceedings of the 5th international conference on Software engineering
Evaluation of a software requirements document by analysis of change data
ICSE '81 Proceedings of the 5th international conference on Software engineering
Continuation-based multiprocessing
LFP '80 Proceedings of the 1980 ACM conference on LISP and functional programming
Writing device drivers: A systematic approach
SIGSMALL '80 Proceedings of the 3rd ACM SIGSMALL symposium and the first SIGPC symposium on Small systems
Concurrent software system design supported by SARA at the age of one
ICSE '78 Proceedings of the 3rd international conference on Software engineering
Operating system design with computer network communication protocols
SIGCOMM '77 Proceedings of the fifth symposium on Data communications
A top-down, laboratory based operating system course
SIGCSE '77 Proceedings of the seventh SIGCSE technical symposium on Computer science education
The minerva multi-microprocessor
ISCA '76 Proceedings of the 3rd annual symposium on Computer architecture
Function distribution in computer system architectures
ISCA '76 Proceedings of the 3rd annual symposium on Computer architecture
The Pica-B Computer An Abstract Target Machine For A Transportable Single-User Operating Environment
ACM '78 Proceedings of the 1978 annual conference
Multiprocessor Architectures For Concurrent Programs
ACM '78 Proceedings of the 1978 annual conference
Towards a microprogramming language schema
MICRO 11 Proceedings of the 11th annual workshop on Microprogramming
Software engineering and simulation
WSC '79 Proceedings of the 11th conference on Winter simulation - Volume 2
Specialization of SARA for software synthesis
Proceedings of the Symposium on Design Automation and Microprocessors
Optimal replication of parallel-read, sequential-write systems
PERFORMANCE '80 Proceedings of the 1980 international symposium on Computer performance modelling, measurement and evaluation
An L=S criterion for optimal multiprogramming
SIGMETRICS '76 Proceedings of the 1976 ACM SIGMETRICS conference on Computer performance modeling measurement and evaluation
Error resynchronization in producer-consumer systems
SOSP '75 Proceedings of the fifth ACM symposium on Operating systems principles
Overview of the Hydra Operating System development
SOSP '75 Proceedings of the fifth ACM symposium on Operating systems principles
SOSP '77 Proceedings of the sixth ACM symposium on Operating systems principles
A domain structure for distributed computer systems
SOSP '77 Proceedings of the sixth ACM symposium on Operating systems principles
Indeterminacy, monitors, and dataflow
SOSP '77 Proceedings of the sixth ACM symposium on Operating systems principles
Evaluating synchronization mechanisms
SOSP '79 Proceedings of the seventh ACM symposium on Operating systems principles
Experience with processes and monitors in Mesa (Summary)
SOSP '79 Proceedings of the seventh ACM symposium on Operating systems principles
An open operating system for a single-user machine
SOSP '79 Proceedings of the seventh ACM symposium on Operating systems principles
On-the-fly deadlock prevention
PODC '82 Proceedings of the first ACM SIGACT-SIGOPS symposium on Principles of distributed computing
GEM: A tool for concurrency specification and verification
PODC '83 Proceedings of the second annual ACM symposium on Principles of distributed computing
System design and implementation of BGRAF2
SIGGRAPH '78 Proceedings of the 5th annual conference on Computer graphics and interactive techniques
Verification of fairness in an implementation of monitors
ICSE '76 Proceedings of the 2nd international conference on Software engineering
ICSE '76 Proceedings of the 2nd international conference on Software engineering
Verification of a monitor specification
ICSE '76 Proceedings of the 2nd international conference on Software engineering
An approach to error-resistant software design
ICSE '76 Proceedings of the 2nd international conference on Software engineering
Gypsy: A language for specification and implementation of verifiable programs
Proceedings of an ACM conference on Language design for reliable software
Process structuring, synchronization, and recovery using atomic actions
Proceedings of an ACM conference on Language design for reliable software
Some experience with automated aids to the design of large-scale reliable software
Proceedings of the international conference on Reliable software
Reliability experience with Chi/OS
Proceedings of the international conference on Reliable software
Structured specification of a Security Kernel
Proceedings of the international conference on Reliable software
The purpose of concurrent Pascal
Proceedings of the international conference on Reliable software
A structured specification of a hierarchical operating system
Proceedings of the international conference on Reliable software
Constructing correct and efficient concurrent programs
Proceedings of the international conference on Reliable software
A CAD system for unified hardware-software design
DAC '75 Proceedings of the 12th Design Automation Conference
Distributed programming languages
ACM '82 Proceedings of the ACM '82 conference
ACM '77 Proceedings of the 1977 annual conference
No! high level languages should not be used to write systems software
ACM '75 Proceedings of the 1975 annual conference
Comments on the topic “programming, and its implication on programming languages”
ACM '75 Proceedings of the 1975 annual conference
The design of some language constructs for horizontal microprogramming
ISCA '77 Proceedings of the 4th annual symposium on Computer architecture
A large scale, homogeneous, fully distributed parallel machine, I
ISCA '77 Proceedings of the 4th annual symposium on Computer architecture
A Large Scale, Homogenous, Fully Distributed Parallel Machine, II
ISCA '77 Proceedings of the 4th annual symposium on Computer architecture
Synchronization: Is a synthesis of the problems possible?
Proceedings of the 1975 ACM SIGCOMM/SIGOPS workshop on Interprocess communications
ACM SIGOPS Operating Systems Review
On structuring operating systems with monitors
ACM SIGOPS Operating Systems Review
ACM SIGOPS Operating Systems Review
The concept of asynchronization
ACM SIGOPS Operating Systems Review
An approach to distributed software systems
ACM SIGOPS Operating Systems Review
On the generalized critical region construct
ACM SIGOPS Operating Systems Review
Using personal computers in operating system courses
ACM SIGOPS Operating Systems Review
Software pioneers
The external consistency of abstract data types
ACM SIGPLAN Notices
Draft standard industrial real-time FORTRAN
ACM SIGPLAN Notices
Rationale for the design of the Ada programming language
ACM SIGPLAN Notices - Rationale for the deisgn of the Ada programming language
Journal of Functional Programming
Issues in programming language design: an overview
ACM SIGPLAN Notices - Special issue on programming language design
The roots of structured programming
SIGCSE '78 Papers of the SIGCSE/CSA technical symposium on Computer science education
More on block structure: using Ada
ACM SIGAda Ada Letters
Structuring into subsystems: the experience of a prototyping approach
ACM SIGSOFT Software Engineering Notes
Possible worlds and resources: the semantics of BI
Theoretical Computer Science - Mathematical foundations of programming semantics
WSC '82 Proceedings of the 14th conference on Winter Simulation - Volume 1
Permission accounting in separation logic
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
An operating system for the INTEL MDS system: the kernel
ACM SIGMINI Newsletter
Processor management in a concurrent Pascal kernel
ACM SIGOPS Operating Systems Review
ACM SIGOPS Operating Systems Review
The management of operating system state data
ACM SIGOPS Operating Systems Review
Monitors and Concurrent Pascal: a personal history
History of programming languages---II
A model of real time control system production
ACM SIGDA Newsletter
Encyclopedia of Computer Science
Flexible exclusion control for composite objects
ACSC '05 Proceedings of the Twenty-eighth Australasian conference on Computer Science - Volume 38
ACM Transactions on Programming Languages and Systems (TOPLAS)
Exclusion requirements and potential concurrency for composite objects
Science of Computer Programming - Special issue: Concurrency and synchronization in Java programs
An efficient synchronization model for OpenMP
Journal of Parallel and Distributed Computing
A semantics for concurrent separation logic
Theoretical Computer Science
Resources, concurrency, and local reasoning
Theoretical Computer Science
MP/C: A Multiprocessor/Computer Architecture
IEEE Transactions on Computers
Iterative Solution of Linear Equations on a Parallel Processor System
IEEE Transactions on Computers
The Contract Net Protocol: High-Level Communication and Control in a Distributed Problem Solver
IEEE Transactions on Computers
A Stochastic Model for Closed-Loop Preemptive Microprocessor I/O Organizations
IEEE Transactions on Computers
Bottleneck Active Node Detouring for capsule-based active network
Journal of Network and Computer Applications
Cm*: a modular, multi-microprocessor
AFIPS '77 Proceedings of the June 13-16, 1977, national computer conference
Automated control of concurrency in multi-user hierarchical information systems
AFIPS '77 Proceedings of the June 13-16, 1977, national computer conference
Structure of the ELF operating system
AFIPS '76 Proceedings of the June 7-10, 1976, national computer conference and exposition
Issues in programming language design: an overview
AFIPS '75 Proceedings of the May 19-22, 1975, national computer conference and exposition
Interaction monitors in a distributed system
AFIPS '75 Proceedings of the May 19-22, 1975, national computer conference and exposition
A Basis for Verifying Multi-threaded Programs
ESOP '09 Proceedings of the 18th European Symposium on Programming Languages and Systems: Held as Part of the Joint European Conferences on Theory and Practice of Software, ETAPS 2009
Concurrent LISP on a multi-micro-processor system
IJCAI'81 Proceedings of the 7th international joint conference on Artificial intelligence - Volume 2
Concurrent programming of intelligent robots
IJCAI'83 Proceedings of the Eighth international joint conference on Artificial intelligence - Volume 2
Objects and values: the basis of a storage model for procedural languages
IBM Journal of Research and Development
Dynamic storage allocation with limited compaction - complexity and some practical implications
Discrete Applied Mathematics
Can transactions enhance parallel programs?
LCPC'06 Proceedings of the 19th international conference on Languages and compilers for parallel computing
Agent-oriented programming: from prolog to guarded definite clauses
Agent-oriented programming: from prolog to guarded definite clauses
Euro-Par'10 Proceedings of the 16th international Euro-Par conference on Parallel processing: Part II
Contract-based synchronization of IP telecommunication services: a case study
Proceedings of the 5th International Conference on Communication System Software and Middleware
A middleware for transparent group communication of globally distributed actors
Proceedings of the Workshop on Posters and Demos Track
Syntactic control of interference for separation logic
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Abstract interface behavior of object-oriented languages with monitors
FMOODS'06 Proceedings of the 8th IFIP WG 6.1 international conference on Formal Methods for Open Object-Based Distributed Systems
Session initiation as a service
SDL'11 Proceedings of the 15th international conference on Integrating System and Software Modeling
A distributed synchronization mechanism for interacting processes
Computer Languages
Parallel programming: An axiomatic approach
Computer Languages
SESPOOL, a language for systems programming
Computer Languages
ISPA'07 Proceedings of the 5th international conference on Parallel and Distributed Processing and Applications
Concurrent object-oriented programming with agent-oriented abstractions: the ALOO approach
Proceedings of the 2013 workshop on Programming based on actors, agents, and decentralized control
Native actors: a scalable software platform for distributed, heterogeneous environments
Proceedings of the 2013 workshop on Programming based on actors, agents, and decentralized control
A survey of support for structured communication in concurrency control models
Journal of Parallel and Distributed Computing
Hi-index | 0.25 |
From the PrefaceMAIN GOALThis book tries to give students of computer science andprofessional programmers a general understanding of operatingsystems--the programs that enable people to share computersefficiently.To make the sharing of a computer tolerable, an operating systemmust enforce certain rules of behavior on all its users. One wouldtherefore expect the designers of operating systems to do theirutmost to make them as simple, efficient, and reliable aspossible.A number of operating systems made in the early 1960's had thesecharacteristics; but in the late 1960's designers were oftenoverambitious and built enormous systems with poor performance.I see no inherent reason why operating systems should not reachthe quality of program construction found in present compilers;this will require an understanding of the principles common to alloperating systems and a consistent use of safe methods of designinglarge programs. It is my hope that this book will give you a startin this direction.I assume that you are familiar with the basic structure ofcomputers and programming languages and have some experience inwriting and testing non-trivial programs. In a few cases aknowledge of elementary calculus and probability theory is alsoneeded.THEMESThe main theme of the book is that operating systems are notradically different from other programs. The difficultiesencountered in the design of efficient, reliable operating systemsare the same as those one encounters in the design of other largeprograms, such as compilers or payroll programs.The historical importance of operating systems is that they ledto the discovery of new principles of resource sharing,multiprogramming, and program construction. Theseprinciples have a general validity beyond operating systems, and Ithink that they should be taught as part of a core of computerscience courses, following courses on programming languages,data structures, and computer structures.The purpose of an operating system is to share computationalresources among competing users. To do this efficiently adesigner must respect the technological limitations of theseresources.Present computers consist of a small number of components(processors, store modules, and peripherals) which operate strictlysequentially. It is possible to multiplex a single processor and asmall internal store (supported by a large backing store) amongseveral computations to create the illusion that they are executedconcurrently and have access to a large, homogeneous store. Butthese abstractions are not supported by the underlying technology,and if they are carried too far, the result is a total collapse ofcomputational service known as thrashing.One of the difficulties of operating systems is the highlyunpredictable nature of the demands made upon them. Independentusers submit jobs with varying resource requirements at irregularintervals. An operating system is expected to schedule thisunpredictable mixture of jobs in such a manner that the resourcesare utilized efficiently and the users can expect response withinreasonably predictable times!The only way to satisfy these expectations is probably to putrestrictions on the characteristics of jobs so the designer cantake advantage of the expected usage of resources. This iscertainly the main reason for the success of small, specializedoperating systems. It also gives a plausible explanation of thefailure of recent "general-purpose" operating systems which try tohandle a much greater variety of jobs (in some cases for a varietyof machine configurations as well).Although most components of present computers are sequential innature, they can work simultaneously to some extent. Thisinfluences the design of operating systems so much that the subjectcan best be described as the management of sharedmultiprogramming systems.The main difficulty of multiprogramming is that concurrentactivities can interact in a time-dependent manner which makes itpractically impossible to locate programming errors by systematictesting. Perhaps, more than anything else, this explains thedifficulty of making operating systems reliable.If we wish to succeed in designing large, reliablemultiprogramming systems, we must use programming tools which areso well-structured that most time-dependent errors can be caught atcompile time. It seems hopeless to try to solve this problem atthe machine level of programming, nor can we expect to improve thesituation by means of so-called "implementation languages," whichretain the traditional "right" of systems programmers to manipulateaddresses freely.I use the programming language Pascal throughout the text todefine operating system concepts concisely by algorithms. Pascalcombines the clarity needed for teaching with the efficiencyrequired for design. It is easily understood by programmersfamiliar with Algol 60 or Fortran, but Pascal is a far more naturalprogramming tool than these languages, particularly with respect todata structuring. As we go along, I extend Pascal with awell-structured notation for multiprogramming.STRUCTUREThe book contains eight chapters:Chapter 1 is an overview of operating systems. It definesthe purpose of operating systems and outlines their historicaldevelopment from early batch processing to recent interactivesystems. It also points out the influence of technologicalconstraints on the services offered by operating systems.Chapter 2 on sequential processes discusses the role ofabstraction and structure in problem solving and the nature ofcomputations. It summarizes structuring principles of data andsequential programs and gives an example of hierarchal programconstruction.Chapter 3 on concurrent processes emphasizes the role ofreproducible behavior in program testing and compares variousmethods of process synchronization: simple and conditional criticalregions, semaphores, message buffers, and event queues. Itconcludes with an analysis of the prevention of deadlocks by ahierarchal ordering of process interactions.Chapters 2 and 3 present an abstract view of computationalprocesses and their representation in programming languages. Thefollowing Chapters, 4 to 6, discuss techniques of implementingprocesses on computers with limited resources. This problem ismainly technological, and it seems unrealistic to look for aunifying view of how different kinds of components are usedefficiently. I try to describe various techniques and point outunder which circumstances they are successful.Chapter 4 on processor management discusses theshort-term problems of scheduling concurrent processes on a limitednumber of processors at the lowest level of programming. It alsoexplains the implementation of synchronizing primitives andevaluates the influence of these abstractions on the real-timecharacteristics of a system.Chapter 5 on store management considers the short-termproblems of sharing an internal store of limited capacity amongconcurrent processes. It summarizes current store technology andexplains the influence of recursive procedures, concurrentprocesses, and dynamic relocation on store addressing. It ends withan analysis of placement algorithms and store multiplexing.Chapter 6 analyzes the performance of various medium-termscheduling algorithms. It uses elementary queuing theory toderive analytical results for the average response time to userrequests in a single processor system with these priority rules:first-come first-served, shortest job next, highest response rationext, and round robin. Foregound-background scheduling is discussedinformally.Chapter 7 is concerned with resource protection--theproblem of ensuring that physical resources and data are accessedby well-defined operations within computations authorized to usethem. This is a fundamental problem of program design which shouldhave been presented earlier in the book, if only I understood itbetter. It is handled inadequately in all present operatingsystems. As fragments of a solution I mention two of the moresystematic techniques used: the class concept in Simula 67 and thecapability concept.It is important that a designer of operating systems understandthe underlying common principles. But the danger of this divisionof the subject into separate chapters is that you may find itdifficult to see how they fit together into a working system and beunaware of the more subtle interactions between, say, processcommunication, store management, input/output, and preemptivescheduling.I have therefore tried to describe a complete operating systemin some detail in Chapter 8. It is a case study of the RC 4000multiprogramming system. It is by no means an ideal system, butit is the only one I know in detail, and is regarded as aconsistent, simple, and reliable design which illustrates theconcepts and implementation of concurrent processes.It should perhaps be explained why there are no chapters oninput/ output and filing systems. For a particular operatingsystem, considerations about how these tasks are handled are highlyrelevant. But in this book I have concentrated on the moreelementary aspects of these complicated tasks, namely processsynchronization, store management, scheduling, and resourceprotection.VOCABULARYIn each chapter many words are first used intuitively to giveyou a feeling for the subject. Later I return to these words andtry to give reasonably precise verbal definitions of their meaning.My use of a common word may not always agree completely with thevarious shades of meaning it has acquired elsewhere, but I hope tojustify the usefulness of the concept behind the word and show thatit is possible to describe operating systems in an informal butconsistent terminology.The most important terms are collected in a Vocabulary sectionat the end of the book.LITERATUREThis book is only one designer's view of operating systems. Iurge you to examine my viewpoints critically and compare them withother literature on the subject. As a guide to such a study I haveincluded an annotated selective bibliography at the end ofeach chapter.For the sake of completeness I have listed all referencesmentioned in the text at the end of the book.