三、Linux 系统演进史与底层架构笔记

发布时间:2026/7/28 10:08:56

三、Linux 系统演进史与底层架构笔记 文章目录第一章上古开荒与神兵自举硬件、汇编与 C 语言第二章Unix 分裂与 GNU 反抗军️ 核心架构图Linux 系统层级与调用关系第三章内核、驱动与硬件的“三角关系”1. 内核的“通用接口”与硬件的“私有方言”2. 驱动厂商的“投名状”适配内核接口 (核心重点)3. 驱动其实就在内核空间里4. 内核去哪找这些驱动——发行版的功劳⚙️ 实战流程ls 命令的执行链路第四章为什么只有 Linux Kernel 不算完整系统 终极对比Linux 与 Windows 的交付模式差异 学习建议第一章上古开荒与神兵自举硬件、汇编与 C 语言历史背景计算机早期没有操作系统概念。开发者必须直接面对物理硬件。肉身开荒第一代开发者手持《芯片硬件手册》使用汇编指令如MOV,INT直接操作寄存器。就像操控单片机一样往特定地址塞值错一个 bit 系统就会崩溃。神兵锻造贝尔实验室的丹尼斯·里奇发明了C 语言。它既保留了高级语言的逻辑结构if,while又允许通过指针直接操作内存是编写操作系统的完美工具。自举神功 (Bootstrapping)先用汇编写出最基础的编译器再用这个编译器去编译用 C 语言写的更强大的编译器GCC。从此软件开发进入自动化时代。第二章Unix 分裂与 GNU 反抗军历史转折Unix曾是业界标准但被 ATT 商业化垄断。为了打破封闭理查德·斯托曼发起了GNU 计划。GNU 的困境到 90 年代初GNU 已经造好了所有外围工具Bash, GCC, Glibc唯独缺少一个核心的“心脏”内核。他们自己开发的 Hurd 内核进展缓慢。少年英雄1991 年芬兰大学生林纳斯·托瓦兹因为买不起 Unix自己动手写了一个类 Unix 的内核——Linux Kernel。天作之合GNU 的工具链 Linux 的内核 完整的自由操作系统GNU/Linux。配合 GPL 开源协议全球开发者共同维护Linux 迅速壮大。️ 核心架构图Linux 系统层级与调用关系这张图展示了从用户输入到硬件执行的纯粹技术链路。注意观察glibc系统库作为中间层的关键作用硬件层 HardwareLinux Kernel 内核层系统软件层 System Software调用标准函数触发汇编指令 syscall应用软件层 Application Software浏览器/游戏/OfficeVim/文本编辑器用户Shell / Bash命令解释器glibc / 系统库封装系统调用Linux 内核 vmlinuz进程/内存/文件管理驱动程序直接操控硬件CPU内存 RAMI/O 设备硬盘/键盘/显卡第三章内核、驱动与硬件的“三角关系”你之前提到的“只有 Kernel 很难用”以及“驱动厂商必须适配内核”是理解现代操作系统的关键。1. 内核的“通用接口”与硬件的“私有方言”内核的思维是通用的内核只负责制定“国家标准”。比如内核定义了一个通用指令“从硬盘读取第 100 个字节的数据”。内核不关心硬盘是怎么转的它只要结果。硬件的思维是私有的全世界的硬件厂商希捷、三星、Intel、Realtek都有自己的“方言”。希捷硬盘和三星 SSD 接收的电信号指令完全不同。2. 驱动厂商的“投名状”适配内核接口 (核心重点)正如你所说驱动必须受内核控制。硬件厂商在写驱动时不能随心所欲必须严格遵守 Linux 内核提供的API应用程序接口和 ABI应用程序二进制接口。规矩内核规定“如果你想让我识别你的设备你的驱动代码必须调用我的register_device()函数来注册必须用我的kmalloc()来申请内存必须按我的格式处理中断。”后果如果厂商不遵守这些规矩驱动代码根本无法编译通过即使强行加载也会因为违规操作内存导致内核崩溃Kernel Panic。3. 驱动其实就在内核空间里在 Linux宏内核架构中驱动程序并不是独立的第三方软件而是运行在“内核空间”的权限上驱动和内核核心代码享有同等的最高特权Ring 0。它们都能直接操作硬件。代码上驱动代码通常被编译成.ko模块文件在系统启动或插入设备时动态加载进内核的内存空间成为内核的一部分。4. 内核去哪找这些驱动——发行版的功劳内核不会自动去网上下载驱动。当你安装 Ubuntu 或 CentOS 时发行版厂商已经帮你完成了以下工作收集与适配从各大硬件厂商、开源社区收集了成千上万个已经适配好内核接口的驱动源码。编译打包把这些驱动编译成.ko模块并打包进安装镜像ISO中。自动匹配安装系统时安装程序会扫描你的硬件 ID然后从预置的驱动包里找出对应的驱动加载到内核中。驱动适配与加载流程图内核空间Linux Kernel 提供的标准接口硬件厂商/开发者必须严格调用规范与约束编译生成被控制动态加载进入物理硬件设备编写驱动代码 C/汇编内核 API/ABI 规范如: 注册设备/申请内存/中断处理编译后的驱动模块 .ko⚙️ 实战流程ls命令的执行链路当你在终端输入ls时底层发生了以下严格的调用序列硬件(CPU/硬盘/屏幕)驱动程序Linux Kernelglibc/系统库Shell/Bash用户硬件(CPU/硬盘/屏幕)驱动程序Linux Kernelglibc/系统库Shell/Bash用户1. 输入 ls 并回车2. 解析命令调用 readdir() 等系统库函数3. 封装参数触发系统调用(syscall)4. 权限验证与安全审查5. 调度已加载的驱动程序读取硬盘目录6. 发送特定电信号物理读取数据7. 返回文件列表数据8. 汇报读取结果9. 通过系统调用返回数据10. 解析数据为字符串11. 调用 printf() 准备显示12. 再次触发系统调用请求输出13. 调度显卡驱动输出像素14. 屏幕显示文件列表15. 用户看到结果第四章为什么只有 Linux Kernel 不算完整系统只有 Kernel相当于只有一个“光杆司令”。它拥有最高权限制定了严格的接口规范但没有提供人类可直接使用的交互界面Shell/glibc也没有预置任何硬件驱动。使用者必须手写汇编与其沟通且插上任何新硬件都无法识别。完整 Linux 系统Linux Kernel负责资源管理、制定规范GNU 系统软件glibc/Shell/编译器负责提供人机交互接口预置驱动包遵循内核规范负责识别硬件应用软件负责具体业务。 终极对比Linux 与 Windows 的交付模式差异这也是为什么我们平时使用的是 Ubuntu、CentOS 等“发行版”的原因Linux 交付模式 - 开源拼装林纳斯仅提供 Linux 内核及接口规范GNU 社区提供系统库/Shell/编译器硬件厂商/开源社区遵循内核规范编写驱动源码发行版厂商Ubuntu/CentOS等将内核工具驱动GUI整合打包用户安装后使用Windows 交付模式 - 闭源精装房微软公司统一打包所有组件内核GUI驱动工具用户安装后直接使用 学习建议复习时重点看第一张架构图牢记glibc位于应用软件和内核之间同时记住驱动是内核的“触手”运行在内核空间且必须遵循内核 API。面试时如果问到“驱动模型”或“系统调用”请结合时序图和第三章内容强调Shell 通过 glibc 转换系统调用以及驱动厂商必须适配内核接口的机制。编程时时刻记住你在用户空间不要尝试直接操作硬件寄存器一切硬件交互都应通过系统库发起系统调用来完成。

相关新闻