# 第四章-操作系统及项目开发杂谈
在众多的程序里,有一大类特殊的程序,它们就叫操作系统(OS: Operating System)。操作系统是最基础的程序,它让计算机:
1. 运行起来
1. 所有的硬件各就各位
1. 接受别的程序给予的指令
相应的,其它程序就叫应用程序。操作系统和应用程序的关系,就像人的基本意识和数学水平一样。想让一个连基本意识都没有的人(譬如植物人)参加数高考——看来你和我都疯了。一般的计算机都是硬件、操作系统和应用程序相互分离的,需要的时候分别安装。有些特殊的设备直接把操作系统做在硬件里(比如嵌入式操作系统),比如各种电子游戏机,可以开机,但是要有游戏光盘或游戏卡才能玩,还有些计算机把操作系统和应用程序都做在一起,放在机器内部,N年前很流行的俄罗斯方块掌上游戏机和电子宠物就是这样的设备。
### 操作系统漫谈 [[1]](#)
Long long ago, 就是上个世纪60 年代的美国一个春天啦,那个时代的计算机是个新鲜玩意,非常笨重,家庭用户是没有的,都是商用或者试验,科学计算用的机器。你说你想买个电脑斗地主?把你卖给地主你也买不起呀。再说那时候的计算机不是随便一个人就会用的,那时候的计算机使用的时候是由人来输入一条条的指令来进行各种运算的。他们输入的指令大约相当于现在的汇编指令,所以这个效率和操作难度有多高就可想而知了。
那时候计算机大都没有什么操作系统,顶多有个批处理系统,可以把要输入的指令记录在某种媒介上(比如纸带)一次性输入进去,让人们省去一条条重复输入指令的麻烦。后来慢慢有了很简单的操作系统,但并不像现在我们见到的操作系统这样通用。这个时候,卖计算机的厂商要为每一型号的计算机设计不同的操作系统,一个程序如果在这个型号的计算机上写好了,拿到其他型号的计算机上是运行不了的,因为这两台机器连操作系统都不一样,怎么可能程序通用呢。计算机要是老这样肯定是不行啦,否则你今天要玩斗地主,人家游戏公司就得专门派人到你家机器上现写出一个来——因为不同型号的计算机上的操作系统不通用嘛。
这个斗地主的问题,终于还是被那个时代IT业界的大地主,蓝色的IBM公司率先着手解决了。1964年他们公司推出了一个系列的大型机,用途、价位各不一样,但他们上面运行的操作系统,都是System/360。(这360可不是卖鞋的,也不是跟QQ打架的那个)这一下获得了很大的成功,因为省去了为每一台电脑单独编写系统的成本嘛。直到今天,IBM 的大型机上依然可以运行这个360 系统,可见其当初设计时充分考虑的兼容性。然而我们要讲的主角不是360,而是另一个伟大的操作系统。
那时候有个聚集了很多牛人的地方,叫做贝尔实验室,是1925 年由AT&T 公司成立的。一帮头脑发达四肢也不一定简单的家伙整天聚在那里,研究新奇的东西,什么任意门啊,竹蜻蜓啊,记忆面包啊——呃……都不是他们发明的(发明这些的人是个日本科学家)。那贝尔实验室那帮人研究什么呢?贝尔实验室的工作可以大致分为三个类别:基础研究,系统工程和应用开发。在基础研究方面主要从事电信技术的基础理论研究,包括数学、物理学、材料科学、行为科学和计算机编程理论,反正都是大学听不懂的那几门就对了。系统工程主要研究构成电信网络的高度复杂系统。开发部门是贝尔实验室最大的部门,负责设计构成贝尔系统电信网络的设备和软件。具体来说贝尔实验室研究出来过的东西有晶体管、发光二极管、数字交换机、通信卫星、电子数字计算机、蜂窝移动通信、有声电影、立体声录音,等等。(怎么样,不比机器猫那些东西差吧?)通信网的许多重大发明都诞生自这里。
那时候还有个聚集了很多牛人的地方,叫做麻省理工学院(MIT),这是美国的一所综合性私立大学,有「世界理工大学之最」的美名。从这里走出的牛人很多,到2009 年为止,先后有76 位诺贝尔奖得主,都曾经在麻省理工学院学习或者工作。麻省理工学院的自然及工程科学在世界上享有极佳的盛誉,其管理学、经济学、哲学、政治学、语言学也同样优秀。另外,麻省理工研发高科技武器和美国最高机密的林肯实验室、领先世界一流的计算机科学及人工智能实验室、世界尖端的媒体实验室、和培养了许多全球顶尖首席执行官斯隆管理学院也都是麻省理工赫赫有名宝贵资产。有着毋庸置疑的实力,麻省理工自然非常不差钱,截至2008 年底麻省理工有101亿美元的总资产,因为不差钱,于是该校对家庭年收入低于75000美元的学生一律免学费。
那时候,又有个聚集了很多牛人的地方。(哪那么多地方阿!)这地方是个公司,叫做通用电气。这公司可是个大公司,当年是个卖灯泡的,他们的灯泡可非同一般,虽然不节能,虽然寿命不如现在的长,虽然价格比现在贵, 虽然外形也不一定好看,但是——他们是第一家卖灯泡的!因为他们的老大,就是大名鼎鼎的Thomas Edison。1876年,发明灯泡的爱迪生同学成立了爱迪生灯泡厂,为节约蜡烛和灯油做出了突出的贡献,估计那年的五一劳动奖章肯定是他的了。到1890年,爱迪生同学将灯泡厂重组,成立的爱迪生通用电气公司,到1892 年又与汤姆森-休斯顿电气公司合并,成立了通用电气公司。
好,时间到了1965 年,这三个聚集着不少牛人的地方有一天忽然想合作一把。于是,大名鼎鼎的贝尔实验室,大名鼎鼎的麻省理工学院和大名鼎鼎的通用电气公司一起开始了一个制作操作系统的计划。为了结束长期以来计算机上面没有统一的操作系统的混乱局面,他们决定要创造出一套**前无古人后无来者,上得厅堂,下得厨房,念天地之悠悠,独怆然而泣下**的惊世骇俗的操作系统!具体来说吧,这个操作系统应该是一个支持多使用者、多任务、多层次的操作系统,因为这三多,所以这个操作系统就起名叫做——MULTICS。有了这三家的强强联合,那开发的结果还用问么?这个MULTICS 操作系统的项目在1965 年成立,到了1969 年就... 被取消了。
咳咳,这个... 其实编写操作系统也不是一件容易的事儿啦。毕竟道路是曲折滴,研究是辛苦滴,成绩还是有滴,失败捏... 也是可以原谅滴嘛。项目失败了,大家都很沮丧。在这些沮丧的人中,Kenneth Lane Thompson只是很普通的一个——1943年出生在美国的新奥尔良,吃着烤翅长大的他没有辜负养育他长大的父母和那些没有了翅膀的鸡。1960年,汤普逊考上了加州大学博克莱分校主修电气工程,顺利取得了电子工程硕士的学位。1966年,他加入了贝尔实验室,参与了MULTICS项目。做项目是个很辛苦的事情,在疲劳的揉揉因熬夜而发红的眼睛后,他很想能有个电脑游戏来玩玩。然而那时候别说超级玛丽,连吃豆也没有啊!所以汤普逊同学就自己编了一个游戏,叫做星际旅行。这个星际旅行跟星际争霸那肯定是没的比的了,不过在那时候已经算是很有吸引力了。这个游戏自然是被设计运行在MULTICS 系统上的,由于MULTICS系统还不完善,所以游戏运行的也不是很流畅,所以,能够顺畅的玩星际旅行,成为了汤普逊同学努力工作的动力。可是后来项目被干掉了,如果事情就这样结束,那么汤普逊同学就再也不可能流畅的玩他的星际旅行了,这是多么遗憾的事情阿。可是现实是残酷的,项目确实就是取消了,要想顺畅的玩游戏怎么办?老毛教导我们说:自己动手,丰衣足食。我估计汤普逊没有背过毛泽东语录,但是他用自己的行动证明了这两句话的正确性。他在墙角淘换出一台PDP-7 的机器,并且伙同其同事Dennis Ritchie,打算将星际旅行移植到这台PDP-7上。当然,要想运行这游戏,还是得有个系统。有了固定的系统,那以后再编写别的游戏就更方便了。可是系统从哪里来?MULTICS?已经停工了,并且这系统绝对不是两个人可以搞定的。那怎么办?还得自己动手!于是Ken Thompson 和Dennis Ritchie 再次发扬自己动手的精神,用汇编语言写出来个系统,这就是最初的,非常简陋的,UNIX 的前身。这个系统不像 MULTICS 那么牛,不支持很多的用户,只能支持两个用户,(估计是为了避免做好了之后俩人抢机器玩的局面发生。也可能是为了以后俩人对战?)支持的进程也有限,其他功能也都没有MULTICS 设计的那么复杂。相对于那个MULTICS 系统——MULTiplexed Information and Computing System,Brian Kernighan开玩笑地戏称他们的系统其实是:「UNiplexed Information and Computing System」,缩写为「UNICS」。后来大家取其谐音,就诞生了UNIX 这个词。这一年,已经是1970 年,史称Unix元年。
直到现在,计算机中都是用1970年1月1日0点0分0秒为原点来记录时间。(计算机中的时间记录的是自1970年1月1日0点0分0秒开始,到现在经过的总秒数,再用这个秒数计算出年,月,日)后来,Brian Kernighan觉得用汇编写的系统不好维护,于是... 他发明了C语言(符合大牛一切自己动手的风格),然后用C 语言又重写了一遍。从此,Unix 走上了发展的快车道,并且一直用到现在。许多世界级的大服务器,用的都是Unix系统(其实就现在而言,很多服务器上是用的开源的Linux系统)。**而这一切的努力,就是为了玩个游戏。-_-b**
### 操作系统及平台
总体而言,没有操作系统的计算机,就像没有意识的身体,是无法动弹的。
是不是觉得操作系统很酷?想不想自己写一套?编写操作系统要比通常想象的困难的多,它涉及到大量的背景知识和底层操作。所有连这本书都还不能消化的新手应该完全打消诸如自己制作操作系统的念头,否则吐血身亡我可负责不起,有实力之后再来尝试也不迟。
提供给钢琴和手风琴的乐谱并不是完全一样的,这是一种共识。为什么?——因为这是两种不同的乐器。同样,在这个世界上有很多种的计算机,他们相互之间的差别也很大。每一种计算机都需要操作系统,而某一款计算机可能有好几种操作系统可以使用,就像我们可以说中文,也可以说英语。但也有可能它只能装某几种操作系统,比如Mac OS X就不是普通的电脑能原生支持的。**特定的计算机和特定的操作系统的组合,就被称为平台。**就像钢琴曲不是给京韵大鼓使用的,对印度土著说中国成语也不会有什么好效果,编程通常都要针对某种平台来做。有一些高级语言号称能够跨平台——也就是可以在很多平台下运行。跨平台并不意味着在每一种平台上都能运行,一般能支持一些主流平台就可以称为跨平台。
如果你想要在编程上面有所成就,你不得不选定一个平台深入地钻研。个人认为,初学者不适宜同时在两个完全性质不同的平台上学习,不同的特性绝对会把你搞晕,在你确认掌握了一个之后再学习另一个,相互借鉴的作用才能体现出来。
### Notes
1. [[1]]() 本节摘抄自《笨兔兔的故事》,如原作者觉得放这里不合适还请及时指出。
- Introduction
- Part I Introduction to Programming
- 第一章-编程所谓何物
- 第二章-咋学编程
- 第三章-编程进阶-数据结构与算法
- 第四章-操作系统及项目开发杂谈
- 控制台和图形用户界面
- 工程和单个文件的关系
- 第五章-编程语言
- 第六章-编程方法论杂谈
- 好书哪里找
- 高效使用搜索引擎
- 好习惯
- 文本编辑器
- 版本控制
- 编程开发
- 第七章-教材推荐及其它
- 数据结构与算法类
- Operating System
- C
- C++
- Java
- Python
- Golang
- Network
- 数据库
- Web-前端
- Web-后端
- 机器学习
- Linux
- GUI
- Android开发
- 数据挖掘与分析
- Spark
- 杂项