THE ORIGIN OF
CONCURRENT PROGRAMMING
From Semaphores to Remote Procedure CaUs Springer Science+Business Media, LLC THE ORIGIN OF
CONCURRENT PROGRAMMING
From Semaphores to Remote Procedure Calls
Edited by PER BRINCH HANSEN
Springer Per Brinch Hansen Center for Science and Technology Syracuse University Syracuse, NY 13244 USA [email protected]
Library of Congress Cataloging-in-Publication Data The origin of concurrent programming: from semaphores to remote procedure calls/ editor, Per Brinch Hansen. p. cm. Includes bibliographie al references. 1. Parallel programming (Computer science) 1. Brinch Hansen, Per, 1938- QA 76.642.075 2002 005.2'.75-dc21 2002016002 Printed on acid-free paper
Ada is a trademark of the United States Government. IBM is a trademark of IBM. Java is a trademark of Sun Microsystems, Inc. occam and Transputer are trademarks of Inmos, Ltd. PDP- 11 is a trademark of Digital Equipment Corporation. Unix is a trademark of X/Open Company, Ltd. ISBN 978-1-4419-2986-0 ISBN 978-1-4757-3472-0 (eBook) DOI 10.1007/978-1-4757-3472-0 © 2002 Springer Science+Business Media New York Originally published by Springer-Verlag New York, Inc. in 2002. Softcover reprint ofthe hardcover 1st edition 2002 All rights reserved. This work may not be translated or copied in whole or in part without the written permission of the publisher Springer Science+Business Media, LLC, except for brief excerpts in connection with reviews or scholarly analysis. Use in connection with any form of information storage and retrieval, electronic adaption, computer software, or by similar or dissimilar methodology now known or hereafter developed is forbidden. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights.
9 8 7 6 543 2 1 SPIN 10860478 www.springer-ny.com FOR JONATHAN GREENFIELD PREFACE
If you want to discover new ideas in computing, textbooks won't help you. You need to find out how the masters of the field did it. You need to read their original papers! That's why I put twenty-four papers together in a previous volume called Classic Operating Systems: Fmm Batch Pmcessing to Distributed Systems (Springer-Verlag, 2001). But there is another side to this story. You cannot build (or understand) a modern operating system unless you know the principles of concurrent programming. The classic papers in the present book cover the major break• throughs in concurrent programming fmm the mid 1960s to the la te 1970s. These pioneering contributions have remained the foundation of concurrent programming in operating systems and parallel computing. All the papers were written by the computer scientists who invented these ideas. Apart from a brief summary, I let the papers speak for themselves. This book is for programmers, researchers, and students of electrical engi• neering and computer science. I assume that you are familiar with operating system principles. I thank the copyright owners for permission to reprint these papers. A footnote on the title page of each paper gives fuH credit to the publication in wh ich the work first appeared, including the name of the copyright holder.
PER BRINCH HANSEN Syracuse University
vii CONTENTS
OVERVIEW The Invention of Concurrent Programming 3 PER BRINCH HANSEN (2001)
PART I CONCEPTUAL INNOVATION 1 Cooperating Sequential Processes 65 EDSCER W. DIJKSTRA (1965)
2 The Structure of the THE Multiprogramming System 139 EDSCER W. DIJKSTRA (1968)
3 RC 4000 Software: Multiprogramming System 153 PER BRINCH HANSEN (1969)
4 Hierarchical Ordering of Sequential Processes 198 EDSCER W. DIJKSTRA (1971)
PART II PROGRAMMING LANGUAGE CONCEPTS 5 Towards a Theory of Parallel Programming 231 C. A. R. HOARE (1971)
6 An Outline of a Course on Operating System Principles 245 PER BRINCH HANSEN (1971)
7 Structured Multiprogramming 255 PER BRINCH HANSEN (1972)
8 Shared Classes 265 PER BRINCH HANSEN (1973)
9 Monitors: An Operating System Structuring Concept 272 C. A. R. HOARE (1974)
PART III CONCURRENT PROGRAMMING LANGUAGES 10 The Programming Language Concurrent Pascal 297 PER BRINCH HANSEN (1975)
IX x CONTENTS
PART IV MODEL OPERATING SYSTEMS
11 The Solo Operating System: A Concurrent Pascal Program 321 PER BRINCH HANSEN (1976)
12 The Solo Operating System: Processes, Monitors and Classes 334 PER BRINCH HANSEN (1976)
13 Design Principles 382 PER BRINCH HANSEN (1977)
PART V DISTRIBUTED COMPUTING
14 A Synthesis Emerging? 397 EDSGER W. DIJKSTRA (1975)
15 Communicating Sequential Processes 413 C. A. R. HOARE (1978)
16 Distributed Processes: A Concurrent Programming Concept 444 PER BRINCH HANSEN (1978)
17 Joyce-A Programming Language for Distributed Systems 464 PER BRINCH HANSEN (1987)
PART VI IMPLEMENTATION ISSUES
18 SuperPascal: A Publication Language for Parallel Scientific Computing 495 PER BRINCH HANSEN (1994)
19 Efficient Parallel Recursion 525 PER BRINCH HANSEN (1995)