【Linux】 冯诺依曼体系与计算机系统架构全解
Linux | 相关知识点 | 可以通过点击 | 以下链接进行学习 | 一起加油! |
---|---|---|---|---|
初识指令 | 指令进阶 | 权限管理 | yum包管理与vim编辑器 | GCC/G++编译器 |
make与Makefile自动化构建 | GDB调试器与Git版本控制工具 | Linux下进度条 |
冯诺依曼体系是现代计算机设计的基石,其统一存储和顺序执行理念推动了计算机的发展。结合操作系统、驱动层和系统调用的优化设计,计算机实现了高效的软硬件协作。
🌈个人主页:是店小二呀
🌈C语言专栏:C语言
🌈C++专栏: C++
🌈初阶数据结构专栏: 初阶数据结构
🌈高阶数据结构专栏: 高阶数据结构
🌈Linux专栏: Linux
🌈喜欢的诗句:无人扶我青云志 我自踏雪至山巅
文章目录
- 一、冯诺依曼体系结构
- 二、冯诺依曼系统结构设计意义
- 2.1 计算机整体效率
- 2.2 内存的核心作用
- 三、冯诺依曼体系结构的历史意义
- 四、数据流动与操作系统功能定位
- 五、计算机层次结构分析
- 5.1 操作系统(Operator System)
- 5.2 驱动层的作用与意义
- 5.3 系统调用接口(system call)
- 5.4 用户操作接口
- 六、操作系统管理
- 6.1 管理者决策被管理者
- 6.2 如何得到被管理者数据
- 6.3 库函数与系统调用的关系
一、冯诺依曼体系结构
冯诺依曼体系(Von Neumann Architecture)是一种计算机体系结构,由数学家 约翰·冯·诺依曼 于1945年提出,是现代计算机设计的理论基础。其核心思想在于程序和数据以相同的形式存储在统一的存储器中,通过顺序执行指令完成计算任务。
冯诺依曼体系的计算机由以下五个部分组成:
- 【输入设备】:鼠标、键盘,磁盘(文件读取)、网卡(网络接收)等,将外界信息输入计算机
- 【输出设备】:显示器、磁盘(写入文件)、网卡(网络发送)等,将计算机信息输出外界
- 【存储器】:内存,存储数据和程序
- 【运算器】:完成算术运算和逻辑运算
- 【控制器】:负责指令的解码和执行,控制各部分协调工作
每个硬件都是独立存在,想要建立硬件间关系需要借助"总线"进行连接,总线分为系统总线、IO总线
- 【系统总线】:存储区和运算器、控制器之间
- 【IO总线】:存储区和输入设备、输出设备之间的线
关于冯诺依曼,其中需要注意:
- 计算机只能识别二进制,用户和计算机不能直接打交道,必须需要通过输入输出设备进行交流。关于设备,有纯的输入或输出,也有兼容输入输出设备。
- 中央处理器(CPU):含有运算器和控制器等。
- 不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)
- 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取
- 简单来说,所有设备都只能直接和内存打交道
二、冯诺依曼系统结构设计意义
2.1 计算机整体效率
以下为计算机存储的金字塔层次结构:存储金字塔这个离CPU越近的一些存储设备或者存储的小的单元,效率高,造价越贵。
【问题】:冯诺依曼系统结构中需要内存存在,输入输出设备访问CPU不是更快?
计算机整体效率受多个因素影响,其中关键在于数据设备之间的数据拷贝速度与CPU处理数据速度的协调。由于输入设备的效率较低(通常是毫秒级),而CPU的处理速度极高(通常是纳秒级),两者之间存在巨大的速度差距。这种差距导致CPU在绝大部分时间里处于等待资源准备的状态,而非实际执行计算。因此,真正影响计算机效率的关键在于数据设备之间的拷贝效率。
2.2 内存的核心作用
- 【利用内存作为缓冲】:通过预先将大量数据加载到内存中,减少CPU直接等待输入输出设备的时间。内存的读取和写入速度远高于外设,能够更快地向CPU提供所需数据。加快数据传递速度,为CPU提供高效支持。
- 【分离操作,提升并行性】:CPU从内存中读取数据与外部设备向内存导入数据这两个过程可以同时进行。这种并行处理方式避免了串行执行所带来的效率低下。实现数据流动的并行化,大幅提升整体效率。
三、冯诺依曼体系结构的历史意义
其最大的历史意义在于:以较低的成本实现了高效的计算能力,为计算机的大规模普及奠定了基础。这一体系结构的推广不仅让计算机走向大众化,还为互联网的诞生和发展提供了技术支撑,推动了现代信息社会的形成。
四、数据流动与操作系统功能定位
对冯诺依曼的理解,不能停留在概念上,要深入到对软件数据流理解上。
【场景】:从你登录上qq开始和某位朋友聊天开始,数据的流动过程。 从你打开窗口,开始给他发消息,到他的到消息之后的数据流动过程。
我们从网络里面收到的所有信息,一定是先到你的电脑的网卡上,然后由网卡再到内存被CPU读取,到输出设备中。
对于内存是需要带电的,不带电会丢失。外存是不需要带电的,关机也不会丢失,所以别人把文件传给我们的时候,并不是直接传到显示器上,而是先下载到硬盘上,再通过读取硬盘的数据进行显示
五、计算机层次结构分析
5.1 操作系统(Operator System)
定位:一款纯正"搞管理"的软件
操作系统是一款管理计算机软硬件资源的软件,它向上为应用程序提供稳定的服务接口,向下为硬件提供统一的管理和调度,创造稳定可靠的运行环境。
每个硬件设备都有其特定的功能,并能够在冯诺依曼体系下高效运行。然而,仅具备硬件功能还远远不够,因为硬件的操作需要明确的调控和协调。也就是说,何时执行何种功能,必须通过一个统一的管理者来安排,这正是操作系统和程序设计的重要作用。
5.2 驱动层的作用与意义
上层的任何操作最终都会反馈到底层硬件,操作系统接收上层请求后,会调用相关的底层硬件。然而,由于硬件特性不同,可能会导致需要修改硬件或操作系统以适配新设备。为了解决这种问题,在软件和硬件之间引入了一层驱动层。
驱动层是一种专门的软件,每种硬件都有对应的驱动层。它的主要作用不是直接管理软硬件资源,而是为操作系统提供统一的通信接口,让操作系统能够通过标准化的方法访问和控制硬件设备。例如,操作系统可以通过驱动层读取硬件信息或发送控制指令,而不需要关心硬件的具体实现细节。
不论硬件如何变化,只要硬件厂商提供了合适的驱动程序,操作系统就能够正常管理和使用该硬件。
5.3 系统调用接口(system call)
底层硬件的管理者是操作系统,任何涉及到访问硬盘的行为,必须通过操作系统进行访问。操作系统里面本身是对软硬件资源进行操作,所以操作系统内部会包含所有的软硬件资源。
【问题】:如果出现用户想要访问某种软硬件资源数据,可不可以用户直接访问操作系统特定的数据呢?
操作系统内部资源是十分重要的,不允许其他用户直接进行访问,避免用户造成内部资源的损坏。然而,用户仍然需要通过操作系统向底层硬件提出请求并执行操作。
为此,操作系统设计者使用 C语言 编写了一系列内部函数接口,这些接口为用户程序提供了访问系统资源的标准服务。这些接口被称为 系统调用(System Call)。
5.4 用户操作接口
由于系统调用本身的使用难度较高,普通用户直接使用系统调用可能面临复杂的操作流程和较高的技术门槛。因此,程序员通常会基于系统调用设计上层的软件或接口,通过封装特定的功能和逻辑,提供更简单、易用的服务。
六、操作系统管理
6.1 管理者决策被管理者
我们可以举个例子方便理解:评选奖学金:
将评选奖学金的工作人员看成管理者,而参与评选的学生看成被管理者。如果管理者需要对于被管理者需要进行决策,决定奖学金分配。根据我们日常流程可以知道,管理者和被管理者间是不需要见面,管理者会根据被管理者数据进行相关决策。
这也说明管理的本质是通过对于数据进行管理,从而达到对于人的管理。
6.2 如何得到被管理者数据
管理者是负责对被管理者数据进行决策,而被管理者数据是需要通过执行者去执行收集数据。由于人数过多,精力有限,不可能一一去问,所以我们可以使用EXCEL表格
进行管理,但是庞大的数据量也是十分的棘手。
管理者是老练的程序员,想到可以将自己手上的活交给编译器去做,那么将学生信息封装到结构体中,在每个结构体内部添加结构体指针用于连接其他包含学生信息的结构体,形成链表。
管理者只需要对链表进行管理,对于学生信息数据进行增删查改转变为了对链表的增删查改。相对于Excel表
可以根据链表的特点添加一些方便的接口,比如找到这一堆学生中数学成绩最好的学生。
在计算机体系结构里,我们的OS就相当于管理者,我们的软硬件资源就相当于被管理者,而我们的驱动程序就相当于是执行者。
6.3 库函数与系统调用的关系
【场景】:假如有A和B两个校长,A校长有一个学生数学特别厉害,但是B校长没有,于是B校长就想跟A校长商量借这个同学来打比赛,但是B校长肯定不能直接去找这个学生,因为这个学生是A校长的人,他得负责,所以他必须要通过A校长的同意才行。
库函数必须通过系统调用接口才能与操作系统进行交互,从而访问底层资源。因此,库函数与系统调用呈现出上下层关系,可以理解为:
- 系统调用是基础层
系统调用是操作系统提供的接口,直接与操作系统内核交互,用于访问硬件资源或执行关键的系统操作(如文件管理、进程控制等)。- 库函数是封装层
库函数建立在系统调用之上,进行二次开发,通过封装复杂的系统调用逻辑,为开发者提供更加简单、统一的操作接口。例如:printf()
是C标准库函数,但它最终调用了系统调用write()
来实现数据输出。
以上就是本篇文章的所有内容,在此感谢大家的观看!这里是Linux笔记,希望对你在学习Linux旅途中有所帮助!