【Linux 学习计划】-- 冯诺依曼体系 | 操作系统的概念与定位,以及其如何管理软件
目录
冯诺依曼体系结构
操作系统是干什么的?
理解操作系统中的管理
对OS(操作系统)宏观、整体的分析
总结
结语
冯诺依曼体系结构
首先我们来看这样一张图,这就是大名鼎鼎的冯诺依曼体系
在日常生活中,所有的计算机都是遵循冯诺依曼体系结构的
其中这里面有很多都是我们日常生活中耳熟能详的
比如输入设备:键盘,麦克风摄像头等等,输出设备:显示器,声卡,网卡等等
还有像CPU和存储器(其实就是内存),这些我们在日常生活中都是很常见的
同时,我们的数据也必须是在这个体系中流动的,比如你要敲键盘,然后数据要在显示器中显示出来,而数据流动的本质就是复制,所以这就要求冯诺依曼体系中的每一个结构都有一定的存储能力:存储器不必多说,CPU中有寄存器等等
但是,为什么要有存储器呢?直接输入设备链接CPU链接输出设备不就好了吗?
这时我们就需要引入一个概念了,叫做木桶效应,也就是说,计算机整体的效率是由最慢的那个决定的
而我们效率的主要矛盾是什么?CPU的计算速度非常快,这肯定不是主要矛盾,所以最关键的就是数据流动的速度,也就是数据复制的速度
同样的,我们的CPU很快,但是输入和输出设备非常慢,所以导致我们的整体效率就被拖垮了,这也就是为什么我们需要一个内存作为中间桥梁的原因
因为内存中可以预先加载大量数据,CPU不必等数据全部从输入设备中来了才去计算,只需要从内存中读取即可,甚至还能在输入设备传输数据给内存的同时,CPU直接计算好顺带将数据返回给内存顺便给输出设备,这样我们的效率就提升了好几个量级
而同时,冯诺依曼体系结构规定:
CPU之和内存打交道,不和外设打交道
外设的数据只会交给内存,然后再交给CPU处理,最后再给回内存
所以,我们以前学习的时候,可能很疑惑,为什么代码一定要先加载到内存中才能跑起来
现在我们明白了,这时冯诺依曼体系结构要求这么干的,而我们的程序在没有跑起来之前,被放在了磁盘,也就是外设,只有加载到内存里面了,才能交给CPU然后跑起来
最后我们来说一下,为什么冯诺依曼体系结构那么伟大
大家看到这里其实还是比较无感的,认为这就是一个普通的知识点,而这时我们又需要引入一个概念了,叫做存储金字塔:
我们因为需要提升电脑的效率,所以有了存储器
如果你是一个土豪,你当然可以直接用各种寄存器充当内存只为追求极致的效率
但是这样的电脑,可能就需要成百上千万,根本不是老百姓消费得起的
而内存,没那么贵,但是却能够给我们老百姓提供一台效率相对不错的电脑,而老百姓买得起了,才会有那么多的网民,才能养活这么多的互联网公司,才有了如今的互联网时代,这也就是为什么说冯诺依曼体系结构是伟大的
最后举一个例子来演示一下冯诺依曼体系现实中的样子:
比如有两个人此时在wechat上面想聊天,那么左边的人,就需要通过键盘(输入设备)输入消息,然后消息加载到内存,通过CPU执行操作(比如说加密),最后传输给网卡(输出设备),中间网卡之间消息互传的部分,比如说tcp/ip这里就不讲了,最后消息就给到了右边的人
右边的人拿网卡(这时是输入设备)接收到了消息,然后消息加载到内存,交给CPU操作(比如说解密),最后给到右边的人的显示器(输出设备)
至此,两个人之间就能够互传消息了
操作系统是干什么的?
操作系统的作用就是:对系统中的软硬件资源进行管理
我们来举个例子(这张图并不全,这里只讲解硬件部分):
外设,是有很多种类的,还有不同的厂商,都是完全不一样的,所以我们的操作系统是不能直接对硬件进行管理的
比如说:市面上有很多游戏,现在厂商来了,说你要玩我这个游戏,你就自己去找资源,自己找地方买吧,这个时候,我们甚至可能买到盗版的,而这个过程是一个非常不好的体验
而这时来了一个steam,他把游戏全部都管理起来,就对玩家说,要玩?来我这里买,里面的付款啊,下载安装啊等等程序我都帮你处理好了,然后只给你提供对应的按钮,你点击就可以付款下载安装了
而steam这个角色在我们今天这个情景里,就是中间紫色的驱动程序
所有的驱动程序都是厂商自己写的,然后当我们硬件连接系统的时候自动安装(比如有些鼠标,我们刚接上电脑的时候没反应,过一小会听见“噔”一下,然后右下角说什么驱动程序已安装完毕)
而驱动程序都是文件,所以我们的操作系统只需要将这些文件管理好,就能将硬件管理好了
而这里我们只是以硬件为例子,而其他软件也是殊途同归
由此我们就能大概了解,为什么说OS(操作系统)是对软硬件进行资源管理的了
理解操作系统中的管理
你,是一个校长,今天你需要管理你学校里的学生
但是你并不需要直接和每一个学生都见面,你只需要得知每一个同学的数据,就能管理起来了
而你在当校长之前,你还是一个写c语言的程序员,你就想到,可以用struct创建一个学生类型,只要将学生的数据填进去即可
如果要管理起来,就在struct stu里面加上一个指向同样类型的指针,把每一个类型都连接起来,形成一个单链表
这样,我们对学生的管理就变成了对这个单链表的增删查改
比如今天我要找绩点最高的同学,好好表扬一下,那就是在这个链表中找到绩点那个数据最大的那个对应的同学,如果有个同学犯事了,要开除,那也就是把对应节点删掉而已
所以,管理的本质就是,先描述,再组织
接下来我们再回到我们最开始讲的OS与硬件和驱动程序之间的关系
我们的硬件自带了驱动程序,而我们的OS就是校长,将所有的驱动程序当成对应的类,填充对应的数据,就能够用数据结构管理起来,所以对硬件本身的管理,就转变成了对特定数据结构的增删查改,也就是先描述再组织
对OS(操作系统)宏观、整体的分析
现在再来看这张图,其实就亲切很多了
OS,对下要管理好各种硬件,对上,要给用户提供各种接口,管理好各种软件
总的目的就是:为用户提供一个良好、稳定、安全、高效的系统
对下我们前文讲过了,就是通过对硬件提供的驱动程序,进行先描述再组织,从而将硬件的管理转换成对特定数据结构的增删查改,从而管理硬件
对上我们现在来讲
首先,我们用户是不能直接管理硬件的,也不能进入操作系统内部
试想一下,银行会允许用户直接走到仓库里面存钱,然后自己输入存了多少钱吗?当然不会。同样的,万一用户操作不当,把OS搞fei了,那不就完damn了嘛
所以对上,OS会提供很多的接口给用户使用,也就是上图中的(system call)系统调用接口
对应的例子可以是银行前台的各种窗口:
你把钱和信息给对应的工作人员,让他们通过这些窗口帮你处理各种业务即可
但是银行中可能还有一些老大爷老大妈,他们甚至都不认识字,所以银行中就有比如客户经理,你不会写字我帮你写,资料什么的我帮你处理好转接,这也就是最上面的用户操作接口
而在过去,我们所有人都是老大爷老大妈,因为用户操作接口中有一个叫做 lib,也就是库函数
我们之前敲代码用的stdio.h就是这里面的东西
总结
冯诺依曼体系结构是计算机中约定俗成的一种结构,其中,输入输出设备都会直接也只会和内存进行联系,而CPU也是只会和内存进行联系,因为内存可以预先加载大量数据,从而提升计算机的整体效率(因为计算机效率的主要矛盾点就是数据的复制)
到了操作系统章节,操作系统可以用结构体将所要管理的东西描述起来,可能是驱动文件,可能是后面要讲到的进程等等,接着再用对应的数据结构管理起来,将对对应对象的管理转变成对对应数据结构的管理
而操作系统通过这些管理,最终达成对下管理好各种硬件,对上能为用户提供各种调用接口并管理好各种软件,最终为用户提供一个良好、稳定、安全、高效的操作系统
结语
这篇文章到这里就结束啦!!~( ̄▽ ̄)~*
如果觉得对你有帮助的,可以多多关注一下喔