25
2025
12

闲话操作系统2(转载)

 闲话操作系统(六)

西摩•克雷(Seymour Cray)――隐居丛林的超级计算机之父

如果将计算机喻为科学皇冠,那么超级计算机无疑是皇冠上最耀眼的明珠。一个国家超级计算机的研制水平,是国际上用来衡量其科技水平最重要的标志之一。超级计算机一直以来应用于工业,科研,国防中最尖端的一些领域。在所有超级计算机的研制者中,西摩·克雷(Seymour Cray)被誉为是无可非议的“超级计算机之父”。

1925年克雷出身于美国的一个工程师家庭,他从小就喜爱电子学,中学期间更是长时间泡在电气实验室,对于摆弄各种电气设备、收音机、电动机以及各种电路乐此不疲,他长期沉迷其中,以至于极少参加各种社会活动。小时候的这些经历似乎已经预示了他将来一定会走出一条出色的技术专家道路。

中学毕业后,18岁的克雷加入部队,服役期间正值二战末期,他随着部队走南闯北,到过世界上不少的战区。二战结束后,克雷回到美国,开始在威斯康星大学上学,不久,又转到明尼苏达大学,1951年取得了该大学的电气工程学士学位,由于感到一些课程太缺乏数学内容,其后克雷又花了一年时间学习数学,1952年他拿到了数学硕士学位。就像很多人一样,拿到学位后,到底应该何去何从呢?克雷开始迷茫了。这时克雷的老师给了他一个建议说,如果我是你,我会沿着这条路走下去,一直走进工程研究协会(ERA)。克雷听从了老师的建议,从此也奠定了其一生事业的发展方向。

随后克雷加入了ERA,负责建造密码设置。当时的克雷对还对计算机一无所知,为了完成目标,他一头扎进图书馆,开始吸收各种计算机的知识。不久后,他设计出他的第一台计算机EAR 1103。但是没过多久,ERA被收购,克雷发现这家新公司与他自己的目标――研制第一流的超级计算机相差太远,最后克雷选择了离开。

1957年,克雷和其它几位ERA的同事辞职后,创办了CDC。在克雷刚开始CDC 1604的设计时,电子工业中最重要的创新――晶体管问世了,也正是因为晶体管刚刚出现,价格很高。面对资金短缺的问题,克雷不得不在CDC 1604的建造中使用了不少的废弃的二手晶体管。尽管如此,CDC 1604还是成为了当时最好的计算机,也是独一无二的晶体管超级计算机,不能不说,这完全是克雷一次伟大的成功。随着CDC 1604的商业成功,克雷的声望与日俱增,然而对克雷而言,这也许并不是一件好事,过多的行政事务与社会活动使他不能专心于他的目标。于是克雷和公司达成协议,在他老家威斯康星的丛林中建立一个实验室,在此后的整整4年中,克雷谢绝一切社交往来,潜心于超级计算机的研究,为此别人送他一个“丛林隐士”的外号。他的隐居没有白费,1963年CDC 6600的推出,使得CDC公司成为了市场上真正的主导者,再到后来CDC 7600的推后,这台每秒运行1000万次的机器被公认是当时第一台真正意义上的超级计算机,克雷也成了举世闻名的超级计算机专家,CDC公司从此开始独霸整个超级计算机市场。

 

闲话操作系统(七)

CDC在当时实在是太成功了,这也导致了其将目光转移到了计算机的商业应用,不再重视超级计算机的研制。这使得坚持自己信念的克雷第二次的选择了离开。1972年,克雷自立门户,创立了克雷研究公司,公司的宗旨是只生产超级计算机。此后的十余年中,克雷先后创造了CRAY-1,CRAY-2等机型,他亲手设计了Cray机型的全部硬件与操作系统,其中的作业系统更是他用机器码编写完成。在CRAY-1,他第一次采用了集成电路来制造,速度达到了每秒钟2.4亿次,是当时市场上其它机型的40多倍速,而价格却相差无几,这使得CRAY-1取得了空前的成功,其后推出的CRAY-2更是比CRAY-1功能强大了4~6倍,运行速度达到了每秒12亿次的浮点运算,很多以前需要几年运算才能完成的工作在CRAY-2上只需要1秒钟。到了1984年时,克雷公司占据了超级计算机市场70%的份额。

但好景不长,到了20世纪80年代后期,PC的发展如日中天,大型机和超级计算机都受到了较大的冲击,最终CRAY-3在商业市场上惨淡收场。此时的克雷再一次与公司的意见出现分歧,1989年他退出了自己一手创办的克雷研究公司,另行成立了克雷计算机公司,全力研究CRAY-4,但是这个设计目标为每秒1000亿次的机型最终没有完成,1995年克雷计算机公司被迫宣布破产。

面对事业的几次大起大落,克雷一直没有放弃过,到1996年,70余岁的克雷再一次创办了SRC公司,希望再一次能为世界创造出奇迹,可惜天不作美,厄运突然降临,1996年9月,一场意外的交通事故让克雷永远的停止了呼吸,享年71岁。

VAX是一种32位的小型机,因为它惊人的寻址能力(达4GB,尽管由于成本关系,大多数VAX机器也只配备了1M内存),DEC为它设计了革命性的换页技术,的确让Unix有点赶不上趟,但这项让DEC引以为傲的技术优势并没有保持多久,仅仅一年之后,一个叫做Bill Joy的来自Berkeley(加州大学伯克利分校,University of California at Berkeley)的学生就在Unix上实现了这一技术。

Berkeley是一所很牛的大学,做为一所州立大学,它在很多领域都能和那些财大气粗的私立学校相抗衡,它不仅拥有数以十计的诺奖得主,而且还是许多社会潮流的源头,比如嬉皮文化、反越战运动等。在九十年代末的一次美国大学评比中,它的不少专业都名列前茅,比如文学、新闻等,当然,更值得说的是,它的电脑和电子工程技术专业名列全美第一,甚至把更鼎鼎大名的MIT、Stanford都甩到了后面。Berkeley与Bell Labs似乎关系不错,早在Thompson发表那篇宣言般的论文之前,就搞了一份Unix来用,还专门为此买了一台PDP-11/45,比较丢人的是,他们鼓捣了几天也没把Unix装上去,最后还得劳动Thompson亲自出马,呵呵。其实原因是出在Unix自身,因为他们买的那台PDP太高级,竟然配备了双硬盘,Unix那时还不支持。

其实早在此之前,Joy就已经致力于Unix的研发。在1997年年初,Joy就编写并发布了一个以BSD(Berkeley Software Distribution)命名的Unix版本(有个传说,说最初Joy用三天时间就写成了一个简陋但可用的Unix,忍不住怀疑搞操作系统的都是一伙超人~~~~:),BSD后来影响如此之大,足可与AT&T的原版相提并论。在第一版的BSD中,Joy就搞出了些新意思,他写了Unix中的第一个Pascal编译器(Pascal由瑞士的Niklaus Wirth教授于1970年发明,是一种影响深远的语言,许多现代语言,例如Java都受过它的影响,尤其以应用于教学著称,当然也应用于许多实际的项目,著名的如Delphi,它甚至被用来写操作系统,Apple早期的MAC系统就是用他们自己的特殊版本的Pascal写的),以及Unix中的第一个全屏编辑器VI(到现在仍是Unix中最常用的程序之一,虽然编辑器出了无以数计,但能与VI相提并论的,大概也只有Emacs了,这又关涉到另一个大牛人,先按下不表:),另外,他还写了一个重要的C语言函

 

闲话操作系统(八)

一讲到OS,就要贬低一下Windows,显得自已多有水平似的,靠,你是谁,你到底懂多少,你写过多少行代码?!有没有经过大脑想一想,Windows难道不是优秀的OS吗?象OS这么复杂、牵涉又这么广的软件,是不可能讨好所有人的,UNIX/LINUX也一样有很多人不喜欢,比如网上就有一篇流传很广的《Unix痛恨者手册》~~~~我的态度只是叙述。

WINDOWS的来历与UNIX相差太大,不好放在同一水平线上比较。它是作为一个纯粹的商业项目来运作,为了保证商业上的竞争优势,在技术上作了很多妥协,臃肿丑陋云云也不是我说的,很多微软的工程师都对WINDOWS表示过不满,实际上,9X的核心微软自己也放弃了,那个微软花了不少力气修修补补的WINDOWS ME可能是操作系统历史上最短命的一款产品。

NT核心当然要强得多,它继承了不少VMS、OS2乃至UNIX的技术元素,与9X不可同日而语,在衡量操作系统的几个重要指标上,如安全等级、运行时间等也可以与UNIX家族相提并论,为了保证兼容性,臃肿恐怕还是有一点,丑陋与否就见仁见智了。

PERL是一种实用主义的语言,Larry Wall本人也承认它不够优雅,所以那本著名的《PERL编程语言》,他选了一只骆驼作封面,意为丑陋,但实用。  VAX是一种32位的小型机,因为它惊人的寻址能力(达4GB,尽管由于成本关系,大多数VAX机器也只配备了1M内存),DEC为它设计了革命性的换页技术,的确让Unix有点赶不上趟,但这项让DEC引以为傲的优势并没有保持多久,仅仅一年之后,一个叫做Bill Joy的来自Berkeley(加州大学伯克利分校,University of California at Berkeley)的学生就在Unix上实现了这一技术。

Berkeley是一所很牛的大学,做为一所州立大学,它在很多领域都能和那些财大气粗的私立学校相抗衡,它不仅拥有数以十计的诺奖得主,而且还是许多社会潮流的源头,比如嬉皮文化、反越战运动等。在九十年代末的一次美国大学评比中,它的不少专业都名列前茅,比如文学、新闻等,当然,更值得说的是,它的电脑和电子工程技术专业名列全美第一,甚至把更鼎鼎大名的MIT、Stanford都甩到了后面。Berkeley与Bell Labs似乎关系不错,早在Thompson发表那篇宣言般的论文之前,就搞了一份Unix来用,还专门为此买了一台PDP-11/45,比较丢人的是,他们鼓捣了几天也没把Unix装上去,最后还得劳动Thompson亲自出马,呵呵(Thompson后来还曾在Berkeley教过一段时间的操作系统课程)。其实原因是出在Unix自身,因为他们买的那台PDP太高级,竟然配备了双硬盘,Unix那时还不支持。

其实早在此之前,Joy就已经致力于Unix的研发。在1977年年初,Joy就编写并发布了一个以BSD(Berkeley Software Distribution)命名的Unix版本(Joy当时的身份是发行组的秘书,据传说,他用三天时间就写成了一个简陋但可用的Unix,忍不住怀疑搞操作系统的都是一伙超人~~~~:),BSD后来影响如此之大,足可与AT&T的原版相提并论。

在第一版的BSD(1BSD)中,Joy就搞出了些新意思。他重写了一个功能增强的Shell——csh(Shell是UNIX的命令解释器,类似于DOS的Command.com,不过UNIX能支持多个Shell),并编写了Unix中的第一个Pascal解释器(Pascal由瑞士的Niklaus Wirth教授于1970年发明,是一种影响深远的语言,许多现代语言,例如Java都受过它的影响,尤其以应用于教学著称,当然也应用于许多实际的项目,著名的如Delphi,它也曾用来写操作系统,Apple早期的MAC系统就是用他们自己的一种特殊版本的Pascal写的),以及一个叫做ex的编辑器。在第二版中,他又写了一个极出色的全屏编辑器VI(到现在仍是Unix中最常用的程序之一,虽然后来编辑器出了无数,但能与VI相提并论的,大概也只有Emacs了——关涉到另一个大牛人,先按下不表:),以及一个重要的C语言函数库termcap(也流行了好多年)。

 

闲话操作系统(九)

早期的BSD并不全是Berkeley搞出来的,里面含有大量属于AT&T的代码,以及一些其它大学贡献的代码。这时的AT&T由于不能用UNIX赚钱,所以态度很不明朗,对于教育及科研机构的政策很宽松,只收取象征性的费用,提供源码,并且没什么使用限制(很高明的推广策略,事实证明成效斐然,堪与微软对盗版暧昧的纵容相比),对于企业用户的收费就很高(一份带源码的拷贝要2万美元,装多台机器的话还得另加,比起BSD来这还算便宜,一份源码版的BSD要4万),而且限制多多。但也不能说它把UNIX商品化, AT&T没有自己的UNIX开发计划,而且既不作广告推销,也不提供技术支持、售后服务,对产品品质也不作任何保证(如果出现什么BUG,你也得自己认了~~),至于没有试用期,一手交钱一手交货那就不用提了,跩到这个份上,也实在不象做生意的样子:)。

但Bell Labs内部还是成立了几个小组(类似学校里的兴趣小组,当然也可能怀有商业用心:),承担了一部分UNIX的技术支持工作(非官方),并且进行进一步地开发。Thompson和Ritchie他们的小组就叫“Research”,他们主要搞研发(并不限于UNIX),对技术支持没多大兴趣,挑大梁的是另外两个,一个叫PWB(Programmer's Workbench,他们对UNIX做了不少改进,并且发布了一个自己的版本PWB/UNIX),一个叫USG(UNIXSupport Group)。糟糕的是,这几个小组互相看不顺眼(文无第一,武无第二,这也是没办法的事:),对UNIX的理解也不尽相同,乃至各自散发出去的的版本都不是很兼容,UNIX复杂到让人头大的谱系这时就已开了滥觞。

在这种状况下,UNIX尽管在教育科研领域声誉日隆、炙手可热,但对计算机产业的影响仍然有限,毕竟它还只是一种非标准化、非商业运作的技术,只能拿来用,没法靠它赚钱。后来AT&T的政策松动了一些,在1978年前后,才开始出现商业公司提供UNIX的技术服务。1980年,AT&T发布了UNIX的distribution binary许可证(可分发二进制版),这下别的公司终于可以用UNIX来卖钱了,第一家买下这种许可证的公司是Onyx Systems,值得一提的是,它的产品是微机(比较另类的一种,采用Z80000的CPU),UNIX与微机的渊源可谓由来久矣。

差不多与此同时,有公司开始开发UNIX的克隆版——就是全盘复制UNIX的功能,可以兼容UNIX的程序,但代码完全重写。第一个版本是Whitesmiths公司推出的IDRIS(它雇了几个前AT&T的程序员,还曾经推出第一个商业C语言编译器,),开始为了避免版权纠纷,Whitesmiths有意在库名称及参数顺序等地方作了些小改动,后来AT&T高姿态地宣布不追究这些细节,于是开发与UNIX完全兼容的系统成为可能,很快很多公司(包括几乎所有的业内大腕)就开始蜂涌而上了:)。顺便说一下,上世纪末的时候,有一家澳大利亚公司曾开发出一个兼容Windwos的操作系统,但因为版权关系,没来得及推广就夭折了。(举几个开发过UNIX克隆版本的公司名字,有IBM(名字叫AIX,1986年发布),HP(HP-UX,1982年),SGI(IRIX,1987年),Microsoft(XENIX,1980年),SUN(Solaris,1985年),Apple(MacOS X,2001年)~~~~其中有一些主要源自BSD的版本,如SUN和Apple,但追根究底,仍是来自那个出于Bell Labs的天才发明。Bell Labs的一位高层人物后来曾说,UNIX和晶体管是Bell Labs最重要的两项成就。如此评价,Thompson和Ritchie应该可以得意地笑了:)。

AT&T于1983年发布了System V(简称SVR1,意为System V的第一版,在Bell Labs原版的基础上吸收了一些来自其它版本的技术),此后便一直沿用这一名称。直到1993年AT&T将UNIX卖给Novell之后(连同拥有UNIX产权的子公司USL,Unix System Laboratories),Novell仍使用了一段时间,最后一个System V版本是Novell于1993年12月推出的SVR4.2MP(MP是“多处理器”的意思)。而最先的那个版本(以Version x命名)Bell Labs仍继续发展了一段时间,直至1990年推出的Version 10。但SV系列推出后,这一系列影响就小了,大多数UNIX的变种都是源自SV系列和BSD系列,而SVR4本身就吸收了BSD系列的一些东西(主要是TCP/IP协议栈)。

UNIX技术虽然广受欢迎,但这一商标本身似乎并未创造很大的价值,AT&T大概是因为受条约限制,据说在它身上只赚了几亿美元,而Novell也没能很好地利用它,Novell后来将自己的Netware与SVR4相结合,推出了Unixware,随后就将UNIX的商标权卖给了X/Open Company。到了1995年,干脆把Unixware也卖给了SCO(Santa Cruz Operation,这家公司好象不太厚道,前两年因为Novell转向发展Linux,SCO以不太站得住脚的原因起诉Novell侵权,同时还告了IBM,因为诉讼对Linux非常不利,激起公愤,我记得当时《电脑报》以很少见的激烈言辞在头版予以报道)。

X/Open Company在1996年与OSF (Open Softare Foundation)合并,成立了The Open Group。这个非赢利组织到目前为止拥有着UNIX的商标权,实际上,经过这么一番复杂的变迁,UNIX这一名称似乎已经谈不上有多大的商业价值了,更多的是一种标准和象征。The Open Group负责发布和维护Single Unix Specification(UNIX规范),后来ISO(国际标准化组织)发布的UNIX标准主要就是照这个来的。关于UNIX还有一个重要的标准,就是由IEEE(电气和电子工程师协会)发布的POSIX(Portable Operating Systems Interfaces for Computer Environment,Linux最初就是照着这个葫芦画瓢来实现与UNIX的兼容的:)  Uinx版本演变和版权纠份很复杂,众说纷纭,搞得人头大,但不说又显得介绍不完整,尽量简短的写一点吧~~~。

 

闲话操作系统(十)

关于那种操作系统好之类的争论,我觉得在细节上讨论一下,可能比较有意义,笼统的说谁好谁不好,意义不大,各自的来源、应用范围、目标、乃至指导思想(或者肉麻一点,叫哲学:)都不相同,不好拿来比。就好比宠物吧,你说是狗好还是猫好?  有关AT&T的叙述告一段落,再说两句Thompson和Ritchie,与这两位牛人告别:)。就象顶尖的物理学家只对大问题感兴趣一样(一般是在证明一种理论后就转向研究其它,那些细枝末节的问题就交给那些实验物理学家了),在发明UNIX之后,他们并没有在这上面花费太多功夫,除了做一些本职工作的研究之外(例如IP电话),他们还继续对操作系统进行探索。由于UNIX的核心设计完成的如此之早,Thompson他们虽然天纵英才,却也没能料到计算机的发展如此日新月异,UNIX最初是作为一个基于单机的分时系统来设计的,这显然不符合当今潮流,虽然仗着它高效、稳固以及灵活的可扩充性设计,在今天的网络时代仍挑着大梁,但在新兴应用层出不穷的情形下不时表现出的核心技术的滞后让Thompson他们颇为不爽,于是他们决心搞一个新玩意。

在80年代后期,Thompson和Ritchie开始开发Plan9(1995年推出)。这个看上去与UNIX颇为相似、仍旧以C语言编写的操作系统是全新的,它面向网络和分布式计算,在一定程度上,它提出的概念有点类似上世纪末Oracel和SUN他们提出的NC(NetWork Computer),或者叫“瘦客户端”,核心理念就是把网络里的运算能力集中起来,客户机则用不着太快。在Plan9系统的网络里,有一个“CPU服务器” ,它来处理大多数的运算请求,然后将结果返回到各客户端。这一构想很早就有人提出,所以Thompson他们也好,Oracel他们也好都不算是发明创造,在今天,这种应用也很普遍(比如Google,海量信息的搜索和查询请求的处理就是在服务器端完成的,大多数网络开发技术都是基于服务器端),但在系统级的架构上实现这一理念,Plan9首开先河。而且令人兴奋的是,Plan9顺应了开源软件的大潮,大家可以去Bell Labs或者Vita Nuova(经营Plan9和Inferno的公司)的网站上下载到它附有源码的版本。

后来,Thompson和Ritchie还主持编写了一个叫做Inferno的系统(1996年推出),这个系统基于一种叫做Limbo的语言(这个主要是Sean Dorward设计的,Thompson曾特意声明,大家别搞错了,呵呵:),在概念上与JAVA比较类似,它有一个通过Limbo语言接口的交互层,即可以做为一个单独的操作系统安装,也可以作为一个应用程序在别的操作系统中运行——就象JAVA虚拟机(SUN也曾做过纯JAVA的操作系统,不过好象效率低下,没能推广开),Inferno比JAVA推出的略晚一些,但考虑到研发的时间因素,分不清谁先谁后,不过Thompson说Limbo要比JAVA清爽,当然这只是一面之辞:)。

除了计算机之外,Thompson和Ritchie的爱好就不大相同了。Ritchie喜欢古典音乐,但并不发烧,通常只在收音机里听听,Thompson喜欢流行音乐,而且非常发烧,他收集了几万首上过排行榜的流行歌曲——以一种Bell Labs发明的叫做PAC的压缩格式,音质远超MP3,而且他透露大多是“非法”取得的(相信不少同志有过类似行为:)。Ritchie喜欢旅行,规规矩矩的那种,比较出格的也就是开开大卡车,Thompson就比较猛,他喜欢开飞机,而且水平不错,在前苏联时代,曾经开着飞机过去跟他们的米格-29比试了一番。现在Thompson己经退休,当上了飞机教练,Ritchie则还在Bell Labs工作,当上了领导,负责系统软件研发部门,主要工作不再是写代码,改成了开支票(按咱们时下的流行理论,这也算是程序员修成了正果,呵呵)。Ritchie曾经与Brian W.Kernighan合写了《The C Programming Language》,是计算机科学的经典名著(单就发行量似乎不如谭浩强那本,但影响不可同日而语),世界上最著名的程序——“Hello,World.”就是在这本书里首次亮相:)。Ritchie低调而自负,自称没有偶像,唯独对Thompson赞赏有加,他拒不承认对UNIX的贡献与Thompson一样多,并声称Thompson的编程水平自己望尘莫及。而Thompson似乎是个乐天派,他自称做过的几乎所有事情都是出于个人爱好——我真希望自己也能说出同样的话来。

1983年,Thompson和Ritchie荣获图灵奖,首开以软件工程师而不是计算机科学家的身份获奖的先例,并促使图灵奖开设了一个新奖项——软件系统奖;199年,他们俩又获得了“全美技术勋章”,作为程序员,他们获得的荣誉可算是登峰造极了。但Thompson对当今计算机业的看法却不太令人鼓舞,他说计算机业已经进入了中世纪,不再那么令人兴奋,他建议自己的儿子选择生物工程,而不是计算机,顺便说一句,Thompson曾经细读过Linux的源码,对这个新一代的传奇评价不高,进而对整个计算机业的技术发展似乎都比较失望。比起二、三十年前,现如今的IT业的确商业味更浓,而革命性的创新鲜见,如果真如Thompson所言,如今是处于计算机业的“中世纪”的话,真希望能早点等到“文艺复兴”的到来:)。

转过头再来说BSD。

当时搞UNIX研发的并非只有Berkeley一家,只因Berkeley出了Bill Joy这么个大牛人,一下子把别人都压下去了,到第三版(就是可以完美支持VAX机的那一版)推出后,风头之健,更是盖过了Bell Labs,成为UNIX技术发展的中心,因为这样的优势地位,不久之后,一个巨大的机遇找上门来。

1979年,DARPA(Defens Advanced Research Projects Agency,美国国防部高级研究计划局)开始着手一项计划,全面更新他们的ARPAnet(一个用于连接他们散落在美国各地研究中心的计算机的网络,Internet的前身)。早期运行ARPAnet的都是些PDP-10,现在已是风烛残年,该退休了,DARPA准备换上新型的VAX机来接班,加上前两年开发的TCP/IP协议(Transimission Control Protocol/Internet protocol)也得借这次机会登台亮相,这将是一次脱胎换骨的大换血。DARPA首先想到的是找DEC,毕竟VAX就是他们的产品,但他们需要对操作系统进行大幅度的修改,想到DEC对于自家VMS的保守态度,上门搞不好要碰个大钉子,自己动手吧,又没下嘴的地方——正犹豫间,BSD的出现让他们眼前一亮——完全支持VAX,可获得源码,可定制,可移植,简直就是个度身定做的系统!

于是他们找上了Berkeley。Berkeley当然是有见识的,这么有意义的活计上哪去找,共襄盛举那是求之不得啊,于是在1980年两家就签订了一个合同,由DARPA资助Berkeley发展UNIX,以满足DARPA的需要。Berkeley为此专门成立了一个小组叫做CSRG(Computer System Research Group),由Bob Fabry教授负责(就是将UNIX引入Berkeley的那位),Fabry当然很想Joy参加进来,但当时Joy刚通过Ph.D.的考试,为其学业着想,Fabry也不好意思去找他,但没多久Joy就主动找上门来了(一点不奇怪,他不参加倒真奇了怪了:)。

 

闲话操作系统(十一)

且说 DARPA的一个主要要求就是要将TCP/IP协议集成到UNIX中,他们此前就找了一家叫BBN的公司写好了协议栈,CSRG就安排Joy来做集成工作。没想到的是,没过几天,Joy就完成了——这没什么稀奇,稀奇的是,他根本没用BBN写的协议栈,他居然自己重写了一个,原因竟是,他嫌BBN的那个写得太烂!要知道BBN的那玩意可是一项巨额合同的成果,BBN和DARPA这下觉得太没面子了,肯定有内情,就开会研究,请Joy参加。且说Joy穿着件T恤,蓬头垢面的就进了会议室,满坐西装革履,看着这小子不觉有点发呆,回过神来就问他,你是怎么写出来的(估计还存着念头,以为他以前做过相关研究什么的)?没想到回答简直让他们喷血,Joy说,这个嘛,很简单,你读协议,然后编码,就行了。:)

最早集成Joy所写的TCP/IP模块的BSD版本是4.1a,跟3BSD之间隔了两个版本,4.0和4.1。这两个版本的进步不算大,4.0版主要是加进去一个Lisp系统(Lisp是一种资格极老的语言,由MIT的John McCarthy教授于1958年发明,仅比史上最早的高级语言——1957年由IBM开发的Fortran——晚了1年而已,这种设计理念奇异的语言非常与众不同,它对程序与数据不加区别,对其缺乏了解的人看到它浑然一体、遍布密密麻麻括号的源程序肯定会一头雾水,但它有着强大的表达能力,尤其适合符号和文字处理,是AI(Artificial Intelligence,人工智能)领域的首选语言——目前可能是它的一个变种Scheme用得更多些,著名的AutoCAD自带的脚本语言AutoLisp就是基于它,还有著名的Emacs也是Lisp写的,还附带一个完整Lisp版本——Emacs Lisp),以及一个增强的邮件处理系统,这个版本的生存期只有几个月,因为它存在一些严重隐患,大家抱怨颇多,于是CSRG很快就推出了4.1版,这个版本主要是对4.0版做了些修修补补,此外大一点的改动就是增加了自动配置代码功能。

本来按Berkeley的命名规则,4.0版过后就应该是5.0版,但这时AT&T有意见了,因为他们自己推出的UNIX就叫System V,两个5容易混淆。BSD本来就是从AT&T那儿发展来的,人家一直都很宽容,况且到当时为止,AT&T的代码都还没替换干净,吃人家的嘴短,当然不好争什么,于是Berkeley决定,4字头就不往上升了,以后的版本只升小数点以后的数字(有点致敬的意思,好比芝加哥公牛队在乔丹退役后就不再使用23号球衣:)。

而4.1a这个版本相当于现在软件的α版(内部测试版),Joy不仅为它集成了TCP/IP,还增加了多网络协议的支持能力,多个网络协议可以同时使用,这在以后成为操作系统的设计标准。因为4.0版的失败,所以CSRG决定发布新版本要慎重一点,所以先自己试用,但与现在的情形一样,这个版本还是流传了出去,并勾起了大家的兴致,不少FANS开始对4.2版充满期待。

但4.2版的诞生颇为艰难,自1982年4月4.1a版发布开始,又过了1年零4个月,中间经历了4.1b和4.1c两个非正式版本,经历了Bob Fabry(还记得他吗?CSRG的BOSS,UNIX由他引入Berkeley,他的离去很大程度上是因为不堪重负——这种高强度的开发工作是很折磨人的)和Bill Joy(他于1982年以唯一一名技术人员的身份与Scott McNealy等4名Stanford的学生一起创办了SUN公司,如你所知,这是当今最著名的生产UNIX机器的公司,但他关于BSD的工作仍持续了好几年)的离去,才于1983年8月正式发布。

这一版本非常成功(尽管问题也不少,主要是因为一堆新增的功能还没有很好的优化),发行量超过以往版本的总和,并且打败了AT&T的System V,成为广大UNIX厂商制作移植版本的首选,著名的如SunOS 4就是基于它,AT&T在SV的后续开发中也集成了4.2版的许多精华(抄袭是最好的赞美,谁说的来着:)。事实上,这一版本影响如此深远,尤其是其网络模块,此后几乎所有重要的操作系统都从中借鉴,更有一些是直接拿过来用。

除了骄人的网络功能,4.2版还有许多其它方面的重大进步,如:新的、更强大的文件系统以及磁盘配额机制,新的信号机制,以及独立出来的输入/输出系统,还有全新的文档——这些都是大动作,而且就这还是迫于发布压力进行了妥协,不然还准备对交互通讯机制和虚拟内存管理模块开刀:)。

所有人都表示赞赏——除了BBN(就是那个写了最初的TCP/IP协议栈并被Joy给否了的公司)。他们对Joy的那一箭之仇一直耿耿于怀,于是不停地向DARPA抱怨,说自己的理念是如何先进,设计又是如何优秀,BSD如果采用了我们的模块一定会跑得更欢云云~~~~,DARPA也不禁动了心,就责成CSRG重新评估BBN的代码,CSRG的高手一看,也确实有可取之处啊,但要说把自己的代码给换掉,也未见得可行,毕竟自己的代码此时已是经过考验的,于是就提出一个折衷方案,把两套代码都包含进去,由用户选择。但这下DARPA又不同意了,这可是网络模块,搞两个政府,自立山头,不是明摆着添乱吗?坚决不行!公说公有理,婆说婆有理,这也不是办法,于是干脆,DARPA请了个第三方的专家——Ballistics实验室Mike Muus来做评估。Muus忙乎了一个月之后,结果出来了,Joy的代码通过了所有测试,而BBN的呢,在高负荷的时候时不时会死给你  4.3版过了三年才发布(1986年6月),尽管间隔时间如此之长,但这一版远没有4.2版那么富于革命性,它主要是对4.2版做了些修补和优化,虽然反响不错,但也仅此而已,对业界的影响远不能与4.2版相提并论。比较值得一提的是,在发布后的晚些时候,CSRG的两个牛人,叫做Casey Leedom和Keith Bostic的,对这一版做了一次匪夷所思的移植。

 

闲话操作系统(十二)

从第3版开始,BSD就是基于VAX机在搞开发,VAX32位机,通常配有 1M内存(两个内存块,每块面积有4分之1平方米,还可以配更大,寻址能力4GB,即232次方)及高速的磁盘(容量通常为5MB10MB,很惊人的说~~~~),所以BSD可以实现诸如内存换页以及新文件系统等技术革新,而LeedomBostic现在要做的,是将4.3版移植到PDP-11上。PDP-11我们应该都比较熟悉了,UNIX的第一个正式版本就是在它上面完成的,它是DEC经典的16位机,作为那个年代流传最广的廉价计算机之一,可以理解,它拥有为数众多的FANS。但无可否认,到了1986年,它早已落后了(事实上这时连VAX机都已年满8岁,颇显老态,1年前连微处理器都发展到了32位的Intel 386),以它可怜的64K的内存寻址能力(即216次方,这个限制对促进UNIX短小精悍的应用程序设计风格意义重大,不得不说,硬件的简陋往往能促生优秀的软件设计,这一点在Palm系统上也得到了证明)、512K的磁盘要跑4.3BSD简直是说梦话,CSRG里的大多数人虽然都很怀疑,但还是支持他们两个试试看(这么好玩的事换我也会支持,想想看,谁要是能把Windows NT移植到286上面~~~~,呵呵)。让人大跌眼镜的是,这两个牛人不仅移植成功,居然还跑得很好——UNIX的可移植性真不是吹的:)。这个跑在PDP-11上的新系统被命名为2.11BSD2BSD原本是最后一个在PDP-11上开发的版本),具备和4.3BSD差不多相同的功能,很受PDP-11用户的欢迎,一直陪伴许多PDP-11工作到寿终正寝,据说直到今天,在世界上的某些角落,偶尔还可以找到跑着2.11BSDPDP-11PDP-11起码也有30多岁了,不管是作为一台计算机还是作为一个电子设备,这样的高寿都很值得骄傲的说,而2.11BSD作为一个软件,20多年的寿命倒不算太难得,一些行业用户的程序往往非常古老,比如一些银行系统里大型机上的Cobol代码,有三四十年历史也不稀奇)。  4.4版的BSD19946月发布,这一BSD的最终版本距离4.3版足有八年之久(Vista有望一比,巧的是,微软也吹风说Vista可能是传统Windows的收关之作,集大成者想来是得多些时间酝酿),虽然间隔如此之久,但4.4版也说不上有太大的技术进步(大概是4.2版用力过猛,加上别的问题困扰,CSRG一直没缓过劲来),但它解决了一个很关键的非技术问题,可说是意义非凡。这八年中曲折甚多,值得一说。

截止1986年,4.3BSD除了一个BTPDP-11移植版外,并没有向其它机器移植,一定程度上是因为系统中有许多针对 VAX特有硬件的设计,移植并不容易,而此时VAX已日薄西山,开拓新疆域迫在眉睫,CSRG想一劳永逸地解决这个问题,于是由Joy操刀,将BSD的内核分离成两块,一块依赖于机器,一块则独立于机器,这样可以大大简化移植工作的难度。这项工作于1988年完成,CSRG发布了一个叫作4.3BSD-TahoeTahoe是加州的一个高山湖,旅游胜地)的版本,于是许多移植工程就基于这一版展开了。

这时另一个问题又暴露出来,因为BSD中包含有AT&T的代码,如果想获得BSD代码的使用权,你还得向AT&T购买一份源代码许可证,随着BSD越来越受欢迎,AT&T的价码也是越来越高(最初只要一万多美元,后来涨到好几万),许多人就开始抱怨,尤其是那些计算机公司。他们多半看中的是BSD中的网络模块,而这一部份根本不关AT&T的事(实际上AT&T自己的SVR都是用的BSD的网络代码),现在却非得去出这一份冤枉钱,实在是太亏了。于是许多人都建议CSRGAT&T的代码去掉,把网络模块单独拿出来卖,或者干脆搞一个完全属于自己的版本(著名Hacker,自由软件的倡导者Richard Stallman早在1987年就向CSRG提出过这种建议,当然他是站在更高的立场,是为了让UNIX摆脱商业公司的束缚)。

完全去除AT&T的代码的代码是一项大工程,所以CSRG先拿出了一个叫做Networking Release 1的东东。这不是一个完整的系统,而仅仅是一个网络模块,该版本于1989年发布,同时发布的,还有CSRG对这一版本拟定的一个许可协议。也许是受了StallmanGPLGeneral Public License)的影响,这个协议鼓励修改源码和再次发布,而且它非常宽松,比GPL宽松得多,它允许再次发布时只发布二进制版本,而不附带源码(这在GPL中是不允许的),只需附带完整的版权声明即可(“完整”的意思是,要把该软件的渊源交待清楚,包括它来自Berkeley,以及中间还经过谁谁的修改——怎么觉得有点象纪念碑,呵呵)。后来在Networking Release 2发布时仍使用了这一协议,到4.4版发布时,这一协议演变为BSD License,后来FreeBSD又将其修改为FreeBSD License,基本上也都大同小异(因为许可太宽松,所以很多人都把FreeBSD拿过来,修改一番再拿去卖,比如前些时闹的沸沸扬扬的所谓国产操作系统“麒麟”,只是国防科技大学他们(还有其他几个公司,不一一点名)的做法未免有失厚道,不遵守版权协议也就罢了,还企图掠人之美、瞒天过海)。

 

闲话操作系统(十三)

这样宽松的许可协议,等于认可一个人买下后,就可以无限制的Copy给其他人,事实上也正是这样,刚一发布,就有一些著名的FTP站点提供开始匿

25
2025
12

闲话操作系统1(转载)

闲话操作系统(一)

关于操作系统的定义,我没有找到一个权威的解释,基本上可以说,它是一个程序,一个介于计算机硬件和计算机用户/开发者之间的程序,用户通过它来操作计算机,开发者用它提供的接口来编写程序。操作系统大概可算是最重要(也可算是最复杂)的程序,基本上,它决定了我们能用电脑干什么和怎样用电脑,软件当然是千变万化,不断发展,但无论是在那一种操作系统下跑的软件,必然受限于操作系统所提供的功能,换句话说,它只能在操作系统划下的圈子里翻筋斗。

第一代计算机是电子管(vacuum tube)计算机(大约1945~1959)是没有操作系统的,比如1945年问世的第一台电脑ENIAC,那玩意每秒只能做5000次加减法,连现在地摊上最廉价的计算器都不如,你给它写个操作系统,它也跑不动啊。所以那时操作电脑都是赤祼祼地跟主机打交道,要它干活,得一步步地按开关来告诉它(键盘是没有的,因为用的是机器语言,开关就够用了,后来出现了汇编语言,才出现打孔带这种输入方式),至于输出,它是靠两排小灯泡的闪烁来实现(跟眨眼睛差不多,闭着就是0,开着就是1,所以按照信息技术的理论,眉目岂止能传情,任何信息都可以通过眨眼睛来表达)。蓝色巨人——IBM(国际商用机器公司)从这时就开始涉足计算机,在这个时代,他们推出的产品是700系列。

第二代的计算机是晶体管(transistor)计算机(大约1959~1964),这个时代的计算机都是所谓的大型机,代表产品是IBM的1403机,运算能力比第一代快多了,达到了每秒几十~几百万次,这个数字看起来还不错,操作系统够简单的话,是可以跑得动的,操作系统也就是在这时候出现的(也有一种说法,说是在五十年代中期就出现了简单的操作系统,但没看到进一步的介绍,)。那时的大型机基本上是一种型号配一种操作系统,通用?没门。这时候的计算机工程师通常也是横跨硬、软件领域,非常的牛X,比如著名的CRAY巨型机,就是由Seymour Cray一手包办软硬件设计,让很多计算机FANS惊为天人,后来,苹果电脑横空出出世,Steven Wozniak也曾再现这种辉煌,这种包办一款电脑软硬件设计的壮举,搁现在,相信没人可以办到了。在文明发韧之初,类似情形比较常见,古希腊的那些大牛,亚力士多德什么的,都是学贯文理,很多领域都插上一杠子,往往还成了创始人,到了牛顿,虽然差点,文科基本没沾边(神学据说他钻研颇深,但成就如何不得而知),但在理科的好几个领域也是开宗立派、威风八面,现在的科学家大概只有高山仰止的份了。但学术的传承有好几千年,牛顿到现在也有三四百年了,而计算机的历史到今天满打满算也不过六十一年,居然就到了这份上,可见其发展之快。

那时的操作系统跟我们现在所看到的其实大相径庭,当时只是把它称作Batch System,它的功能也非常单一,仅仅是把一些常用的操作指令进行了封装以供程序调用,甚至都谈不上用户界面。

但就在这个时代,有一个特别值得一提的操作系统已经开始酝酿,就是大名鼎鼎的OS/360。

这款操作系统出自蓝色巨人——IBM(国际商用机器公司)之手,IBM在电脑史上的地位堪称泰山北斗,甚至有专家说过,“电脑的历史就是IBM的历史”。而“360系统”堪称IBM历史上最重要的项目之一。

 

闲话操作系统(二)

在1961年年底,IBM开始打算实施“360系统电子计算机计划”,据当时的估算,整个计划投资约需50亿美元(这可是在60年代初,十几年前的“曼哈顿工程”才花了20亿),这是不折不扣的大手笔,要知道,当时IBM的年营业额还不到这个数字。

之所以如此花钱,是因为这项计划要做一些以前没人做过的事,这将是一个通用的系统(360就是360度的意思,表示该系统全面的应用范围),该系列不同型号的计算机将能享用同样的设备,如磁带机、打印机等,能使用同样的软件,并且可以相互连接,一起工作,这些在今天看来理所当然的事,在当时可是闻所未闻。

该项目在硬件设计上很有创新,乃至IBM不得不自己动手设计制造芯片(因为买不到),但更大的困难却是在软件方面,要让所有的软件适用于所有的电脑(当然,仅限于360系列),这个理念让IBM的软件工程师们伤透脑筋,投入到这个项目中的软件工程师超过2000人(Windows2000也只动用了1700名),花费超过5亿美元,竟然超过了硬件研发的费用,所有这些都是创纪录的。

负责这项艰苦卓绝的开发任务的,是Frederick Brooks,当时年仅三十,他是世界上第一批获得计算机科学博士学位的人之一,有趣的是,当开发这个新型操作系统的计划提出时,Brooks本是最强硬的反对派,因为他觉得这个项目的难度骇人听闻,实在是不切实际。但当IBM的管理层拍下板来,要Brooks担当重任时,他居然慨然应允,高风亮节,实在是令人佩服。

360操作系统的开发用了5000个人年(人年就是一个人一年的工作量),由于从未有过开发这种大型软件的经验,开发组陷入了“有史以来最可怕的软件开发泥潭”,最终也没能实现当初的设想。Brooks后来根据这次开发任务的经验,写了一本《人月神话》(The Mythical Man-Month),成为软件工程领域内的经典著作(某种程度上是宣扬的一种失败论)。他本人更在99年获得了计算机领域的最高奖——“图灵奖”。

尽管软件开发工作未获全胜,但360项目还是取得了辉煌的成功,IBM在籍此在计算机行业几乎是一统天下,IBM/360更被誉为人类从原子能时代进入信息时代标志。此后IBM开发的大型机系列都保持了与360系统的兼容,直到最新的z系列,在360上写的程序仍可以不经修改的运行,“兼容”这一概念从此开始深入人心。

需要交待一下,360计划虽然是在61年开始启动,但等到完成己是1964年,它的主要部件采用了集成电路(Intergrated Circuit,IC),属于第三代计算机,它也是第三代计算机的标志产品,还有前面提到的CRAY巨型机,也属于第三代。Cray此人厉害无比,不可一世的IBM几次栽在他手上,在IBM研制360时,Cray还在CDC(控制数据公司,好象那时的计算机公司起名都很低调,象IBM、DEC都是平铺直叙,不象现在的IT公司,名字一个比一个花哨)工作,他带领的团队只花了700万美元就搞出了一台比IBM的产品快上3倍的东东,让IBM震惊不己,而他的诀窍就在于开创性地使用了并行技术(就是用多个处理器并行工作),这项技术到现在还是制造超级计算机的基础。

Cray后来离开CDC自立门户,于1972年开了家用自己名字命名的公司(这好象是西方的传统,象HP、DELL都是这么来的,Microsoft也差点就叫Alan-Gates),专搞巨型机,并练就了一门叫做“向量处理”的绝技,独步天下,在80年代,他的产品一度占到世界巨型机总数的70%(“侏罗纪公园”里的恐龙DNA就是用CRAY机来处理的,呵呵),让IBM丢尽脸面。不过CRAY公司其亡也忽焉,后来渐渐没落,公司几次易手,先后被SGI和TERA收购,巨型机老大的位子不久就被IBM夺回去了。

说了半天,也没提操作系统,有点跑题了,呵呵。其实是因为关于CRAY机的操作系统,我也一抹黑:(,只是听说它的操作系统都是由Cray博士用机器码(就是0101001......)写出来的,居然没出现什么BUG,我真是无语了~~

CDC和CRAY并非唯一斩IBM于马下的公司,在小型机领域,IBM也是一败涂地,胜利者叫做DEC(数据设备公司,成立于1957年,明明是家计算机公司,招牌上却不带计算机字样,之所以如此,是因为当时IBM在计算机领域只手遮天,不敢撄其锋芒也),创始人Ken.Olsen,是计算机历史上一个颇有悲剧色彩的人物,他能力非凡,白手起家创建了长期排名世界第二的计算机公司,在1986年被《财富》杂志评选为“全美历史上最成功的企业家”,但最终却因经营不善,被他自己一手创建的公司扫地出门(Steve.Jobs倒也有此经历,不过他卷土重来了),更因为对PC的错误估计(1977年曾说“我们没有理由认为人们会需要家用电脑”)被人们引为笑柄(其实犯这种错误的名人多了,不一一列举)。

 

闲话操作系统(三)

为了不引起IBM注意,DEC推出的第一台机器都不敢叫计算机,而是取了个暧昧的名字叫做“程序数据处理机”(PDP,呵呵,了解电脑发展史的人肯定如雷贯耳)。PDP-1于1959年推出,全晶体管构造,在当时还是电子管计算机当道的年月,可说是相当先进。相比当时的那些大块头,这台只有冰箱大的机器显得相当小巧,这台设计精良的机器让DEC发展迅速,仅仅几年功夫,DEC就从借来的七万美元起家发展到年销售额几百万美元,在六十年代初,这可是个很可观的数字。

DEC坚持走小型机的道路让一些本来只能望着昂贵的计算机兴叹的单位终于可以买上一台,它独创的分时技术也为更多的人使用计算机创造了机会,在众多的受益者当中,有一个叫Ken Thompson,在操作系统的历史上值得大书特书。

Unix可能是世界上最有影响的操作系统,它的第一版是由Ken Thompson在一台PDP-7上完成的。

Thompson当时供职于AT&T的Bell Labs(贝尔实验室,一个资格极老、极牛的科研机构,晶体管就是在这里发明的,96年AT&T被拆分后划归朗迅),Bell Labs曾经参与了一个叫做Multics(Multiplexed Information and Computing System)的研究联盟,该项目旨在建立一个多功能的“信息应用工具”,以支持多用户对大型机的交互式分时操作,但跟IBM的360计划一样,这个志向高远的项目不幸以失败告终,尽管也得到了几个不太成功的系统。Thompson参与了这个开发项目,散摊子的时候,他收获了一些灵感,还有一个自己编写的游戏(不务正业啊~~这个叫做《星际旅行》的游戏只比公认的史上第一款游戏《太空争霸战》(1962)晚了几年而已)。

Thompson首先是在GE(通用电器,没错,他们那时也造计算机)的大型机上玩,糟糕的是,在这台机器上,源自Multics项目的操作系统运行的很不尽人意,玩起游戏来,响应忽快忽慢,让Thompson很是不爽(我们当然能够理解,想想你正在魔兽中杀的过瘾,机子忽然停下来狂读硬盘是何等扫兴),于是他以开发一个新的交互式操作系统的名义,向领导要求配备一台DEC-10——另外还有一个原因,据Thompson的死党Dennis Ritchie(也是个大牛人,C语言的发明者,Unix的合作发明者)透露,在Ge上玩一次游戏的费用高达75美元(当时的机时可是很贵的),想来如此挥霍公款,Thompson心下也有点惴惴,要台机子自己瞎掰,就安全的多——但刚在Multics项目上遭遇失败的领导们断然拒绝了他的无理要求(呵呵,可怜的Thompson),最后,Thompson只搞到了一台已经废弃的PDP-7。

PDP-8是DEC的第一台采用集成电路的计算机(第三代),也就是说PDP-7还是一台晶体管计算机,这就好比,你向领导打报告要配一台酷睿2,最后却只能在仓库里翻一台286出来用,Thompson的沮丧可想而知。PDP-7的配置如何,我没查到资料,但PDP-11也只有512KB的磁盘,PDP-7想来更少得多,内存应该只几十K(别吃惊,这个数字我估计得很乐观了,几十K内存也是可以做不少事的,Gates同学写的第一个BASIC解释器可是在一台4K内存的Altair上跑,后来我在维基百科中查到PDP-7内存标配为9KB,但可以扩充到144KB),显示器当然是别想,一台电传打字机把输入输出都包了(什么?没显示器怎么玩游戏?谁告诉你是游戏一定是视频的?)。后来,Thompson在忆苦思甜的时候告诉Raymond,我那时用的机子那个惨啊,内存磁盘加一块还赶不上现在一个最便宜的手机~~


闲话操作系统(四)

要在这么烂的的机器上玩游戏,当然得下一番功夫,原有的系统肯定是不能支持了,得重头干,没说的,为了游戏。经过Multics项目的煅炼,Thompson对于写操作系统已很在行,反正机器烂,不可能搞什么复杂的名堂,什么项目计划书呀,都免了,就跟Ritchie两人合计合计,他一个人花了两天时间就搞出来一个原型,厉害吧?WindowsNT的主设计师(也是VMS的设计师)David Cutler曾有一句名言——“Who can't write an OS in a week?”,固然牛气哄哄,比起Thompson似乎还颇有不如,呵呵。

那是1969年,Thompson搞出来的这个东西就是Unix的雏形,尽管把它称作Unix还有点勉强,但已经显示出Unix的一些基本特征——简洁、高效、比当时所有的操作系统都更注重交互性、对程序员友好(它就是程序员写出来给自己用的,是当时唯一允许程序员边写代码边测试的系统),也许,还有那么一点散漫,而且,即使如此恶劣的硬件条件下,它仍然具备一个简陋的文件系统,有特殊的文件类型以支持目录和设备,甚至,可以支持多任务(想想晚它十几年问世的DOS还只能支持单任务,就知道Thompson有多牛了,当然,DOS可以用变通的方式支持多任务,但毕竟不是原生的)。当然, 还有很多Unix的特性它还不具备,比如,它的核心是用汇编写的(汇编器也是Thompson自己写的),当然不具备可移植性,并且,只支持两个用户(想来就是Thompson和Ritchie,呵呵)。

有一点值得一提,这个系统除了用汇编以外,还用到了另外一种语言,就是解释型的B语言(也是Thompson自己发明的,这家伙真是自力更生模范~~),主要用来写应用程序。B语言是Thompson在一种叫作BCPL(Basic Combined Programming Language,由剑桥大学的Matin Richards在CPL语言的基础上简化而来,CPL是在ALGOL 60语言上发展而来,至于ALGOL 60可就牛了,它被称作是“计算机科学诞生的标志”,这些语言通通源自剑桥)的语言的基础上简化改进而来(之所以叫B语言,就是把BCPL精简提炼的意思),它非常简单(不支持数据类型和结构,放在今天真难以想像),并且极亲近硬件,可以把它看作是一种稍微高级了一点的汇编语言。后来,Ritchie给B语言加上了数据类型和结构的支持,推出了一代王者——C语言(意思是“BCPL”中排在B之后,在TIOBE语言排行榜上至今在一、二名徘徊),并将Unix用C语言重写,那就是后话了。

经过一番鼓捣,Thompson的游戏终于可以在PDP-7上跑起来了,但这台机子毕竟太烂,而且还是借来的,Thompson他们一直期待着能搞台更好的机器用,在1970年,这个机会来了,Bell Labs的专利部门需要一套“文字处理系统”(他们的专利可是很多的),当时可没有现成的Word,Thompson就把这活接下来了,并名正言顺地买了一台PDP-11/20(比当初申请的DEC-10还是便宜多了)。

他们首先把Unix从PDP-7上移植了过来,汇编写的代码没什么可移植性,所以基本上就是在PDP-11上重写了一次,这种没多大创造性的工作想来做起来并不怎么愉快,给后来Thompson下定决心,用高级语言(C语言)来写操作系统增加了动力(MULTICS可能是最早用高级语言写操作系统的尝试,当时用的是PL/I,以失败告终,那时的普遍观念,操作系统是不宜用高级语言来写的)。

在PDP-7上,他们曾经写过一个叫做roff的文本格式化程序,再配上一个编辑器,一个“文字处理系统”基本上就齐活了,于是Bell Labs的专利局成了Unix的第一个商业用户,这是在1971年11月,在与系统配套的手册中,该版本被称做“First Edition”,有些史料就把这一年作为Unix的诞生之日。

顺便说一下,Unix这个名字是Thompson在Bell Labs的同事Brian Kernighan取的,在1970年,Kernighan开玩笑地把Thompson在PDP-7上的那个简陋系统称为“UNICS”,意思是“UNiplexed Informationand Computinig System”,这是相对于MULTICS来的, MULTICS是“Multiplexed Information and Computing System”的意思,后来,UNICS变成了Unix并且流传开来(这种简化应该是出自一种黑客趣味)。

 

闲话操作系统(五)

1972年Unix发布了第二版,最大的改进是添加了后来成为Unix标志特征之一的管道功能,所谓管道,就是程序之间交流数据的通道。这一设计,对鼓励简洁、小巧、灵活,而又注重通用和协作的Unix程序设计风格意义重大,与此相关的,还有过滤器这一设计,Unix下的程序大多小而精,但相互之间的协作性极好,与WINDOWS下推崇大而全的程序设计风格大异其趣,这是在系统设计之初就埋下了种子的。这一年,Unix的装机数达到10台,都是Bell Labs内部的机器。

在写第二版的时候,Thompson和Ritchie曾经试图用B语言来重写核心,但因为B语言功能太弱,最后放弃了。Ritchie因些萌生了搞一个新语言的想法,它必须强大到可以写系统级软件。于是,在对B语言进行了卓越的改进之后,一个传奇——C语言诞生了,这是在1973年,此后,这一语言包揽了绝大多数的系统级开发,在前两年泄露出来的WINODWS2000的多达几百M的源代码中,大家看到,除了极少的汇编和C++,绝大部分代码都是C语言写就,在记者问到Ritchie为什么C语言会如此受欢迎时,Ritchie很低调的回答,可能是C语言的抽象程度既能满足需要,又比较容易掌控。跟Unix一样,C语言确实是一种简洁而优美的语言,“审美”是这种殿堂级软件设计思想的核心,爱因斯坦曾经说过,描述基本物理理论的数学方程中必须有美,与软件设计倒是不谋而合(但世事难料,比如Windows,或者Perl,这些许多人认为比较臃肿、丑陋的设计也都活得有滋有味,当然,能挺多久难说)。顺便说一下,虽然C语言如此威猛,但身为C语言之父的Ritchie最爱的语言却并不是它,而是一种我听都没听说过的Alef。

有了C语言这柄利剑,Thompson和Ritchie很快就重写了Unix,在MULTICS项目失败以后,用高级语言写操作系统的梦想终于实现了,好多年后,Ritchie骄傲的写到,很肯定,Unix的成功很大程度上源自其以高级语言作为表述方式所带来的可读性、可改性和可移植性。看着这个基本上达到了预想的作品,Thompson和Ritchie不免有些沾沾自喜,觉得可以拿出去“炫”一把了,于是在1974年,他们在《美国计算机通信》(Communications of the ACM)上发表了一篇文章,第一次对外面的世界展示了Unix的存在。

且说这个新版的Unix搞出来以后,Bell Labs里的很多科学家都挺感兴趣,经常跑到那台PDP-11上去鼓捣一番,但很快他们就发现,自己设置的帐户Thompson总能轻易地闯进去,Bell Labs里的人物岂是泛泛之辈,怎甘受此羞辱,于是就有人把源码翻了出来,经过一番分析,去掉了后门,然后重新编译,于是,整个世界清静了——且慢,正在他们沾沾自喜的时候,却发现,帐户又被Thompson破解了,这下大家彻底郁闷了,这一郁闷就是好多年,Thompson的洋洋自得就别提了。直到14年后,Thompson才突然良心发现,道出了个中巧妙,原来代码中的后门是有的,不光是系统本身,还藏了一个在C编译器中,系统本身的后门虽然被清除了,可还是用有后门的编译器来编译的啊!哈哈。

而Ritchie就厚道多了,他只是很热心地向大家推介他的C语言,并鼓励大家使用C语言中的函数调用——这真是一种先进的设计方法,何况还有Ritchie信誓旦旦地保证——C语言中的函数调用的机器开销真的很小很小,于是,人人都开始写函数,搞模块化,等到大家终于搞清楚,在PDP-11上,函数调用的机器开销竟达到50%时,已经是积习难改、欲罢不能了,至于Ritchie,当然是躲到一边偷笑去了(话说回来,这种设计思想毕竟是正确而先进的,只是在当时落后的硬件条件下,显得有些奢侈,呵呵)。

Thompson和Ritchie在Communications of the ACM上的文章发表后,引起了许多大学和实验室的关注,因为文中着重鼓吹Unix的简约设计及在低性能机器上的良好表现,大家(主要是那些用落后机器的穷单位,嘿嘿)都想见识一下。本来这是笔送上门来的生意,但AT&T有点特殊情况,因为它由来已久的垄断地位,早在1958年就被反托拉斯调查,根据那次调查达成的协议,AT&T不准进入计算机相关的商业领域(IBM少了个大对头),也就是说,AT&T不能拿Unix卖钱(交待一下,Unix虽然是Thompson他们自作主张搞出来的,但毕竟是AT&T员工的工作成果,因此AT&T享有版权),而且依据那次协议,AT&T有义务将电话(这是本行)以外的技术许可给任何提出要求的人——这条有点匪夷所思,简直是欺负人嘛:)——正是这条协议,给Unix的流传大开方便之门。于是,在仅收取工本费之后,Thompson开始将Unix的磁带和磁盘一包包的寄往世界各地(是不是有点史诗味道?:)——据说,每一包里都附了张小纸条,上书“love,ken”——真是剑胆琴心的说~~~~

寄出去的Unix是第五版,附有源代码。犹如散落的火种,这些被安装在各处管理松散的廉价计算机上(这点很重要,如果是安装在昂贵的大型机上,就没有那么多机会让人瞎鼓捣了)的操作系统,点燃了许多计算机爱好者的创造热情,他们日以继夜扑在上面,摆弄代码,添加功能,然后彼此交流,相互炫耀。不少大学都开始拿Unix作教学之用。

大家在遇到麻烦的时候,可以向Thompson他们的小组打电话 , 或者通过原始的UUCP(Unix to Unix Copy Program, Bell Labs开发的一的种在Unix机器之间通过电话线和MODEM通讯的程序)发送问题,甚至可以跑到Bell Labs去与他们当面交流。Unix许多重要的改进和发展正是由这群主要来自于各所大学的爱好者们完成的,这些成果被反馈到Bell Labs。在1979年发布的第7版Unix中包含了很多由爱好者们贡献的创意乃至代码,这是公认的第一个完整意义上的Unix。可惜由于版权问题及商业利益的影响,这种开历史先河的发展模式并没有持续多久,幸好,在好多年以后,在Internet的支持下,我们将会看到,Linux,这一Unix的变种,成功地将这一模式予以了辉煌的再现。

最早散布出去的UNIX几乎都是装在DEC的PDP机器上,在1976年前后,开始有好事者将其移植到其他种类的机器上,包括Interdata系列、IBM的Series1系列以及VM/370。这时,Thompson和Ritchie用C语言编写系统的苦心开始得到回报——即使是设计大不相同的异构机器,移植工作也进行的相当顺利(当然,是相对的),Ritchie甚至宣称,将UNIX移植到别的机器上比把一个应用程序移植到另一个操作系统中还要简单。1978年,DEC公司推出新的拳头产品VAX后,UNIX很快就被移植到上面,尽管没有支持VAX特有的换页功能(一种内存管理的技术),但仍然很快流行开来,对DEC苦心开发的专门用于VAX机器的VMS构成了重大威胁。

UNIX在初期主要是用于DEC的机器,尽管没有正规的技术支持,但仗着灵活、快捷、容易修改和扩充以及资源丰富(包括支持的硬件设备更丰富,DEC的操作系统只支持自己的系列产品)的强大优势,很快就严重影响到DEC自身的软件推广。碰上这样的飞来横祸,DEC当然是非常恼火,他们对使用UNIX而带来的硬件问题拒不提供支持,但尽管如此也不能阻挡大家对UNX的热情。而VAX/VMS乃是DEC寄予厚望的战略级产品,技术那是相当的优秀,居然甫一推出,就又遭到UNIX的追杀,也难怪老板Olsen会口出恶言,讥讽UNIX是“蛇油”(意为“骗人的万用药”)了。DEC苦撑了几年之后,终于不支,改变态度,于1982年推出了自己的UNIX变种——DEC ULTRIX,但在推广策略上,仍是以自家的VMS为主导。DEC公司的保守作风终于酿成大祸,在别的公司推出专门针对UNIX设计的机器后,DEC的江湖地位每旷愈下,在PC问世后,更是一蹶不振,后来连年亏损,1992年把Olsen赶下台也没解决问题,终于在1998年,这个曾经的传奇——一度排名世界第二的计算机公司被后起之秀COMPAQ并购,不过96亿美元的天价也算是对它价值的承认。COMPAQ后来被HP以260亿美元收购,HP后来被……HP这么大的块头,估计一时半会也没人吞得下它,呵呵。

DEC的机器曾是UNIX诞生的温床,但DEC的没落UNIX却起到了相当重要的推波助澜的作用,如果DEC当时采取拥抱UNIX的策略,也许计算机产业又是另一番格局了。当然,世事难料,这种推测也只是扯淡罢了。

"而VAX/VMS乃是DEC寄予厚望的战略级产品,技术那是相当的优秀,居然甫一推出,就又遭到UNIX的追杀"

记得刚工作的时候,大概是99年,那个时候在一个计费系统上做二次开发,记得用得就是DEC机和VMS,不过因为Compaq的并购,很快项目就停了。 


25
2025
12

转载-- Linux virtual filesystem switch I 磁盘相关概念以及知识

希望不是坑。。。。另外本文中的一些图片来自于互联网,另一些是我自己画的,本来想给出原图的引用,但后来发现同一张图出现在各种地方,原作者是谁已经找不到了,只能写“图片来自于互联网”。另外,文章只是我自己个人的理解,可能会有一些错误。 磁盘相关概念以及知识(目录表) 硬盘的物理结构 硬盘的数据接口 硬盘的电源接口 磁头以及机械臂 盘片 磁道 柱面 物理扇区 电器组件 硬盘的逻辑结构 逻辑扇区 硬盘的寻址的三种模式

25
2025
12

大数据,TB、PB、EB,你了解多少?

“大数据”作为时下最火热的IT行业的词汇,随之数据仓库、数据安全、数据分析、数据挖掘等等围绕大数量的商业价值的利用逐渐成为行业人士争相追捧的利润焦点。笔者愚钝,大数据有多大,一直没有清晰的概念,故此简单的科普研究,分享至此:  

  最小的基本单位是Byte应该没多少人不知道吧,下面先按顺序给出所有单位:Byte、KB、MB、GB、TB、PB、EB、ZB、YB、DB、NB 

  我只知道前五个,估计大多数人都知道吧,按照进率1024(2的十次方)计算:

  1Byte = 8 Bit 

  1 KB = 1,024 Bytes  

  1 MB = 1,024 KB = 1,048,576 Bytes  

  1 GB = 1,024 MB = 1,048,576 KB = 1,073,741,824 Bytes

  1 TB = 1,024 GB = 1,048,576 MB = 1,073,741,824 KB = 1,099,511,627,776 Bytes

  1 PB = 1,024 TB = 1,048,576 GB =1,125,899,906,842,624 Bytes 

  1 EB = 1,024 PB = 1,048,576 TB = 1,152,921,504,606,846,976 Bytes

  1 ZB = 1,024 EB = 1,180,591,620,717,411,303,424 Bytes

  1 YB = 1,024 ZB = 1,208,925,819,614,629,174,706,176 Bytes

  
  光看这些数字估计你没什么感觉,那现在就算点好想象的吧,下面拿NB为例

  在现阶段的TB时代,1TB的硬盘的标准重量是670g
   
  1ZB=2的60次方TB=1152921504606846976TB=1152921504606846976个1TB硬盘

  总重量约为77245740809万吨 目前运载量为56万吨的 诺克耐维斯号 巨型海轮

  也就是说 储存1NB的数据的硬盘要 诺克耐维斯号 最少来回拉 1 379 388 229 次 约14亿次才能将这些数据运到地点,估计1000个诺克耐维斯号都要报销。

  如果以上地数据过于庞大,还是找不到感觉,那么给个实际的数据:计算机报上看到荷兰银行的20个数据中心有大约7PB磁盘和超过20PB的磁带存储,而且每年50%~70%存储量的增长,计算一下27PB大约为 40万个80G的硬盘大小。

  
  半导体行业的摩尔定律似乎还不足以形容数据增长的快速性,大数据量的环境下促生技术的变革和进步,Hadoop技术、敏捷商业智能等等随之出现的解决方案似乎有望为大数据问题带来些许曙光。


25
2025
12

C语言之父

   在日益纷繁复杂的程序设计语言王国中,C语言因其简洁、有效、通用的特性而始终占据一席之地。被誉为“C语言之父”,同时也是操作系统Unix之父的C语言发明人之一丹尼斯·里奇(D.M.Ritchie)2011年10月9日以70岁之龄辞世。
  生于1941年9月9日的丹尼斯·里奇曾在哈佛大学学习物理学和应用数学,1967年他进入贝尔实验室,并曾经担任朗讯技术公司系统软件研究部门的.人。
  1983年,美国计算机协会将当年的图灵奖破例颁给了作为软件工程师的肯·汤普逊与里奇,获奖原因是他们“研究发展了通用的操作系统理论,尤其是实现了Unix操作系统”。并且,美国计算机协会当年还决定新设立一个奖项软件系统奖,以奖励那些优秀的软件开发者,首个软件系统奖当然也是非他们两人莫属。
  尽管通过Unix拿奖拿到手软,但令里奇引起最大关注和反响的则是C语言的问世。1999年,里奇和汤普逊为发展C语言和Unix操作系统一起获得了美国国家技术奖章。
  虽然在C语言之后,C++、Java等各式各样计算机高级语言层出不穷,但不少程序员仍旧认为,C语言简洁、高效、灵活的特性令其具有独特魅力。“现在的程序编写朝着越来越冗长庞大的方向发展,而C语言虽然属于相对‘低级’的编程语言,但它的简洁之美是无可替代的。”一位电脑程序员道出了自己格外青睐C语言的原因。
  和里奇所创造的C语言一样,Unix系统也同样具有简洁、朴素、小巧的特性。但正如里奇自己所说的那样,“Unix系统是一个简单基本的操作系统,但学会欣赏简洁需要天赋。”而里奇本人,尽管在软件发展史上占有举足轻重的地位,也同样在从事的领域辛勤而低调地耕耘近40年。
  在悼念里奇的论坛上,众多粉丝表达了对这位“C语言之父”常年坚持的敬意,一位粉丝留言表示:“感谢丹尼斯·里奇,令我们拥有这一简洁而美丽的语言。”
  而谷歌工程师派克则在Google+中称:“我获知丹尼斯·里奇在忍受了长期的病痛折磨后在家中去世。此外,我没有获得更多的信息。”
  延伸阅读
  “C语言之父”也是“黑客之父”
  由于C语言和Unix两项成就,里奇成为许多编程爱好者膜拜的对象。里奇在1978年出版的《C程序设计语言》被程序员们称为“白皮书”,获得狂热拥戴。
  然而,由于C语言的简洁和高效,也成为入侵他人电脑的利器之一。里奇因此被诸多电脑黑客尊为导师,虽然里奇本人并不认可这一说法。
  在Unix研发成功后不久,安装了这一程序的PDP-11被放在贝尔实验室供大家使用。有一天,大家发现两位创始人总是可以得到最高的权限轻松进入他们的帐户,在贝尔实验室这种高人云集的地方,这简直是太不能容忍的事情了。于是,若干愤懑的同事仔细分析Unix代码,找到后门,修改后再重新编译整个Unix程序。当所有人都以为这个世界应该从此清静了的时候,却发现他们的帐户权限还是很容易泄露。直到很多年后,肯和里奇才道出其中的原委原来代码里确实存在后门,不过并不在Unix代码中,而是藏在编译Unix的编译器里。
  为玩游戏研成C语言
  作为一门伟大的编程语言,C语言是借助Unix操作系统的翅膀而起飞的,Unix操作系统也由于C语言的存在而得以快速落地生根,两者相辅相成,成就了软件史上最精彩的一幕。
  不可思议的是,当初Unix这个操作系统的诞生,并不是为了推向市场,甚至不是为了让更多人使用,而仅仅是作者为了方便自己使用,而且初衷是为了能更流畅地玩游戏。连Unix这个别扭的名字,也是对早期一个名为Multics操作系统开玩笑的称呼。
  1967年,里奇参与的第一个项目是Multics,这是一个操作系统项目,被设计在大型计算机主机上运行,但是由于整个目标过于庞大,糅合了太多的特性,Multics的性能很低,最终以失败而告终。Multics项目的开发者之一肯·汤普逊则继续为GE-5开发软件,并最终编写了一个新操作系统项目,能够支持同时的多用户操作,也就是后来的Unix。
  在不经意间,奇迹诞生了,由于Unix诸多优点,人们将它称为软件中的瑞士军刀。这再一次验证了IT业的创新往往是兴趣,而不是大把大把的金钱使然。
  最初的Unix是用汇编语言编写的,一些应用是由叫做B语言的解释型语言和汇编语言混合编写的,在移植的过程中遇到不少麻烦。早在对Multics项目调整过程中,就迫切需要一门高级计算机语言做工具,为了解决程序的可移植性问题,肯·汤普逊和丹尼斯·里奇决定对它进行简单改进,形成NB语言。但NB在Unix的移植方面依然不尽人意,此后里奇又对NB语言做了改进,C语言诞生。
  这被计算机界认为是一个划时代的动作,C语言让Unix能够轻易地被移植到各种不同的机器上,为Unix的迅速普及立下汗马功劳。

25
2025
12

Word字体介绍

八号字  5
七号字  5.5

小六    6.5
六号    7.5
小五    9
五号    10.5
小四    12
四号    14
小三    15
三号    16
小二   18
二号   22
小一    24
一号    26
小初    36
初号    42

数字大小就是磅为单位。1磅=1/72英寸=25.4/72mm=0.35278mm。印刷书籍一般为10.5磅,也就是使用五号字体。


19
2025
12

C++运算符优先级顺序

在C++中 算法运算符>关系运算符>逻辑运算符>赋值运算符。

算术运算符为  +    -   *    /    %     ++    --。

关系运算符为 <     <=    >     >=  ==     !=  其中  <   <=   >     >=的优先级要大于  ==    !=

逻辑运算符为   &&    ||      !

赋值运算符为  = 


19
2025
12

C++保留字

asm  auto  bool  break  case  catch  char
class  const  continue defalut  delete  do  double
else  enum  extern  false  float  for  friend
goto  if  inline  int  long  main  namespace
new  operator private  protected public  register return
short  signed  sizeof  static  struct  switch  template
this  throw  true  try  typedef  typeied  typename
union  unsigned using  virtual  void  volatile while

18
2025
12

ZBlog2.1 asp网站搬家总结

1.首先将所有的网站文件上传到网站根目录下
2.登陆http://你的网站主页地址/zb_system/login.asp,然后点击网站设置改成自己网站主页地址,并一定"提交",最后点文件重建就可以完成页面地址变更。

18
2025
12

转载--重拾永远的APPLEII

 appleII外形.jpg   

我不打算啰嗦我对Apple II 的感慨,我只想说:那是一个值得永远怀念的纯真年代!这份情感,是那些只用过iPhone、iPad 就对乔布斯顶礼膜拜的人所不能理解的。

    如果你想重拾当年的回忆,或者想一窥30年前的电脑世界,下面两个东西可以帮到你:

appleII模拟器.jpg


    下载Apple-II.模拟器.AppleWin1.20.0.0.7z 986KB

这是我用过最好的Windows 系统下的Apple II 模拟器,使用方法: