计算机是一种可以通过计算机编程指令自动执行算术或逻辑操作序列的机器。现代计算机有能力遵循被称为程序的广义操作集。这些程序使计算机能够执行非常广泛的任务。“完整”计算机,包括“完整”操作所需的硬件、操作系统(主软件)和外围设备,可以称为计算机系统。这个术语也可用于连接在一起并共同工作的一组计算机,特别是计算机网络或计算机集群。
计算机被用作各种工业和消费设备的控制系统。这包括简单的专用设备,如微波炉和遥控器,工厂设备,如工业机器人和计算机辅助设计,以及通用设备,如个人电脑和移动设备,如智能手机。互联网是在计算机上运行的,它连接着数亿台其他计算机及其用户。
早期的计算机只被认为是计算设备。自古以来,算盘等简单的手工工具就帮助人们进行计算。在工业革命初期,一些机械装置被用来自动完成一些冗长乏味的任务,例如织机的引导模式。20世纪初,更先进的电机进行了专门的模拟计算。第一台数字电子计算器是在第二次世界大战期间开发出来的。从那时起,计算机的速度、功率和多功能性都在急剧增加。
传统上,现代计算机由至少一个处理元件(通常是中央处理器)和某种形式的存储器组成。处理元件执行算术和逻辑运算,排序和控制单元可以根据存储的信息改变运算顺序。外围设备包括输入设备(键盘、鼠标、操纵杆等)、输出设备(显示器、打印机等)和执行两种功能的输入/输出设备(例如2000年代的触摸屏)。外围设备允许从外部源检索信息,并允许保存和检索操作结果。
缘起
根据《牛津英语词典》,第一次使用“计算机”这个词是在1613年,在英国作家理查德·布雷斯韦特写的一本名叫《永人集》的书中:“我读到了时代上最真实的计算机,读到了尤尔(sic)呼吸到的最好的算数学家,他把你的一天缩短为一个短的数字。这是“计算机”一词的用法。指的是人类的计算机,即进行计算的人。这个词一直延续到20世纪中叶。在这一时期的后期,女性经常被雇佣为计算机,因为她们的工资可能比男性低。到1943年,大多数人类计算机都是女性。从19世纪末开始,这个词开始有了更为熟悉的含义,即进行计算的机器。
在线词源词典在16世纪40年代首次证明了“计算机”的用法,意思是“计算者”;这是“从计算(v.)得到的代理名词”。在线词源词典规定,“计算机”(任何类型)一词的使用始于1897年。”在线词源词典指出,“现代使用”一词的意思是“可编程数字电子计算机”始于“1945年,以这个名字命名;从某种意义上始于1937年,被称为图灵机”。
历史
20世纪前
最早的计数装置可能是一种计数棒。后来,在肥沃的月牙形地区,保存记录的辅助工具包括计算器(粘土球、锥体等),它代表物品的数量,可能是牲畜或谷物,密封在空心的未烧制的粘土容器中。
算盘最初用于算术任务。罗马算盘早在公元前2400年就由巴比伦人使用的算盘发展而来。从那时起,许多其他形式的计算板或桌子被发明出来。在中世纪欧洲的一个会计室里,一块方格布放在一张桌子上,马克笔根据某些规则在桌子上移动,以帮助计算钱款。
据Derek J.de Solla Price所说,安提基特拉机制被认为是最早的机械模拟“计算机”,它被设计用来计算天文位置。它于1901年在希腊安提基希拉岛上的安提基希拉残骸中被发现,位于基希拉和克里特之间,可追溯到公元前100年左右。与反Kythera机制相当的复杂程度的装置直到一千年后才会重新出现。
许多计算和测量的机械辅助设备都是为天文和导航而建造的。平面图是11世纪发明的星图。星盘是在公元前1世纪或2世纪的希腊世界中发明的。星盘是平面和屈光度的结合体,是一种有效的模拟计算机,能够解决球面天文学中的几种不同问题。1235年,波斯伊斯法罕的Abi Bakr发明了一种结合了机械日历计算机和带齿轮的星盘。
扇形是一种计算工具,用于解决比例、三角、乘法和除法问题,以及各种功能,如平方根和立方根,于16世纪末发展起来,并在射击、测量和导航中得到应用。
求积仪是一种手动仪器,通过机械连杆追踪闭合图形的面积来计算闭合图形的面积。
计算尺是在1620-1630年左右发明的,就在对数概念发表后不久。它是一台手工操作的模拟计算机,用于进行乘法和除法运算。随着计算尺的发展,增加的刻度提供了倒数、平方根和平方根、立方根和立方根,以及超越函数,如对数和指数、圆和双曲三角学和其他函数。带特殊刻度的滑尺仍然用于快速执行常规计算,例如用于轻型飞机时间和距离计算的E6B圆形滑尺。
17世纪70年代,瑞士钟表制造商皮埃尔·贾奎特·德罗兹(Pierre Jaquet Droz)制造了一个机械娃娃(Automaton),可以拿着一支羽毛笔写字。通过切换内部轮子的编号和顺序,可以产生不同的字母,从而产生不同的信息。实际上,它可以通过机械“编程”来读取指令。
威廉汤姆森爵士于1872年发明的潮汐预报机对浅水区的航行有很大的实用价值。它使用滑轮和钢丝系统来自动计算特定地点某一特定时段内的预测潮位。
微分分析仪是一种机械模拟计算机,设计用于积分求解微分方程,利用轮盘机构进行积分。1876年,开尔文勋爵已经讨论过这种计算器的可能构造,但他被球盘积分器的有限输出扭矩所困扰,在差分分析仪中,一个积分器的输出驱动下一个积分器的输入,或图形输出。扭矩放大器是使这些机器工作的进步。从20世纪20年代开始,Vannevar-Bush等人开发了机械式差分分析仪。
第一台设备
英国机械工程师兼博学家查尔斯·巴贝奇提出了可编程计算机的概念。他被认为是“计算机之父”,在19世纪初,他构思并发明了第一台机械计算机。1833年,他发明了一种革命性的差分引擎,用于辅助航海计算,后来他意识到,一种更通用的设计,即分析引擎,是可能的。程序和数据的输入将通过穿孔卡片提供给机器,这种方法当时正用于指导诸如提花织机之类的机械织机。对于输出,机器将有一台打印机、一台曲线绘图仪和一个钟。这台机器还可以在卡片上打上数字以便日后阅读。该引擎集成了一个算术逻辑单元,以条件分支和循环的形式控制流,以及集成的内存,使其成为通用计算机的第一个设计,可以用现代术语描述为图灵完备。
这台机器比它的时代早了大约一个世纪。他的机器的所有部件都必须用手工制造——这是一个拥有数千个部件的设备的主要问题。最终,该项目因英国政府决定停止资助而解散。巴贝奇未能完成分析引擎的工作,主要是由于政治和金融上的困难,以及他渴望开发出一台越来越精密的计算机,并以超越其他任何人的速度前进。然而,他的儿子亨利·巴贝奇(HenryBabbage)在1888年完成了分析引擎计算单元(Mill)的简化版。他在1906年成功地演示了它在计算表中的应用。
模拟计算机
在20世纪上半叶,越来越复杂的模拟计算机满足了许多科学计算的需要,模拟计算机使用问题的直接机械或电气模型作为计算的基础。然而,这些都是不可编程的,通常缺乏现代数字计算机的通用性和准确性。微分分析仪是一种机械模拟计算机,设计用于通过使用轮盘机构的积分来求解微分方程,由更著名的开尔文勋爵的兄弟詹姆斯·汤姆森于1876年提出概念。
从1927年开始,由H.L.哈森和vannevar-bush在麻省理工学院建造的差分分析仪使机械模拟计算技术达到了顶峰。这是建立在詹姆斯·汤姆森的机械积分器和H.W.Nieman发明的扭矩放大器的基础上的。这些设备中有十几个是在它们过时之前建造的。到了20世纪50年代,数字电子计算机的成功宣告了大多数模拟计算机器的终结,但在20世纪50年代,模拟计算机仍在一些特殊应用中使用,如教育(控制系统)和飞机(计算尺)。
数字计算机
机电
到1938年,美国海军已经研制出一种机电模拟计算机,其体积足够小,可以在潜艇上使用。这是一台鱼雷数据计算机,它使用三角法来解决向移动目标发射鱼雷的问题。在第二次世界大战期间,其他国家也开发了类似的装置。
早期的数字计算机是机电式的;电子开关驱动机械继电器进行计算。这些设备的运行速度很低,最终被速度更快的全电子计算机所取代,最初使用的是真空管。Z2由德国工程师Konrad Zuse于1939年发明,是最早的机电式中继计算机的例子之一。
1941年,Zuse使用了世界上第一台可工作的机电可编程全自动数字计算机Z3。Z3配备了2000个继电器,实现了一个22位字长,工作时的时钟频率约为5–10_Hz。Z3在穿孔胶片上提供了程序代码,而数据可以存储在64个字的内存中或由键盘提供。它在某些方面与现代机器非常相似,开创了诸如浮点数之类的众多进步。而不是更难实现的十进制系统(在查尔斯·巴贝奇的早期设计中使用),使用二进制系统意味着,考虑到当时可用的技术,zuse的机器更容易建造,而且可能更可靠。
真空管和数字电子电路
纯电子电路元件很快取代了它们的机械和机电等价物,同时数字计算取代了模拟计算。工程师汤米·弗劳尔斯于20世纪30年代在伦敦的邮局研究站工作,他开始探索电子设备在电话交换中的可能用途。他在1934年建造的实验设备在五年后投入使用,将电话交换网络的一部分转换成一个电子数据处理系统,使用数千个真空管[20]在美国,爱荷华州立大学的John Vincent Atanasoff和Clifford E.Berry开发并测试了Atanasoff–Berry计算机。R(ABC)公司于1942年[28]推出了第一台“自动电子数字计算机”。[29]这种设计也是全电子的,使用了大约300个真空管,电容器固定在机械旋转的磁鼓中,用于存储。
第二次世界大战期间,英国人在布莱奇利公园成功地破坏了德国的加密军事通信。德国的加密机“谜”号最初是在通常由女性操作的机电炸弹的帮助下被攻击的。为了破解更为复杂的德国Lorenz SZ 40/42机器,这台机器用于高级别的陆军通信,Max Newman和他的同事们委托Floors建造了这个巨人。他花了11个月的时间。从1943年2月初开始,在1943年12月进行功能测试后,巨像被运送到布莱奇利公园,在那里于1944年1月18日交付并于2月5日攻击其第一条信息。
巨像是世界上第一台电子数字可编程计算机。它有纸带输入,并且能够配置为对其数据执行各种布尔逻辑操作,但它没有图灵完成。建造了九台MK II巨像(MK I被改装成MK II,总共制造了十台机器)。巨像Mark I包含1500个热离子阀(管),但Mark II具有2400个阀,操作起来比Mark I快5倍,更简单,大大加快了解码过程。
ENIAC(电子数字积分器和计算机)是美国第一台电子可编程计算机。虽然ENIAC与巨人相似,但它更快、更灵活,而且图灵完备。像巨人一样,ENIAC上的“程序”是由其接线和交换机的状态定义的,这与后来出现的存储程序电子机器大不相同。一旦编写了一个程序,就必须通过手动重置插头和开关将其机械地设置到机器中。ENIAC的程序员是六名妇女,通常统称为“ENIAC女孩”。
它结合了电子技术的高速性和对许多复杂问题进行编程的能力。它可以每秒加或减5000次,比任何其他机器快1000倍。它还具有乘法、除法和平方根的模块。高速内存限制在20个字(大约80字节)。在宾夕法尼亚大学的约翰·莫奇利和J.Presper Eckert的指导下建造,ENIAC的开发和建设从1943年持续到1945年底全面运行。这台机器巨大,重30吨,使用200千瓦的电力,包括18000多个真空管、1500个继电器和数十万个电阻器、电容器和电感器。
现代计算机
现代计算机概念
现代计算机的原理是由阿兰·图灵在他1936年关于可计算数字的开创性论文中提出的。图灵提出了一种简单的装置,他称之为“通用计算机”,现在称之为通用图灵机。他证明了这种机器能够通过执行存储在磁带上的指令(程序)来计算任何可计算的东西,从而使机器可以编程。图灵设计的基本概念是存储程序,其中所有的计算指令都存储在内存中。冯·诺依曼承认,现代计算机的核心概念源于本文。图灵机器至今仍是计算理论研究的核心对象。现代计算机被称为图灵完备(即,它们具有与通用图灵机相当的算法执行能力),但其有限内存存储所施加的限制除外。
存储程序
早期的计算机有固定的程序。改变它的功能需要重新布线和重新构造机器。随着存储程序计算机的提议,这一改变。一种存储程序计算机,通过设计一个指令集,可以在存储器中存储一组详细计算的指令(程序)。艾伦·图灵在1936年的论文中为存储程序计算机奠定了理论基础。1945年,图灵加入国家物理实验室,开始开发电子存储程序数字计算机。他1945年的报告《拟议中的电子计算器》是这种装置的第一个规范。宾夕法尼亚大学的约翰·冯·诺依曼(JohnvonNeumann)也在1945年分发了他关于EDVAC的报告初稿。
曼彻斯特婴儿是世界上第一台存储程序计算机。它由弗雷德里克·C·威廉斯、汤姆·基尔伯恩和杰夫·托蒂尔在曼彻斯特维多利亚大学建造,并于1948年6月21日运行了它的第一个程序。它被设计成威廉斯管的试验台,这是第一个随机存取数字存储设备。尽管按照当时的标准,计算机被认为是“小而原始的”,这是第一台包含现代电子计算机所必需的所有元素的工作机器。婴儿一证明其设计的可行性,该大学就启动了一个项目,将其开发成一种更有用的计算机。GraceHopper是第一个开发编程语言编译器的人。
反过来,Mark 1很快成为了世界上第一台商用通用计算机费朗蒂Mark 1的原型。由费朗蒂制造,1951年2月交付曼彻斯特大学。1953年至1957年间,至少有七台这类后来的机器交付,其中一台交付给阿姆斯特丹的壳牌实验室。1947年10月,英国餐饮公司J.Lyons&Company的董事决定积极推动计算机的商业发展。利奥一号计算机于1951年4月投入使用并运行了世界上第一个常规的办公室计算机工作。
晶体管
双极晶体管发明于1947年。从1955年起,晶体管在计算机设计中取代了真空管,从而产生了“第二代”计算机。与真空管相比,晶体管有许多优点:它们比真空管小,而且比真空管需要更少的功率,因此释放的热量更少。硅结晶体管比真空管更可靠,使用寿命更长、不确定。晶体管计算机可以在相对紧凑的空间中包含数万个二进制逻辑电路。
在曼彻斯特大学,一个由Tom Kilburn领导的团队设计并制造了一台使用最新开发的晶体管而非阀门的机器。他们的第一台晶体管计算机和世界上第一台晶体管计算机于1953年投入使用,第二个版本于1955年4月在那里完成。然而,这台机器确实利用阀门来产生125千赫的时钟波形,并在磁鼓存储器的读写电路中,因此它不是第一台完全晶体管化的计算机。由哈韦尔原子能研究机构的电子部门建造。
集成电路
随着集成电路的出现,计算能力又有了新的巨大进步。集成电路的想法最初是由国防部皇家雷达研究所的雷达科学家杰弗里W.A.杜默提出的。Dummer于1952年5月7日在华盛顿举行的质量电子元件进展研讨会上首次公开了对集成电路的描述。
第一个实用的集成电路是由德克萨斯仪器公司的杰克·基尔比(Jack Kilby)和Fairchild半导体公司的罗伯特·诺伊斯(Robert Noyce)发明的。基尔比于1958年7月记录了他对集成电路的最初想法,并于1958年9月12日成功地演示了第一个工作中的集成示例。在1959年2月6日的专利申请中,基尔比·德斯(Kilby Desc)。他将他的新装置称为“一个半导体材料体”…其中电子电路的所有元件都是完全集成的。它是在Fairchild半导体公司生产的,由硅制成,而Kilby的芯片则由锗制成。
这一新的发展预示着计算机的商业和个人用途的爆炸性增长,并导致微处理器的发明。虽然关于哪种设备是第一个微处理器的问题存在争议,部分原因是对术语“微处理器”的确切定义缺乏一致性,但毫无疑问,第一个单芯片微处理器是由英特尔的Ted Hoff、Federico Faggin和Stanley Mazor设计和实现的Intel 4004。
芯片上的系统(SOCS)是硬币大小的微型芯片(或芯片)上的完整计算机。可能没有集成的RAM和闪存。如果没有集成,RAM通常直接放在SOC的上方(即封装上的封装)或下方(在电路板的另一侧),而闪存通常放在SOC的旁边,这一切都是为了提高数据传输速度,因为数据信号不必长距离传输。自1945年ENIAC以来,计算机取得了巨大的进步,现代SOC的体积只有一枚硬币大小,同时也比ENIAC强大数十万倍,集成了数十亿个晶体管,仅消耗几瓦电能。
移动计算机
第一台移动电脑很重,由主电源供电。50LB IBM 5100是一个早期的例子。后来的便携式设备,如Osborne1和Compaq便携式设备,重量要轻得多,但仍然需要插上电源。第一批笔记本电脑,如网格罗盘,通过整合电池,消除了这一要求,随着计算资源的不断小型化和便携式电池寿命的进步,便携式计算机在2000年代开始流行起来。
这些智能手机和平板电脑运行在各种操作系统上,最近成为市场上的主要计算设备,据制造商报告,2013年第二季度,估计已售出2.37亿台设备。智能手机等移动设备由芯片上的系统(SOC)供电,芯片上的系统是微型芯片上的完整计算机。只有硬币的大小。
类型
计算机通常根据其用途分类:
用途
- 模拟计算机
- 数字计算机
- 混合计算机
尺寸
- 智能手机
- 微型计算机
- 工作站
- 个人计算机
- 笔记本电脑
- 小型计算机
- 大型计算机
- 超级计算机
- 平板电脑
硬件
“硬件”一词涵盖了计算机中所有有形物理物体的组成部分。电路、计算机芯片、图形卡、声卡、内存(RAM)、主板、显示器、电源、电缆、键盘、打印机和“鼠标”输入设备都是硬件。
计算硬件历史
通用计算机有四个主要部件:算术逻辑单元(ALU)、控制单元、存储器和输入输出设备(统称为I/O)。这些部件通过总线互连,通常由一组电线组成。每一个部件内部都有数千到数万亿个小型电路,这些电路可以通过电子开关关闭或打开。每个电路代表一个信息位(二进制数字),因此当电路接通时,它代表一个“1”,当电路断开时,它代表一个“0”(正逻辑表示)。电路布置在逻辑门中,以便一个或多个电路可以控制一个或多个其他电路的状态。
其他硬件主题
输入设备
当未处理的数据在输入设备的帮助下发送到计算机时,数据被处理并发送到输出设备。输入装置可以是手动或自动的。处理行为主要由CPU控制。输入设备的一些示例包括:
- 计算机键盘
- 数码相机
- 数字视频
- 图形板
- 图像扫描仪
- 操纵杆
- 话筒
- 鼠标
- 覆盖键盘
- 实时时钟
- 轨迹球
- 触摸屏
输出设备
计算机输出的手段称为输出设备。输出设备的一些示例包括:
- 计算机监视器
- 打印机
- 电脑扬声器
- 投影机
- 声卡
- 视频卡
控制单元
控制单元(通常称为控制系统或中央控制器)管理计算机的各种组件;它读取和解释(解码)程序指令,将它们转换成控制信号,激活计算机的其他部分。高级计算机的控制系统可能会改变某些指令的执行顺序。
所有CPU共用的一个关键组件是程序计数器,它是一个特殊的内存单元(寄存器),用于跟踪下一条指令将从内存中读取的位置。
控制系统的功能如下:请注意,这是一个简化的描述,根据CPU的类型,这些步骤中的某些步骤可以同时执行,也可以以不同的顺序执行:
- 从程序计数器指示的单元格中读取下一条指令的代码。
- 将指令的数字代码解码成一组命令或信号,用于每个其他系统。
- 增加程序计数器,使其指向下一条指令。
- 从内存中的单元(或者从输入设备)读取指令所需的任何数据。所需数据的位置通常存储在指令代码中。
- 向ALU或寄存器提供必要的数据。
- 如果指令需要一个ALU或专用硬件来完成,则指示硬件执行请求的操作。
- 把从ALU得到的结果写回到一个内存位置,或者一个寄存器,或者一个输出设备。
- 跳回到步骤(1)。
由于程序计数器(概念上)只是另一组内存单元,因此可以通过在ALU中进行的计算来更改它。将100添加到程序计数器将导致从程序下100个位置读取下一条指令。修改程序计数器的指令通常被称为“跳转”,允许循环(计算机重复的指令)和条件指令执行(这两个例子都是控制流)。
控制单元处理一条指令所经历的操作序列本身就像一个短的计算机程序,实际上,在一些更复杂的CPU设计中,还有一个更小的计算机叫做微序列器,它运行一个微代码程序,导致所有这些事件的发生。
中央处理器
控制单元、ALU和寄存器统称为中央处理器(CPU)。早期的CPU由许多独立的组件组成,但自20世纪70年代中期以来,CPU通常是在一个称为微处理器的集成电路上构建的。
算术逻辑单元(ALU)
ALU能够执行两类运算:算术和逻辑。一个特定的ALU支持的一组算术运算可能仅限于加法和减法,或者可能包括乘法、除法、三角函数(如正弦、余弦等)和平方根。有些只能对整数(整数)进行运算,而另一些则使用浮点来表示实数,尽管精度有限。然而,任何只能够执行最简单操作的计算机都可以通过编程将更复杂的操作分解成它可以执行的简单步骤。因此,任何计算机都可以编程来执行任何算术运算,但如果其ALU不直接支持该运算,则需要花费更多的时间。ALU还可以比较数字并返回布尔真值(真或假),这取决于一个值等于、大于或小于另一个值(“64大于65?”).逻辑运算涉及布尔逻辑:AND、OR、XOR和NOT。这些对于创建复杂的条件语句和处理布尔逻辑很有用。
超标量计算机可能包含多个ALU,允许它们同时处理多个指令。图形处理器和具有SIMD和MIMD功能的计算机通常包含可以对向量和矩阵执行算术运算的ALU。
内存
计算机的内存可以被看作是一个可以放入或读取数字的单元列表。每个单元格都有一个编号的“地址”,可以存储一个数字。可以指示计算机“将123号放入1357号单元格”或“将1357号单元格中的数字添加到2468号单元格中的数字,并将答案放入1595号单元格。”存储在内存中的信息实际上可以表示任何内容。字母、数字,甚至计算机指令都可以同样容易地放入内存。由于CPU不区分不同类型的信息,因此软件有责任赋予内存所看到的重要意义,而只是一系列数字。
在几乎所有的现代计算机中,每个存储单元都被设置成以8位(称为字节)为一组存储二进制数。每个字节可以表示256个不同的数字(28=256);从0到255或−128到+127。为了存储更大的数字,可以使用几个连续的字节(通常是两个、四个或八个)。当需要负数时,它们通常存储在两个补码符号中。其他安排是可能的,但通常在专门的应用或历史背景之外看不到。如果计算机可以用数字表示,它就可以在内存中存储任何类型的信息。现代计算机有数十亿甚至万亿字节的内存。
CPU包含一组称为寄存器的特殊内存单元,可以比主内存区更快地读写。根据CPU的类型,通常有两百多个寄存器。寄存器用于最频繁需要的数据项,以避免每次需要数据时都必须访问主存储器。随着数据的不断处理,减少对主存储器的访问需求(与ALU和控制单元相比,这通常很慢)大大提高了计算机的速度。
计算机主存储器有两种主要类型:
- 随机存取存储器或RAM
- 只读存储器或只读存储器
RAM可以在CPU命令的任何时候读写,但是ROM预加载的数据和软件永远不会改变,因此CPU只能从中读取。ROM通常用于存储计算机的初始启动指令。通常,当计算机电源关闭时,RAM的内容会被删除,但ROM会无限期地保留其数据。在PC机中,ROM包含一个称为bios的专门程序,当计算机打开或重置时,该程序协调将计算机的操作系统从硬盘驱动器加载到RAM中。在通常没有磁盘驱动器的嵌入式计算机中,所有必需的软件都可以存储在ROM中。存储在ROM中的软件通常称为固件,因为它在概念上更像硬件而不是软件。闪存模糊了ROM和RAM之间的区别,因为它在关闭时保留数据,但也可以重写。但是,它通常比传统的ROM和RAM慢得多,因此它的使用仅限于不需要高速的应用程序。
在更复杂的计算机中,可能有一个或多个RAM缓存,它们比寄存器慢,但比主内存快。通常,具有这种缓存的计算机被设计成自动将经常需要的数据移动到缓存中,而不需要程序员的任何干预。
输入/输出
I/O是计算机与外界交换信息的手段。向计算机提供输入或输出的设备称为外围设备。在典型的个人计算机上,外围设备包括键盘和鼠标等输入设备,以及显示器和打印机等输出设备。硬盘驱动器、软盘驱动器和光盘驱动器是输入和输出设备。计算机网络是I/O的另一种形式。I/O设备通常是具有自己的CPU和内存的复杂计算机。一个图形处理单元可能包含50台或更多的小型计算机,这些计算机执行显示三维图形所需的计算。现代桌面计算机包含许多小型计算机,这些计算机协助主CPU执行I/O。2016年的平板显示器包含其自己的计算机电路。
多任务
虽然一台计算机可以被看作是运行一个存储在主存储器中的巨大程序,但在某些系统中,必须给出同时运行几个程序的外观。这是通过多任务处理来实现的,即让计算机在依次运行每个程序之间快速切换。实现这一点的一种方法是使用一种称为中断的特殊信号,这种信号可以周期性地使计算机停止执行原来的指令,而代之以做其他事情。通过记住它在中断前的执行位置,计算机可以稍后返回到该任务。如果多个程序同时运行。然后,中断生成器可能每秒导致数百个中断,每次都会导致程序切换。由于现代计算机通常执行指令的速度比人类的感知快几个数量级,因此许多程序似乎同时运行,即使在任何给定的时刻只有一个程序在执行。这种多任务的方法有时被称为“分时”,因为每个程序依次被分配一个“时间片”。
在廉价计算机时代之前,多任务处理的主要用途是允许许多人共享同一台计算机。看起来,多任务处理会使一台计算机在几个程序之间切换,其运行速度与它正在运行的程序数量成正比,但大多数程序花费大量时间等待缓慢的输入/输出设备完成任务。如果程序正在等待用户单击鼠标或按键盘上的键,那么在等待的事件发生之前,它不会占用“时间片”。这为其他程序的执行腾出了时间,使许多程序可以同时运行,而不会造成不可接受的速度损失。
多进程
一些计算机被设计成以多处理配置在多个CPU上分配它们的工作,这种技术曾经只用于大型和强大的计算机,如超级计算机、大型机和服务器。多处理器和多核(单个集成电路上有多个CPU)个人和笔记本电脑现在广泛使用,因此在低端市场上的应用也越来越多。
特别是超级计算机通常具有非常独特的体系结构,这与基本的存储程序体系结构和通用计算机有很大的不同。它们通常具有数千个CPU、定制的高速互连和专用的计算硬件。由于一次成功利用大部分可用资源所需的大规模项目组织,这种设计往往只对专门任务有用。超级计算机通常用于大规模模拟、图形绘制和密码学应用,以及其他所谓的“令人尴尬的并行”任务。
软件
软件是指计算机中没有实质形式的部分,如程序、数据、协议等。软件是计算机系统的一部分,它由编码信息或计算机指令组成,与系统所用的物理硬件不同。计算机软件包括计算机程序、库和相关的不可执行数据,如在线文档或数字媒体。它通常分为系统软件和应用软件,计算机硬件和软件相互需要,两者都不能单独实际使用。当软件存储在不易修改的硬件中时,例如IBM PC兼容计算机中的BIOS ROM,有时称为“固件”。
语言
有成千上万种不同的编程语言,有些是通用的,有些仅对高度专业化的应用程序有用。
程序
现代计算机区别于其他所有机器的决定性特征是它们可以被编程。也就是说,某些类型的指令(程序)可以给计算机,它将处理它们。基于冯·诺依曼体系结构的现代计算机通常使用命令式编程语言形式的机器代码。从实际意义上讲,计算机程序可能只是一些指令,也可能扩展到数百万条指令,例如用于文字处理器和Web浏览器的程序。一台典型的现代计算机每秒可以执行数十亿条指令(GigaFlops),在多年的运行中很少出错。由数百万条指令组成的大型计算机程序可能需要几年的时间来编写,而且由于任务的复杂性,几乎可以肯定包含错误。
存储程序体系结构
在大多数情况下,计算机指令很简单:将一个数字添加到另一个数字,将一些数据从一个位置移动到另一个位置,向某个外部设备发送消息等。这些指令从计算机内存中读取,通常按给定的顺序执行。但是,通常有专门的指令来告诉计算机在程序中向前或向后跳到其他地方,并从那里继续执行。这些被称为“跳转”指令(或分支)。此外,跳转指令可以有条件地执行,以便根据之前的某些计算结果或某些外部事件使用不同的指令序列。许多计算机通过提供一种跳转类型来直接支持子例程,这种跳转类型“记住”它所跳转的位置,并提供另一条返回该跳转指令后面的指令的指令。
程序执行可以比作阅读一本书。虽然一个人通常会按顺序阅读每一个单词和每一行,但有时他们可能会跳回到文本中较早的位置,或者跳过不感兴趣的部分。类似地,计算机有时会反复地返回并重复程序的某些部分中的指令,直到满足某些内部条件为止。这被称为程序中的控制流,它允许计算机在没有人为干预的情况下重复执行任务。
相比之下,使用袖珍计算器的人可以执行基本的算术运算,例如只需按几下按钮就可以添加两个数字。但要把1到1000之间的所有数字加起来,需要数千次按键和大量时间,几乎肯定会出错。另一方面,一台计算机可以通过编程来实现这一点,只需几个简单的指令。以下示例是用MIPS汇编语言编写的:
1 | begin: |
一旦被告知运行此程序,计算机将执行重复的加法任务,而无需进一步的人工干预。它几乎永远不会犯错误,现代PC可以在几秒钟内完成这项任务。
机器代码
在大多数计算机中,单个指令存储为机器代码,每个指令都有一个唯一的编号(简称操作码或操作码)。将两个数字相加的命令将有一个操作码;将它们相乘的命令将有不同的操作码,依此类推。最简单的计算机可以执行任意一种不同的指令;更复杂的计算机有几百种可供选择,每一种都有一个独特的数字代码。由于计算机的存储器能够存储数字,所以它也可以存储指令代码。这导致了一个重要的事实,即整个程序(只是这些指令的列表)可以表示为数字列表,并且可以在计算机内部以与数字数据相同的方式进行操作。将程序与它们操作的数据一起存储在计算机内存中的基本概念是冯·诺依曼(von neumann)体系结构(或存储程序[需要引用])的关键。在某些情况下,计算机可能将其程序的一部分或全部存储在内存中,而该内存与计算机运行的数据是分开的。这被称为哈佛架构。现代冯·诺依曼计算机在其设计中显示出哈佛架构的一些特征,例如在CPU缓存中。
虽然可以将计算机程序编写成长的数字列表(机器语言),而且这种技术在许多早期计算机中都使用过,但在实践中,特别是在复杂的程序中,这种方法极其繁琐,而且可能出错。相反,每个基本指令都可以有一个简短的名称,表示它的功能,并且易于记忆,这是一种助记符,如add、sub、mult或jump。这些记忆法统称为计算机的汇编语言。把用汇编语言编写的程序转换成计算机能真正理解的东西(机器语言)通常是由一个叫做汇编程序的计算机程序完成的。
程序语言
编程语言提供了各种指定计算机运行程序的方法。与自然语言不同,编程语言的设计不允许有歧义,而且要简洁。它们是纯书面语言,通常难以大声朗读。它们通常要么在运行前由编译器或汇编程序翻译成机器代码,要么在运行时由解释器直接翻译。有时程序是通过两种技术的混合方法来执行的。
低级语言
机器语言和表示它们的汇编语言(统称为低级编程语言)对于特定类型的计算机来说往往是唯一的。例如,ARM体系结构的计算机(如在智能手机或手持电子游戏中找到的计算机)无法理解在PC中的x86 CPU的机器语言。
高级语言
虽然比机器语言容易得多,但用汇编语言编写长程序通常很困难,而且也容易出错。因此,大多数实用程序都是用更抽象的高级编程语言编写的,这些语言能够更方便地表达程序员的需求(从而有助于减少程序员的错误)。高级语言通常使用另一个称为编译器的计算机程序“编译”成机器语言(有时编译成汇编语言,然后再编译成机器语言)。高级语言与目标计算机的工作关系比汇编语言小,与probl的语言和结构关系更大。最终程序要解决的问题。因此,通常可以使用不同的编译器将同一高级语言程序翻译成许多不同类型计算机的机器语言。这是使视频游戏等软件可用于不同计算机架构(如个人计算机和各种视频游戏控制台)的方法的一部分。
程序设计
小程序的程序设计相对简单,包括分析问题、收集输入、使用语言中的程序结构、设计或使用既定的程序和算法、为输出设备提供数据以及解决问题(如适用)。随着问题越来越大、越来越复杂,会遇到诸如子程序、模块、正式文档以及诸如面向对象编程之类的新范例等特性。涉及数千行代码及更多代码的大型程序需要正式的软件方法。开发大型软件系统的任务是一个重大的智力挑战。在可预测的时间表和预算内生产具有可接受的高可靠性的软件历来都是困难的;软件工程的学术和专业学科专门关注这一挑战。
漏洞
计算机程序中的错误称为“错误”。它们可能是良性的,不会影响程序的有效性,或者只有细微的影响。但在某些情况下,它们可能会导致程序或整个系统“挂起”,对输入(如鼠标单击或按键)失去响应,完全失败或崩溃。否则,善意的bug有时可能会被肆无忌惮的用户利用,这些用户编写的代码旨在利用bug并破坏计算机的正常执行。错误通常不是计算机的故障。由于计算机只执行它们所发出的指令,错误几乎总是由程序错误或程序设计中的疏忽造成的。美国计算机科学家、第一个编译器的开发人员格蕾丝·霍珀上将被认为是在发现死蛀虫后首次在计算中使用了“错误”一词。1947年9月,在哈佛Mark II计算机上短路继电器。
网络和因特网
自20世纪50年代以来,计算机被用来协调多个地点之间的信息。美国军方的SAGE系统是这种系统的第一个大规模例子,它导致了许多特殊用途的商业系统,如SABRE在20世纪70年代,美国研究机构的计算机工程师开始n使用电信技术将他们的计算机连接在一起。这项工作是由ARPA(现在的DARPA)资助的,由此产生的计算机网络被称为“ARPANET”。
随着时间的推移,这个网络扩展到学术和军事机构之外,并被称为互联网。网络的出现涉及到对计算机本质和边界的重新定义。修改了计算机操作系统和应用程序,使其能够定义和访问网络上其他计算机的资源,如外围设备、存储信息等,作为单个计算机资源的扩展。最初,这些设施主要是为在高科技环境中工作的人们提供的,但在20世纪90年代,电子邮件和万维网等应用程序的普及,加上以太网和ADSL等廉价、快速的网络技术的发展,使得计算机网络几乎无处不在。事实上,联网的计算机数量正在显著增长。有很大一部分的个人电脑定期连接到互联网,以进行通信和接收信息。”无线网络,通常利用移动电话网络,意味着网络越来越普遍,甚至在移动计算环境中。
非常规计算机
计算机不需要是电子的,甚至不需要有处理器,内存,甚至硬盘。虽然“计算机”一词的流行用法是个人电子计算机的同义词,但计算机的现代定义是字面上的:“计算的一种设备,尤其是可编程的(通常)电子计算机,它执行高速数学或逻辑操作,或组装、存储、关联或以其他方式处理。信息。“任何处理信息的设备都可以作为计算机,特别是当处理是有目的的时。
趋势
人们正在积极研究利用许多有前途的新型技术制造计算机,如光学计算机、DNA计算机、神经计算机和量子计算机。大多数计算机都是通用的,能够计算任何可计算的函数,并且只受其内存容量和运行速度的限制。然而,不同的计算机设计可以为特定的问题提供非常不同的性能;例如,量子计算机可以很快地(通过量子因子分解)破坏一些现代加密算法。
计算机体系结构
有多种类型的计算机体系结构:
- 量子计算机与化学计算机
- 标量处理器与矢量处理器
- 非统一内存访问(NUMA)计算机
- 寄存器机器与堆栈机器
- 哈佛架构与冯诺依曼架构
- 蜂窝结构
在所有这些抽象机器中,量子计算机最有希望使计算发生革命性的变化。逻辑门是一种常见的抽象,可以应用于上述大多数数字或模拟范式。存储和执行被称为程序的指令列表的能力使计算机非常通用,使之与计算器区别开来。丘奇-图灵理论是这种多功能性的数学表述:原则上,任何具有最小能力(图灵完成)的计算机都能够执行任何其他计算机可以执行的相同任务。因此,只要有足够的时间和存储容量,任何类型的计算机(上网本、超级计算机、细胞自动机等)都能够执行相同的计算任务。
人工智能
计算机将完全按照其编程的方式解决问题,而不考虑效率、替代解决方案、可能的快捷方式或代码中可能出现的错误。学习和适应的计算机程序是人工智能和机器学习新兴领域的一部分。基于人工智能的产品通常分为两大类:基于规则的系统和模式识别系统。基于规则的系统试图表示人类专家使用的规则,开发起来往往很昂贵。基于模式的系统使用有关问题的数据来生成结论。基于模式的系统包括语音识别、字体识别、翻译和在线营销的新兴领域。
职业和组织
随着计算机的使用在全社会的普及,越来越多的职业涉及计算机。
领域 | 方向 |
---|---|
硬件 | 电气工程、电子工程、计算机工程、电信工程、光学工程、纳米工程 |
软件 | 计算机科学、计算机工程、桌面出版、人机交互、信息技术、信息系统、计算科学、软件工程、视频游戏行业、网页设计 |
计算机协同工作和交换信息的需求,催生了许多正规和非正式的标准组织、俱乐部和社会的需求。
机构类型 | 机构名称 |
---|---|
标准组 | ANSI、IEC、IEEE、IETF、ISO、W3C标准 |
专业协会 | ACM、AIS、IET、IFIP、BCS |
免费/开源软件组 | 自由软件基金会,Mozilla基金会,Apache软件基金会 |