在这里插入图片描述

💯枫亭湖区: 个人主页

🥰个人专栏: 《C++知识分享》   《Linux 入门到实践:零基础也能懂》

🌠 有善始者实繁,能克终者盖寡


分隔符

前言

在深入探究 Linux 进程的奥秘之前,我们必须先理清计算机运作的底层逻辑 计算机并非空中楼阁,其行为受限于物理结构与管理机制

本章将开启一场从硬到软的溯源之旅:

  • 冯·诺依曼体系结构:我们将首先确立硬件层面的基本共识,理解存储程序与指令流如何构成了现代计算机的骨架

  • 操作系统:随后,我们将探讨作为“管理者”的 OS 如何通过“先描述,再组织”的核心哲学,在杂乱无章的硬件之上建立起秩序

理解了硬件的边界与管理的本质,我们才能真正领悟:进程不仅仅是执行中的程序,它是操作系统为了高效调度资源而创造的灵魂 只有脚踩体系结构的实地,方能仰望进程管理的星空


一、深入解析:冯·诺依曼体系结构

冯诺依曼体系由五大核心硬件组件构成,各组件各司其职

在这里插入图片描述


1.1 计算机的核心组件

截止目前,我们所认识的计算机,都是由一个个的硬件组件组成:

  • 输入单元:包括键盘、鼠标、扫描仪、写板等

  • 中央处理器:含有运算器和控制器等

  • 输出单元:显示器、打印机等

  • 即可以是输入又是输出单元:网卡、硬盘等

处理大脑

核心枢纽

外设

加载数据

交换数据

刷新数据

输入设备: 键盘/磁盘/网卡

输出设备: 显示器/磁盘/网卡

存储器: 内存

CPU: 运算器+控制器

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

  • 这里的存储器指的是内存

  • 不考虑缓存情况,这里的 CPU 能且只能对内存进行读写,不能访问外设(输入或输出设备)(数据层面)

  • 外设(输入或输出设备)要输入或者输出数据,也只能写入内存或者从内存中读取

  • 一句话,所有设备都只能直接和内存打交道


1.2 为什么要存在内存?

  • CPU 跑得极快,而硬盘读写极慢。内存速度介于两者之间,负责把数据预先从硬盘搬过来,让 CPU 不必浪费时间等待硬盘

  • 根据冯·诺依曼架构,程序必须先加载到内存中才能运行。它是程序执行的临时阵地,负责存放正在运行的代码和实时产生的动态数据(如堆栈信息)

  • 我们无法把所有数据都存在极快但极贵的 CPU 缓存里,也不想忍受硬盘的慢速。内存以适中的价格提供了足够的容量和性能,是性能与成本平衡的最佳方案

一句话总结:内存是计算机的“高速缓冲区”,它让 CPU 强大的运算能力不被硬盘的慢速所限制


1.3 CPU 的核心地位

运算器和控制器共同组成中央处理器(CPU,是计算机的 首脑

  • 现代 CPU 会集成多级缓存(L1L2L3),但缓存本质是内存的“加速延伸”,核心数据交互仍遵循冯诺依曼规则

  • 存储层次关系(从快到慢、成本从高到低):CPU 寄存器 → 高速缓存 → 内存 → 本地磁盘 → 远程存储

在这里插入图片描述


二、QQ 发送文字消息和文件(从冯诺依曼体系结构分析)

1. 启动阶段:从外存到内存

当你双击 QQ 图标时,控制器向外存(硬盘)发送指令

  • 数据流动QQ 的二进制执行文件(指令和静态数据)从硬盘被拷贝到存储器(内存)中
  • 体系逻辑:因为 CPU 无法直接处理硬盘上的数据,必须先将其载入内存,这就是“存储程序”的体现

2. 初始化与登录:CPU 开始介入

  • 取指:控制器从内存中读取 QQ 的初始化指令

  • 译码与执行:运算器执行逻辑运算,比如初始化界面、验证本地缓存的登录凭证

  • 输入参与:此时,你通过键盘或鼠标输入账号密码 输入设备将信号转化为电信号,经过总线存入内存,再由 CPU 进行加密处理

  • 网络交互CPU 发出指令,通过网络适配器(也属于输入输出范畴)将登录请求发送至服务器,返回的确认信号再次通过内存进入 CPU 寄存器

1. 启动阶段:从外存到内存

当你双击 QQ 图标时,控制器向外存(硬盘)发送指令

  • 数据流动QQ 的二进制执行文件(指令和静态数据)从硬盘被拷贝到存储器(内存)中

  • 体系逻辑:因为 CPU 无法直接处理硬盘上的数据,必须先将其载入内存,这就是“存储程序”的体现


2. 初始化与登录:CPU 开始介入

  • 取指:控制器从内存中读取 QQ 的初始化指令

  • 译码与执行:运算器执行逻辑运算,比如初始化界面、验证本地缓存的登录凭证

  • 输入参与:此时,你通过键盘或鼠标输入账号密码 输入设备将信号转化为电信号,经过总线存入内存,再由 CPU 进行加密处理

  • 网络交互CPU 发出指令,通过网络适配器(也属于输入输出范畴)将登录请求发送至服务器,返回的确认信号再次通过内存进入 CPU 寄存器


3. 打开聊天窗口:随机访问

当你点击某位朋友的头像时:

  • 寻址:控制器根据你的操作,在内存地址空间中定位到该朋友的个人信息和历史记录(如果已加载)

  • 输出显示CPU 计算出聊天界面的像素数据,将其写入显存(内存的一部分或独立显存),输出设备(显示器)读取并渲染出窗口


4. 输入消息:数据的暂存与处理

你在输入框输入“你好”:

  • 流动过程:键盘信号 → 操作系统内核 → 内存中的 QQ 进程缓冲区

  • 即时回显CPU 实时处理这些字符编码,并指令显卡将其显示在屏幕上,让你看到自己正在输入的文字 此时数据处于内存的栈或堆空间中


5. 发送消息:数据的封装与外发

当你按下“发送”键:

  • 指令下达CPU 接收到发送指令,开始将内存缓冲区中的字符串封装成网络协议包(如添加包头、IP 地址、加密等)

  • 最终流向:封装好的数据包从存储器(内存)出发,通过总线传输到网络接口卡(网卡),最后通过光纤/电缆流向互联网


6. 接收回复:闭环流动

当朋友回信时:

  • 数据从网卡进入,触发一个“中断”信号告诉 CPU

  • 数据流动:网卡数据 → 存储器(内存)

  • 呈现CPU 解析数据包,将文字内容更新到内存的 UI 数据区,并驱动显示器刷新


总结:冯·诺依曼视角下的核心特征

在这个过程中,你可以看到数据流动的核心规律:

  1. 一切皆在内存:无论是你的聊天记录、输入的文字,还是 QQ 的代码,所有数据必须在存储器中汇集,才能被 CPU 处理

  2. 控制器是指挥官:它决定了什么时候从网卡接收数据,什么时候把数据发往显卡

  3. 运算器是加工厂:它负责对你的消息进行加密、编码和界面坐标计算

一句话概括:这是一个数据在输入设备输入、内存暂存、CPU 加工、输出设备呈现,并最终通过网络/外存持久化的循环过程


1. 加载代码/接收数据

2. 取指 / 取数

3. 处理结果回写

输入消息

4. 刷新显示

5. 封装指令

硬盘 / 外部网络

存储器: 内存 RAM

控制器 & 运算器: CPU

输入设备: 键盘/鼠标

输出设备: 显示器

网卡/发送网络


三、串通软硬件——操作系统

任何计算机系统都包含⼀个基本的程序集合,称为操作系统(OS)

冯诺依曼体系定义了硬件规则,但直接操作硬件过于复杂(需处理设备差异、数据格式等) 操作系统作为核心系统软件,承接硬件、服务应用,核心使命是“管理资源 + 屏蔽复杂性”,可以理解为是一个进行软硬件资源管理的软件

  • 操作系统包括:
    • 内核(进程管理,内存管理,文件管理,驱动管理)
    • 其他程序(例如函数库,shell 程序等)

3.1 操作系统的核心概念

  • 狭义的操作系统仅仅指代内核。它是直接运行在硬件之上的最基础软件层

  • 广义的操作系统 = 内核 + 系统配套软件

  • 组成部分

    • 内核(上述的狭义 OS
    • 库函数(如 C 标准库 libc,封装了复杂的系统调用)
    • 外壳(Shell / GUI):用户交互界面(比如 LinuxBash,或者 Windows 的桌面环境)
    • 系统服务/工具:如磁盘管理工具、网络配置工具、编译器、甚至自带的文本编辑器

我们日常使用的 CentOSUbuntu 属于广义 OS,而 Linux 内核则是狭义 OS 的核心(我们后面所讲的操作系统指的也是这个)

在这里插入图片描述


3.2 设计OS的目的

承上启下

我们观察一下图片中的架构图
在这里插入图片描述

OS 在计算机架构中处于“中间层”,核心作用是“对下管理硬件,对上服务应用”:

  • 对下:屏蔽硬件差异(如不同品牌网卡的驱动适配),管理所有软硬件资源(统一管理 CPU、内存、硬盘等资源),遵循冯诺依曼规则协调数据流动

  • 对上:为用户程序,上层应用程序(如 QQGCC)提供统一接口(系统调用 / 库函数),让应用无需关注硬件细节(如如何读写硬盘、分配内存),拥有一个良好的执行环境


3.3 OS的四大核心功能

核心功能 主要任务 核心价值
进程管理 CPU 调度、进程同步、死锁处理 确保多任务有序并行
存储管理 内存分配、地址映射、虚拟内存 优化内存利用并隔离空间
设备管理 缓冲管理、驱动控制、设备分配 统一硬件接口,实现即插即用
文件管理 目录组织、读写权限、空间回收 结构化管理数据,保障安全

操作系统

学校: 校长

管理者

做决策

辅导员

采集数据

执行决策

驱动程序

学生

被管理者

做执行载体


另外需要强调:Linux操作系统、软件,基本都是C语言写的,所以我们描述被管理对象的时候用的struct而不是class


3.4 系统调用与库函数(对外接口)

OS 的两层接口:

  1. 系统调用——内核态接口,是用户空间访问内核资源的唯一合法入口(如fork创建进程、open打开文件)

  2. 库函数——对系统调用的二次封装(如 glibcMSVCRT

调用链路:应用→库函数→系统调用→OS 内核→硬件

所以操作系统进行进程管理——先把进程描述起来,再把进程组织起来



💻结尾— 核心连接协议

警告: 🌠🌠正在接入底层技术矩阵。如果你已成功破解学习中的逻辑断层,请执行以下指令序列以同步数据:🌠🌠


【📡】 建立深度链接: 关注本终端。在赛博丛林中深耕底层架构,从原始代码到进阶协议,同步见证每一次系统升级。

【⚡】 能量过载分发: 执行点赞操作。通过高带宽分发,让优质模组在信息流中高亮显示,赋予知识跨维度的传播力。

【💾】 离线缓存核心: 将本页加入收藏。把这些高频实战逻辑存入你的离线存储器,在遭遇系统崩溃或需要离线检索时,实现瞬时读取。

【💬】 协议加密解密:评论区留下你的散列码。分享你曾遭遇的代码冲突或系统漏洞(那些年踩过的坑),通过交互式编译共同绕过技术陷阱。

【🛰️】 信号频率投票: 通过投票发射你的选择。你的每一次点击都在重新定义矩阵的进化方向,决定下一个被全量拆解的技术节点。


在这里插入图片描述
在这里插入图片描述

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐