欢迎光临
我们一直在努力

【Linux】冯诺依曼体系结构与操作系统概述

前言

在计算机领域,冯・诺依曼体系结构是硬件的基石,操作系统是软件的枢纽。本文将以 Linux 为视角,带你厘清冯・诺依曼体系结构的核心逻辑,剖析操作系统在该架构上的运行机制,为你理解计算机系统的底层运转打开一扇门。


目录

一、冯诺依曼体系结构

二、冯诺依曼体系结构设计意义

1、为什么不让IO设备直接和cpu进行数据传输?

2、内存和IO设备之间的速度差是如何解决的呢?

3、内存和cpu之间的速度差是如何解决的呢?

三、冯诺依曼体系结构的数据流

1、如何解释QQ聊天的数据流动?

2、思考:传输文件和传输文字有啥区别?

问题:一个程序要运行,必须得先加载到内存中运行,为什么?

四、操作系统是什么?

五、为什么要有操作系统?

六、操作系统是如何管理软硬件的呢?

1. 管理本质:通过 “数据管理” 实现 “对象管理”

2. 描述过程 —> 用 “结构体” 抽象软硬件属性

3. 组织过程 —> 用 “数据结构” 串联所有对象

4. 最终操作:对数据结构的 “增删查改”

七、驱动层是做什么的呢?

1. 层级结构

2. 各层职责

3. 驱动层的价值

八、系统调用和库函数


一、冯诺依曼体系结构

冯诺依曼体系(Von Neumann Architecture)是现代计算机的核心架构范式由数学家约翰・冯・诺依曼于 1945 年提出,是全球计算机设计的理论根基。它明确计算机由运算器、控制器、存储器、输入设备、输出设备五大部件组成,核心思想是程序和数据以二进制形式统一存储在存储器中,计算机通过顺序读取并执行指令来完成复杂计算任务,从日常笔记本到大型服务器,绝大多数计算机都遵循这一架构逻辑。

运算器

定义:是计算机中执行算术运算(如加、减、乘、除)逻辑运算(如与、或、非)的部件。

作用:是计算机的 “算术逻辑单元”,负责对数据进行加工处理,为控制器提供运算结果,是数据处理的核心部件之一。


控制器

定义:是计算机的 “指挥中心”,负责从存储器中取出指令,对指令进行分析、判断,并发出控制信号,协调计算机各部件按指令的要求工作

作用:控制计算机的指令执行顺序,保证计算机各部件协调一致地工作,是计算机的神经中枢。


存储器

定义:是用来存储程序和数据的部件,指的是内存。

作用:用于临时存储正在运行的程序和数据,速度快但容量相对较小,是计算机实现 “存储程序” 原理的关键部件。


输入设备

定义:是向计算机输入数据和程序的设备。

常见设备:键盘、磁盘、鼠标、网卡、话筒、摄像头等。

作用:将用户的指令、数据等信息转换为计算机能识别的二进制代码,输入到计算机中。


输出设备

定义:是将计算机处理结果以用户可以识别的形式输出的设备。

常见设备:显示器、磁盘、音箱、显卡等。

作用:将计算机内部的二进制信息转换为文字、图像、声音等形式,供用户查看或使用。

每个硬件都是独立的存在,想要建立硬件之间的关系必须借助“总线”将其链接起来,总线分为

系统总线:连接 CPU、内存等核心部件,负责它们之间的高速数据、地址和控制信号传输。

IO 总线:连接 CPU(或通过内存间接)与 I/O 设备(如硬盘、键盘等),负责外部设备和系统之间的输入输出数据传输。

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

存储器特指内存:在冯・诺依曼架构中,我们讨论的 “存储器” 就是指内存(主存)。

CPU 仅与内存交互:在不考虑缓存的情况下,CPU 只能直接对内存进行读写操作,无法直接访问键盘、显示器等外设。

外设通过内存中转:所有输入输出设备(外设)的数据交换,都必须先写入内存,或从内存中读取,不能与 CPU 直接通信。

一句话总结:所有设备都只能直接和内存打交道,内存是整个系统的数据交互中心。


二、冯诺依曼体系结构设计意义

以下是计算机存储的金字塔存储结构:离CPU越近的一些存储设备或者存储的小的单元,效率高,造价越贵

1、为什么不让IO设备直接和cpu进行数据传输?

由于 I/O 设备的传输速度远低于 CPU 的处理速度,这就像木桶效应中最短的木板一样,制约了整个系统的性能上限,导致 CPU 频繁等待 I/O 操作,使系统效率受限于 I/O 设备的低速瓶颈。

因此引入了内存作为 “缓冲层”:

1、利用内存作为缓冲:通过预先将大量数据加载到内存中,减少 CPU 直接等待输入输出设备的时间。内存的读取和写入速度远高于外设,能够更快地向 CPU 提供所需数据,加快数据传递速度,为 CPU 提供高效支持;

2、分离操作,提升并行性:CPU 从内存中读取数据与外部设备向内存导入数据这两个过程可以同时进行。这种并行处理方式避免了串行执行所带来的效率低下,实现数据流动的并行化,大幅提升整体效率。

简言之,内存的引入既通过高速缓冲打破了 I/O 设备的速度瓶颈,又通过并行机制充分释放了 CPU 的处理能力,让系统性能不再被低速 I/O 所束缚。


2、内存和IO设备之间的速度差是如何解决的呢?

1、批量缓冲

I/O 设备先把数据批量写入缓冲区(内存的一部分),减少与内存的零散交互次数。

  • 直接内存传输:少量多次,效率低且内存需全程等待。
  • 缓冲区传输:大量少次,一次性传输批量数据,集中处理 “慢”。

2、并行调度

在 I/O 设备向缓冲区传输数据时,内存和 CPU 可以并行处理其他任务,避免因 I/O 低速导致内存空转。

3、高速同步

缓冲区属于内存,其传输速度与内存一致,数据从缓冲区同步到内存其他区域时是高速无延迟的,仅 I/O 设备到缓冲区的传输受限于硬件速度。


3、内存和cpu之间的速度差是如何解决的呢?

这个时候又有疑问了,内存和cpu的处理速度也不一样啊,他们直接是否也有类似的优化设备呢?

有,CPU 缓存(如 L1、L2、L3 缓存)就是这类优化设备。

作用:它是介于 CPU 和内存之间的高速存储区域,速度接近 CPU。

原理:CPU 优先从缓存读取数据,缓存中没有时才访问内存,以此弥补 CPU 与内存的速度差,提升数据访问效率。

总结:

通过内存缓冲区(主动预加载 + 大粒度低频次传输 —— 因 IO 设备吞吐延迟高,若采用小粒度传输,CPU 完成当前数据处理后,将长期阻塞等待新数据)、CPU 缓存(主动预加载 + 小粒度高频次传输 —— 因 CPU 数据访问频率极高,需以短周期批量补充数据)等中间介质的分层存储架构,实现不同速率设备间的并行数据调度,有效弥合硬件间的速度差异,最终显著提升整机的运行效率。


三、冯诺依曼体系结构的数据流

1、如何解释QQ聊天的数据流动?

2、思考:传输文件和传输文字有啥区别?

传输文件和传输文字的区别主要体现在最终存储与呈现的环节:

文字消息:聊天的文字经网卡接收、CPU 解包后,会临时存储在内存用于即时呈现(显示器显示);同时 QQ 会自动将其长期存储到硬盘的聊天记录文件夹,所以关闭窗口后,内存临时数据释放,但硬盘的长期存储数据仍在,再次登录可从硬盘读取查看。

文件传输:单次传输的文件经网卡接收后,必须先存储到硬盘(即 “下载” 过程),之后查看时才从硬盘读取到内存,经 CPU 处理后由显示器呈现。因为文件从始至终依赖硬盘长期存储,所以电脑关闭后重新打开,只要硬盘数据未删除,依旧能查看。


问题:一个程序要运行,必须得先加载到内存中运行,为什么?

回答:一个程序要运行,必须得先加载到内存中运行,原因是冯诺依曼体系结构规定了 “程序和数据需以二进制形式统一存储在存储器(内存)中,CPU 只能直接从内存读取指令和数据来执行”。


四、操作系统是什么?

操作系统是一款管理计算机软硬件资源的核心软件。

狭义上的操作系统 = 内核内核承担着最核心的管理工作,具体包括:

进程管理:调度和管理计算机中运行的程序进程。

内存管理:分配、回收和管理计算机的内存资源。

文件管理:在存储设备上创建、删除、读写文件。

驱动管理:为硬件设备提供驱动支持,让硬件与操作系统正常交互。

广义上的操作系统 = 内核 + 其他配套程序除了内核,还包括:

函数库:为应用程序提供可调用的函数,帮助实现各类功能。

Shell 程序:为用户提供与内核交互的命令行界面,方便输入指令操作计算机。

操作系统是软件层的核心,它和其上层的所有软件(系统软件、应用软件)共同构成了完整的软件层

底层:操作系统(系统软件的核心),负责管理硬件资源、提供系统调用接口,是软件层与硬件层的 “桥梁”;

中间层:其他系统软件(如 Shell、图形库、编译器等),基于操作系统的接口,进一步为上层提供更易用的工具或开发环境;

上层:应用软件(如 QQ、浏览器、游戏等),直接面向用户需求,依赖操作系统和中间层系统软件提供的支撑来运行。


五、为什么要有操作系统?

操作系统通过管理好底层的软硬件资源(手段),为用户提供一个良好的执行环境(目的)

“操作系统就像银行 —— 它需要为用户提供软件运行、资源访问的服务,但从安全角度出发,它不会完全信任任何用户或程序。就像银行会通过柜台窗口来隔离储户与核心业务区域,既提供存取款服务,又避免储户直接接触银行内部系统引发风险;操作系统也通过一系列机制,在为用户和软件提供服务的同时,有效规避异常行为,保障自身的安全运行。那么,操作系统是如何实现这种‘服务与安全的平衡’的呢?”

为保障自身数据安全并能为用户提供服务,操作系统以系统调用(由 C 语言实现的内部函数调用接口)作为唯一入口,用户及上层软件需通过该接口才能访问操作系统内部数据,以此实现服务提供与安全防护的平衡。好比我们平时使用计算机有时会弹出需要管理员权限才能做该操作,这也是对操作系统的一种保护。

六、操作系统是如何管理软硬件的呢?

1. 管理本质:通过 “数据管理” 实现 “对象管理”

操作系统作为管理者,无需与被管理的软硬件直接 “见面”,而是通过数据间接管控—— 先将软硬件属性抽象为数据(描述)再用数据结构组织这些数据(组织),最终把对软硬件的管理转化为对数据结构的 “增删查改”

就好比 “学校管理”:校长(操作系统)通过学生的 “学院、学号” 等数据(描述)和链表(组织)管理学生,无需直接面对每个学生。


2. 描述过程 —> 用 “结构体” 抽象软硬件属性

由于操作系统底层是由 C 语言实现的,因此会为每类被管理对象(进程、硬件、内存等)定义结构体,将其核心属性 “打包” 成可操作的数据结构,完成 “物理实体→逻辑数据” 的抽象。

例 1(进程管理):定义task_struct(如 Linux 的进程控制块),包含 PID、优先级、内存占用等属性,让 “进程” 成为可存储的 “数据对象”。

例 2(硬件管理):为网卡、硬盘定义结构体,描述其型号、工作状态、驱动入口等属性,将硬件特性转化为操作系统可识别的数据。


3. 组织过程 —> 用 “数据结构” 串联所有对象

链表、数组、哈希表等数据结构,将同类对象的 “结构体实例” 串联成 “对象集合”,实现批量管理。

例 1(进程组织):将所有进程的task_struct链表串联(如 Linux 进程链表),调度时只需遍历链表即可决策。

例 2(内存组织):将空闲内存块的结构体用链表组织(空闲内存链表),分配内存时通过链表 “查、改” 完成操作。


4. 最终操作:对数据结构的 “增删查改”

所有软硬件管理工作,最终转化为对结构体和数据结构的 “增、删、查、改”

增:创建进程时插入task_struct到链表,分配内存时拆分空闲块。

删:进程退出时从链表删除task_struct,释放内存时回收空闲块。

查:调度时查询优先级最高的进程,驱动查询硬件结构体属性。

改:进程状态变化时修改task_struct的 “状态” 字段,内存块占用时修改其 “占用大小” 属性。


操作系统对软硬件的管理本质是建模:计算机无法直接理解 “进程”“内存块” 等抽象概念,因此操作系统通过 “结构体建模资源属性、数据结构建模资源关系” 的方式,将物理软硬件转化为可被内核解析、操作的 “逻辑模型”,最终通过对模型化数据结构的增删查改实现高效管控。

七、驱动层是做什么的呢?

1. 层级结构

系统分为操作系统层、驱动程序层、底层硬件层,层级间通过 “请求 – 响应” 机制传递指令:

操作系统层(系统软件):包含内存、进程、文件、驱动管理等模块,是上层与硬件的 “调度中心”。

驱动程序层(硬件专属软件):为网卡、硬盘、其他设备提供专属驱动,是操作系统与硬件的 “翻译官”。

底层硬件层(物理实体):网卡、硬盘等硬件设备,是指令的 “最终执行者”。


2. 各层职责

操作系统层的局限:需统一管理硬件,但不同硬件原理、指令集差异大,直接对接会导致系统臃肿且难以适配新设备。

驱动层的核心职责:

  • 提供标准化接口,让操作系统以统一方法操作硬件,无需关心硬件细节。
  • 适配硬件特性,将硬件个性化逻辑转化为操作系统可理解的通用指令。

底层硬件层的角色:接收驱动指令执行操作(如网卡收发数据、硬盘读写),并反馈结果。


3. 驱动层的价值

适配新硬件:新硬件只需厂商提供驱动,操作系统无需修改即可兼容,实现 “即插即用”。

隔离风险:硬件故障仅需更新驱动或更换硬件,不会直接崩溃系统;系统升级也无需强制换硬件,降低维护成本。

八、系统调用和库函数

在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,这部分由操作系统提供的接口,叫做系统调用。

系统调用在使用上,功能比较基础,对用户的要求相对也比较高,所以,有心的开发者可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于更上层用户或者开发者进行二次开发。

赞(0)
未经允许不得转载:171主机测评 » 【Linux】冯诺依曼体系结构与操作系统概述
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址