The Origin of Concurrent Programming

The Origin of Concurrent Programming
复制标题

并发编程的起源

DOI:
10.1007/978-1-4757-3472-0
复制
发表时间:
2002
影响因子:
1.1
通讯作者:
P. B. Hansen
P. B. Hansen
中科院分区:
计算机科学2区
文献类型:
--
作者:
P. B. Hansen

文献摘要

被引文献

相似文献

并发编程对我们对计算机操作系统的基本了解产生了巨大的影响。在1960年代后期,对操作系统的实施技术进行了合理的理解。但是大多数系统太大且描述不足,无法详细研究。所有这些都是用汇编语言编写的,也可以用汇编语言功能扩展的顺序编程语言。关于操作系统的大多数文献都强调了特定系统的低度实现细节,而不是一般概念。该术语是非系统性和不完整的(Brinch Hansen 2000)。在发明抽象并发编程之前,在操作系统描述中包括算法是不切实际的。技术作家将非正式散文与非结构化流程图以及链接列表和州过渡的复杂图片混合在一起。在其余弦报告(1971年)中,美国国家工程学院总结了当时的状况[添加了强调]:例如,IBM(1965)(1965年),Elliott Oannick(1972)和Stuart Madnick(1974) 。 22每个Brinch Hansen如果教授的话,计算机操作系统的主题是对某些特定操作系统的描述性研究,很少有人注意强调相关的基本概念和原理。为了使事情恶化,大多数大学系都很难开发强调操作系统原则的新课程。 ..基本上没有关于该主题的合适教科书。我认为自己很幸运地从事行业。 RC 4000项目使我相信,对操作系统的基本了解将彻底改变计算机编程。我非常确定,我决定离开行业并成为一名研究人员。 1970年11月,我成为卡内基 - 梅隆大学的一名研究助理,在那里我写了第一本关于操作系统原则的综合教科书:P。BrinchHansen,一门关于操作系统原理课程的概述(L971),同时写这本书,我到达了结论操作系统与其他程序没有根本不同。它们只是基于更基本主题的原理:并行编程的大型计划。从对操作系统目的的简洁定义开始,我将主题分为五个主要领域。首先,我将并行编程的原理作为操作系统的本质。然后,我将处理器管理,内存管理,调度算法和资源保护作为实施并行过程的技术。我通过用帕斯卡(Pascal)编写的抽象算法定义了操作系统的概念,该算法用符号进行了结构化多编程。我的(未完成的)编程符号包括并发语句,信号量,有条件的关键区域,消息缓冲区和监视器。现在,在所有操作系统文本中讨论了这些编程概念。这本书包括一个简洁的操作系统术语词汇,在整个文本中始终使用。词汇包括以下术语:并发过程,时间重叠的过程;如果每个过程仅涉及私人数据,则并发过程被称为脱节。如果他们指的是通用数据,它们被称为交互。同步,对执行操作的顺序的任何限制的一般术语;例如,同步规则可以在操作时间内指定优先级,优先级或相互排斥。并发编程的发明23监视器,一种常见的DA TA结构以及一组有意义的操作,可以及时排除并控制并发过程的同步。我的书籍操作系统原则于1973年7月出版。Peter Naur(1975)对此进行了评论:演讲通常很高,并提供了深刻见解的证据。在追求他的一般目标时,为该领域建立了一系列基本原则,作者非常成功。这些原理由用帕斯卡尔(Pascal)编写的算法支持,并在必要时使用精心描述的原语。对术语的棘手探索引起了人们的注意。在这本书的轮廓中,我做了一个预测,可以指导我未来的研究:到目前为止,几乎所有操作系统都是用机器语言编写的。这使得它们不必要地理解,测试和修改。我认为,几乎完全用高级语言编写有效的操作系统是可取的,并且有可能编写有效的操作系统。该语言必须允许数据和程序的层次结构,在编译时进行大量错误检查以及生产有效的机器代码。 7结构化多编程P. Brinch Hansen。结构化多编程(1972)Hoare(1971)提出的条件关键区域具有较小的符号符号和潜在的严重实施问题:1。共享变量既称为变量又是Aresource。这些声明的文本分离可能会被滥用,以在某些情况下将相同的变量视为计划的资源,在其他情况下将其视为普通变量。这将使一个过程能够直接引用变量,而另一个过程位于同一变量的“关键”区域内。我通过使用单个声明引入共享变量(某种类型T)来关闭此漏洞:
concurrent programming had an immediate and dramatic impact on our fundamental understanding of computer operating systems. The implementation techniques of operating systems were reasonably weIl understood in the late 1960s. But most systems were too large and poorly described to be studied in detail. All of them were written either in assembly language or in sequential programming languages extended with assembly language features. Most of the literature on operating systems emphasized low-Ievel implementation details of particular systems rather than general concepts. The terminology was unsystematic and incomplete (Brinch Hansen 2000). Before the invention of abstract concurrent programming, it was impractical to include algorithms in operating system descriptions. Technical writers mixed informal prose with unstructured flowcharts and complicated pictures of linked lists and state transitions. ll In its Cosine Report (1971), the National Academy of Engineering summarized the state of affairs at the time [with emphasis added]: llSee, for example, IBM (1965), Elliott Organick (1972), and Stuart Madnick (1974). 22 PER BRINCH HANSEN The subject of computer operating systems, if taught at all , is typ ically a descriptive study of some specific operating system, with little attention being given to emphasizing the relevant basic concepts and principles. To worsen matters, it has been difficult Jor most university departments to develop a new course stressing operating systems principles . .. There are essentially no suitable textbooks on the subject. I consider myself lucky to have started in industry. The RC 4000 project convinced me that a fundamental understanding of operating systems would change computer programming radically. I was so certain of this that I decided to leave industry and become a researcher. In November 1970 I became a research associate at Carnegie-Mellon University, where I wrote the first comprehensive textbook on operating system principles: P. Brinch Hansen, An Outline of a Course on Operating System Principles {l971) While writing the book I reached the conclusion that operating systems are not radically different from other programs. They are just large programs based on the principles of a more fundamental subject: parallel programming. Starting from a concise definition of the purpose of an operating system, I divided the subject into five major areas. First, I presented the principles of parallel programming as the essence of operating systems. Then I described processor management, memory management, scheduling algorithms and resource protection as techniques for implementing parallel processes. I defined operating system concepts by abstract algorithms written in Pascal extended with a notation for structured multiprogramming. My (unimplemented) programming notation included concurrent statements, semaphores, conditional critical regions, message buffers, and monitors. These programming concepts are now discussed in all operating system texts. The book includes a concise vocabulary of operating system terminology, which is used consistently throughout the text. The vocabulary includes the following terms: concurrent processes, processes that overlap in time; concurrent processes are called disjoint if each of them only refers to private data; they are called interacting if they refer to common data. synchronization, a general term for any constraint on the order in which operations are carried out; a synchronization rule can, for example, specify the precedence, priority, or mutual exclusion in time of operations. THE INVENTION OF CONCURRENT PROGRAMMING 23 monitor, a common da ta structure and a set of meaningful operations on it that exclude one another in time and control the synchranization of concurrent processes. My book Operating System Principles was published in July 1973. Pet er Naur (1975) reviewed it: The presentation is generally at a very high level of clarity, and gives evidence of deep insight. In pursuing his general aim, the establishment of a coherent set of basic principles for the field, the author is highly successful. The principles are supported by algorithms written in Pascal, extended where necessary with carefully described primitives. elose attention is paid to the thorny quest ion of terminology. In my outline of the book I made a prediction that would guide my future research: So far nearly all operating systems have been written partly or completely in machine language. This makes them unnecessarily difficult to understand, test and modify. I believe it is desirable and possible to write efficient operating systems almost entirely in a high-level language. This language must permit hierarchal structuring of data and program, extensive errar checking at compile time, and production of efficient machine code. 7 Structured Multiprogramming P. Brinch Hansen. Structured Multiprogramming (1972) The conditional critical region, proposed by Hoare (1971), had minor notationallimitations and a potentially serious implementation problem: 1. A shared variable is declared as both a variable and aresource. The textual separation of these declarations can be misused to treat the same variable as a scheduled resource in some contexts and as an ordinary variable in other contexts. This would enable a process to refer directly to a variable while another process is within a "critical" region on the same variable. I closed this loophole by using a single declaration to introduce a shared variable (of some type T):