操作系统出现的另一个背景是20世纪 50年代计算机技术的革新,特别是磁芯内存、磁带等大容量高速存储技术的应用,以及从早期打孔卡片发展而来的“文件”等抽象的出现,使得专业化的大型软件成为可能,软件开发作为一个独立行业开始从硬件设计制造中分离出来。人们针对“如何提高软件开发的效率”这一问题进行初步探索,催生了Fortran等高级语言的出现,也在这一过程中积累了大量工具、编译器、可重用例程和库等。由于软件开发与运行密切相关,因此在这一时期,许多操作系统与编程系统并未严格区分,典型实例包括MIT的CSSR(Comprehensive System of Service Routines)[4]、ERA 1103(UNIVAC 1103A)计算机所配备的“集成计算系统”[5]等。这类系统通常具备运行时批处理功能,但更强调对开发的支持,其核心是一系列可重用库和辅助工具(Utility Tool)。这也是今天操作系统“沉淀共性问题解决方案”能力的来源。
除了上述支撑不同应用程序模型的通用中间件外,部份中间件关注的是分布式软件的一些特化场景,其典型代表是消息中间件和事务处理中间件:(1)在分布计算实践的初期,人们就已发现紧耦合、同步的过程调用并不能满足所有应用场合,支持异步交互和松耦合通信的分布式应用消息机制的研究和实践开始被重视,诸如Field、InformationBus等消息中间件平台开始出现。上个世纪90年代,IBM MQSeries等消息中间件产品被大量使用,消息中间件技术走向成熟。(2)在大型主机时代,IBM的CICS(Customer Information Control System)系统就已提供了跨计算结点事务支持。针对美国电话公司需要的联机事务处理能力,AT\&T贝尔实验室于上个世纪80年代初发布了跨平台的Tuxedo事务处理中间件,相关研究与实践对后续X/Open组织的分布式事务处理规范、OMG组织的对象事务服务规范等产生了较大影响[31]。
在上述背景下,为了提供系统化、高效的数据组织与访问功能,专门的数据库管理系统开始出现。60年代初通用电气在其生产信息和控制系统(MIACS)中设计了“集成数据存储”(Integrated Data Store),被认为是首个支持直接访问的数据库管理系统,并直接为CODASYL组织后续制定的网状数据库标准奠定了基础。1968年,IBM发布了运行于System/360主机的层次数据库管理系统IMS(Information Management System)。上述两个具有里程碑意义的产品分别代表了数据库管理系统的两种早期数据模型,也即数据是按照网状的“图”还是层次化的“树”来组织。其中,层次模型由于其每一个节点最多只有一个父节点,因此可以采用有效的手段(例如按照树遍历的顺序)来存储数据,而网状模型可以将图分解为一组“基本层次联系”的集合,其本质上可以用“树”结构来表达和存储数据。
\subsection{关系数据库的高速发展(70年代-90年代)}
20世纪70年代是关系数据库形成并实现产品化的年代,主要的代表人物就是IBM的埃德加·科德(Edgar F. Codd)。1970年,科德发表题为“大型共享数据库的关系模型”的论文[36],文中提出了数据库的关系模型。由于关系模型简单明了、具有坚实的数学理论基础,操作语言是描述性的,无需像层次网状模型那样,需要描述存取路径(既先访问哪个数据再访问哪个数据)这样的细节,给提高信息系统开发的生产率提供了极大的空间,所以一经提出就受到了学术界和产业界的高度重视和广泛响应。尽管一开始产业界还充斥了对关系数据库系统性能的怀疑,但科德所开发的System R系统证明其性能可以有保障。这一结论极大地推动了关系数据库技术的发展,关系数据库产品开始涌现,例如IBM公司自己在System R系统基础上推出的DB2产品和ORACLE公司的同名数据库产品。
具体而言,这一阶段的研究和实践核心围绕查询优化和事务管理等展开:(1)查询优化。关系数据库语言是基于集合的描述性语言(如70年代初出现的SQL语言),其查询的结果也是一个集合。如何将一个SQL语句转换为可以执行的程序(类似程序自动生成器),而且要在所有可能的执行计划(程序)中选择出一个效率足够好的加以执行,是这一阶段工作重点之一。(2)事务管理。事务管理提供对并发事务的调度控制和故障恢复,确保数据库系统的正确运行。詹姆斯·尼古拉·格雷(James Gray)在相关研究方面发挥了十分关键的作用,为数据库管理系统成熟并顺利进入市场做出了重要的贡献。他的成就汇聚成一部厚厚的专著《Transaction Processing: Concepts and Techniques》[37],他也众望所归获得了1998年度的图灵奖。
在这一时代,对于数据库管理系统做出重要贡献的还有迈克尔·斯通布雷克(Michael Stonebraker)。他在加州大学伯克利分校计算机科学系任教的29 年中中,领导开发了关系数据库系统Ingres、对象–关系数据库系统Postgres、联邦数据库系统Mariposa等,同时创立了多家数据库公司。他在“One size does not fit all”的思想指导下,开发了一系列的“专用”关系数据库产品,例如流数据管理系统、内存数据库管理系统、列存储关系数据库系统、科学数据库管理系统等。因“对现代数据库系统底层的概念与实践所做出的基础性贡献”,他于2015年获得了图灵奖。
随着实践的深入,人们发现NoSQL并非解决大数据时代数据管理问题的“银弹”。一方面,无论从应用程序继承的角度还是提高生产率的角度,SQL语言都是不可或缺的工具,因此继承和汲取SQL的优点(如在上层提供SQL查询引擎)逐渐成为NoSQL数据库的共识,NoSQL一词的含义也从“非SQL”被修正为“不仅仅是SQL”(Not Only SQL)。另一方面,许多联机事务处理业务在应对海量数据同时仍需要采用关系模型,并保证原子性、一致性、隔离性、持久性等特性。因此,能够提供与NoSQL数据库类似的扩展性能、但仍具备关系数据库能力的NewSQL数据库近年来得到了快速发展,其典型代表包括Google全球级分布数据库Spanner和开源领域的CockroachDB、TiDB等。
\item [] [1]. M. Bullynck, "What is an operating system? A historical investigation (1954–1964)," in Reflections on Programming Systems: Springer, 2018, pp. 49-79.
\item [] [2]. A. M. Turing, "On computable numbers, with an application to the Entscheidungsproblem," Proceeding of the London Mathematic Society, 2, pp. 230-265, (1937).
\item [] [3]. R. L. Patrick, "General motors/North American monitor for the IBM 704 computer," in AFIPS Conference, 1987.
\item [] [4]. H. D. Bennington and C. H. Gaudette, "Lincoln laboratory utility program system," in Joint ACM-AIEE-IRE western computer conference: ACM, 1956, p. 21-21.
\item [] [5]. W. F. Bauer, "An integrated computation system for the ERA-1103," Journal of the ACM (JACM), 3, pp. 181-185, (1956).
\item [] [6]. E. W. Dijkstra, "The structure of the “THE” multiprogramming system," in The origin of concurrent programming: Springer, 1968, pp. 139-152.
\item [] [7]. W. F. Bauer, "Computer design from the programmer's viewpoint," in Eastern joint computer conference: Modern computers: objectives, designs, applications, 1958, pp. 46-51.
\item [] [8]. J. Lee, "Time-sharing at MIT: Introduction," IEEE Annals of History of Computer, pp. 13-15, (1992).
\item [] [9]. F. J. Corbató and V. A. Vyssotsky, "Introduction and overview of the Multics system," in Proceedings of the November 30--December 1, 1965, fall joint computer conference, part I, 1965, pp. 185-196.
\item [] [10]. M. J. Bach, The design of the UNIX operating system vol. 5: Prentice-Hall Englewood Cliffs, NJ, 1986.
\item [] [11]. G. H. Mealy, "The functional structure of OS/360, Part I: Introductory survey," IBM Systems Journal, 5, pp. 3-11, (1966).
\item [] [12]. R. J. Creasy, "The origin of the VM/370 time-sharing system," IBM Journal of Research and Development, 25, pp. 483-490, (1981).
\item [] [13]. A. D. JoSEP, R. KAtz, A. KonWinSKi, L. Gunho, D. PAttERSon, and A. RABKin, "A view of cloud computing," Communications of the ACM, 53, (2010).
\item [] [14]. X. Lu, H. Wang and J. Wang, "Internet-based virtual computing environment (iVCE): Concepts and architecture," Science in China Series F: Information Sciences, 49, pp. 681-701, (2006).
\item [] [15]. LLyod'S, "Cloud Down: Impacts on the US economy," Technical Report, 2018, https://www.lloyds. com/~/media/files/news-and-insight/risk-insight/2018/cloud-down/aircyberlloydspublic2018final.pdf.
\item [] [16]. G. M. Hopper and J. W. Mauchly, "Influence of programming techniques on the design of computers," Proceedings of the IRE, 41, pp. 1250-1254, (1953).
\item [] [17]. J. W. Backus, "Automatic programming: properties and performance of FORTRAN systems I and II," in Proceedings of the Symposium on the Mechanisation of Thought Processes, 1958, pp. 165-180.
\item [] [18]. J. Backus, "The history of Fortran I, II, and III," ACM SIGPLAN Notices, 13, pp. 165-180, (1978).
\item [] [19]. J. E. Sammet, "The early history of COBOL," in History of programming languages I: ACM, 1978, pp. 199-243.
\item [] [20]. O. Dahl, B. Myhrhaug and K. Nygaard, "Some features of the SIMULA 67 language," in Conference on Applications of Simulations, 1968, pp. 29-31.
\item [] [21]. N. Chomsky, "Three models for the description of language," IRE Transactions on information theory, 2, pp. 113-124, (1956).
\item [] [22]. M. Mehrara, T. Jablin, D. Upton, D. August, K. Hazelwood, and S. Mahlke, "Multicore compilation strategies and challenges," IEEE Signal Processing Magazine, 26, pp. 55-63, (2009).
\item [] [24]. J. N. Buxton and B. Randell, Software Engineering Techniques: Report on a Conference Sponsored by the NATO Science Committee: NATO Science Committee; available from Scientific Affairs Division, NATO, 1970.
\item [] [25]. B. Jenkins, "Developments in computer auditing," Accountant, (1972).
\item [] [26]. A. S. Tanenbaum, R. Van Renesse, H. Van Staveren, G. J. Sharp, and S. J. Mullender, "Experiences with the Amoeba distributed operating system," Communications of the ACM, 33, pp. 46-63, (1990).
\item [] [27]. A. S. Tanenbaum and R. Van Renesse, "Distributed operating systems," ACM Computing Surveys (CSUR), 17, pp. 419-470, (1985).
\item [] [29]. A. D. Birrell and B. J. Nelson, "Implementing remote procedure calls," ACM Transactions on Computer Systems (TOCS), 2, pp. 39-59, (1984).
\item [] [30]. A. P. Black, "Supporting distributed applications: Experience with Eden," in ACM SIGOPS Operating Systems Review. vol. 19: Citeseer, 1985, pp. 181-193.
\item [] [31]. W. Emmerich, M. Aoyama and J. Sventek, "The impact of research on the development of middleware technology," ACM Transactions on Software Engineering and Methodology (TOSEM), 17, p. 19, (2008).
\item [] [32]. C. Ferris and J. Farrell, "What are web services?" COMMUNICATIONS OF THE ACM, 46, p. 31, (2003).
\item [] [34]. A. Elkady and T. Sobh, "Robotics middleware: A comprehensive literature survey and attribute-based bibliography," Journal of Robotics, 2012, (2012).
\item [] [36]. E. F. Codd, "A relational model of data for large shared data banks," COMMUNICATIONS OF THE ACM, 13, pp. 377-387, (1970).
\item [] [37]. J. Gray and A. Reuter, Transaction processing: concepts and techniques: Elsevier, 1992.
\item [] [38]. S. Ghemawat, H. Gobioff and S. Leung, "The Google file system," in ACM Symposium on Operating Systems Principles, 2003.
\item [] [39]. J. Dean and S. Ghemawat, "MapReduce: a flexible data processing tool," Communications of the ACM, 53, pp. 72-77, (2010).
\item [] [40]. F. Chang, J. Dean, S. Ghemawat, W. C. Hsieh, D. A. Wallach, M. Burrows, T. Chandra, A. Fikes, and R. E. Gruber, "Bigtable: A distributed storage system for structured data," ACM Transactions on Computer Systems (TOCS), 26, p. 4, (2008).