LINUX入门篇【8】----计算机组成原理以及OS知识的总结

前言:

从而本篇文章开始,我们将进入LINUX的进程篇,但学习进程之前,我们首先需要重新认识我们的计算机,并且正确认识到控制进程的OS,即操作系统是怎样在计算机运行的过程中起到作用的。下面就让我们一同去了解一下吧。

1.计算机的组成结构:冯诺依曼体系结构

在计算机发展的早期,曾经有很多人都纷纷提出了计算机的组成结构理论,但是,广泛被认可并采纳的是冯诺依曼体系的计算机结构,到这里我们不禁要问,为何一定要采用冯诺依曼体系呢?各种体系去构成不同的计算机结构不是更好么?针对这个疑问,下面就让我们从冯诺依曼体系出发去重新认识一下计算机:
冯诺依曼的体系结构的组成如下:
LINUX入门篇【8】----计算机组成原理以及OS知识的总结_第1张图片
这便是我在网上找到的一张冯诺依曼体系的结构图,首先我们要明确,冯诺依曼体系针对的都是硬件,而非软件,在硬件与硬件之间起到串联关系的是数据线。
你可以发现其体系由五部分构成:
1.输入设备:
包括键盘,话筒,摄像头,usb接口,鼠标,ssd(固态硬盘),磁盘,网卡,显卡等
2.存储器:
即是内存
3.运算器/控制器:
在这里我们可以将其看成是一样东西,其内部包含计算机最关键的CPU处理器,寄存器设备等,CPU处理数据的速度大概是以纳秒为单位的,运算速度极快
4.输出单元:
如显示器,喇叭,打印机,磁盘,网卡,显卡等各种设备

这么多的硬件设备,如果不加以管理就会纷乱复杂,故这时OS(操作系统),便成为了管理他们的基本系统,LINUX操作系统的内核几乎都是由C语言去写的,这体现了C语言在嵌入式方面的独特之处,但同时它也包含一些汇编代码,X86,X64,AT&T等,通过这些代码,硬件设备得以被合理而有规律的调用,但是要知道,程序之间的流通是需要数据流动的,既然操作系统可以管理所有的数据,这意味着它管理的数据是都由有存储数据的能力的,故我们可以总结出这样一句话:
计算机内几乎所有的设备,都有数据存储的能力,之不过是存储能力大小的问题!

计算机的存储分级:

在一台以冯诺依曼为体系的计算机中,不同的硬件的存储速度是有很大差别的,其大致的速度排序为:
首先最快的是CPU,它是处理数据最快的硬件,其次是内存,然后是磁盘等各种外设,不过吗,现在的电脑基本使用的都是固态硬盘ssd而非磁盘,但你可以对其存储速度看作一个等级的硬件,由存储速度的区别,我们对计算机进行了一个存储分级,如下:
LINUX入门篇【8】----计算机组成原理以及OS知识的总结_第2张图片
这张如同金字塔图片便是我们的计算机的存储分级图,这张图从上往下,以CPU为中心,其距离依次离CPU越来越大,运算速度越来越慢,价格也随之降低,以至于形成了存储的分级。那这样的好处是什么呢?
看一看你现在所使用的电脑,要知道,最早的时候计算机是一个庞大且造价昂贵的科学机器,但现在它却成为了几乎普及于全世界大部分人手中的一个通信工具,这正是因为存储分级带来的成本降低。
我们通过存储分级,让最核心的金钱全部投入到最核心的CPU上,然后依次向下降低我们的成本,这样就可以得到一台运算速度很快同时价格划算的平民化计算机,以至于计算机得以推广和普及,从而推动了互联网产业的发展。
是的,我想说到这里,我们为何采用冯诺依曼体系的答案应该已经显而易见了,任何科学产品最终都是要服务于大众的,而大众意味着降低成本和价格,因此,冯诺依曼体系才由此成为了现代计算机组成结构的鼻祖和框架。

以存储分级的知识为延申,我们可以想到这样一个问题,为什么我们写程序时数据都是直接进入到内存中而不是其他硬件上的呢?
由上面的分级图,答案也是显而易见的,我们都知道木桶原理,即一个木桶的盛水量往往不取决于最长的那一块木板,而是取决于最短的那一块,计算机的运行也是如此,CPU之下的便是内存,倘若CPU直接与硬件交互,就会显著降低计算机整体的运算速度,故CPU只与内存交互,保证第一快和第二快交互从而保证了核心的运算速度不会被影响,所以,这便是为何我们的CPU只与内存交互而不与其他硬件交互。
LINUX入门篇【8】----计算机组成原理以及OS知识的总结_第3张图片

由冯诺依曼体系引发的一些思考:

1.程序在运行前,必须先加载到内存,为什么?

程序等于代码加数据,而这些代码和数据最终都要由CPU来进行处理,由前面我们知道,CPU只和内存交互,故这决定了CPU会从唯一可以交互的内存中读取数据,他们之间的交互是“二进制数据形式”的,从而形成了可执行程序.exe,被保存到磁盘中,这个是由体系结构决定的

2.两个不同的用户在不同地区使用同一款软件,并且打开各自的对话框开始对话,发送信息,从硬件层面上来解释这个信息的流动:

首先,我们的两个用户所使用的两台计算机本质上就是两台冯诺依曼体系结构体,由此,第一个用户首先通过输入设备键盘将数据传递给存储器内存,然后内存流动给CPU进行运算处理好后再传给其对应的输出设备网卡,网卡通过网络传输传递给另一个用户的输入设备接收,另一个用户的输入设备接收后立刻重复上面第一个用户的过程,CPU会解析资源包,最后显示在第二个用户的屏幕上,同时,第一个用户自己发送的信息也会被自己的输出设备显示在自己的屏幕上,这边完成了硬件层面上的信息流动。其示意图如下:

3.那两个用户之间的文件传递也是如此么?

本质上传输文件的过程和发送信息是相同的,唯一不同的是,会从第一个用户的文件中拷贝一份数据进入到输入设备中,然后重复第二个问题的过程,传入的数据经过CPU处理后会直接存入到对方的磁盘(文件)上,所以这也是为什么我们接收的文件都是以文件形式展开的,并且点击后会自动存在我们的电脑的目录中。

2.操作系统OS:

1.何为操作系统:

操作系统本质上是一款软件,可以对软硬件资源进行管理,让软硬件资源分配调用合理化。

2.为什么要有操作系统:

这个问题也可以理解为操作系统的目的,在我看来,试想这样一个情况,倘若没有操作系统,你的硬件管理是混乱的,其最大的反应在于你的游戏方面,你会发现你的游戏渲染一团糟,显卡在应该起作用来精细化图形的时候不调用,音乐随意响起而不是针对特定的时刻调用,语音交流无法进行,甚至到了最后屏幕直接关闭,你甚至看不到屏幕,如果没有操作系统,硬件的调用会非常混乱,故通过操作系统的使用,软硬件资源将会被管理好,这会为用户提供良好,稳定,高效且安全的使用环境,这便是操作系统存在的意义。

3.计算机结构的层状分析图:

LINUX入门篇【8】----计算机组成原理以及OS知识的总结_第4张图片
这个便是我们的计算机结构的层状分析图
我们发现,一个计算机的硬件之上分别是,底层硬件,驱动程序,操作系统,系统调用接口,用户操作接口,用户这6个方面。
我们以操作系统为分界线,将整个计算机的层状结构分为上下两层,下面让我们从硬件底层出发去向上解析。

1.底层下三层部分:

我们把底层硬件,驱动程序,操作系统看作我们的底层下三层,由前面的操作兄系统的概念我们知道,操作系统是来管理软件也管理硬件的,也就是说,操作系统是管理底层硬件的,这是他们之间的关系,但是,这里我又要提出一个问题,所谓的操作系统的管理,它管理的是什么呢?

扩展补充:何为管理?

在人类的社会中,基本上存在着2种人,管理者和被管理者,所谓的管理者,他们其实就是来做决策的,而被管理者就是去执行实施管理者所做出的决策指定的计划和方法的。但是,由金字塔结构可知,管理者毕竟是少数,他们的数量可能会远远少于被管理者,但是,对于管理者而言,他的每一步决策又必须符合被管理者群体的意向和利益,想要知晓被管理者的意向,就要依次去调查被管理者,这个过程是及其麻烦而且低效的,同时这样去收集数据又杂乱无章,那么,能否通过一些共有的数据去衡量每一个被管理者,从而做出正确的决定呢?由此,一个囊括被管理者基本数据的表格便被建立的出来,而管理者通过收集到的数据来做出实际的决策,这样既符合了自己的利益,也符合了被管理者的利益。
上述的过程中我们会得出这样的一些结论:
1.管理者是不直接去管理被管理者本身的,而是通过管理被管理者的一些数据去做出决策,我们把这些数据称之为被管理者的属性
2.管理者想要做出决策,必须需要数据,这个数据需要一个提供方和收集方,同时这个数据必须有普遍性,即任何人都能存在这些数据,从而对任何一位被管理者进行系统的管理

而既然是数据,就会遇到数据量大管理复杂的问题,故必须寻求一个高效且符合实际的方法来管理数据,也就是对数据管理进行建模的过程,从而可以统一处理更为庞大数据量。在这里,我们通常采用“先描述,再组织”的方式来进行,先通过描述我们的需求,从而组织起来我们的适配容器来管理存储数据。
由此——————先描述,再组织,这便是我们管理的核心,也同时是我们任何程序开发以及编程语言逻辑的核心观念!!!!!!
比如我们在制作贪吃蛇小游戏的时候:我们首先考虑的是根据蛇的情况去构建一个关于蛇的结构体,这个便是我们去描述蛇的过程,当我们描述完蛇后,我们才去考虑蛇的移动,游戏判定的问题,这个便是组织的过程,我们所写的任何程序实际上都离不开我们的核心6个字,所以,我们一定要反复思考和理解这六个字,字数虽少,但是很精炼。
管理的概念清晰了之后,我们再回到下三层结构来:
LINUX入门篇【8】----计算机组成原理以及OS知识的总结_第5张图片
在这三层结构中,我们的操作系统自然是管理者,而硬件就是被管理者,而驱动程序是干什么的呢?上面说过,我们的操作系统作为管理者,它是需要被管理者的数据的,所以需要有一个人来把数据传给管理者,而这个人就是我们的驱动程序,它将负责把数据传给操作系统,然后让操作系统做出决策再将下一步的动作由驱动程序告知给硬件,从而硬件做出对应的反应和调用。而反应给操作系统的数据,其实本质就是大量的结构体和指针变量的数据,他们管理着硬件的状态和硬件的属性,结构体也体现了描述的过程,而我们修改的也是这些结构体和指针。由此我们可以得知:在操作系统内部,一定存在着大量的数据对象和数据结构,用来控制状态和管理数据。
而操作系统的管理主要在这几个方面:
1.进程管理
2.内存管理
3.文件/IO管理
4.驱动管理

这便是下三层数据之间的关系。

如何进一步理解:先描述,再组织?
人是通过属性来认识世界上任何事情/事物的,而一个人或者事物的重要的属性集合在一起就是这个人或者事物本身

比如我们形容我们自己:往往从相貌,身高,性格,年龄等基本方面去形容,从而让我们形成了一个具体的人物本身

2.上三层用户部分:

操作系统管理的硬件数据是如何反馈给上层用户的呢?
这就要设计操作系统往上的用户层次了。

1.何为用户:

用户是什么呢?在我粗浅的理解中,用户广义上就是指使用电脑的所有人,而在狭义上指的就是利用电脑的开发人员,对于操作系统来说,它会为上层用户提供硬件信息数据,这个是操作系统的作用和职责所在,但操作系统由于直接与硬件交互,所以它反应的数据即是硬件的状态,这个是很危险的,例如键盘输入密码的数据一旦被获取,就会导致严重的密码权限泄露问题,所以,操作系统是不信任任何用户的,但是同时,它又要为其提供服务,因此,操作系统便采取了窗口这种方式来提供服务,一方面保护了数据的安全,一方面又可以为用户提供服务,你可以将其理解为银行的窗口。

2.数据向上如何被用户获取和用户的指令

LINUX入门篇【8】----计算机组成原理以及OS知识的总结_第6张图片
而在这里,便指的就是系统调用接口,通过这个接口,数据既不会被泄漏,同时又能提供服务给上层用户。任何人想要访问操作系统,必须通过调用接口,这是唯一的通道。

数据被从接口向上传后,用户就可以得到信息或者通过接口向操作系统获取信息,执行这样的指令的便是用户操作接口,用户通过一些指令贯穿整个层状结构,间接通过操作系统和硬件交互。

但是,我们都知道,二进制代码和汇编代码本身晦涩难懂,虽然用户现在可以通过指令交互了,但是,由于很多用户水平参差不齐的问题,想要进行对应的指令依旧有难度,这是不利于计算机的普及的,因此,在基础上,又开发出了一层用户层面的指令操作,开发操作管理操作,他们将晦涩难懂的指令简化为更容易被用户接受和上手的指令,甚至形成了Windows这种直接图形化交互的更为简单直接的方式,你可以理解为是封装了各种库和程序包裹进行的,比如我们现在用的LINUX指令,本质上就是通过软件进行翻译为对应的操作系统指令进行的,同理,我们使用的编程语言也随之诞生。所以,任何创造编程语言的人,它必须提供两个东西:一个是这种语言的语言库,第二个便是针对这种语言的编译器。
由此,便诞生了我们之前提到的那张图:
LINUX入门篇【8】----计算机组成原理以及OS知识的总结_第7张图片
今天我们再一次理解,我们的xshell外壳程序就是用户操作接口,而最外面的一层便是我们封装的一层简化的指令程序,而LINUX内核便包括了系统调用接口和操作系统。
如今我们可以这样理解:
LINUX入门篇【8】----计算机组成原理以及OS知识的总结_第8张图片
在上一张图的基础上,我们进行更加细致的划分,从而让我们刚好的去理解整个操作系统和上层的关系。

由此,通过上述的总结:我们得出的结论是:一半一个用户想访问非常底层的OS数据或者访问硬件,必须贯穿整个层状结构,因为涉及到贯穿,所以用户就必须要通过系统调用,因此数据就会是安全的。
比如:我们的打印函数printf和cout这种的,基本在函数内部都封装了函数调用,只有这样才能间接跟屏幕这些硬件形成交互的关系和途径。

总结:

由此,我们的计算机组成结构和OS操作系统的知识就完毕了,我希望通过这篇文章你可以理解何为冯诺依曼体系以及为什么要使用冯诺依曼体系,OS存在的意义是什么?计算机层状结构中OS都充当着什么作用,何为管理,怎样理解“先描述再组织”这简短却十分重要的6个字,以及操作系统是怎样跟用户交互的,当这些问题都解决了,我们就有了学习进程的良好基础,为接下来学习进程做一个充分的准备!!

你可能感兴趣的:(LINUX系列,linux,网络,运维)