世界上第一台通用计算机ENIAC虽然能够重新编程,支持顺序、循环、分支、子程序等操作,但编程极为困难, 是用电路板上的开关来输入的。 想把一个程序输入计算机通常得好几周: 程序首先要在纸上写出来, 然后再花好几天的时间来操作开关和重新连接电缆, 还要验证和调试, 但是这一切做好以后,运行时间可能只有几分钟。 由于设计和输入程序的时间开销太大, 计算机运行速度快的优势就被抵销了。

如果程序切换以后, 想再次运行上一个程序, 还得重新把开关和电缆连接操作一遍, 让人抓狂。

如果能够把这个过程能用程序描述出来,由程序去控制,并能把程序存储下来该多好, 需要运行了,找到它运行就行了。

存储程序, 这并不是一个全新的想法, 当然,想把程序存储下来,需要定义一下机器的“指令集”, 这样各种各样的程序才用指令集中的指令描述出来, 方便存储。

就像生产一个产品,如何全自动化?如果生产一个产品的工艺需要50个步骤的工艺,需要200个零部件,要想实现自动化,你需要将整个工艺的50个步骤详细描述出来,每个步骤需要的零部件及存放位置也描述清楚,然后这个工艺和零部件的存储机制能够自动被随机访问,这样,不需额外的干预,就可实现自动生产。

按上面的思路,就是冯诺依曼的存储程序和程序控制概念,直到今天的绝大部计算机都是属于冯诺依曼机。如下就是一个冯诺依曼计算机体系结构:

冯诺依曼式计算机硬件系统(一个程序在电脑)(1)

在这个结构中一个程序由若干指令组成, 在运行之前, 要被“放到“某个地方, 你把这个地方称为存储器(内存), 可以把内存比喻成包含一个个格子的东西, 每个格子里放一条指令。

一个叫控制器的东西去读取“格子“中这个程序的第一条指令,分析指令到底要做什么事情, 产生控制信号,控制运算器去执行这个指令, 执行完第一条就接着执行第二条, 如此一直运行下去......

控制器和运算器是如此紧密的在一起工作,你决定把它叫做处理器

为了做人机交互, 还得有输入设备和输出设备来做辅助。

一个程序在电脑中的执行流程,描述如下:

冯诺依曼式计算机硬件系统(一个程序在电脑)(2)

-End-

,