一台计算机组成至少如下:
输入(Input)/输出(Output)设备,即I/O设备。 显示器这所谓的输出设备。 鼠标和键盘所谓的输入设备。 硬盘,数据持久化。
显示器、鼠标、键盘和硬盘这些东西并不是一台计算机必须的部分。
其实只需要有I/O设备,能让我们从计算机里输入和输出信息即可。云服务器,只要让计算机能通过网络,SSH远程登陆访问就好了,因此没必要配显示器、鼠标、键盘。
显卡(Graphics Card),使用图形界面操作系统的计算机必不可少。
有人可能要说了,我装机的时候没有买显卡,计算机一样可以正常跑起来啊!那是因为,现在的主板都带了内置的显卡。
如果玩游戏,做图形渲染或者跑深度学习应用,就需要买一张单独显卡,因为显卡里有GPU(Graphics Processing Unit,图形处理器),GPU一样可以做各种“计算”的工作。
鼠标、键盘以及硬盘都是插在主板。作为外部I/O设备,它们通过主板上的南桥(SouthBridge)芯片组,来控制和CPU之间的通信的。
“南桥”芯片
以前的主板上通常也有“北桥”芯片,用来作为“桥”,连接CPU和内存、显卡之间的通信。不过现在的主板上的“北桥”芯片的工作,已经被移到了CPU内部。
手机制造商们把CPU、内存、网络通信,乃至摄像头芯片,都封装到一个芯片,然后再嵌入到手机主板上,即SoC,System on a Chip(系统芯片)。
但无论是PC/服务器/手机都遵循冯·诺依曼体系结构(Von Neumann architecture),也叫存储程序计算机,意味着“可编程”、“存储”计算机。
计算机由各种门电路组成完成计算程序。一旦需要修改功能,就要重新组装电路。这样的话,计算机就是“不可编程”的,因为程序在计算机硬件层面是“写死”的。最常见的就是老式计算器,电路板设好了加减乘除,做不了任何计算逻辑固定之外的事情。
再看“存储”计算机。程序存储在计算机内存,可通过加载不同程序解决不同问题。
为了效率,有了“存储程序计算机”。冯基于在秘密开发的EDVAC写了一篇报告First Draft of a Report on the EDVAC,描述了一台计算机什么样。 包含处理器单元(Processing Unit):
完成各种算术和逻辑运算。
因为它能够完成各种数据的处理或者计算工作,因此也有人把这个叫作数据通路(Datapath)或者运算器。
包含控制器单元(Control Unit/CU):
控制程序的流程,通常就是不同条件下的分支和跳转。 算术逻辑单元和控制器单元组成CPU。
存储数据(Data)和指令(Instruction)的内存。以及更大容量的外部存储,在过去,可能是磁带、磁鼓这样的设备,现在通常就是硬盘。
半 导体存储器: 内存、U盘、固态硬盘
磁存储器: 磁带、磁盘
随机存取存储器RAM(Random Access Memory),通过电容存储数据,必须隔一段时间刷新一次,如果掉电,那么一段时间后将丢失所有数据。
随机读取、与位置无关 串行存储器: 与位置有关、按顺序查找 只读存储器(ROM): 只读不写
局部性原理。即在CPU与主存之间增加一层速度快(容量小)的Cache,以解决主存速度不足问题。
局部性原理。在主存之外增加辅助存储器(磁盘、SD卡、 U盘等),以解决主存容量不足的问题。
无论是使用什么样的计算机,都是和输入输出设备打交道。
任何一台计算机的任何一个部件都可以归到运算器、控制器、存储器、输入设备和输出设备中,而所有的现代计算机也都是基于这个基础架构来设计开发的
而所有的计算机程序,也都可以抽象为从输入设备读取输入信息,通过运算器和控制器来执行存储在存储器里的程序,最终把结果输出到输出设备中。而我们所有撰写的无论高级还是低级语言的程序,也都是基于这样一个抽象框架来进行运作的。
I/O设备与主机之间进行数据交换的传送线。
分为:
I/O设备状态向主机报告的信号线 查询设备是否已经正常连接并就绪 查询设备是否已经被占用
主机选择I/O设备进行操作的信号线 对连在总线上的设备进行选择
当外围IO设备就绪时,向CPU发出中断信号。CPU有专门的电路响应中断信号。 提供低速设备通知CPU的一种异步的方式,CPU可以高速运转同时兼顾低速设备的响应。
不过频繁切换 CPU 也会降低性能。所以又有如下方式
DMA直接连接主存与I/O设备
CPU速度与I/O设备速度不一致。 硬盘与外接显卡里都有。