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

房贷计算器和源代码

1.房贷计算器V1.0:http://pan.baidu.com/share/link?shareid=3046175186&uk=67362253

2.房贷计算器V1.0源代码VC6.0:http://pan.baidu.com/share/link?shareid=3050156618&uk=67362253

3.房贷计算器V1.1:http://pan.baidu.com/share/link?shareid=3054573588&uk=67362253

4.房贷计算器V1.1源代码VC6.0:http://pan.baidu.com/share/link?shareid=3058186923&uk=67362253


25
2025
12

S7-200的模拟电位器作用

为什么整体式的PLC如S7-200,三菱、台达的都有个模拟电位器0和1,它的作用是什么?
再一个就是为什么模块式的PLC里面就没有这两个模拟电位器?
如S7-300/400里面就没有?这是啥原因?


1、S7-200CPU都有模拟电位器:
两个模拟电位器分别对应SMB28和SMB29,调节电位器就是改变SMB28和SMB29中的数值。用来输入不同的参数,例如可以定时,计数,调速,PID调节等等,一切需要外调整数值而又不频繁使用的场所。也有用它做为调试维修设备,增加节点的功能......当然还有很多,只要你认为能通过调整外部数值来完成设备运行功能的,你都可以试一试。

例如,可以把这两个存储器中的值作为PLC内某个定时器的定时设定值,这样通过调节模拟电位器就能调节PLC的定时器。


2、如S7-300/400里面就没有?这是啥原因?
这是西门子设计上的需要。日系的PLC较多,S7-200PLC原为美国德州仪表产品。

 

模拟量电位器的作用主要用于定时器、计数器的模拟量设定或者改变特殊寄存器的中的数值从而改变程序运行的参数,但是模拟量设定值会受环境、温度等的影响不能用于设定值
要求非常高的场合。整体式的PLC没有模拟量输入模块,用电位器代替。

 

可以当作电位器使用,输入值0-255,值存在SMB28/SMB29中,可以在程序中用于各种不同的
功能,例如为计时器或计数器改动预设值等,西门子的手册上这么说的.
是一个8位分辩率的电位器,对应PLC的一个寄存器,可以当作定时的设定值;
如你工艺中有一个时间不能确定,可以用这个电位器作为调节器,根据不同的工艺调用不
同的时间;
否则就需要用外置的定时器或用PLC配套的显示单元或人机
还有一个很有用的地方,就是做模拟量!
如果你想调试程序,程序里又要模拟量的,而且你没有模拟量模块。那么可以用
SMB28*131刚好是一个模拟量输入的量程。这样就相当一个模拟量输入模块了...
三菱FX系列上面也有2个电位器,对应的输入也是0~255


25
2025
12

个人对PLC漏型(NPN)和源型(PNP)的理解

在小型PLC中,输入信号一般即可以接NPN的信号,也可以接PNP的信号。输出要么是NPN类型,要么是PNP类型,不能两者兼备。NPN也叫漏型,就是电流往这个端口流入。PNP也叫源型,就是电流从这个端口流出。

    输入之所以可以做到NPN和PNP两种信号都能接受,是因为每个输入端口使用了双向光耦。但是对于同一组“输入”共用的M点或者COM点,只要选择了NPN,那么该组就都是NPN了,或是选择了PNP,那么该组就都是PNP了。但是要注意的是:西门子的S7-300/400这种中大型的PLC一般是单向光耦,只能规定接收自己所需要的NPN或者PNP。还有一个是伺服驱动器的脉冲输入端口,一般也是单向光耦。我们这里只讨论的是小型PLC,为双向光耦。

    下面以实例说明:


25
2025
12

电线粗细选择口诀

口决:10下五,100上二,2535四三界,7095两倍半,穿管、温度,八九折,裸线加一半,铜线升级算.
10
下五是指10个平方以下的线安全载流量为线径的五倍,如6平方毫米的铝芯线,他的安全载流量为30A
      100上二是指100平方以上的线安全载流量为线径的二倍,如150平方的铝芯绝缘线安全载流量为300A
      2535四三界是指10平方至25平方的铝芯绝缘线载流量为线径的四倍,35平方至70平方内的线(不含70)为三倍。
      7095两倍半是指70平方与95平方的铝芯绝缘线安全载流量为线径的两倍半。
      穿管、温度,八九折是指若是穿管敷设(包括槽板等,即线加有保护套层),不明露的,按上面方法计算后再打八折(乘0.8)。若坏境温度超过25度的,按上面线径方法计算后再打九折。对于穿管温度两条件同时时,安全载流量为上面线径算得结果打七折算
      裸线加一半是指相同截面的裸铝线是绝缘铝芯线安全载流量的1.5倍。
      铜线升级算即将铜导线的截面按铝芯线截面排列顺序提升一级,再按相应的铝芯线条件计算,如:35平方裸铜线,升一级按50平方铝芯线公式算得5031.5225安,即225安为35平方裸铜线的安全载流量。

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

CAN学习1----计算机网络与现场总线

1.1计算机网络体系的结构

1.1.1物理层(Physical Layer)

1.1.2数据链路层(Data Link Layer)

在物理线路上,由于噪音干扰,信号衰减畸变等原因,传输过程中常常出现差错,而物理层只负责透明地传输无结构的原始比特流,不可能进行差错控制。

数据链路层最重要的作用就是通过一系列数据链路层协议,在不可靠的物理链路上实现可靠的传输。

1.组帧与帧同步

一是面向字符的,二是1974年出现的面向比特的规程,后来改成高级数据链路控制(HDLC)。HDLC被广泛用作数据链路层的控制协议。CAN规范中采用的就是这个规程。

HDLC的帧结构

01111110

8

8

可变

16

01111110

标志

地址

控制

信息

帧校验序列

标志

F

A

C

I

FCS

F

HDL在标志之间如果出现连续5个1时,会在第5个1后加入1个0来填充。

FCS: X16+X12+X5+1  CRC-CCITT  16位的CRC16.

在数据中插入冗余信息的过程称为差错编码。有以下几种:


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磅,也就是使用五号字体。