🏖️作者:@malloc不出对象
⛺专栏:Linux的学习之路
👦个人简介:一名双非本科院校大二在读的科班编程菜鸟,努力编程只为赶上各位大佬的步伐🙈🙈
目录
- 前言
- 一、冯诺依曼体系结构
- 二、操作系统
- 三、计算机软硬件体系结构
前言
本篇文章讲解是冯诺依曼体系结构以及操作系统的初步认知。
一、冯诺依曼体系结构
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
截至目前,我们所认识的计算机,都是有一个个的硬件组件组成:
输入单元:包括键盘, 鼠标,扫描仪, 写板等
中央处理器(CPU):含有运算器和控制器等
存储器:根据冯诺依曼体系我们这里的存储器一般是指的内存,因为内存相对来说速度较磁盘快,价格适中。
输出单元:显示器,打印机等
输入设备:输入、输出设备被称之为外围设备,外设一般来说都会比较慢一些,以磁盘相对内存为例,磁盘是比较慢的。
接下来我有一个问题:为什么我们的外设不直接与CPU进行交互呢?我们的数据不就是要经过CPU进行计算之后,流入到输出设备吗??在中间加上一个内存不是更多此一举??
首先,我们要知道我们的外设的读取速度是非常慢并且存储着大量数据,如果将我们的外设直接与CPU进行交互,因为我们的CPU是读取速度是非常快的,如果仅仅只有外设与CPU进行沟通,那么效率会非常的低。这一点可以通过我们的木桶原理来解释,外设就决定了整体的效率!!也许你之前或许还听过"千万不要让CPU打盹",这是因为CPU资源是非常昂贵的,如果采用外设直接与CPU进行交互的话,那么CPU大部分的时间是空闲的,这简直就是暴殇天物,所以为了能充分利用CPU资源我们肯定会想出一系列办法让它发挥出它的最大价值!!挖空心思让计算机硬件发挥所有的潜能!!所以现在我们使用的PC就被打造成一款性价比极高的计算机了!!
为了解决这个问题,我们在外设和CPU之间引入了内存这种存储器系统,它的速度比外设要快的多,但是比CPU要慢,引入内存我们可以大大缓解木桶原理带给我们的效率低下问题!!内存临时存储数据并且它的读取速度还不慢,CPU在计算此时从内存中读取的数据时,同时我们可以将外设中的数据加载到内存中,这样CPU在计算完当前任务后,又可以持续从内存中读取数据进行计算,这样就充分利用了CPU的资源!!有了内存的存在我们可以对数据进行预加载,CPU以后在进行数据计算时,根本不需要访问外设,而是直接伸手向内存拿数据进行计算就可以了!!
Q:在简单的了解了冯诺依曼体系结构后,接下来我们继续来回答一个问题:为什么我们的程序在运行之前必须加载到内存中?
一个最经典的例子是我们的源文件在经过四个阶段形成可执行程序之后,在Linux中我们需要通过./可执行程序来运行这个程序,那么首先可执行程序是什么?它其实也就是一个普通文件,而为什么我们的程序在运行之前必须加载到内存中,经过上述问题的分析我们知道这是由冯诺依曼体系决定的!!
CPU在进行计算之前,磁盘中对应需要计算的数据需要提前加载到内存中,如果不提前将数据加载到内存中,那么我们的CPU此时就是空闲的,那么我们的整体效率就得不到提升!!例如,我们在开机时,磁盘的数据就会被提前加载到内存中,这样我们要进行计算时,我们的CPU就直接从内存中读取数据,不至于处于空闲状态!!
结论1:在数据层面,CPU一般不与外设直接沟通,而是直接只和内存打交道。
对冯诺依曼的理解不能停留在概念上,要深入到对软件数据流理解上,请解释从你登录上qq开始和某位朋友聊天开始数据的流动过程;从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程?
对于我们的用户来说,你可能觉得这是一个非常简单的过程,不就是发送一个消息嘛,然后对方就能看到消息。其实这个过程是非常复杂的,那么现在我们暂且只考虑在硬件层面进行数据的流动。
首先我们的QQ程序会提前加载到内存中, 在我们与某位朋友聊天时,我们发送一个"你好",这其中会进行什么处理呢?我们的消息首先会被加载到内存中,然后CPU进行计算处理将结果返回到内存中,内存再将结果交给显示器和网卡,此时的显示器也就是在我们自己的对话框中可以看到我们的信息,网卡中保存着"你好"的信息,经过网络运输之后,朋友的网卡接收到了数据,然后此数据加载到内存中,CPU进行计算之后返回给内存,内存将结果最后交给我们的显示器,朋友就能在显示器看到我发送给他的消息了。
这是由于硬件决定了我们的数据在流向时必须遵守我们的冯诺依曼体系结构。
结论2:在数据层面,外设只会与内存打交道。
关于冯诺依曼体系结构的理解就到这里了,对于我们的输入设备和存储器来说,数据会预加载到我们的内存中,那么请问我们的文件数据那么多,你预加载哪一部分的数据?你预加载过程中内存不够了怎么办??CPU是如何快速找到预加载的文件??等等一系列问题,这些硬件能够处理吗?
答案是不能,硬件无法处理这些工作,此时我们就需要一款软件来进行管理了,而这款软件就是我们接下来要讲的操作系统!!
二、操作系统
Q:操作系统是什么?
简单来说,操作系统是一款进行软硬件资源管理的软件。
由于操作系统这个概念非常的广泛,为了让大家更好的理解它,接下来我们将来感性谈谈操作系统。这里以学校为单位我们进行简化一下,一个学校有三类人,校长、辅导员、学生。
我们先来理解一下人的各种行为,首先我们人在行动之前有两步,第一步是决策,第二步是执行。就好比下课了我就在心里想着要吃什么,这是决策,我下课了之后去食堂吃我上课时想的,这是执行!!那么作为一个管理者它的主要行为是什么?决策or行为? 对于一个管理者来说,最关键的决策,他通常是充当一个出谋划策的角色,然后让下层去执行它的决策。那么对于一个学校来说,校长就是管理者。
Q:我们在日常生活中也知道我们一般听从的是辅导员的安排,校长可能并没有直接与学生进行沟通,甚至在学校你可能都没有见过校长,但是你不可否认校长把这个学校管理的井井有条!!why?
这也就说明了其实管理者与被管理者是不需要直接进行沟通的!!
Q:管理者与被管理者未进行直接的沟通,他是如何管理学生的呢?
校长知道你的成绩,学号,姓名,年龄等信息就可以对你进行管理!!校长下达指令给辅导员,辅导员将校长的命令传达下去,交由我们的学生去执行。
管理的本质:对被管理对象的数据做管理!!
Q:那么管理者是如何拿到被管理者的数据呢?
辅导员交给你的,辅导员把他所管辖范围的学生信息交给了校长,校长拿到你的数据,然后就可以对你进行管理了。
Q:校长要管理的学生对象这么多,那么他是如何进行数据管理的呢?
虽然校长要管理学生的数据很多,但是每个学生的属性都是一样的,都有学号、年龄、姓名、成绩等信息;这时候我们就能采用一个结构体来记录学生的各项信息,这个描述的过程就做好了,此时每个学生就是一个结构体对象。
那么如何对这么多学生进行组织?比如开除这个学生,开除的本质是什么?将这个学生的信息移除,如何移除? 首先我们要找到这个学生然后再将它的信息从我们的数据库中移除。
我们可以使用一种数据结构将所有的学生组织起来,例如我们可以使用链表,在结构体中多定义一个结构体指针next来指向下一个学生,每个学生就相当于一个节点。所以本质上校长对学生进行管理就是对链表进行增删查改的操作!!!
总结:管理的本质:先描述,再组织。 就像我们做任何事一样,首先我们要有一个大体的思路,然后再想办法完成这个特定功能。
上述对于硬件的管理的建模就已经完成了,校长就充当了管理者的身份 -->操作系统 ,辅导员充当执行决策的身份 --> 硬件驱动, 学生充当参与执行的身份 -->硬件 。
Q:操作系统为什么对软硬件资源进行管理呢??
操作系统对下通过管理好软硬件(手段),对上给用户提供良好(安全、稳定、高效、功能丰富等)的执行环境(目的)!!
既然操作系统为用户提供这么好的服务,但是它们真的相信我们吗??
下面我们通过一个场景来解释这个问题:
我们的银行操作系统为我们提供了更好的服务,但是这并不代表行长会相信我们,相反行长并不相信你,请问银行工作人员会带你到它们的现金仓库取钱吗?
当然不会,因为行长并不信任你,万一你是坏人呢;所以操作系统也是一样,为了自身的安全它会将内部实现细节全部封装起来,用户不能直接访问它!!
那么行长为了保证自身安全性和以及提供良好的服务,行长提供了窗口式服务,用户通过窗口来完成特定功能,在计算机体系结构中它被叫做系统调用接口。
系统调用在使用上功能比较基础,对用户的要求相对也比较高,它必须非常了解操作系统的内部实现细节,这对于开发者来说无疑增大了难度,所以有心的开发者就对部分系统调用进行适度封装,从而形成了库等,有了库就很有利于更上层用户或者开发者进行二次开发。
三、计算机软硬件体系结构
我们可以看到计算机软硬件体系结构是采用一种层状的结构来进行表示的,有人说过一句名言:“计算机科学领域的任何问题的可以通过增加一个间接的中间层来解决”。现在看来这句话真的是醍醐灌顶啊,这句话几乎概括了计算机软硬件体系结构的设计要点,整个体系结构从上到下都是按照严格的层次结构设计的。由于这些中间层的存在,使得应用程序与硬件之间保持相对的独立,我们要想实现某种功能只需增加一个间接的中间层,而不对其他中间层造成影响,这就是层次结构带来的好处。不仅是计算机软硬件体系结构是这样的,体系里面的每个组件比如操作系统本身,很多应用程序、软件系统甚至很多硬件结构都是按照这样的层次结构组织和设计的,
在我们初步了解了冯诺依曼体系结构以及操作系统之后,我们对于平常的某些操作这时候要有一个体系的认知了。例如:我们在Linux中执行了一条指令,你以为你仅仅只是执行了一条指令就完了吗?实际上它需要贯穿整个计算机软硬件体系结构才能完成特定的功能!!!这其中的内部细节是非常之复杂的,但操作系统作为计算机体系结构中的最强大脑,它确确实实做到了对用户提供良好的服务,我们不需要了解其中的具体细节就能完成我们所需的功能,对下很好的管理了软硬件资源!!
本篇文章的内容就讲到这里了,如果对于本文有任何疑问或者错处欢迎大家评论区相互交流orz~🙈🙈