冯诺伊曼体系结构
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺伊曼体系。
到目前为止,我们所认识的计算机,都是由一个个硬件所组成的。
· 输入单元:键盘,鼠标,写板等
· 中央处理器(cpu):运算器,控制器等
· 输出单元:显示器,打印机等
存储器就是常说的内存,特性掉电易失,我们还熟知有一个存储设备叫做磁盘,磁盘就是一个外存,外存具有永久性存储能力。
外存属于外设。
外设分为:输入设备,输出设备。
磁盘和网卡即属于输入设备也属于输出设备。
外设是相对于内存和cpu说的。
常见的思维,cpu是一台电脑的心脏,运行速度很快。确实相对于内存和外设,cpu运行速度快很多。
但今天所要说的是,cpu其实很笨。只能被动接受别人的指令,别人的数据,然后去执行别人的指令计算别的数据为目的。
因此cpu必须要认识别人的指令,所以在制作cpu的时候就设计了指令集。
指令
cpu只能识别二进制指令,
因此我们编写的代码,在汇编的阶段,由汇编语言转成了二进制指令。我们编译器存在的意义就是将代码转换成机器能够识二进制可执行程序。
数据
不知道大家是否清楚木桶原理
一个木桶盛水量取决于桶壁上最短的木板。
内存和外设都可以存储数据,从外设拿数据以外设的速度进行,从内存拿数据以内存速度进行。
因此为了提高整机效率,cpu在读和写的时候,在数据层面,只和内存打交道。
但是内存并不是天然就有数据的,数据真正都存在在磁盘上,实际上cpu读的数据早就预先由磁盘搬到内存中。(如开机的时候就把操作系统加载到内存)。并且cpu要写数据先写到内存,然后定期刷新到外设中。
内存就相当于一个大大的缓存,cpu只有内存打交道,内存和cpu和外设都打交道。
那么就有问题了,谁帮我预先读,谁帮我刷新,那些数据需要加载到内存,什么时候加载。。。。
答: 操作系统(下篇博文细说)
结论(在数据层面)
1.cpu不和外设直接打交道,和内存直接打交道
2.所有外设,有数据需要加载,只能载入到内存,内存写出,也一定是写到外设中
上述内容总结一点就是cpu不和外设直接沟通,只能和内存直接打交道。
有了上面的知识就可以回答
问:程序要运行为什么必须加载到内存?
答:因为cpu要执行我的代码,访问我的数据,只能从内存中读取(这是冯诺伊曼体系规定)
对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上,
问当你登录qq和你的某位朋友聊天,从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程,是怎么样的?如果是在qq上发送文件呢?
有人可能这样问,为什么发信息cpu参与进来呢?因为信息可能涉及加密解密的过程。