我们前面已经讲过了操作系统的基本轮廓、启动过程以及系统调用等相关内容,就如同揭开了钢琴的盖子,对操作系统有了初步的表面认识。从现在起,我们要更深入地剖析操作系统,就像分解钢琴一样,探究其各个部分的构成、原理以及组装方式。为了更好地理解操作系统,我们先来讲讲它的历史。培根说过“读史使人明智” ,了解操作系统的历史,能让我们知晓它的诞生过程、核心模块及其产生的必然性,从而在深入学习时不迷失方向。
早期计算机与批处理系统
最开始出现的计算机是IBM 7094,人们称其为上古神机,造价高达250万美元以上,极其昂贵。在那个时期,计算机是绝对的主体,所有任务都围绕它展开,使用原则是只专注于计算。当时采用批处理系统(Batch system),有一个简单的监控程序。一个作业完成后,会自动读入下一个作业 。若任务出错,就把出错信息输出到磁带上,供人分析。分析完后再添加新任务继续批处理。此时的监控系统功能简单,只能在任务完成或出错时,修改PC指针切换到下一个任务,严格来说还算不上真正的操作系统。
操作系统的演进 - OS/360
随着计算机技术发展,计算机变得越来越便宜,开始进入多个行业,如科学计算(IBM 7094)和银行(IBM 1401)等。一台计算机需要承担多种任务,批处理方式不再适用。因为不同任务特点不同,比如科学计算主要依赖CPU运算,I/O任务则需访问磁盘、磁带等,若仍用批处理,在I/O任务等待时CPU会闲置,造成资源浪费。于是,多道程序(multiprogramming)的概念应运而生,即多个程序或任务同时存在于计算机中,交替执行,作业之间的切换和调度成为核心。IBM组织大量人员(约5000人)开发了OS/360操作系统 ,360表示全方位服务,旨在为各种任务提供支持。这个系统标志着多进程结构和进程管理概念的萌芽,但由于系统过于复杂,开发周期长达5000个人年,最终存在很多bug,算是一个不太成功的项目。
从OS/360到MULTICS
计算机应用范围不断扩大,使用人数也日益增加。如果每个人都启动一个作业,就需要作业之间快速切换,分时系统(timesharing)由此出现。代表系统是MIT的MULTICS(MULTiplexed Information and Computer Service) 。其核心依然是任务切换,并且引入了资源复用的思想,比如虚拟内存就是一种资源复用方式。虽然MULTICS本质上与OS/360没有太大的推进,但它让多进程、多任务同时推进的模式更加清晰和实用。
从MULTICS到UNIX
小型化计算机的出现让更多人能够使用计算机,例如PDP - 1每台售价120,000美元,价格大幅降低。1969年,贝尔实验室的Ken Thompson、Dennis Ritchie等在一台没人使用的PDP - 7上开发了一个简化的MULTICS,也就是后来的UNIX 。UNIX继承了MULTICS的核心概念,但因为是由少数人(两人)开发,所以更灵活、紧凑,bug也更少,取得了成功,成为计算机领域广为人知的操作系统。
从UNIX到Linux
1981年,IBM推出IBM PC,个人计算机开始普及,很多人有机会接触计算机和UNIX 。1987年Andrew Tanenbaum发布了MINIX(非常类似UNIX)用于教学 。Linus Torvalds在386sx兼容微机上学习minix后,于1991年开发出小Linux,并在1994年发布Linux 1.0,采用GPL协议。1998年以后,在互联网世界展开了一场历史性的Linux产业化运动,Linux逐渐辉煌起来,如今很多系统如安卓手机底层都基于Linux。
总结操作系统演进主线
从IBSYS到OS/360,再到MULTICS、Unix、Linux,我们可以总结出以下几点:
- 核心思想角度:用户通过执行程序使用计算机,这与冯诺依曼思想相契合;操作系统作为管理者,要让多个程序合理推进,也就是进行进程管理;多进程推进时需要内存复用等技术支持。多进程结构一直是操作系统的基本图谱,并且对于操作系统而言,实现概念远比理解概念重要。
- 软件实现角度:从OS/360到UNIX,体现了实现的重要性;从UNIX到Linux,则展现了群体智慧在操作系统发展中的作用。我们的任务是掌握操作系统的多进程图谱并实现它。
另一条发展线 - PC与DOS相关演进
PC机诞生后,自然需要配备操作系统。1975年Digital Research为Altair 8800开发了操作系统CP/M ,它让用户通过写命令来执行对应的程序,属于单任务执行模式。1980年出现了8086 16位芯片,在此基础上从CP/M衍生出了QDOS(Quick and Dirty OS) 。
从QDOS到MS - DOS
1975年,22岁的Paul Allen和20岁的Bill Gates为Altair 8800开发了BASIC解释器,开创了微软 。1977年Bill Gates开发FAT用于管理磁盘 。QDOS成功在于以CP/M为基础,融合了BASIC和FAT,涵盖了文件管理和编程环境等用户关心的功能。1980年IBM想和Digital Research授权使用CP/M未达成,转而与微软合作。1981年微软买下QDOS,改名为MS - DOS(Disk OS),并与IBM PC打包出售。
从MS - DOS到Windows
MS - DOS通过磁盘、文件、命令等让用户使用计算机更方便,但微软仍在追求更便捷的操作方式。1989年,MS - DOS 4.0出现,支持了鼠标和键盘,此时微软已决定放弃MS - DOS 。不久后Windows 3.0大获成功,随后Windows不断发展,出现了95、XP、Vista、Win 7、Win 8等版本 。这一发展过程体现了文件、开发环境、图形界面对于操作系统的重要性。
Mac OS与iOS
1984年,苹果推出PC(麦金塔机,Macintosh) ,简称Mac机,其处理器使用IBM、Intel或AMD等,核心关注屏幕、能耗等方面 。与Mac机一起发布System X系统,一开始就是图形用户界面(GUI) ,在System 7以后改名为Mac OS 8 。2007年发布iOS,其核心仍是Mac OS,专为移动设备设计,加入了手势等操作方式 。Mac OS核心基于UNIX,专注于界面、文件、媒体等与用户相关的内容,与Windows思路有相似之处,未来人机交互方式可能会有更多创新,但文件依然是核心。
学习操作系统历史的意义与课程主旨
总结操作系统的历史,我们发现多进程结构始终是其核心,同时操作系统不断在用户使用层面进行发展,比如文件操作视图以及图形界面等方面。对于我们学习操作系统这门课程而言,要做到两个关键方面:一是理解多进程图谱,明白其原理(源于OS/360,最终在UNIX中体现),并通过研究Linux代码等方式掌握其实现过程;二是学习文件操作视图,了解文件的概念(源于DOS、Windows、iOS等)并实现相关操作。只有理解原理、实现代码、掌握思想,才能真正理解、掌握和利用操作系统,为未来的工作、研究和创造奠定坚实基础。 这就是我们学习操作系统历史的目的,从历史中汲取经验教训,明确操作系统核心,提升实现和应用操作系统核心的能力。