本文主要是介绍【Linux系统】冯诺依曼与操作系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
什么是冯诺依曼体系结构?
如图即为冯诺依曼大致的体系结构图, 我们知道这些都是由我们的计算机硬件组成
输入设备:键盘, 鼠标, 摄像头, 话筒, 磁盘, 网卡...
输出设备:显示器, 声卡, 磁盘, 网卡...
CPU:运算器和控制器
存储器:内存
在上图冯诺依曼体系结构图中我们可以看到红色箭头都代表的是数据的流动,那我们就要研究数据在我们的计算机的冯诺依曼体系结构中是怎么流动的呢?
这里给出结论:数据流动从一个设备到另一个设备,本质是一种拷贝!!!
而CPU处理数据是非常快的,那我们又可以得出一个结论:设备间的拷贝效率决定了计算机整机的效率。
在我们的冯诺依曼结构中我们的输入输出设备是不能直接与CPU打交道的, 原因在于CPU的速度实在是太快了, 而输入输出设备又相对比较慢,这样与CPU打交道,就像木桶效应版,会拖慢整机速度。
所以我们的祖师爷冯诺依曼就想出了这么个解决办法,这就引出了内存, 让内存与CPU直接打交道,这样输入输出设备都无需与CPU交互,直接面向内存就可完成任务。
如何理解冯诺依曼的体系结构带来的意义?
上图为存储金字塔。
存储:距离CPU越近,效率越高, 容量越小, 成本越高。
故冯诺依曼体系的结构不就是能够使现在的我们,家家户户都可买得起电脑。这不是大大的使计算机得到了大范围的普及,所以冯诺依曼体系结构对于我们的社会现实意义确实是重大的!
也就是说, 没有祖师爷冯诺依曼就没有现在的我们!!!
在硬件数据流动角度, 在数据层面:
- CPU不和外设直接打交道,只和内存打交道
- 外设(输入和输出)不是直接把数据给CPU的,而是先要放入内存中
能干什么?
1.程序运行为什么要加载到内存?
程序 = 代码 + 数据 程序“数据”都需要被CPU访问 -》CPU只会在内存中读取代码和数据
程序没有被加载到内存时, 是什么?答案是:磁盘中的二进制文件,即在外设中。
-》CPU只会在内存中读取代码和数据
这些都是冯诺依曼体系结构决定的!!!
一种场景
假设我通过qq这款应用程序要给小明发个消息为“你好”,数据是怎么传输的呢?
我们按照冯诺依曼体系结构来说, 即我们将通过输入设备即键盘输入数据,然后再写入内存,内存交给CPU进行加密操作, CPU还给内存, 内存再把加密后的数据交给输出设备即网卡,原因我们是在网络中传输数据, 所以需要网卡, 然后中间是一系列网络传输,由于尚未学习,略去, 经过网络传输的数据就来到接收方小明的输入设备即网卡, 然后写入到内存中, 内存交给CPU进行解密, 解密完成, 返还给内存, 内存把 数据再交给输出设备即显示器,显示到屏幕上, 这样一个在冯诺依曼体系结构下的数据传输的过程就完成了!!!
操作系统
1.概念
操作系统本质是一款软件。
进行软硬件 资源 管理的软件
广义的理解:操作系统的内核 + 操作系统的外壳周边程序(给用户提供使用操作系统的方式)
狭义:操作系统的内核
2.结构示意图(不完整)
如上图为体系结构的层状划分结构
操作系统的内核实质上就是操作系统,进行着各种资源的管理。
为什么要有操作系统?
对软硬件资源进行管理(手段)。
为用户提供一个良好(稳定的,高效的,安全的)的运行环境(目的)。
3.尝试理解操作系统
理解操作系统之前我们先要理解
什么是“管理”?
我们生活中的所有事情都要经过两步:1.决策 2.执行
那么举个栗子:我们学校的校长要管理这个学校的学生,他要怎么做?
我们是不是到了大学,我们可能就开学,毕业见过两次,但平常是完全没有接触的。
校长要想管理一个学校这么多人,不可能一个一个去接触吧,人这么多,怎么管理的过来呢?
假如校长是个程序员!!!
可以写个结构体将我们的各项属性写入结构体中去。
但校长是如何进行管理,然后进行资源分配呢?
所以说,校长管理我们不需要与我们直接接触!!!
即管理者与被管理者无需直接接触!!!
校长管理我们实际上是拿取我们的各项数据进行管理的。
而我们的数据哪里来的呢?
这些数据是由辅导员来与我们进行统计打包发给校长,校长再进行数据的管理。
这样校长对于学生的管理就变为对链表的增删查改!!!
这里我们就可以认为校长是操作系统, 辅导员即是驱动程序, 学生与学校的各种设施就是各种软硬件资源。
这样就进行了我们的一个完整的管理流程。
结论就是 管理:先描述,在组织
描述就是封装为一个一个对象,即用一个类或者对象进行封装,而组织就是在操作系统中用我们的各种数据结构进行组织。
完整结构示意图
如上图为一个完整的结构示意图
我们知道操作系统是一个对下进行软硬件资源管理(手段),对上提供一个良好(稳定的,高效的,安全的)的运行环境(目的)。
但我们用户需要使用操作系统来管理软硬件,我们能直接接触操作系统吗?
答案是,不能,操作系统不允许你这样做,我们应该都去过银行取钱吧,我们去银行取钱,我们能自行到仓库去取钱吗?不能吧,那不是全乱套了,想取多少就取多少!!!
所以就有前台服务,只开一个小窗口与内部交互。
这在操作系统就叫做系统调用接口,操作系统为我们提供了一系列系统调用接口,
我们可以拿来用,但又有个问题发生了!!!
操作系统是由不同厂商进行生产的,系统调用接口就会有一些不同,那怎么办,这样就出现了跨平台问题,这就为上层又出现了一个外壳,各种库,即一些c/c++标准库的内容,这些库能够很好的解决跨平台问题!!!
所以我们在下载编译器实际是下载的什么? 对应的标准库和编译器
如我们之前学习的c语言就有printf/scanf都与硬件进行了交互,这些都是标准库提供的函数接口用到调用系统调用接口,因为不同厂商他们提供的操作系统的接口不同!!!
所以总的来说:还是下面两句话!!!
对软硬件资源进行管理(手段)。
为用户提供一个良好(稳定的,高效的,安全的)的运行环境(目的)。
这篇关于【Linux系统】冯诺依曼与操作系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!