发明了电脑,发明制作电脑系统

世界上第一个程序是1842年写的,恰好在第一个能被称为计算机的真正机器。这段代码的作者是AdaAugusta,被封为Lovelace女伯爵,就是大家所知道的AdaLovelace。作为世界上第一个计算机程序的作者,她被广泛地认为是有史以来第一位程序员。

当把Ada称为一位程序员的时候,很容易忘记世界上第一段代码产生的年代就是塞缪尔·莫尔斯首次展示电话、阿姆斯达号上的黑奴在反抗和美国正处于三十年代、奥斯曼帝国和波斯帝国时期、穆斯林国家的奴隶正和埃及争夺中东地区的年代。计算机这个词在那时候仍然表示一个人做了100多年的计算工作的意思。那都是很久以前的事情了。

世界上第一段代码是为查尔斯·巴贝奇的分析机写的,这个机器从来没有真正建成过,虽然有这个可能。AdaLovelace看到了巴贝奇机器的潜力,产生了可编程的计算机的念头。她为泰勒的科学回忆录翻译了一位意大利数学家LuigiMenabrea的名为“分析机的概念图”的论文,并通过“翻译者的附注(她自己注释的)”把这篇论文弄懂了,那个注释里主要写了查尔斯·巴贝奇分析机都能干些什么。在附注G的开篇,就提到了世界上第一个计算机程序,举例说明了Lovelace意识到巴贝奇的设计是多么的意义深远,但还保持着她做科学的平静。

“防止夸大源于分析机的能量的想法是有必要的。”

Lovelace在她根本没有办法夸大一个包含现代计算机的主要部分的设计的本质。巴贝奇拒绝公布这台分析机的很多内容,使得Lovelace的注释对未来的发展起到了重要影响,最显著的影响便是促使阿兰·图灵产生通用程序存储计算机的想法。这一点Ada并没有看到,她36岁去世,前面提到的注释成了她唯一的出版物。如果她再能多活几年多工作几年,计算机会不会又是另一个样子呢?

让大家回到这个问题上来:如果巴贝奇有足够的资源建好分析机并能让Lovelace在上面跑程序的话,世界上第一个计算机程序是干嘛用的呢?这个程序让巴贝奇分析机计算了伯努利数字序列。接着她描述了怎么把大量的巴贝奇分析机的穿孔卡片作为输入实现这个程序。在她的实现方法中Lovelace设定了伯努利数序列的第一个数字(B0=1,B1=-),然后开始从B2(第一个非正规伯努利数)开始计算整个序列,她把这里的B2标记为B1。

现代重写的Javascript版本的Ada的大量穿孔卡片上的堆栈看起来可能是这个样子。这个重写的版本不是Ada的代码在巴贝奇分析机上的模拟,只是Ada曾经使用过的算法的另一种实现。

顺便提一下,到目前为止从没有人能从Ada的伯努利数计算代码里发现任何bug。尽管她发明了编程,但她显然并没有发明bug。

注:AdaLovelaceDay是一个国际性的庆祝妇女在科学,科技,工程和数学领域取得成就的节日。

最早的程序直接写的是二进制机器代码,没有编译器

将编好的代码通过读卡机读如机器,直接执行。

然后出现的是汇编语言,通过二进制的机器代码来实现汇编的编译连接工作,

然后在用汇编语言完善优化汇编语言;

接着才是高级语言,使用汇编语言编译

逐渐实现高级语言编译高级语言

19世纪之前

一、机械计算机时代的拓荒者

在西欧,由中世纪进入文艺复兴时期的社会大变革,大大促进了自然科学技术的发展,人们长期被神权压抑的创造力得到空前释放。其中制造一台能帮助人进行计算的机器,就是最耀眼的思想火花之一。从那时起,一个又一个科学家为把这一思想火花变成引导人类进入自由王国的火炬而不懈努力。但限于当时的科技总体水平,大都失败了,这就是拓荒者的共同命运:往往见不到丰硕的果实。后人在享用这甜美的时候,应该能从中品出一些汗水与泪水的滋味

1614:苏格兰人JohnNapier(1550-1617)发表了一篇论文,其中提到他发明了一种可以计算四则运算和方根运算的精巧装置。

1623:WilhelmSchickard(1592-1635)制作了一个能进行六位以内数加减法,并能通过铃声输出答案的'计算钟'。通过转动齿轮来进行操作。

1625:WilliamOughtred(1575-1660)发明计算尺

1642:法国数学家Pascal在WILLIAMOughtred计算尺的基础上将计算尺加以改进,能进行八位计算。并且还卖出了许多,成为一种时髦的商品。

1668:英国人SamuelMorl和(1625-1695)制作了一个非十进制的加法装置,适宜计算钱币。

1671:德国数学家GottfriedLeibniz设计了一架可以进行乘法,最终答案可以最大达到16位。

1775:英国Charles制作成功了一台与Leibniz's的计算机类似的机器。但更先进一些。

1776:德国人MathieusHahn成功的制作了一台乘法器。

1801:Joseph-MaireJacuard开发了一台能用穿孔卡片控制的自动织布机。

1820:法国人CharlesXavierThomasdeColmar(1785-1870),制作成功第一台成品计算机,非常的可靠,可以放在桌面上,在后来的90多年间一直在市场上出售。

1822:英国人CharlesBabbage(1792-1871)设计了差分机和分析机,其中设计的理论非常的超前,类似于百年后的电子计算机,特别是利用卡片输入程序和数据的设计被后人所采用。

1832:Babbage和JosephClement制成了一个差分机的成品,开始可以进行6位数的运算。后来发展到20位、30位,尺寸将近一个房子那么大。结果以穿孔的形式输出。但限于当时的制造技术,他们的设计难以制成。

1834:斯德哥尔摩的GeorgeScheutz用木头做了一台差分机。

1834:Babbage设想制造一台通用的分析机,在只读存储器(穿孔卡片)中存储程序和数据,Babbage在以后的时间继续他的研究工作,并于1840年将操作数提高到了40位,并基本实现了控制中心(CPU)和存储程序的设想,而且程序可以根据条件进行跳转,能在几秒内作出一般的加法,几分钟内作出乘除法。

1842:Babbage的差分机项目因为研制费用昂贵,被政府取消。但他自己仍花费大量的时间和精力于他的分析机研究。

1843:Scheutz和他的儿子EdvardScheutz制造了一台差分机,瑞典政府同意继续支持他们的研究工作。

1847:Babbage花两年时间设计了一台较简易的、31位的差分机,但没有人感兴趣并支持他造出这台机器。但后来伦敦科学博物馆用现代技术复制出这台机器后发现,它确实能准确的工作。

1848:英国数学家GeorgeBoole创立二进制代数学。提前差不多一个世纪为现代二进制计算机铺平了道路。

1853:令Babbage感到高兴的是,Scheutzes制造成功了真正意义上的比例差分机,能进行15位数的运算。象Babbage所设想的那样输出结果。后来伦敦的BrianDonkin又造出了更可靠的第二台。

1858:第一台制表机被Albany的Dudley天文台买走。第二台被英国政府买走。但天文台并没有将其充分利用,后来被送进了博物馆。而第二台却被幸运的使用了很长时间。

1871:Babbage制造了分析机的部分部件和印表机。

1878:纽约的西班牙人RamonVerea,制造成功桌面计算器。比前面提到的都要快。但他对将其推向市场不感兴趣,只是想表明,西班牙人可以比美国人做的更好。

1879:一个调查委员会开始研究分析机是否可行,最后他们的结论是:分析机根本不可能工作。此时Babbage已经去世了。调查之后,人们将他的分析机彻底遗忘了。但HowardAiken例外。

1885:这时期更多的计算机涌现出来。如美国、俄国、瑞典等。他们开始用有槽的圆柱代替易出故障的齿轮。

1886:芝加哥的DorrE.Felt(1862-1930),制造了第一台用按键操作的计算器,而且速度非常快,按键抬起,结果也就出来了。

1889:Felt推出桌面印表计算器。

1890:1890美国人口普查。1880年的普查人工用了7年的时间进行统计。这意味着1890年的统计将会超过10年。美国人口普查部门希望能得到一台机器帮助提高普查的效率。HermanHollerith,建立制表机公司的那个人,后来他的公司发展成了IBM公司。借鉴了Babbage的发明,用穿孔卡片存储数据,并设计了机器。结果仅仅用了6个周就得出了准确的数据(62622250人)。HermanHollerith大发其财。

1892:圣多美和普林西比的WilliamS.Burroughs(1857-1898),制作成功了一台比Felt的功能更强的机器,真正开创了办公自动化工业。

1896:HermanHollerith创办了IBM公司的前身。1900~1910

1906:HenryBabbage,CharlesBabbage的儿子,在R.W.Munro的支持下,完成了父亲设计的分析机,但也仅能证明它能工作,而没有将其作为产品推出。

二、电子计算机最初的日子里

在这之前的计算机,都是基于机械运行方式,尽管有个别产品开始引入一些电学内容,却都是从属与机械的,还没有进入计算机的灵活:逻辑运算领域。而在这之后,随着电子技术的飞速发展,计算机就开始了由机械向电子时代的过渡,电子越来越成为计算机的主体,机械越来越成为从属,二者的地位发生了变化,计算机也开始了质的转变。下面就是这一过渡时期的主要事件:

1906:美国的LeeDeForest发明了电子管。在这之前造出数字电子计算机是不可能的。这为电子计算机的发展奠定了基础。

1920~1930

1924年2月:IBM,一个具有划时代意义的公司成立

1930~1940

1935:IBM推出IBM601机。这是一台能在一秒钟算出乘法的穿孔卡片计算机。这台机器无论在自然科学还是在商业意义上都具有重要的地位。大约造了1500台。

1937:英国剑桥大学的AlanM.Turing(1912-1954)出版了他的论文,并提出了被后人称之为'图灵机'的数学模型。

1937:BELL试验室的GeorgeStibitz展示了用继电器表示二进制的装置。尽管仅仅是个展示品,但却是第一台二进制电子计算机。

1938:ClaudeE.Shannon发表了用继电器进行逻辑表示的论文。

1938:柏林的KonradZuse和他的助手们完成了一个机械可编程二进制形式的计算机,其理论基础是Boolean代数。后来命名为Z1。它的功能比较强大,用类似**胶片的东西作为存储介质。可以运算七位指数和16位小数。可以用一个键盘输入数字,用灯泡显示结果。

19391月1日:加利福尼亚的DavidHewlet和WilliamPackard在他们的车库里造出了Hewlett-Packard计算机。名字是两人用投硬币的方式决定的。包括两人名字的一部分。

1939年11月:美国JohnV.Atanasoff和他的学生CliffordBerry完成了一台16位的加法器,这是第一台真空管计算机。

1939:二次世界大战的开始,军事需要大大促进了计算机技术的发展。

1939:Zuse和Schreyer开始在他们的Z1计算机的基础上发展Z2计算机。并用继电器改进它的存储和计算单元。但这个项目因为Zuse服兵役被中断了一年。

1939/1940:Schreyer利用真空管完成了一个10位的加法器,并使用了氖灯做存储装置。

1940~1950

1940年1月:Bell实验室的SamuelWilliams和Stibitz制造成功了一个能进行复杂运算的计算机。大量使用了继电器,并借鉴了一些电话技术,采用了先进的编码技术。

1941夏季:Atanasoff和学生Berry完成了能解线性代数方程的计算机,取名叫'ABC'(Atanasoff-BerryComputer),用电容作存储器,用穿孔卡片作辅助存储器,那些孔实际上是'烧'上的。时钟频率是60HZ,完成一次加法运算用时一秒。

1941年12月:德国Zuse制作完成了Z3计算机的研制。这是第一台可编程的电子计算机。可处理7位指数、14位小数。使用了大量的真空管。每秒种能作3到4次加法运算。一次乘法需要3到5秒。

1943:1943年到1959年时期的计算机通常被称作第一代计算机。使用真空管,所有的程序都是用机器码编写,使用穿孔卡片。典型的机器就是:UNIVAC。

1943年1月:MarkI,自动顺序控制计算机在美国研制成功。整个机器有51英尺长,重5吨,75万个零部件,使用了3304个继电器,60个开关作为机械只读存储器。程序存储在纸带上,数据可以来自纸带或卡片阅读器。被用来为美国海军计算弹道火力表。

1943年4月:MaxNewman、Wynn-Williams和他们的研究小组研制成功'HeathRobinson',这是一台密码破译机,严格说不是一台计算机。但是其使用了一些逻辑部件和真空管,其光学装置每秒钟能读入2000个字符。同样具有划时代的意义。

1943年9月:Williams和Stibitz完成了'RelayInterpolator',后来命名为'ModelIIRelayCalculator'。这是一台可编程计算机。同样使用纸带输入程序和数据。其运行更可靠,每个数用7个继电器表示,可进行浮点运算。

1943年12月:最早的可编程计算机在英国推出,包括2400个真空管,目的是为了破译德国的密码,每秒能翻译大约5000个字符,但使用完后不久就遭到了毁坏。据说是因为在翻译俄语的时候出现了错误。

1946:ENIAC(ElectronicNumericalIntegrator和Computer):第一台真正意义上的数字电子计算机。开始研制于1943年,完成于1946年。负责人是JohnW.Mauchly和J.PresperEckert。重30吨,18000个电子管,功率25千瓦。主要用于计算弹道和氢弹的研制。

三、晶体管计算机的发展

真空管时代的计算机尽管已经步入了现代计算机的范畴,但其体积之大、能耗之高、故障之多、价格之贵大大制约了它的普及应用。直到晶体管被发明出来,电子计算机才找到了腾飞的起点,一发而不可收

1947:Bell实验室的WilliamB.Shockley、JohnBardeen和WalterH.Brattain.发明了晶体管,开辟了电子时代新纪元。

1949:EDSAC:剑桥大学的Wilkes和他的小组建成了一台存储程序的计算机。输入输出设备仍是纸带。

1949:EDVAC(electronicdiscretevariablecomputer):第一台使用磁带的计算机。这是一个突破,可以多次在其上存储程序。这台机器是JohnvonNeumann提议建造的。

1949:'未来的计算机不会超过1.5吨。'这是当时科学杂志的大胆预测。

1950~1960

1950:软磁盘由东京帝国大学的YoshiroNakamats发明。其销售权由IBM公司获得。开创存储时代新纪元。

1950:英国数学家和计算机先驱AlanTuring说:计算机将会具有人的智慧,如果一个人和一台机器对话,对于提出和回答的问题,这个人不能区别到底对话的是机器还是人,那么这台机器就具有了人的智能。

1951:GraceMurrayHopper完成了高级语言编译器。

1951:Whirlwind:美国空军的第一个计算机控制实时防御系统研制完成。

1951:UNIVAC-1:第一台商用计算机系统。设计者:J.PresperEckert和JohnMauchly。被美国人口普查部门用于人口普查,标志着计算机的应用进入了一个新的、商业应用的时代。

1952:EDVAC(ElectronicDiscreteVariableComputer):由VonNeumann领导设计并完成。取名:电子离散变量计算机。

1953:此时世界上大约有100台计算机在运转。

1953:磁芯存储器被开发出来。

1954:IBM的JohnBackus和他的研究小组开始开发FORTRAN(FORmulaTRANslation),1957年完成。是一种适合科学研究使用的计算机高级语言。

1956:第一次有关人工智能的会议在Dartmouth学院召开。

1957:IBM开发成功第一台点阵打印机。

1957:FORTRAN高级语言开发成功。

四、集成电路,现代计算机插上腾飞的翅膀

尽管晶体管的采用大大缩小了计算机的体积、降低了其价格,减少了故障。但离人们的要求仍差很远,而且各行业对计算机也产生了较大的需求,生产更能更强、更轻便、更便宜的机器成了当务之急,而集成电路的发明正如\"及时雨\",当春乃发生。其高度的集成性,不仅仅使体积得以减小,更使速度加快,故障减少。人们开始制造革命性的微处理器。计算机技术经过多年的积累,终于驶上了用硅铺就的高速公路。

1958年9月12日:在RobertNoyce(INTEL公司的创始人)的领导下,发明了集成电路。不久又推出了微处理器。但因为在发明微处理器时借鉴了日本公司的技术,所以日本对其专利不承认,因为日本没有得到应有的利益。过了30年,日本才承认,这样日本公司可以从中得到一部分利润了。但到2001年,这个专利也就失效了。

1959:1959年到1964年间设计的计算机一般被称为第二代计算机。大量采用了晶体管和印刷电路。计算机体积不断缩小,功能不断增强,可以运行FORTRAN和COBOL,接收英文字符命令。出现大量应用软件。

1959:GraceMurrayHopper开始开发COBOL(COmmonBusiness-OrientatedLanguage)语言,完成于1961年。

1960~1970

1960:ALGOL:第一个结构化程序设计语言推出。

1961:IBM的KennthIverson推出APL编程语言。

1963:PDP-8:DEC公司推出第一台小型计算机。

1964:1964年到1972年的计算机一般被称为第三代计算机。大量使用集成电路,典型的机型是IBM360系列。

1964:IBM发布PL/1编程语言。

1964:发布IBM360首套系列兼容机。

1964:DEC发布PDB-8小型计算机。

1965:摩尔定律发表,处理器的性能每年提高一倍。后来其内容又发生了改变。

1965:LoftiZadeh创立模糊逻辑,用来处理近似值问题。

1965:ThomasE.Kurtz和JohnKemeny完成BASIC(BeginnersAllPurposeSymbolicInstructionCode)语言的开发。特别适合计算机教育和初学者使用,得到了广泛的推广。

1965:DouglasEnglebart提出鼠标器的设想,但没有进一步的研究。直到1983年被苹果电脑公司大量采用。

1965:第一台超级计算机CD6600开发成功。

1967:NiklausWirth开始开发PASCAL语言,1971年完成。

1968:RobertNoyce和他的几个朋友创办了INTEL公司。

1968:SeymourPaper和他的研究小组在MIT开发了LOGO语言。

1969:ARPANET计划开始启动,这是现代INTERNET的雏形。

1969年4月7日:第一个网络协议标准RFC推出。

1969:EIA(ElectronicIndustriesAssocia

1970~1980

1970:第一块RAM芯片由INTEL推出,容量1K。

1970:KenThomson和DennisRitchie开始开发UNIX操作系统。

1970:Forth编程语言开发完成。

1970:Internet的雏形ARPAnet(AdvancedResearchProjectsAgencynetwork)基本完成。开始向非军用部门开放,许多大学和商业部门开始接入。

1971年11月15日:MarcianE.Hoff在INTEL公司开发成功第一块微处理器4004,含2300个晶体管,是个4位系统,时钟频率108KHz,每秒执行6万条指令。

在后来的日子里,处理器发展主要指标一览:

处理器主频每秒百万条指令

4004108KHz0.06

80802MHz0.5

680008MHz0.7

80868MHz0.8

6800016MHz1.3

6802016MHz2.6

8028612MHz2.7

6803016MHz3.9

386SX20MHz6

6803025MHz6.3

6803040MHz10

386DX33MHz10

486DX25MHz20

486DX2-5050MHz35

486DX4/100100MHz60

Pentium66MHz100

Pentium133MHz240

Pentium233MHzMMX435

PentiumPro200MHz440

PentiumII233MHz560

PentiumII333MHz770

1971:PASCAL语言开发完成。

1972:1972年以后的计算机习惯上被称为第四代计算机。基于大规模集成电路,及后来的超大规模集成电路。计算机功能更强,体积更小。人们开始怀疑计算机能否继续缩小,特别是发热量问题能否解决?人们开始探讨第五代计算机的开发。

1972:C语言的开发完成。其主要设计者是UNIX系统的开发者之一DennisRitche。这是一个非常强大的语言,开发系统软件,特别受人喜爱。

1972:Hewlett-Packard发明了第一个手持计算器。

1972年4月1日:INTEL推出8008微处理器。

1972:ARPANET开始走向世界,INTERNET革命拉开序幕。

1973:街机游戏Pong发布,得到广泛的欢迎。发明者NolanBushnell,后来Atari的创立者。

1974:第一个具有并行计算机体系结构的CLIP-4推出。

五、计算机技术渐入辉煌

在这之前,计算机技术主要集中在大型机和小型机领域发展,但随着超大规模集

操作系统的简要历史

在早期的计算机系统里面是没有操作系统的,最早的ENIAC (Electronic Numerical Integrator and Computer)没有键盘显示器等等的,所有的输入操作都是通过对开关的通断来实现的,输出是通过灯泡的亮灭显示的,改变计算公式甚至需要对线路进行重新的布置,那个年代是没有操作系统的。

ENIAC里面并没有内存,只有寄存器,而且控制系统是通过硬接线实现的,想改变公式就需要对线路重新布置。这样操作其实非常的不方便。所以,著名的"计算机之父"冯·诺依曼加入这个计划之后,提出了改进意见EDVAC (Electronic Discrete Variable AutomaticComputer)计划。EDVAC实际上就是最早的冯诺依曼结构的雏形,现在我们使用的通用计算机结构仍旧属于冯诺依曼结构。

之后为了方便无人值守的批量任务执行,产生了单任务的批处理操作系统,批处理操作系统的任务很简单,按照实现设定好的顺序把任务装入执行。为了充分利用大型机等昂贵设备的资源,产生了多任务操作系统(分时操作系统),为了让一般的学生和科学工作者也可以分享大型机的计算能力,出现了大型机+分时操作系统+ 哑终端的模式。之后,慢慢出现了为普通人服务的微型机,也就是个人电脑。然而最早的个人电脑也是没有操作系统的,最早的个人电脑是阿尔塔(牛郎星电脑)没有键盘,显示器,只有开关和灯泡(像不像微型版的ENIAC)。微软第一个成功的商业产品其实就是给牛郎星写的BASIC解释器,因为很多人免费使用(也就是盗版)这个BASIC解释器,比尔盖茨写了封“给爱好者们的公开信”,成为商业软件产业诞生的标志。实际上我们知道的著名的Apple I上面也并没有安装操作系统,只有一个ROM BASIC和引导程序。

谈这些历史,是想让大家知道,在没有操作系统的年代,裸机也是可以使用的。而操作系统的产生是为了给应用程序提供一个运行环境。

操作系统必须直接驱动硬件么?

我们见到的大部分操作系统都是直接驱动硬件的,这就给人一个错觉,所有的操作系统都是必须驱动硬件的。win31推出的时候,虽然有内存管理,进程管理(那时候win系统没有线程概念),有图形界面,但是仍旧被人质疑是否是操作系统。原因是win31的文件系统是dos支持的,引导程序是 dos,换言之,win31不能直接运行在硬件上。这是一种误解,现代的操作系统大多分层,为了移植和系统的结构化,一般来说操作系统都会分为硬件相关层,硬件无关层。硬件相关层一般就是io处理和做驱动程序管理。而内存管理,进程管理,图形界面等等一般都是硬件无关层处理的。

对Cpu来说,一段普通内存地址和一块硬件端口映射出来的内存地址并没有任何区别。这是因为从计算逻辑上看,任何功能用硬件实现和用软件实现并没有任何的区别。正因为此,我们才能在一台win操作系统的机器上面VMWare上面安装一个linux,或者反之。操作系统就是应用程序的运行环境,也就是一个硬件和软件之间的层。早期的操作系统比如dos,比如unix之前的那些专用的大型机操作系统等等,它们根硬件的结合都比较紧密,难以分开,提供的硬件以外的功能也很少。然而unix本身就是为了解决在多种不同类型大型机之间移植而设计,从概念上就已经跟硬件分离了。windows也很类似, winnt4.0可以用于x86芯片,也可以用于alpha芯片的机器就是因为这个原因。

分布式操作系统更是传统操作系统思想的变革,分布式操作系统是安装在整个分布系统里面的,其中任何一台也可以安装有自己的本地操作系统。