【Linux】—— 详解计算机体系结构

简介: 【Linux】—— 详解计算机体系结构

前言:

在之前,我们已经对Linux环境开发的基本工具进行了详细的学习。接下来,我们将要学习的第一大块便是关于计算机体系结构的知识!!


前言

在我写的《操作系统》中,我们通过文字简单的叙述了关于进程了概念和其他的相关知识。今天,我们将站在Linux系统编程的视角下“欣赏”关于进程知识!!!


(一)冯诺依曼体系结构

我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

基本介绍

💨 冯·诺依曼系结构(Von Neumann Architecture)是一种计算机硬件设计原则,也被称为存储程序算机结构它是由冯·诺伊曼于1945提认为是现代计算机设计的基础。

  • 如下图所示:

💨 冯·诺依曼体系结构具有以下几个关键特点:

  1. 中央处理器(CPU)CPU包含算术逻辑单元(ALU)和控制单元(CU)。ALU负责执行算术和逻辑运算,而CU负从存储器中获取指令、解析指令并:计算机的指令集是一组能够被CPU执行的指令。指令集通常包括算术、逻辑、存储、跳转等操作,可以根据需要扩展;
  2. 输入/输出设备(I/O):用于将计算机与外部世界连接起来,例如键盘、鼠标、显示器、打印机等等;
  3. 总线(Bus)一个用于组件之间交换数据和指令的物理通道;
  4. 存储器(Memory)用于存储计算机程序数据、指令和中间结果。存储器分为两种类型:随机存储器(RAM)只读存储器(ROM)

以下是一个简单的示意图,展示了冯·诺伊曼体系结构的各个部分:

【 解释】

  1. 在这个示意图中,CPU 和存储器通过总线相连,并通过它们之间的交互来完成指令的执行和数据的传输;
  2. 输入/输出设备通过另一个总线连接到 CPU 和存储器,使其能够与外部设备进行有效通信;
  3. 值得注意的是,冯·诺伊曼体系结构是一种基于“存储程序”的体系结构,这意味着数据和指令按照相同的方式组织和存储;
  4. 这使得程序设计更加简单,因为指令可以像数据一样处理,而数据可以像指令一样处理。

大家可能没有发现,在我手工画的图形中,这里的存储器指的是内存不知道大家是否比较好奇这里为什么要有内存呢?接下来,我们围绕这个话题来给大家聊聊!!!

上述。我们说过了对于输出、输入设备我们都简称为外围设备,众所周知,外设的速度相对来说都比较慢一些,例如:

  1. 大家可能都知道,当我们电脑内存不足时,到某东上买磁盘的时候,轻则500G,动则1/2TB,目前随着国内的技术的发展,价格都呈现出下降的趋势,最多几百块就可以拿下;
  2. 但是当大家去买内存条的时候还是跟买磁盘的时候一样吗?那价格可就不像买磁盘一样“亲民”了呀!

那这里不要内存是否还可以呢?即像如下这样:

【解释】

  • 答案是一定可以的。可以是可以,但是是需要代价的,因为输入设备这样的外围设备它的速度是非常慢的,而CPU的运算速度却十分的快,这就导致类似于这样的一个现象--“木桶原理”

木桶原理

木桶原理:木桶原理又称短板理论,木桶短板管理理论,由劳伦斯·彼得提出,其核心内容为:一只木桶盛水的多少,并不取决于桶壁上最高的那块木块,而恰恰取决于桶壁上最短的那块。.


💨 因此,上述的现象就可以解释为:

  1. 因为外设的速度是十分慢的,而CPU的速度十分的快,此时整体的效率却是由速度慢的外设决定,这就大大的影响了整体的性能,使得CPU没有尽到最大的利用;
  2. 因此,为了缓解这样的情况,我们就引入了 内存 的概念,目的就是为了解决上诉这样的场景。 ;
  3. 此时,我们上述的运行过程就像这样:对于外设输入进来的信息,我们可以预加载到内存中,当CPU空闲时就去读取它,而不是像之前一样CPU在原地等待数据的到来,CPU以后进行数据计算的时候,根本不需要对外设进行访问了,而是直接伸手向内存去要就可以了。

结论一:不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)

💨 有了上述的知识介绍,我们就可以理解这样的一件事情:

  1. 对于我们之前写的程序来说,当我们编写好之后进行编译等操作之后形成可执行程序就是一个文件在Linux下叫做普通文件,并有可执行权限);
  2. 只要是文件,它就会保存在磁盘中,各位之前写的代等就是在磁盘上存储着的,如果是使用的云服务器,那就是在服务器厂商所对应的磁盘上存储着的;

💨 此时又有这样一个问题那 “为什么程序执行前要先加载到内存?”

执行程序需要先加载到内存的原因有以下几点:

  1. 提高执行效率:将程序加载到内存中可以加快程序的执行速度。当程序运行时,CPU需要从内存中读取指令数据如果没有加载需要从磁盘或其他外部存储器读取数据,这会导致较长的访问时间,降低执行效率;
  2. 空间管理:通过将程序加载到内存中,可以有效地管理程序和数据的空间分配。内存管理系统可以根据需要动态地分配和释放内存资源,以满足程序的运行需求;
  3. 便于访问和操作:内存中的数据和指令可以直接被CPU访问和操作,而不需要通过外部设备进行读取和写入。这样可以大大简化程序的访问过程,提高数据的读取和写入速度;

综上所述,将程序加载到内存中可以提高程序的执行效率、简化访问和操作过程、便于空间管理,并增加程序的安全性。因此,执行程序前先加载到内存是必要的。


数据流动过程

接下来,我们从硬件角度出发,解释单机或者跨主机之间数据是如何流向的!!

💨 在冯·诺依曼体系结构中,数据的流动是按照下面的过程进行的:

  • 1. 程序和数据都存储在主存储器中。CPU将程序从主存储器中读取到内部寄存器中,并按指定的顺序执行它们;
  • 2. 输入设备(如键盘或鼠标等)通过控制器将输入传输到内存中。CPU通过控制器读取数据进行处理;
  • 3. 输出设备(如显示器或打印机等)通过控制器将数据传输到计算机的内存中。CPU 从内存中读取数据并将其发送到相应的输出设备;
  • 4. 数据在基于总线的互连网络中传输,主要使用系统总线和数据总线传输数据;
  • 5. 系统总线连接了主存储器、输入/输出设备和CPU,它是数据传输的中央枢纽。

以上是冯·诺依曼体系结构中最基本的数据流动过程。在实际应用中,可能存在更复杂的数据流动方式,例如缓存、DMA直接内存访问等技术,它们都需要在体系结构中进行显式设计和管理。

接下来,我们以具体的例子来带大家感性的理解数据流动的过程:

💨 请解释:从你登录上qq开始和某位朋友聊天开始,数据的流动过程

  1. 当你输入消息并点击“发送”按钮时,这些消息会存储在计算机内存中。CPU负责将这些消息从内存中读取,并编码为网络所需的格式,例如TCP或UDP协议。
  2. 数据被编码后,将会使用计算机上的网卡进行发送。网卡是一种硬件设备,与计算机的PCIe接口或USB接口相连。网卡将消息转换成数字格式,并将它们分成数据包进行传输。
  3. 当数据包离开计算机并传输到网络时,路由器或交换机等硬件设备会将数据包从源地址传输到目标地址。
  4. 当数据包到达目标计算机时,网络卡再次将数据解码并返回到计算机的内存中。
  5. 应用程序将解码的数据包存储在计算机内存中,等待用户接收或响应。

从底层硬件的角度来看,上述过程需要计算机内核操作系统和硬件及设备之间的协调来完成这项工作。

💨从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程

  1. 用户在计算机上打开 QQ 聊天窗口并输入消息,这些消息被存储在计算机内存中。计算机内存由一些小型的具有短暂储存功能的芯片组成,这些芯片能更快地与 CPU 进行通讯。
  2. 当用户单击“发送”按钮时,CPU 从内存中读取这些消息并将其编码。CPU 根据协议使用网络适配器 / 网络接口卡(NIC)将数据发送到网络上。
  3. 数据包通过网线或无线网络传递,进入目标计算机中。目标计算机接收数据包并存储在内存中。
  4. 计算机芯片解码数据包,将其内容存储在应用程序的内存中,例如 QQ 聊天窗口。
  5. 用户的好友可以在他自己的计算机上接收到发送的消息,这些数据流动与发送的过程相似。

💨请解释在qq上发送文件的数据流动过程

  1. 用户在 QQ 中选择要发送的文件,并将其存储在计算机内存中。计算机内存由一些小型的具有短暂储存功能的芯片组成,这些芯片能更快地与 CPU 进行通讯;
  2. 当用户单击“发送”按钮时,文件被编码并打包成数据包,然后通过 CPU 和网络适配器 / 网络接口卡(NIC)发送到网络上;
  3. 数据包通过网线或无线网络传递,进入目标计算机中。目标计算机接收数据包并存储在内存中;
  4. 计算机芯片解析数据包,并将文件存储在目标计算机的硬盘中。存储设备(硬盘)位于计算机内,它可以写入和读取数据;
  5. 当目标计算机确认文件被成功接收时,目标计算机会向发送方计算机发送响应信号,这样发送方计算机可以在 QQ 窗口中看到文件已经发送成功。

在这个过程中,计算机中的多种硬件组件协同工作,以实现文件的传输和接收。

关于冯诺依曼,必须强调几点:

  1. 这里的存储器指的是内存
  2. 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
  3. 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取。
  4. 一句话,所有设备都只能直接和内存打交道。

(二)操作系统

1、概念

  • 上述,我们简单的对冯洛伊曼体系结构进行了认识,接下来我们来认识关于 操作系统 的相关知识!

💨 在上述,我们提到了关于“预加载”这样的词语,此时就会面临许多问题:

  1. 什么时候进行预加载呢?
  2. 整体的数据是十分庞大的,那么预加载是预加载哪一部分数据呢?
  3. 加载到内存中去了,但是此时内存空间不够我们需要如何处理?
  4. CPU快速处理数据时如何在较短的时间找到预加载的数据?

👉 大家思考 :这些问题是由谁完成的呢?是上述我们所说的硬件帮我们完成的吗?👈

💨 这种场景类似于到医院的场景:

  • 在医院中有许多检查身体的设备,相应的对于各种设备都需要有相应负责的医生来进行操作才能完成 对病人进行检查 这样的一个动作。因此,只有设备没有医生是不行的,
  • 所以,上述的过程如果只有硬件,没有其他的对其进行协助,那也是不行的。

综上所述,我们就需要一款对系统资源进行管理的软件来帮助系统协调的进行工作——操作系统💻!

2、感性理解

我们以校园中的场景进行叙述,假定此时有三类人---【学生、校长、辅导员】;

💨 在学校中作为学生显然是被管理的对象,那大家认为管理者的应该是谁呢?

  • 可能大多数的小伙伴都会选择 辅导员 是我们的管理者,那真的是这样的吗?

我给大家简单的说明一下管理者和被管理者之间的主要差别:

  • 管理者的主要职能大多数时候是做决策;
  • 而被管理者的则是根据要求和指示开展自己的工作任务

💨 有了上述的理解之后,此时便有这样的一个场景:

校长:

  • 假设校长看到了如今计算机的发展趋势,为了更好的培养学生,想在下周的某一天对计算机学院开展一个比赛,目的为了进行校内选拔,培养优秀的人才参加蓝桥杯冲击国一;
  • 有了这样的一个场景,校长就会向下宣布任务,让辅导员安排后序事宜。

辅导员:

  • 此时辅导员接到校长发来的通知,为了完成这个事件,她就会抓紧安排场所,组织学生等

学生:

  • 对于学生来说,当他接到这个信息时,他可能第一反应就是“又来烦我,点都不想起一天天的,但是看到辅导员结尾的一句不去的扣学分,最终还是乖乖的去了”。

很显然,在上述这个例子中校长是起“决策”作用的;对于辅导员只是起到“决策被执行”的作用;而对于学生则是“参与执行”。

【结论】

  1. 从上,我们不难看出,我和校长之间是不需要直接沟通的,即当我们比赛的时候校长来都没来,最后依然知道哪些同学相对来说编程底子是比较好的;
  2. 其次,那我和校长之间面都没见着,他都没看我的比赛,他最后是如何知道名单的呢?很简单,校长只需根据辅导员统计的结果看最终的名单就知道了
  3. 接下来,校长拿到的数据可能包括{所在年级,姓名,专业}。而这些信息辅导员会给最终获胜的同学发了一个统计表,其中的统计格式是已经给出了的,同学只需按照里面的格式进行填写即可。而对于这样的操作,在Linux下就使用【struct】来定义。

  • 4.校长拿到这些数据之后,对其做管理就相当于对链表做管理。假定,此时有人举报说有人是作弊的,他的成绩就不作数,那么对于这个人的管理我们只需删除对应的结点即可实现。

到此,我们就完成了关于【管理】的建模过程。

🔥 🔥 总结:管理的本质就是先描述在组织

那此时可能就有小伙伴疑惑了,你说了这么多,跟我们此时所说的操作系统之间有什么联系呢?

  • 具体如下:

💨  根据上述我们所说的管理的本质就是先描述在组织,如何理解对硬件做管理呢?

  • 因为硬件中包含许多的信息,我们首先需要对其相关的信息进行描述,其次把这些属性通过一个结构体的形式包含起来;
  • 对于这些用于描述的结构体我们用链表(或其他数据结构)组织起来之后,对于硬件的管理进而就转化为对链表的管理。

💨  那说了这么多,我都还没回答大家为什么要对其做管理呢?

  • 操作系统需要对软硬件资源做管理,主要是为了保证计算机系统的稳定性、可靠性、安全性和有效性

具体来说,操作系统要对软硬件资源进行管理有以下几个方面的原因:

  • 1. 资源利用率:计算机系统的资源是有限的,如 CPU、内存、硬盘等。操作系统需要对这些资源进行有效利用和调度,以保证系统资源的最大化使用,从而提高计算机系统的效率。
  • 2. 系统稳定性:系统稳定性是指计算机系统不出现故障、错误、崩溃等异常情况。操作系统需要对硬件资源进行管理,以保证硬件设备的状态、运行情况、性能表现和数据安全,并及时检测和处理问题,以确保系统的稳定性。
  • 3. 安全性:操作系统需要保证计算机系统的安全,包括从硬件资源出发设置安全控制限制,限定硬件允许访问的程序,防止病毒攻击、黑客入侵等恶意行为损害硬件的安全。
  • 4. 统一协调:操作系统能够协调整合所有的硬件资源和软件,并为应用程序提供一个标准的环境,以便应用程序能够更好地工作。操作系统可以控制不同软件之间的交互,从而避免冲突和错误的出现。

💨  而我们作为用户,想要使用操作系统的功能就需要通过 系统调用 的方法来使用,而不允许我们直接对操作系统内核进行操作(主要考虑的安全性的问题)

  • 因此,综上我们可以得到关于操作系统的整体框架图如下:


总结

到此,关于计算机体系结构的全部知识便讲解完毕了,接下来我们简单的总结一下!

  1. 在开篇,我们首先给出了关于计算机体系结构图,围绕这个图表,我们一步步的解释了其中的组成,引出了为什么要存在内存,并解释了其中的原因。其中主存与辅存之间的调动是有操作系统和硬件共同调度的,对应用程序员来说是透明的;
  2. 其次,我们对操作系统的概念进行了解释,并通过举例说明的方法带大家感性的进行理解,得出了一句重要的结论:操作系统管理的本质就是先描述在组织;
  3. 最后,作为程序员,当我们想使用操作系统内核功能的时候,我们是通过系统调用的方式实现的。

以上便是本文的全部内容,感性大家的观看与支持!!!

相关文章
|
1月前
|
缓存 Linux Shell
Linux进程解析(冯诺依曼体系结构,操作系统,进程初步解析)
Linux进程解析(冯诺依曼体系结构,操作系统,进程初步解析)
52 1
|
2月前
|
算法 中间件 Linux
Linux-计算机程序概览
Linux-计算机程序概览
44 0
|
1月前
|
存储 缓存 供应链
『Linux升级路』冯诺依曼体系结构与操作系统
『Linux升级路』冯诺依曼体系结构与操作系统
|
1月前
|
存储 Ubuntu Unix
【Linux】1、操作系统、计算机硬件和软件、Linux 介绍
【Linux】1、操作系统、计算机硬件和软件、Linux 介绍
42 0
|
1月前
|
缓存 Linux Shell
【linux】体系结构和os管理
【linux】体系结构和os管理
17 0
|
2月前
|
缓存 Linux
【Linux】冯诺依曼体系结构
【Linux】冯诺依曼体系结构
【Linux】冯诺依曼体系结构
|
4月前
|
存储 安全 Linux
【Linux】:体系结构与进程概念
【Linux】:体系结构与进程概念
45 0
|
4月前
|
存储 Linux 程序员
《Linux从练气到飞升》No.10 冯洛依曼体系结构
《Linux从练气到飞升》No.10 冯洛依曼体系结构
28 0
|
4月前
|
Linux Shell
Linux进程理解(冯诺依曼体系结构,操作系统,进程概念和基本操作)(下)
Linux进程理解(冯诺依曼体系结构,操作系统,进程概念和基本操作)
88 14
|
4月前
|
存储 Linux Windows
Linux进程理解(冯诺依曼体系结构,操作系统,进程概念和基本操作)(上)
Linux进程理解(冯诺依曼体系结构,操作系统,进程概念和基本操作)
87 10