目录
此刻风流归天地,不胜水中明月光

📖1、冯诺依曼体系结构
我们日常生活中常见的笔记本,以及我们不常见的服务器,它们的本质其实都是一堆硬件,
(如CPU,内存,网卡,磁盘等),但是我们的笔记本或者服务器并不是说把一堆硬件毫无规章的放在一起就能组成一个计算机。
它需要硬件与硬件之间相互的能力配合,因此,冯诺依曼体系出现了,冯诺依曼体系就是为了系统的让硬件与硬件之间配合,以此对外提供更好地服务
那么,什么是冯诺依曼体系呢?请看这一张图->:
📖2、硬件介绍
📖输入、输出设备的理解
我们知道,计算机只能识别0和1,但是我们平常使用的都是文字或者图片,计算机无法直接识别,因此这时候就需要使用到冯诺依曼体系中的输入设备和输出设备
输入设备->:将我们的文字或者图片转化为二进制的数据,并传输到内存中,以至于计算机能够处理
输出设备->:会将处理后的二进制数据还原为用户能感知的文字、图像、声音等形式
在我们的日常生活中,常见的输入设备和输出设备如下->:
● ***输入设备:*鼠标、键盘、摄像头、磁盘、网卡等
● ***输出设备:*显示器、播放器硬件、磁盘、网卡等
小Tips:需要注意,磁盘属于外部设备,计算机可以从磁盘中读取数据进行运算,也可以把运算结果写入到磁盘当中。
📖存储器
这里的存储器就是我们平时所说的内存,它是一种硬件级别的缓存空间,在冯诺依曼体系结构中占据核心地位。(为什么占核心地位下面会讲)
📖中央处理器CPU
中央处理器,也叫做CPU,如上图它是由运算器和控制器共同组成的。
其中运算器是对用户输入的数据执行计算任务,分为算数运算和逻辑运算,前者可以执行加减乘除,后者可以执行真假判断。
控制器是对计算过程,即硬件流程进行控制,协调各组件与各单元间的工作。(如冯诺依曼体系图中的控制信号)
📖总线概念
冯诺依曼体系结构中涉及的五大模块,输入设备、存储器、运算设备、控制器、输出设备,都是独立的个体,有各自独立的功能,这些独立的个体要共同组成一个计算机,就必须要将它们组织联系起来。输入设备需要把数据交给内存,CPU再从内存中读取数据进行运算,将运算结果再写入内存,内存最终再把数据交给输出设备
为了实现数据在五大模块间的流动,就需要把用"线"把各个硬件单元连接起来,这个"线"在计算机中就被称作总线,总线可分为系统总线和IO总线。前者是用于连接CPU和内存,后者是连接内存和外设(输入、输出设备)。
有些总线在我们拆开计算机后可以直接看到,有些则是直接集成在硬件电路上。
📖3、内存的重要性
我们在硬件介绍处提到了一嘴,内存非常重要,为什么非常重要? 请接着看->:
在冯诺依曼体系中,规定了CPU只能和内存打交道,这还要源于一个性能的问题->:
在一台计算机中,可以用来存储数据的硬件有很多种,如下图->:
寄存器的读取速度是纳秒级别,内存的读取速度是微秒级别,外部设备(磁盘)的读取速度是毫秒级别的。由于CPU和外设之间的速度代差比较大
如果将CPU与外设(输入,输出设备)直接进行连接,那么在木桶效应的影响下,会导致计算机整体的运算速度下降
如图,整个桶的水量由短板决定
如果CPU直接和外设连接,尽管CPU的运算速度再怎么快,计算机整体的运算能力也会被外设的读取速度所限制。因此为了降低木桶效应对计算机整体运行速度的影响,引入了一种速度和容量都比较合适的存储设备------内存,冯诺依曼体系结构要求CPU只能和内存进行数据交互。
📖我们举一个例子,说明为什么要有内存的作用并为什么存在
我们在电脑上可以很迅速的打开每一个程序,这是因为输入设备把数据全部传给了内存,这样在需要使用这些数据时,CPU直接从内存中拿就可以,但是这里还看不出内存的作用
首先,每一个数据的处理都需要排队,这就好比厨师为你和其他客人做菜,有先来后到的规定,如果没有内存的存在,我们想打开很多个程序,但是因为输入设备对数据处理的速度远慢于CPU,这就导致我们想打开两个程序,第一个程序没打开就永远无法打开第二个程序,而第一个程序因为输入设备的传输速度相对于CPU很慢很慢,这就导致两个问题,
1.CPU大量的空闲时间,导致效率变低 2.单个/多个的程序打开极其 消耗时间
📖而内存的存在改变了这一点
内存的作用是,让输入设备将数据传输到内存中,然后由CPU直接到内存中取出来。
CPU处理后将数据返回给内存,内存再传输给输出设备
这样,当我们需要打开两个程序时,第一个程序将数据放到内存中,同时第二个程序也可以将数据放到内存中,而CPU直接从内存中把数据拿出来进行处理,因为CPU的速度极快,所以很快就处理好了(依旧有先来后到的规矩,并不是一次性全拿出来)
📖为什么选择内存,而不是寄存器?
我们知道时间复杂度和空间复杂度的重要性,能拿空间复杂度换时间复杂度绝对是赚的。而寄存器虽然访问速度极快,但是它的存储容量相比于内存非常小,如果想拥有存储容量类比于内存的寄存器,需要消耗大量的金钱,这就导致我们普通人用不起电脑,互联网也就不会存在。
因此,选择了价格,速度,存储容量都合理的内存
小Tips:操作系统保证了CPU的运算和IO可以同时进行。
📖4、程序运行的步骤
以我们写的.c源文件为例,我们代码写好后,需要先编译生成一个.exe结尾的可执行程序,然后才能运行。我们写的源文件,以及编译得到的可执行文件,它们都是存在磁盘(外设)上的。运行就是让CPU来执行我们的代码,对我们的数据进行运算,而根据冯诺依曼体系结构的要求,CPU只能从内存中拿数据,因此就决定了,一个程序想要运行,就必须先加载到内存(程序加载到内存中 并不等于 运行中,有可能只是加载)
只要是硬件要求,所有的软件都必须要遵守。即所有的软件要想运行,必须先把数据加载到内存。
小Tips:外设和CPU在数据层面不会直接交互,但是在信号控制阶段,CPU和外设是可以直接进行交互的。
📖5、QQ聊天时的数据流动
我们上面提到了冯诺依曼体系结构,接下来我们来举一个具体的例子->:
QQ聊天的第一步是打开QQ这款软件。打开QQ这款软件,就是点击它的应用图标,但是在计算机看来,本质上是把QQ这个可执行程序加载到内存当中,此时CPU就可以从内存中读取数据进行运算啦,运算的结果在我看来,就是显示出了QQ的应用界面。
接下来,我点开和你的对话框,通过键盘输入了"你好呀,伙计!"。因为这个对话框是QQ的,此时QQ已经被加载到了内存当中,所以春人通过键盘输入的内容,本质上会被加载到内存中。接下来CPU就闪亮登场啦,它从内存中将我想要发送的消息拿出来,进行一系列的打包运算,再把它交还给内存,然后内存会将这个包交给输出设备(这里是网卡、显示器),输出设备再将包通过网络就可以发送给对方啦。
对方的计算机,要通过网卡从网络中获取我发送的消息,此时网卡充当了对方的输入设备,网卡拿到的数据必须先交给内存,CPU从内存中把数据拿出来进行解包将结果再写入到内存,内存再将数据刷新到输出设备(显示器),此时你就能看到我发送的消息啦。
📖6、操作系统
上面我们提到了很多硬件设备,如键盘、显示器、网卡、CPU等等,它们都有各自独特的功能,可以完成不同的工作,它们就像是一个个的工具,最终要被使用就必须要有一个角色将它们管理起来,该角色能够在合适的时间去使用合适的工具,操作系统就充当了这个角色。
操作系统的定位是:一款纯正的"搞管理"的软件。
📖概念
任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。笼统的理解,操作系统包括下面两个部分:
内核(进程管理、内存管理、文件管理、驱动管理)
其他程序(例如函数库、shell程序等等)
小Tips:我们把这种包含其他程序的操作系统概念称为宏观上的操作系统,微观上操作系统的概念只包括内核。
📖7、操作系统的目的
我们先看这样一张图,这张图的中间就是操作系统的位置->:
那么,操作系统的目的就是如下图->:
**对下->:**与硬件交互,管理所有的软硬件资源。
**对上->:**为用户程序(应用程序)提供良好的执行环境。
这两点相辅相成,我们需要从以下几个方面来深入理解。
📖什么是驱动程序?(操作系统对下)
所有的硬件要想被软件去访问,都必须配上相应的驱动程序,没有驱动程序是无法使用硬件的。举个例子:在电脑刚开机的时候,我们的鼠标,键盘虽然在物理上已经和电脑建立起了连接,但并不是直接就可以使用,往往需要等上几秒,等待的过程就是加载驱动的过程。所有的硬件都有它自己的驱动程序,一般的驱动程序操作系统会自带,也有的需要我们自行下载。
📖为什么要有驱动程序,直接用底层硬件不可以吗?(操作系统对下)
理论上是可以的,但是实际上不允许。因为如果允许就会非常混乱,我们举一个例子->:
我们知道,硬件是分很多厂家的,不同厂家的硬件它们的工作方式或者型号都不同,如果没有驱动装置,我们这些用户就需要下载不同的东西去适配这些硬件
但是有了驱动装置就会如下->:
你插入一个USB摄像头,Windows不需要知道它是罗技还是索尼的,只要调用标准的USB Video Class (UVC)驱动接口即可
📖操作系统为什么要进行软硬件资源的管理?(操作系统对整体)
以银行为例,在银行中有保安、保洁阿姨、柜员、行长等几种角色,其中保安负责维护银行秩序,保洁阿姨负责银行的卫生,柜员负责办理业务,行长负责管理银行的各种事务。前三种角色就对应计算机中的各种硬件,行长就对应于计算机中的操作系统。假如行长不履行他的管理职责,那么这家银行就很可能出现,安保措施不到位,柜员办理业务不积极,保洁阿姨不认真打扫卫生等各种问题,反正行长啥也不管,大家都开始摆烂,这样就会导致客户体验变差,大家都不想再到这家银行办理业务。
计算机也一样,假如操作系统不对各种软硬件资源进行管理,那么用户在使用该电脑的时候,就可能出现一会儿蓝屏、一会儿卡顿、一会儿没声音等各种各样的问题,这样一来会导致用户体验变差,最终就没有人想用这台电脑。而电脑作为工具,生产出来的目的就是让用户使用,因此操作系统对软硬件资源的管理,本质上是为了给用户提供一个良好的运行环境,这里的良好包括不限于稳定、高效、安全。
这就好比老师管理正在上课的学生,不让学生干什么的都有(如有的斗地主,有的搞火锅,有的读书)
📖系统调用接口的理解(操作系统对上)
用户在计算机上的各种操作,最终都会被转换成硬件行为,例如用QQ发送消息,本质上会调用键盘、显示器、网卡等硬件设备;听歌,本质上会调用音响设备。这些硬件都是由操作系统进行调度的,这就意味着,当我们想用计算机干一些事情的时候,必须先经过操作系统。但是我们作为用户是无法直接去和操作系统进行交互的,因为操作系统本质是一款软件,它里面也会有各种信息,它不希望用户直接对这些信息进行随意的访问改动,因此操作系统为了保证自己的数据安全,也为了保证给用户能够提供服务,操作系统以接口的形式给用户提供调用的入口,来获取操作系统内部的数据。就像银行不允许我们直接到金库去拿钱一样,它给我们提供了很多办理业务的窗口,我们只能通过窗口去取钱,操作系统也是这样,我们只能通过系统调用接口去和操作系统进行交互。
操作系统是用C语言写的,所谓的接口本质上就是操作系统提供的一个函数,这个函数是在操作系统的内部具体实现的。既然是函数调用,那就需要有参数和返回值,就像去银行取钱,我们要把自己的身份证、银行卡等证件交给柜员,柜员确认无误后再将钱交给我们,系统调用接口也一样,它会对用户传递的参数进行合理性检查,确认无误后操作系统再去执行相应的操作,这样既保护了操作系统,也为用户提供了服务。
有了这些系统调用接口,就允许用户对底层的软硬件资源进行间接的管理。用户可以通过系统调用接口去要求操作系统调用某个硬件设备,所以就可以基于系统调用接口来设计实现各种各样的软件,例如shell外壳程序,用户可以在上面执行指令,而指令本质上也是可执行程序存储在磁盘上,要执行指令就需要把可执行程序从磁盘加载到内存,把数据从磁盘加载到内存这个动作,本质上是shell外壳程序调用系统接口来实现的。
直接使用系统调用接口是比较困难的,因此有人又对系统调用接口进行了上层封装(用户操作接口),例如我们C语言中平时使用的scanf,它可以从键盘中读取数据到内存,本质上是scanf函数中通过系统调用接口去访问硬件。在同一台计算机上可以使用不同的编程语言来开发,这些语言只要是涉及到硬件的,都是通过系统调用接口来实现的,所有的语言都是在系统调用接口之上的。因此,语言可以发生变化,但是系统调用接口是永远不变的。我们把这种基于系统调用接口的开发,称作系统编程。
📖总结
在开发角度,操作系统对外会变现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用,它是操作系统的一部分。
系统调用在使用上,功能比较基础,对用户的要求也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或开发者进行二次开发。(用户调用接口)
库函数和系统调用之间是上下层的调用和被调用的关系,库函数在上,系统调用在下。
📖8、操作系统是如何进行管理的
📖如何理解管理?
以校园管理为例子,我们知道,学校的人员主要分为三部分,校长,辅导员,学生
我们平常是见不到校长的,但是校长却是无时无刻的在管理着我们,这是如何办到的?
校长作为学校的管理者,可以通过学校的教务系统观看到我们的各项信息,如年龄,成绩,等,要评选奖学金的时候,校长只需要在教务系统中依据每个学生的成绩排个名,根据排名就可以把奖学金发给对应的学生。一名学生因挂科次数过多需要勒令退学,也是校长在教务系统中查出来的,退学只需要把该学生的信息从教务系统中去掉就可以,校长并不需要亲自告诉张三"喂,你小子因为挂科太多被退学啦"。校长并没有和学生见面就完成了一些列的管理任务。因此我们可以得出下面的结论:
管理者和被管理者并不需要见面。
管理本质上是对信息**(数据)**进行维护。
管理学生,本质就是对学生的各种数据进行管理,那校长是如何知道学生的各种信息的呢?答案是通过执行者,在学校里辅导员就扮演者这一角色,相信大家都遇到过辅导员发了一个在线表格,要求我们在几点前填完,这个表头全是我们的一些信息,这个过程就是辅导员作为执行者,去完成管理者(校长)安排的任务。
回到计算机,操作系统就相当于是校长,属于管理者;驱动程序就相当于是辅导员,属于执行者;硬件就相当于学生,属于被管理者。因此操作系统是通过驱动程序来获取到硬件的各种信息,以实现对硬件的管理。比如说网卡在使用的过程中发生了故障,那么驱动程序会把错误信息报告给操作系统,操作系统能解决了当然是最好的,操作系统解决不了加把信息报告给用户,提示用户需要更换网卡。
📖操作系统是如何管理硬件信息的?
上面我们学到了,管理的本质就是对数据进行处理,那么这是如何处理的呢?
正如教务系统,校长并不是瞎处理,而是先有我们的性别,年龄,成绩,排名,考试等数据,先有这些数据,校长再对我们进行数据处理
因此,操作系统管理硬件信息时,分为以下两步->:
先描述:用
struct
结构体。(因为操作系统使用C语言写的)。再组织:用链表或其他高效的数据结构,将描述硬件设备的结构体对象组织起来。
校长将我们的数据用链表等数据结构进行组织起来,这样就简化成为了增删改查的处理,也就是实现了高效的处理数据
小Tips:操作系统对硬件设备的管理最终都会转换成对某种数据结构的增删查改。这种管理方式就决定了操作系统中含有大量的数据结构。
📖9.完结
创作不易,留下你的印记!为自己的努力点个赞吧!