冯·诺依曼体系结构开创了计算机系统结构的先河,结构图如下:
输入设备:一般来说有键盘鼠标、麦克风.......
输出设备:比如显示器、音响、打印机......
还有一些设备既是输入也是输出:磁盘(可以从磁盘读取数据也可以向里面写入数据) 、网卡.......
存储器:存储器有内存和其它存储器(外存),这里指的是内存,具有掉电易失性,毕竟内存插电的时候才能工作。外存(如磁盘) 则具有永久存储性。
中央处理器(CPU)由运算器和控制器以及一些寄存器等构成,也就是我们俗称的芯片,是计算机非常重要的核心部件。看上去CPU好像很智能,其实它很“笨”,它只能被动地接收别人给它的指令和数据,然后将这些全部存储起来计算,比如给CPU 1+1让它计算,它先一一获取‘1’ ‘+’ ‘1’ 存储起来,然后再计算。那么CPU必须先认识外部指令,它是怎么认识的呢?————其实CPU有一套自己的指令集,我们写代码本质上是形成二进制可执行程序,到CPU那就被它按照它的指令集识别,然后进行工作。
CPU的运行速度非常快,其次是内存,最后是外存(磁盘)。不要以为这速度差了只是一点,可以说是鸿沟般的巨大差距!正因为速度不匹配所以CPU不和外存交互,之和内存交互。
CPU因为速度最快,只从内存读取数据,外存太慢了CPU不会一直等它。内存会提前把外存的数据加载进来,方便CPU读取,CPU的数据也会写给内存,内存再定期将要永久存储的数据刷新到外存上。那么什么时候刷新,谁来做这个决定?————答案是操作系统,以上所有调度都在操作系统的指挥下完成。
内存相当于一个大大的缓存,临时存储着两边的各种数据,在中间串联起了整个任务流程。CPU只与内存打交道大大提高了整体效率。
现在就能回答一个问题:“为什么程序要运行必须先加载到内存?”————CPU要运行我们写的程序只能从内存中读取数据。
将内存的数据写到外存,将外存的数据搬到内存这一过程称之为 IO (INPUT \ OUTPUT)
在理解上面的前提下,来看最后一个场景:你与朋友张三在两个不同的城市,你们在各自的电脑上登录QQ,你给他发了条信息,那么这条信息从你的电脑到他的电脑要经过什么流程(不考虑网络)
如图所示,你在电脑上用键盘输入信息,加载到内存,经过CPU将信息加密,再输入给网卡,由网卡输出发送到网络(网络中间过程不赘述),然后由张三电脑的网卡接收,再加载到内存,由CPU解密信息,打印到显示器。基本硬件层面的信息、文件传递就是这么个流程。