🧑💻作者: @情话0.0
📝专栏:《Linux从入门到放弃》
👦个人简介:一名双非编程菜鸟,在这里分享自己的编程学习笔记,欢迎大家的指正与点赞,谢谢!
文章目录
- 前言
- 一、冯诺依曼体系结构
- 1.1 冯诺依曼体系组成部分
- 1.2 若内存不存在
- 1.3 硬件层面,单机与跨主机之间的数据流向
- 1.3.1 单机
- 1.3.2 跨主机
- 二、操作系统
- 2.1 概念
- 2.2 如何理解操作系统对硬件做管理
- 2.3 决策者和执行者的关系
- 2.4 管理的本质
- 2.5 操作系统为什么对软硬件做管理?
- 总结
前言
在学习linux的过程中,有一个特别重要的知识点就是关于进程的学习,那么在学习进程之前,首先对硬件做一些了解,然后再学习软件,在软硬件都学完之后再取去了解进程的概念。
一、冯诺依曼体系结构
我们常见的计算机,如笔记本;或者我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。
1.1 冯诺依曼体系组成部分
- 输入设备:计算机是对数据做处理的,那么前提条件就是要先将数据给到计算机,就要通过输入设备来完成这个操作,而输入设备一般指的是键盘、鼠标、话筒、摄像头、网卡、磁盘等。
- 输出设备:计算机本质是给人提供服务的,在将数据计算完毕之后要将结果呈现给用户,这就需要通过输出设备来呈现给用户,输出设备一般指的是显示器、磁盘、网卡、声卡、音响等。
输入设备和输出设备统称为外围设备,简称外设,它们的数据处理速度相对于内存来说是慢一点的,而CPU是整个结构中速度最快的。
- 存储器:也成为内存,输入设备先将数据给到内存,然后CPU再与内存沟通拿数据。
- CPU(中央处理器):计算机中最核心的功能块,完成数据的处理工作。含运算器和寄存器等。
1.2 若内存不存在
我们都知道,计算机是从输入设备处采集数据,在CPU处完成处理工作,然后再将处理结果给到输出设备,那么我们不要这个内存可以不,当然可以。但是,外设的数据处理速度是特别慢的,而CPU的处理速度又特别的快,这就可以提到 “木桶原理” ,表达的意思就是这个桶能乘多少水不取决于最长的木板长度,而是最短的木板长度。也就表明了整个计算机的处理效率就以外设的处理效率为主的。
所以,这就需要内存来起到一个中间过渡的作用,缓解 “木桶原理” 带来的效率下降的问题。外设,内存,CPU它们三个之间的数据处理速度是不一致的,有一定的差距。但是内存有一个特点:可以临时存数据,并且速度还不慢,那么就可以在CPU处理A任务的时候,将外设中关于B任务的数据搬到内存当中,当A任务被处理完毕之后就可以直接从内存当中拿到B任务进行处理。因为有了内存的存在,可以对数据进行预加载,CPU以后在进行数据计算的时候不需要访问外设了,直接从内存中拿数据即可。
结论1: 在数据层面,一般CPU不和外设直接沟通而是直接只和内存打交道。
1.3 硬件层面,单机与跨主机之间的数据流向
1.3.1 单机
比如说:我们打开视频APP要看电视剧,首先要将这个客户端软件加载到内存中,然后这个软件就可以被CPU执行,然后我们就可以看到这个软件的客户端界面,当点击播放的时候它就从网络中将关于这个视频资源的数据先拿到内存中,再进行数据计算,比如该视频是收费的,在免费播放了五分钟之后就强制关闭了,或者在10分钟的时候加一段30s的广告等等。最终将计算结果给到内存然后再给到输出设备(显示器)。
1.3.2 跨主机
你和你的朋友微信聊天,你发送一个干啥着呢?那么整个信息是如何在体系结构中流动的?(不考虑网络的情况,即发出去就可以收到)
- 你通过键盘输入“干啥着呢?”到内存中,然后数据要做计算(因为数据在发送时可不止一条或者你的数据很私密,所以要进行加密),然后将计算之后的结果写回到内存中,然后再将该数据显示到输出设备(将数据刷新到本地的显示器中,同时将该数据发送到网卡中,对应你朋友的输入设备)
- 同样先从网卡中获取到数据交到内存中,在CPU拿到数据之后进行解密操作,把数据又给到内存,然后再将数据刷新到输出设备中(你朋友的显示器)
结论2: 外设只和内存打交道(数据层面)
二、操作系统
2.1 概念
操作系统是一款进行软硬件资源管理的软件。
2.2 如何理解操作系统对硬件做管理
谈到管理,举个简单例子:比如在学校这样的场景下,有三种角色:校长,导员,学生,很明显学生是充当被管理者的角色,而管理者是谁呢?校长还是导员呢?按道理来说作为一个大学生来说,四年下来基本上见不到校长的面,那么导员应该是管理者,对不对呢?
在日常生活中,我们每一个人既是决策者也是执行者,比如:我今天中午要吃什么饭(决策),然后就去吃了(执行)。而作为管理者,大部分工作是拥有决策的能力,而非执行。
那么很明显校长是决策者,关于学校的一些指令都是校长下发的,而导员只是按照校长的指令行事。
职业 | 职能 |
---|---|
校长 | 决策 |
导员 | 决策并执行 |
学生 | 参与执行 |
2.3 决策者和执行者的关系
注意:以下所有的场景都是在举例。
比如说在学校里面,一个学生基本上很难见到校长的面,但是为什么校长能把学生管理的如此之好,不管是每天在那间教室上课,在哪个宿舍睡觉,亦或是哪些学生挂科了等等。由此可以间接说明:作为管理者和被管理者,其实是不需要直接沟通的,当然沟通也是没什么问题的。
管理者和被管理者没有直接沟通,那么它们之间是如何管理的呢?
在学校里面校长和学生不直接沟通,但是校长他能够知道你名字是什么,电话号码是什么,学号是多少,专业是哪个,科目已经修了多少等等,亦或是在公司里你为这个公司这一年做了多少贡献,迟到或早退了多少次,加班了多长时间等等。
在上大学之前,你家长每天都照顾着你的一切,你早都不耐烦了,于是上了大学之后你感觉自己终于挣脱了束缚,但是假设说你家长可以知道你每天干了什么,他们就可以打电话问候你的一切,关心亦或是指责。
其实根据上面这几个例子就可以说明:管理的本质——管理者对被管理者的数据进行管理。
那么管理者是如何拿到被管理者的数据呢?根据学校的例子很清晰,通过导员(中间人)。
比如说,校长安排每个导员把自己所管理的每个学生的信息都统计起来发给他,因为校长要对所有人做管理,如果说要是将所有的信息都放在表格里,那就太复杂了,所以校长就按照结构体的形式(下例)将所有学生的信息都统计起来,再按照链表的方式将每个结构体对象链接起来。
假设某个学生成绩太差要将其退学,难道只让他离校就可以了吗?当然不行,还得在这样的学生链表中将这个学生对象剔除掉;或者学校又转来一个学生,同样也是在链表中将该学生的信息形成一个结构体对象并添在其中,总之来说,校长要对学生做管理,都是在该链表上操作。
struct stu
{
姓名,
年龄,
专业,
成绩,
电话,
struct stu* next;
]
总结:上面举的所有例子都是在对管理的动作进行建模(将具体的一些场景转化为计算机语言)。
2.4 管理的本质
先描述,再组织
那么在计算机中,校园中的三种角色对应的是什么呢?
校长——操作系统;导员——硬件驱动;学生——硬件(软件)
硬件驱动主要负责就是与硬件的交流沟通,拿到硬件的数据后交给操作系统做决策,然后在将决策后的结果交给驱动来执行。操作系统来做决策,驱动来执行。每一个硬件(键盘、鼠标、磁盘、网卡)基本对应一个硬件驱动。
2.5 操作系统为什么对软硬件做管理?
操作系统对下通过管理好软硬件资源(手段),对上给用户提供良好(安全、高效、稳定、功能丰富等)的执行环境(目的)。
操作系统目的是为了给用户提供良好的服务,但是操作系统信任用户吗?
就拿银行的例子来讲,它有着一些底层的硬件设施:电脑、服务器;桌椅板凳;金库;员工宿舍。再往上看分别有不同的部门角色管理下面的设施。同时在银行里有着不同的员工给用户提供不同的服务,当然也有行长这样的角色。作为一个行长,他肯定要将整个银行系统合理的管理起来, 他不仅要把这些员工管理好(根据表现奖惩),而且也要管理好底层硬件设施,但是行长不可能亲自去管理那些硬件,而是就通过驱动这样的角色去管理。
因此,这也就说明了行长其实就是担当着操作系统这样的角色,即管理好下层硬件设施,也管理好每一位员工。行长和员工都是人,人可以管理硬件设施,也可以管理人。而操作系统是软件,它既管理软件,同时也管理硬件。
行长对下将员工和硬件管理的如此之好,目的就是为了对上给用户提供良好的服务。但是,银行它相信你吗?
很明显,你是信任银行的,要不然你不会去银行办业务,但是银行是不信任你的,在现实生活中你要存一万元,银行柜员不可能给你说你怎么怎么走到了金库把钱放到那里,然后出来填个表即可。对应的是操作系统给我们提供良好的服务,并不代表这操作系统会相信我们,反而操作系统不相信任何人,害怕群众中有坏人对自己造成伤害。就像是在银行里给你提供服务,但是为了保证自己(银行)的安全,它给用户提供窗口式的服务。
这也就说明了在计算机硬件体系结构中,用户是不可能直接进到操作系统里面对操作系统里面的内容数据进行访问和修改呢?当然不是。操作系统为了保护自己和给用户提供服务,于是将自己的特定功能以接口的方式给用户提供出来,而这些接口在操作系统层面被称为系统调用(操作系统设计的C函数)。
但是有时候操作系统调用接口使用成本特别高,因为一些操作你是得懂操作系统的。就一些大佬基于这些接口做了二次软件开发,于是就有了图形化界面、shell和工具集、部分指令。
总结
以上就是在学习进程之前该了解的一些知识,主要明白操作系统管理的本质,而这个本质也是始终贯穿于Linux的整个学习。