007 | linux发展历史-03
本文为《跟马哥学Linux》系列文章的第七篇,上一篇文章为《 Linux发展历史-02》。
同样的道理在同一款硬件上,我要写一个播放器A写一个播放器,B写一个编辑器,C又写一个浏览器,每一个程序底层都要花大量的时间,为了让硬件工作起来写一堆代码这是完全没有必要的,想这一段代码是通用的。对很多程序员来讲都需要,既然如此,我们干嘛不找一个来一并做起来呢,这就是一个通用软件,他什么活也不干,他不是播放器,也不是编辑器。他仅仅时能让底层工作起来的基本的驱动程序。我把它做成一个框架放到互联网上,谁要用谁下载,程序员下载后只需要在上面写程序就够了而下面的我们成为通用程序,而解决某一需要的就是专用程序。而通用程序后来就演化为的操作系统,这个事情说起来就要往前推一推比如说,最早计算机出现的时候是没有所谓的操作系统这一说的后来人们发现输入输出设备在计算机上认识最薄弱的一环,每一次为了让计算机能够运行程序,人需要把我们写的程序转换成机器可以理解的格式,而那个时候的计算机的输入设备叫做穿孔纸带,输出设备依然是穿孔纸带,再后来到了磁带,磁芯,磁鼓作为输入设备。输出就是发光二极管,亮起来就是1不亮就是0。计算机运行的速度很快,人在输入时很慢读取输出时也很慢。这两个环节太慢了,
等磁带出现了以后,人们把要运行的程序,做了多个放在磁带上,按顺序的放在磁带机上,让电脑能够自动的读取磁带来加载要运行的程序,电脑自动从磁带机中加载磁带运行完第一个加载第二个运行完第二个加载第三个。。。。。。我们把他称为批处理系统叫做batch系统,说白了就是,我们在磁带上放上放上第一个作业叫做job1中间比如说用四个$隔开再出现的数据就是job2再用四个$隔开就是job3这种就叫做批处理系统,
批处理系统有一个特性,计算机和人的大脑一样在某一时刻只能做一件事。为什么呢?因为内存只有一个,哪个地方存指令,哪个地方存数据他说了算,cpu也只有一个,所以在某一时刻整个计算机上只能有一个程序,等这个程序运行完了把地方腾出来然后读取第二个程序,第二个完了在读取第三个,所以所有的程序不能够同时的运行那个时候就称为是单任务的系统,而后来,虽然批处理系统子一定程度上解决了人输入输出太慢,但是在某一时刻cpu有大量的时间,都是空闲的时间是浪费的。虽然说输入输出用磁带比人快了很多但是比起cpu的计算能力依然是非常慢的。
同样的道理,cpu比内存快所以在大量时间cpu还是空闲的,在空跑一。因此人们期望cpu能不能满负荷的去压榨cpu的能力。同样的道理,对于che程序来讲cpu的计算能力有很多时间是浪费的,我们能否让计算机在同一个时刻运行多个任务呢,在批处理时代人们就发现这样的问题了,那个时候的批处理计算机其实是这个样子的,有两组一个是做运算的,一个是让人写代码以后做输入输出给存上去的,所以这是一个辅助的机器帮你把数据存上去,存好后放到大计算机上跑。为了计算,我们需要好几台计算机结合起来工作。
但到了后来制作工艺越来越强大,计算机的性能越来越强了,但是后面的输入输出设备依然跟不上。所以催生了另外一种需求我们能不能多任务,multi 什么叫多任务,就是能够让计算机同时跑多个任务,只是个不可能的任务,至少几乎是一个不可能的任务,cpu只有一个,内存只有一个怎么可能跑多任务,一跑多任务就乱掉了,为了不乱掉怎么办,比如说我们告诉各位,在万民广成上有免费的咖啡一窝蜂就寄过去了,总共就有十个走后噼里啪啦全打啦,谁也喝不上,最近有一本书非常火,叫做乌合之众,人的群体的智商是小于个体的所以叫乌合之众。
我们还是会到计算机技术的话题上来,如果说我们现在有多个程序可以他让他跑在计算机上,内存只有一个结果是什么呢,你占了我的空间,我覆盖了你的数据到时候大家谁都干不成活,所以群体智商小于个体反而做不成事,为了能够做成事,找一个监控人员现在广场上说这里有十杯咖啡,谁要抢立马枪毙,肯定一个一个去了所以需要管理,为了让一个群体的智商之和大于个体就需要一个监控,一个管理员,一个组织者。对我们的计算机也是同样的道理要做一个程序是监控的这个监控程序有特权他工作在内存当中的某一个特定的固定位置,给监控程序用的剩余的空间才能给其他程序用,而这个监控程序将其余空间优化分成一个一个的格子而任何一个额程序要想运行是他被装在到内存时这个程序给他划分好了,第一个程序给他第一片,第二片是第二个程序 ,第三片是第三个程序,各不相干,互不相让,谁也不允许别的程序跑的他的领地。
于是至少计算机的指令和存储的问题解决了内存上的存储是从哦那空间上划分的,但是cpu呢,cpu只有一个,怎么能让多个任务同时跑在cpu上呢,跟我们人一样,大脑只有一个虽然说领导交代给你有5件事都需要完成,而且都记下来了但是在某一时刻你只能盘算一件事。我们无法联合起来盘算但是为了让五件事能够齐头并进想5秒钟第一件事不管想完想不完都先把解决问题放下先记下来,去想5秒钟第二件事放下,第三个想5秒钟回过头来再想第一件事从刚刚中断的地方再去进行就好了,所以想这种就是以时间切割的把cpu所能提供的计算能力从时间上切割成比如向我们刚刚说的5毫秒一片5毫秒一片所以这三个程序轮流第一个5毫秒给第一个程序,第二个5毫秒给第二个程序依次类推,把第三个5毫秒给第三个程序,再转过来第四个5毫秒给第一个程序。像这样子就能够多任务运行了但是为了让多任务能够跑起来必须有一个监控程序。所以这个监控程序需要写一个需要一个有公众之心的没有私心的更不能包藏祸心的则么一个组织或者厂商,是一个严密组织也罢,是一个松散的组织也罢他们负责把这个程序写出来位其他程序的运行提供一个公平公正良好的运行环境,至少不要浪费那么多资源,所以说这样的程序就显得至关重要那个时候就有了来完成这么一个任务的,或者至少有这么一个项目被催生,比如想早些时候的ITMT的Bell实验室,有麻省理工的人工智能实验室,还有通用电气应该是这三家组织,他们联合起来研发这么一个监控程序给他起名就叫做multics多样化的,多样性的。
这个程序的设计,bell实验室为了能够参与这个项目招了很多优秀的工程师MIT他们的很多教授和学者也都参与进来GE也一样的,后来两三年之后大概时间走到了,人们发现这个multics的目标到底是什么呢?最初的设计目标已经完成了但是后续的目标人们发现,在设计的过程中越走越有很多的任务还没做好没做到完美最后这个系统的目标被越设置越大,到最后甚至他们迷失了,搞不清楚到底要写什么,要完成什么了,面对这种现状GE就退出了,再后来bell实验室也退出了但不管这么讲multics确实研发成功了据说当年的第一个客户是福特汽车公司,而且福特汽车公司这个系统一直用到了2000年前后还在用而这个的研发时间是上世纪的六十年代,据说美国的某一个航空公司飞机厂里的塔台的呼叫调度系统据说早些时候还跑的是windows3.1呢,就在两个月前出现故障,谁也修复不了因为跑的是windows3.1.windows3.1因该是上个世纪80年代的产品所以对于有些商业组织来讲稳定是最重要的并不是新那将来的工作也一样能让稳定跑起来比尝试用新程序尝试用新鲜的东西更重要。我们继续说multics这个项目就是试图建立一个具备众多功能的叫做信息功能应用工具而设定的但是最后大家都迷失以后bell实验室为multics项目的参与召集的那些优秀工程师就被召回了bell实验室他们就无事可干了 对于这些牛人们无事可干了都在干什么,都在自己鼓捣东西了,通常这些工程师都是这么干的比如说早期的时候在bell实验室中有个叫做Ken Thompson,Ken这个家伙早期的时候也是multics项目中的研发人员,而且有受到了当时项目上的批量技术的困扰并且据说在设那时候Ken在multics上研发了一个游戏程序叫做Space Travel。
他当时在写这么一个游戏,游戏要跑在multics之上而bell实验室退出了这么个项目以后Ken是没有免费权限在免费使用multics的能力的要想用得付费Ken肯定就很郁闷了所以说他为了能过继续研究这个小的游戏程序决定自己去写一个系统能够支撑这个游戏跑起来的小系统但是当时比较流行的计算机已经到了小型机时代。比第一代的电脑已经小很多了大概像现在一个柜子一样这么大和这个桌子差不多这么大我们通常把他称为小型机,而那个是后的小型机主要是dec公司生产的比较有名想pdp系列,叫做数字设备公司后来数字设备公司卖给了康柏后来康柏又被惠普给收购了据说惠普有要被分拆了所以这一路悲欢离合的狗血故事。
Dec生产了当时非常著名的小型机叫pdp,pdp在那个时候,比较主流的是他是按照数字编代的像pdp1234567。。。。。。那个时候比较主流的是pdp-11大概能卖到几十万没有不过计算能里没有你的手机好,ken回到bell实验室以后为了研究他的Space Travel就向领导申请能不能给能回一台pdp-11来或者说能有启用pdp-11这个权限当然领导认为这个年轻人脑子不正常,为了游戏竟然申请真么贵重的设备于是肯定不同意,于是ken就很郁闷。然后就转悠在bell实验室。后来某一天,发现在一个角落里有一个破布底下盖着一个设备打开一看是一个老古董pdp-7,pdp-7早那个时代就是已经废弃的设备。
不管怎样好歹有了,所以ken这份家伙在pdp-7上尝试去写他的程序当时的pdp-7还是用汇编语言去编码的他用汇编语言写了一个小系统,并且居然Space Travel在上面可以跑起来了。所以他非常的欣喜于是他为了能够让自己的Space Travel,引起关注于是他就在bell实验室了,到处兜售他的游戏,但是bell实验室的同人对他的游戏一点兴趣都没有。他们更多的是关注了他的系统,因为他们发现这个系统短小精悍,性能太强了。pdp-12上跑的系统要好的多接口设计也规范的多,而且也易用的多。因此没有人对他的Space Travel感兴趣,但是每个人都期望说,能不能把你写的系统给我装一次装到我的系统上来,他当时就是面临了这么一种哭笑不得的场景。而且他的那些同时对这个系统非常感兴趣,但是比起当年他们参与的multics而言从本质上来讲功能要单一,要简单的多的多。所以把这个系统取了名叫做unics。Un和mult就是相对用的词根不知道后来应为什么原因,被命名为unix。可能就是弱化这种对立的情形所以把他改了名。