草庐IT

计算机硬件历史

coderxueshan 2023-03-28 原文

早期的计算工具

  • 计算尺是基本的手动计算器,易于乘除

1614年,苏格兰数学家纳皮尔发现利用加减计算乘除的方法,依此发明对数,纳皮尔在制作第一张对数表的时候,必需进行大量的乘法运算,而一条物理线的距离区间可表示真数,于是他设计出计算器纳皮尔的骨头协助计算[2]。到1633年,英国牧师奥特雷德利用对数基础,发明出一种圆形计算工具比例环(Circles of Proportion),后来逐渐演变成近代熟悉的计算尺。直到口袋型计算器发明之前,有一整个世代的工程师,以及跟数学沾上边的专业人士都使用过计算尺。美国阿波罗计划里的工程师甚至利用计算尺就将人类送上了月球,其精确度达到3或4位的有效数字

  • 巴斯卡的滚轮式加法器

1623年,德国科学家施卡德建造出世界已知的第一部机械式计算器,成为计算机世代之父,这部机械改良自时钟的齿轮技术,能进行六位数的加减,并经由钟声输出答案,因此又称为“算数钟”,可惜后来毁于火灾,施卡德也因战祸而逝。

1642年法国数学家帕斯卡为税务所苦的税务员父亲发明了滚轮式加法器2,可透过转盘进行加法运算。1673年德国数学家莱布尼茨使用阶梯式圆柱齿轮加以改良,制作出可以四则运算的步进计算器,可惜成本高昂,不受当代重视[3]

直到1820年之后,机械式计算器才被广为使用。法国人汤玛斯以莱布尼茨的设计为基础,率先成功量产可作四则运算的机械式计算器,后来命名为汤玛斯计算器(Thomas Arithmometer),此后机械式计算器风行草偃,直到1970年代的150年间,有十进制的加法机康普托计算器门罗计算器以及科塔计算器等相继面市。莱布尼茨还倡导过现代电脑的核心理论──二进制系统,不过直到1940年代(从1800年代的巴贝奇,到1946年诞生的埃尼阿克),大部分的设计连小数点都未能兼顾。

  • 巴斯卡的滚轮式加法器

1623年,德国科学家施卡德建造出世界已知的第一部机械式计算器,成为计算机世代之父,这部机械改良自时钟的齿轮技术,能进行六位数的加减,并经由钟声输出答案,因此又称为“算数钟”,可惜后来毁于火灾,施卡德也因战祸而逝。

1642年法国数学家帕斯卡为税务所苦的税务员父亲发明了滚轮式加法器2,可透过转盘进行加法运算。1673年德国数学家莱布尼茨使用阶梯式圆柱齿轮加以改良,制作出可以四则运算的步进计算器,可惜成本高昂,不受当代重视[3]

直到1820年之后,机械式计算器才被广为使用。法国人汤玛斯以莱布尼茨的设计为基础,率先成功量产可作四则运算的机械式计算器,后来命名为汤玛斯计算器(Thomas Arithmometer),此后机械式计算器风行草偃,直到1970年代的150年间,有十进制的加法机康普托计算器门罗计算器以及科塔计算器等相继面市。莱布尼茨还倡导过现代电脑的核心理论──二进制系统,不过直到1940年代(从1800年代的巴贝奇,到1946年诞生的埃尼阿克),大部分的设计连小数点都未能兼顾。

1835到1900年代:程式化计算机

可编程化通用计算机的重要定义,意即只要变更指令的储存序列,通用计算机就能模拟其它形式的计算机。

前1940年代:模拟计算机

电脑在这个时代仍属稀有,人们对于问题的解决方案通常是写死在表格纸上(像是曲线图列线图解),用来一并解决相似的问题,比如说暖气机里的温度和压力分布。

早期的数字电脑

1930年代后期到1940年代,受到二次大战影响,此一时期被认为是计算机发展史中的混乱时期,战争开启了现代电脑的时代,电子电路继电器电容真空管相继登场,取代机械器件,就连类比计算器也被数字计算器所代替。阿塔那索夫贝理电脑(ABC)、Z3电脑巨像电脑埃尼阿克也在手工精心打造下诞生,使用包含继电器或真空管的电路,以打孔卡或打孔带作为输入和主要(非短期)储存媒介。

在这个时期,功能各异的电脑陆续生产,稳定发展。刚开始的时候,没人能想像现代电脑的存在,除了为世人遗忘的巴贝奇计划和艾伦·图灵的数学理论。到了这个时代的后期,电子离散顺序自动计算机登场,成为第一部可储存程式的数字电脑。此一期间的电脑系统,暂存内存使用延迟线存储器迅速崛起,直到1970年代中期,几乎取代其它形式成为最主要的暂存内存。

1936年,图灵发表的研究报告对计算机和计算机科学领域造成巨大冲击,这篇报告主要是为了证明循环处理程式的死角,亦即停机问题的存在。图灵也以算法概念为通用计算机(纯理论器件)作出定义,后来称为图灵机,取代哥德尔渐趋累赘的通用语言。除了内存限制,现代电脑已经具备图灵完全的条件,也就是说,现代电脑的算法执行力已与通用图灵机相当。内存限制有时也被视为一般用途电脑与特殊用途电脑的差别。

一部计算机要实际成为一般用途的电脑,就必须要有像是打孔带之类便于使用的读写器件,而为了要达到多功能多用途,冯·诺伊曼结构下的内存可一并储存程式和资料,当时的电脑差不多都是使用这种架构。理论上这种架构可以应用在全机械的计算机上(像巴贝奇的设计),加上电子学,使得现代电脑的特征──执行速度加快和微型化成为可能。

二次大战时期的电脑发展分为三道平行方向,其中有两方不是被大为忽略,就是被慎重的隐瞒起来,一个是德国科学家楚泽的作品,再则是英国秘密开发的巨像电脑,两者对美国的各项计算机计划都没有太多影响。战后英美计算机科学家在一些将计算机器件实用化方面则有着重要的合作经验。

首代冯·诺伊曼结构及其机种

英国曼彻斯特科学工业博物馆的“宝贝”

第一部成功运作的冯·诺伊曼结构电脑是1948年曼彻斯特大学小规模实验机,又称“宝贝”。随后在1949年,曼彻斯特马克一号电脑登场,功能完整,以威廉管和磁鼓作为内存媒介,并且引进变址寄存器的功能。

竞逐“第一部数字储存程式电脑”名号的还有在剑桥大学设计建造的延迟存储电子自动计算器(简称EDSAC),EDSAC比曼彻斯特的“宝贝”年轻一个年头,但是解决问题的能力不遑多让,然而实际上,启发EDSAC的就是埃尼阿克的继任者──离散变数自动电子计算机(简称EDVAC)。不像平行处理的埃尼阿克,EDVAC只使用单一的处理单元,此一设计简单好用,走在后来微型化趋势的前端,还增加了可靠的程度。近代电脑结构多取经自曼彻斯特马克一号、EDSAC和EDVAC,有些人也将其视为电脑界的“夏娃”。

欧洲大陆第一部通用型可编程化电脑是小型电子计算机(简称МЭСМ),由苏联基辅电机学会瑟吉·亚历塞维奇·列别捷夫带领一组科学家团队所建造,МЭСМ在1950年开始运作,使用6000根真空管,25千瓦的电力,每秒可作3000次运算。其它早期电脑还有澳洲设计的科学与工业研究议会自动计算机(简称CSIRAC),在1949年作首次程式测试。

1947年,一家以饮料起家的英国餐饮公司约瑟·里昂公司,对新式的办公室管理技术产生莫大的兴趣,决定积极参与电脑的商业开发。到了1951年,里昂一号电脑起跑,执行了世上第一个办公室电脑的例行指令。

1960年代后:第三波

主条目:计算机硬件历史 (1960年代后)

第三波电脑世代来临,电脑使用度爆炸性的成长,这些全仰赖杰克·基尔比罗伯特·诺伊斯的独立发明集成电路(或微芯片),引领英特尔马辛·霍夫Federico Faggin佛德里克·法金发明微处理器。在1960年代,大量的电脑技术和过去的第二波电脑世代重叠,直到1975年后期,第二波电脑世代的机器仍在持续量产,像是UNIVAC 494。

微处理器的诞生连带刺激微电脑的发展,轻便小巧,物廉价美的电脑成为个人及小公司唾手可得的工具,微电脑在1970年代初登场,到了1980年代后就已经成为家家户户都可看到的产品了。第一款流行的个人电脑据信是出自苹果电脑公司的创办人之一斯蒂夫·沃茲尼亞克,不过他的第一部电脑Apple I出现得比KIM-1Altair 8800晚,第一部具有图形音效能力的苹果电脑也晚于Commodore PET。电脑逐渐成为微电脑架构的天下,再加上来自大型电脑的特色后,现如今已主宰大部分的电脑市场。

有关计算机硬件历史的更多相关文章

  1. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  2. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  3. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  4. ruby - 使用 Ruby,计算 n x m 数组的每一列中有多少个 true 的简单方法是什么? - 2

    给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in

  5. arrays - 计算数组中的匹配元素 - 2

    给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at

  6. ruby-on-rails - 如何计算 Ruby/Rails 中 JSON 对象的数量 - 2

    Ruby中如何“一般地”计算以下格式(有根、无根)的JSON对象的数量?一般来说,我的意思是元素可能不同(例如“标题”被称为其他东西)。没有根:{[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]}根包裹:{"posts":[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]} 最佳答案 首先,withoutroot代码不是有效的json格式。它将没有包

  7. ruby - 如何计算自 Ruby 中给定日期以来的周数? - 2

    目标我正在尝试计算自给定日期以来周的距离,而无需跳过任何步骤。我更喜欢用普通的Ruby来做,但ActiveSupport无疑是一个可以接受的选择。我的代码我写了以下内容,这似乎可行,但对我来说似乎还有很长的路要走。require'date'DAYS_IN_WEEK=7.0defweeks_sincedate_stringdate=Date.parsedate_stringdays=Date.today-dateweeks=days/DAYS_IN_WEEKweeks.round2endweeks_since'2015-06-15'#=>32.57ActiveSupport的#weeks

  8. 最新版人脸识别小程序 图片识别 生成二维码签到 地图上选点进行位置签到 计算签到距离 课程会议活动打卡日常考勤 上课签到打卡考勤口令签到 - 2

    技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进

  9. ruby - 如何计算两个字符串共有的字符数? - 2

    如何计算两个字符串之间的字符交集?例如(假设我们有一个名为String.intersection的方法):"abc".intersection("ab")=2"hello".intersection("hallo")=4好的,男孩女孩们,感谢你们的大量反馈。更多示例:"aaa".intersection("a")=1"foo".intersection("bar")=0"abc".intersection("bc")=2"abc".intersection("ac")=2"abba".intersection("aa")=2一些补充说明:维基百科定义intersection如下:Int

  10. python - 如何计算文件中唯一字符的数量? - 2

    给定一个包含各种语言字符的UTF-8文件,我如何计算它包含的唯一字符的数量,同时排除选定数量的符号(例如:“!”、“@”、"#",".")从这个算起? 最佳答案 这是一个bash解决方案。:)bash$perl-CSD-ne'BEGIN{$s{$_}++forsplit//,q(!@#.)}$s{$_}++||$c++forsplit//;END{print"$c\n"}'*.utf8 关于python-如何计算文件中唯一字符的数量?,我们在StackOverflow上找到一个类似的问题

随机推荐