文章目录
- 一,硬件体系
- 1.1 冯诺依曼体系
- 1.2 为什么冯诺依曼体系要有内存
- 1.2.1 提高效率
- 1.2.2 支持并行逻辑
- 1.3 解答疑惑
- 二 OS体系
- 2.1 为什么要有OS(为什么)
- 2.1.1 给用户提供稳定高效安全的运行环境(目的)
- 2.1.2 OS不信任任何用户
- 2.2 OS怎么实现管理(怎么做)
- 2.2.1 如何管理
- 2.2.2 先描述再组织
- 2.2.3 系统调用和库函数概念
** **
一,硬件体系
我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。截至目前,我们所认识的计算机,都是有一个个的硬件组件组成,形成硬件的体系,这个体系叫做冯诺依曼体系。
1.1 冯诺依曼体系
1️⃣输入设备:键盘,鼠标,网卡(网络输入),磁盘,话筒,麦克风…
2️⃣输出设备: 显示器,网卡,磁盘,打印机…
3️⃣存储器:内存
🔺运行程序,写入程序,读取程序等操作都是在内存进行操作的
4️⃣运算器:对我们的数据进行计算任务(算数运算、逻辑运算)
5️⃣控制器:对我们的计算机硬件流程进行一定的控制
🔺运算器和控制器有一个总称,叫做中央处理器,也就是CPU
从图中我们可以看到,红线为数据信号,这意味着CPU并不能直接的和外部设备和内部设备直接的打交道,外设要使用CPU,则必须要将程序先加载到内存(存储器),才能使用CPU。黑线为控制信号,这意味着CPU其实是能直接的给外部设备发送控制信号的。
1.2 为什么冯诺依曼体系要有内存
从上面的体系图中我们知道一个结论:CPU在数据层面,是不会和外设直接打交道的,它只会和内存进行交互,那为什么CPU不能直接链接外设?而是从中单独设计了一个内存串联整个线路?
1.2.1 提高效率
容量越大,速度越慢;容量越小,速度越快。CPU和硬盘分别是两个极端。
CPU是纳秒级别的,而外设却是毫秒级别的,他们在数据层面的交互上速度差别太大,需要有一个存储器(内存)作为他们之间的桥梁。
内存是CPU和外设的一个巨大的缓存,CPU和内存交互取决于内存的效率,因为内存空间较大,外设也就可以先将数据加载到内存,这样在一定程度上可以提高效率
1.2.2 支持并行逻辑
木桶效应:木桶能装多少水,取决于它的短板。对于 外设 -> 内存 -> CPU这样的结构,我们很容易就能想到木桶效应,会觉得计算机的效率似乎取决于它的硬盘效率。那为什么要设计内存作为中间的桥梁?在效率上不是互相拖累吗?
如果这段逻辑是串型的,那似乎确实是这样,但是这段逻辑实际上的并行的,CPU并不是一定要等到数据全都加载到内存的才会去工作,其实在我们将数据从输入设备加载到存储器时,CPU可能并没有闲着,而是在处理别的工作。
例如我在外设写了一个程序,我要运行它,就要把它加载到内存,在程序加载到内存的过程中,CPU是不会停止工作的,它在处理其他的工作(进程),当你的程序加载到内存时,CPU也就刚好要运行你的程序了。意思就是说cpu从存储器中拿数据和外部设备导入到存储器这两个过程是可以同m时进行的!,这极大的提高了效率。
1.3 解答疑惑
😕为什么程序运行要先加载到内存?
👉这是由冯诺依曼体系决定的, 程序其实就是一个二进制文件,文件就是存储在磁盘(外部设备)中的,要去CPU那里才能运行,所以必须要先加载到内存中。
😕为什么scanf printf要有缓冲区,缓冲区在哪里?
👉从冯诺依曼体系下看,scanf其实是对输入设备做指令,printf是对输出设备做指令,那么他们之间要做数据的交互,则必须先加载到内存,所以scanf printf的缓冲区就在内存中。
😕 如果我要在qq与朋友聊天,在冯诺依曼体系下,数据是怎样流通的?
👉
二 OS体系
OS体系就是操作系统,操作系统本质就是一种软硬件资源管理的软件。
2.1 为什么要有OS(为什么)
2.1.1 给用户提供稳定高效安全的运行环境(目的)
OS通过对下进行操作系统对下软硬件资源的管理,可以实现对上提供给用户提供稳定高效安全的运行环境,而操作系统作为软件要操控硬件,必须通过每一个硬件对应的驱动程序去达成联系,每一款硬件都要有自己的驱动程序。例如,我们在插入鼠标,键盘到我们的电脑时,总是要等待几秒才能使用,这是因为操作系统在部署这些硬件对应的驱动程序;再例如我们插入初次插入U盘,电脑的右下角自动的也会弹出正在下载U盘的驱动程序,原因也就在于操作系统正在部署它的驱动程序。结论:驱动程序是我们和硬件打交道的软件(大部分是系统自带的)
对下进行硬件资源的管理是操作系统的手段,它真正的目的是对上提供给用户提供稳定高效安全的运行环境,但我们老百姓是不懂什么系统接口的,不善于与OS打交道,所以用户所用的都是由专业的程序员设计开发好的软件,先由程序员基于各种需求开发出不同功能的软件,用户(老百姓)才能正常方便的使用。
2.1.2 OS不信任任何用户
首先必须明确一个概念,不信任≠不能使用!操作系统必须保证自身数据的安全,所以它必须将自己封闭,任何用户都不能直接绕过操作系统直接的修改任何硬件的数据。同时,操作系统也必须向上提供各种操作的接口(从上图上看,就是system call的相关接口),OS的设计者用C语言写了一些内部的函数方法开放给外部,我们把它称之为系统调用。
这些接口是OS的设计者基于C语言写了一些内部的函数方法开放给外部,我们把它称之为 系统调用,因为这些接口都是由设计者提供的,所以他的内部自然会存在一些方法能够检测你的行为是否非法,只有合法的行为才能访问他的数据 。
但就算是系统调用,与他打交道也是很难的,才需要程序员基于系统调用去开发软件以便用户使用,所以所有的软件的底层或多或少都与C语言直接或间接有关。
😃👉举个例子,银行也是一个系统,银行有保险库,电脑,桌子…等等设备,银行不信任任何不是银行内部工作人员的人,银行不允许客户直接的从保险库里取钱,所以银行会安排工作人员在前台,处理用户的各种合法的业务;可是有些用户年龄比较大,不会在前台提出自己的需求,甚至不知道前台在哪里,这是银行会提供大堂经理,去帮助这些用户完成他们的业务。在这个例子中,银行就是OS,银行的设备就是计算机硬件,前台就是操作系统向上提供的接口,大堂经理就是程序员开发的软件。
2.2 OS怎么实现管理(怎么做)
OS对下进行软硬件的管理,实现对上的服务,那么,OS是如何进行硬件的管理的呢?
2.2.1 如何管理
通过一个例子,我们能很简单的理解操作系统管理的方式。
在大学中,我们的校长是学校的管理者,而学生显然一定是被管理者,这样就会引申几个问题:
❓Q1:我们与校长几乎面都不见,校长是如何管理好我的?
在这里会得出一个结论:管理者和被管理者不是一定需要见面的!
❓Q2:在管理者与被管理者几乎面的不见的前提,管理者如何管理被管理者?
假设学校要组织校队进行全国数学建模比赛,校领导只要选出学校数学水平最高的一队同学就行,于是校领导组织了一个校内的数学建模比赛,在比赛完后,收集各个同学的考试成绩,按成绩排序选取前几位的同学就行。所以,对于管理者来说,只要知道管理信息,就可以在未来进行管理决策。所以管理的本质是通过对数据的管理,从而实现对人的管理。
❓Q3:管理者是如何收集数据的?
假如学校需要各个同学的身份信息,名字等一些列数据,肯定不是一个一个找同学要的,而是拜托我们的执行者----辅导员,让每个年级的辅导员收集好每个同学的信息,将他们的数据用excel排列好,再向上级提交。学校需要将这些数据填入学校的数据库,肯定也不是一个excel表格直接丢进去的,而是让程序员(C语言)先设计好能记录每个学生信息的结构体!
用数据结构将他们的信息保存好来,在结构体中加入next指针,这样就可以以链表的形式将这些数据串联起来,就能很好的实现对这些数据的管理!在这个阶段,如果校领导要对学生进行管理,就把对学生的管理转变成了对链表的管理!对学生信息的排序,录入,删除,变成对链表的增删查改!问题也就从对人的管理,转变为对数据结构的管理!
在上面的例子中,我们的校领导(管理者)就是OS,辅导员(执行者)就是驱动程序,学生(被管理者)就是硬件。
2.2.2 先描述再组织
在上面的例子中,我们理解OS是如果管理硬件的,在此之中,发现了管理者通过描述出被管理者的结构体,然后再通过数据结构组织起来,然后再实现一些相关的算法去实现管理。所以就引申出了一个概念——先描述再组织。
先描述再组织的面向对象设计语言的核心思想了,想想我们是理解面向对象的概念的,是不是先描述这个对象相关的属性/方法,再把他们组织起来成为一个类的?!!例如上面校长学生的例子,校长通过对学生这个对象的相关属性描述出来:名字,学号,性别,电话…再用数据结构将他们组织起来,基于这样的数据结构再设计对应的排序或者其他的算法,从而实现管理的目的。往后要设计任何的软件,都是以先组织再描述的思想实现的!
另外在OS中,我们还可以知道:在OS中管理任何的对象最终都可以转化为对某种数据结构的增删查改!!往后学习的进程同样如此。
2.2.3 系统调用和库函数概念
在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。
系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。
本文就到这里,感谢你看到这里❤️❤️! 我知道一些人看文章喜欢静静看,不评论🤔,但是他会点赞😍,这样的人,帅气低调有内涵😎,美丽大方很优雅😊,明人不说暗话,要你手上的一个点赞😘!
希望你能从我的文章学到一点点的东西❤️❤️