从冯诺依曼到操作系统:打通 Linux 底层核心逻辑

从冯诺依曼到操作系统:打通 Linux 底层核心逻辑
在这里插入图片描述

🔥草莓熊Lotso:个人主页
❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》
✨生活是默默的坚持,毅力是永久的享受!


🎬 博主简介:

在这里插入图片描述

文章目录


前言:

无论是日常使用的 Linux 服务器,还是开发时运行的应用程序,其底层都离不开两大核心基础:冯诺依曼体系结构(硬件协作规则)操作系统(软硬件中间层)。很多开发者只关注上层代码,却忽略了这两层的核心逻辑,导致遇到 “数据为什么要先入内存”,“OS 为什么能管理进程” 等问题时难以理解。本文先拆解冯诺依曼体系的硬件组成与数据流动规则,再延伸到操作系统的定位、功能与 “管理” 本质,帮你打通 “硬件→OS→应用” 的全链路认知,理解 Linux 系统运行的底层逻辑。

一. 冯诺依曼体系结构:现代计算机的硬件协作规则

冯诺依曼体系由五大核心硬件组件构成,各组件各司其职。我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。

在这里插入图片描述

1.1 计算机的核心组件

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

  • 输入单元:包括键盘,鼠标,扫描仪,写板等
  • 中央处理器(CPU):含有运算器和控制器等
  • 输出单元:显示器,打印机等。
  • 即可以是输入又是输出单元:网卡,硬盘等
组件功能描述常见设备
输入设备向计算机输入数据 / 指令键盘、鼠标、扫描仪、触摸屏、U 盘
输出设备将计算机处理后的结果呈现给用户显示器、打印机、音箱、硬盘
存储器存储数据和指令(此处特指内存 / RAMDDR 内存、SDRAM
运算器执行算术运算(加减乘除)和逻辑运算(与或非)CPU 中的 ALU(算术逻辑单元)
控制器协调各组件工作,控制指令执行顺序CPU 中的控制单元(CU)

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

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

📊 图片理解:(为什么要存在内存?)

在这里插入图片描述


在这里插入图片描述

1.2 关键补充:CPU 的核心地位

  • 运算器和控制器共同组成中央处理器(CPU),是计算机的 “大脑”;
  • 现代 CPU 会集成多级缓存(L1、L2、L3),但缓存本质是内存的 “加速延伸”,核心数据交互仍遵循冯诺依曼规则;
  • 存储层次关系(从快到慢、成本从高到低):CPU 寄存器 → 高速缓存 → 内存 → 本地磁盘 → 远程存储。
在这里插入图片描述

1.3 数据流动实际场景:QQ 发送文字消息和文件

“QQ 发送'在吗?'消息 和 发送文件” 为例,直观理解数据如何遵循冯诺依曼规则流动:

在这里插入图片描述


在这里插入图片描述

二. 操作系统:软硬件的 “中间人” 与 “管理者”

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

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

2.1 操作系统的核心概念

操作系统是一个 “软件集合”,分为广义狭义两类:

  • 狭义 OS(内核 / Kernel):直接与硬件交互,核心包含进程管理、内存管理、文件管理、驱动管理四大模块;
  • 广义 OS:内核 + Shell(命令行解释器)+ 函数库(如 glibc)+ 系统工具(如 ls、cp),为用户和应用提供完整运行环境。

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

在这里插入图片描述

2.2 设计 OS 的目的(核心定位:承上启下的关键角色)

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

  • 对下:屏蔽硬件差异(如不同品牌网卡的驱动适配),管理所有软硬件资源(统一管理 CPU、内存、硬盘等资源),遵循冯诺依曼规则协调数据流动;
  • 对上:为用户程序,上层应用程序(如 QQ、GCC)提供统一接口(系统调用 / 库函数),让应用无需关注硬件细节(如如何读写硬盘、分配内存),拥有一个良好的执行环境。
在这里插入图片描述

2.3 四大核心功能:OS的 “管理使命”

在整个计算机软硬件架构中,操作系统的定位是:一款纯正的 “搞管理” 的软件

📊 四大核心功能(这里暂时只做了解即可)

模块核心目标核心操作实际意义
(1)进程管理:CPU 资源的 “调度员”解决 “CPU 资源有限,进程众多” 的竞争问题,让多进程公平、高效执行进程创建(fork)、调度(如 Linux 的 O(1) 算法)、终止、通信(IPC);让你同时运行浏览器、终端、编译器时,不会出现 “一个程序占满 CPU” 的情况。
(2)内存管理:内存空间的 “管理员”高效分配、回收内存,为进程提供独立地址空间,避免冲突和浪费;内存分配、回收,虚拟地址→物理地址映射(页表 + MMU);每个进程都以为自己独占内存,互不干扰,同时最大化利用物理内存
(3)文件管理:存储资源的 “管家”管理硬盘等存储设备中的文件,提供统一访问接口文件创建、删除、读写,权限控制(如 Linux 的 rwx);你无需关心文件在硬盘的物理位置,通过 lsopen 等命令即可操作。
(4)驱动管理:硬件设备的 “翻译官”为硬件提供驱动程序,将 OS 的统一指令转换为硬件能识别的信号驱动程序的加载、管理与交互;插入 U 盘自动识别、网卡正常上网、键盘输入被响应,都依赖驱动管理。
在这里插入图片描述

2.4 “管理” 的本质:3步搞定所有资源

OS 的管理逻辑和现实场景(如学校校长管理学生)完全一致。核心分为两步,这也是Linux内核的设计思路:

  • 描述被管理对象:用结构体(struct)记录资源信息
  • 组织被管理对象:用高效数据结构(链表,红黑树等)组织结构体
  • 总结:先描述,再组织(下面的图要结合之前的图一起理解)
在这里插入图片描述
在这里插入图片描述

2.5 系统调用与库函数:OS的 “对外接口”

OS 通过两层接口向应用提供服务,降低使用门槛:

  • 系统调用:内核直接提供的底层接口(如fork创建进程、open打开文件),功能基础、权限高,但使用复杂;
  • 库函数:对系统调用的封装(如 glibc 的printf封装writefopen封装open),简化使用,提供额外功能(如缓存、错误处理);
  • 调用链路应用→库函数→系统调用→OS 内核→硬件

结合银行系统和之前的几张图来理解:

在这里插入图片描述
  • 在开发角度,操作系统对外会表现为一个整体,但是会暴露自己的部分接口,供上层开发使用,在这部分由操作系统提供的接口,叫做系统调用。
  • 系统调用在使用上,功能比较基础,对用户的要求也相对比较高,所以有心的开发者就可以对部分系统调用进行适度封装,从而形成库,有了库,就很有利于上层用户或者开发者进行二次开发,且这样做可以增强可移植性,跨平台性
📌思考:学到这里,大家想想操作系统是怎么进行进程管理的呢?很简单,先把进程描述起来,再把进程组织起来!!!

结尾:

🍓 我是草莓熊 Lotso!若这篇技术干货帮你打通了学习中的卡点: 👀 【关注】跟我一起深耕技术领域,从基础到进阶,见证每一次成长 ❤️ 【点赞】让优质内容被更多人看见,让知识传递更有力量 ⭐ 【收藏】把核心知识点、实战技巧存好,需要时直接查、随时用 💬 【评论】分享你的经验或疑问(比如曾踩过的技术坑?),一起交流避坑 🗳️ 【投票】用你的选择助力社区内容方向,告诉大家哪个技术点最该重点拆解 技术之路难免有困惑,但同行的人会让前进更有方向~愿我们都能在自己专注的领域里,一步步靠近心中的技术目标! 

结语:冯诺依曼体系是硬件的 “协作准则”,操作系统是软硬件的 “中间管理者”,两者共同构成了 Linux 系统运行的底层基础。理解这两层逻辑,能让你从 “只会用 Linux” 升级到 “理解 Linux”—— 遇到 “权限不足”“内存泄漏” 等问题时,能快速定位到底层原因。后续我们可以深入拆解 Linux 内核的具体实现,如task_struct的结构、进程调度的 O (1) 算法、虚拟内存的映射机制等。

✨把这些内容吃透超牛的!放松下吧✨ʕ˘ᴥ˘ʔづきらど

Read more

From Pixels to Numbers: A Deep Dive into ISBN Recognition with OpenCV and C++

从像素到数字:基于OpenCV与C++的ISBN识别系统深度解析 1. 项目背景与核心挑战 在数字化浪潮席卷各行各业的今天,自动识别技术已成为连接物理世界与数字世界的重要桥梁。ISBN(国际标准书号)作为图书的唯一身份标识,其自动识别在图书馆管理、智能零售、出版发行等领域具有广泛应用价值。然而,传统OCR技术面对复杂背景、光照变化和倾斜变形等现实场景时,识别准确率往往难以满足实际需求。 本项目基于OpenCV和C++构建了一套完整的ISBN识别系统,通过精心设计的图像处理流水线,实现了从原始图像到数字编码的精准提取。系统在Visual Studio环境下开发,主要解决以下核心挑战: * 复杂背景干扰:图书封面通常包含丰富的色彩和图案 * 光照条件多变:不同环境下的亮度对比度差异显著 * 几何形变问题:拍摄角度导致的透视变形和旋转 * 字符分割困难:连笔、断笔等印刷质量问题 2. 技术架构与处理流程 2.1 系统整体架构 系统采用模块化设计,主要包含以下核心组件: class detectSolution { private: // 图像处理相关成员变量 Ma

By Ne0inhk
【C++STL】map与set(举例+详解,一文说懂)!

【C++STL】map与set(举例+详解,一文说懂)!

🌟个人主页:第七序章   🌈专栏系列:C++ 目录 ❄️前言: 一、☀️序列式容器与关联式容器 二、☀️键值对 三、☀️树形结构的关联式容器 四、☀️set 4.1 🌙set介绍  4.2 🌙set的构造和迭代器 4.3 🌙set的增删查 4.4 🌙insert和迭代器遍历使用样例  4.5 🌙find和erase使用样例 4.6 🌙multiset和set的差异 4.7 🌙set相关题目练习 五、☀️multiset 5.1 🌙multiset介绍 5.2 🌙multiset使用 六、☀️map 6.1 🌙map介绍 6.2

By Ne0inhk
《C++进阶之STL》【set/map 模拟实现】

《C++进阶之STL》【set/map 模拟实现】

【set/map 模拟实现】目录 * 前言: * ------------标准介绍------------ * 1. 标准库中的set/map是怎么实现的呢? * 2. 为什么需要两个模板参数(Key & Value)? * ------------模拟实现------------ * 头文件: * RBTree.h * Myset.h * Mymap.h * 测试文件:Test.cpp * 运行结果 * ------------基本操作------------ * 一、前置++操作 * 1. 本质 * 2. 步骤 * 3. 图示 * 4. 解释 * 二、前置--操作 * 1. 本质 * 2. 步骤 * 3. 图示 * 4. 解释 * ------------代码解释------------ * 片段一:

By Ne0inhk
C++分布式语音识别服务实践

C++分布式语音识别服务实践

基于 brpc+etcd + 百度 AI SDK 的分布式语音识别服务实践:从代码架构到踩坑复盘 一、项目背景与核心功能 最近基于 C++ 实现了一个分布式语音识别子服务,核心目标是提供高可用的 RPC 接口,支持客户端上传 PCM 音频文件并返回识别结果。技术栈选型如下: * RPC 框架:brpc(百度开源高性能 RPC 框架,支持多种协议); * 数据序列化:Protobuf(定义 RPC 接口和数据结构); * 服务注册与发现:etcd(分布式键值存储,实现服务上下线感知); * 语音识别能力:百度 AI 语音 SDK(提供成熟的 PCM 音频转文字能力); * 日志与配置:spdlog(高性能日志库)、gflags(命令行参数解析)。 项目分为服务端和客户端两部分:

By Ne0inhk