【嵌入式学习笔记 Day 1】

目录

[一、红黑树------Linux 内核的"心脏"之一](#一、红黑树——Linux 内核的“心脏”之一)

[一、 红黑树到底是啥?](#一、 红黑树到底是啥?)

[二、 为什么嵌入式底层(Linux内核)对它情有独钟?](#二、 为什么嵌入式底层(Linux内核)对它情有独钟?)

[1. 进程调度(CFS 完全公平调度器)](#1. 进程调度(CFS 完全公平调度器))

[2. 内存管理(VMA)](#2. 内存管理(VMA))

[3. I/O多路复用(epoll)](#3. I/O多路复用(epoll))

[三、 面试怎么答?(防坑指南)](#三、 面试怎么答?(防坑指南))

四、总结


一、红黑树------Linux 内核的"心脏"之一

一、 红黑树到底是啥?

红黑树本质上是一种自平衡的二叉查找树(BST)。

普通的二叉查找树有个致命缺陷:如果按顺序插入数据(比如 1, 2, 3, 4...),它就会退化成一条单链表,查找时间复杂度从理想状态下的 O(log n) 退化成了 O(n)。

为了解决这个问题,红黑树诞生了。它通过给节点着色(红或黑),并遵守以下几条"铁律",强制限制树的高度:

  1. 节点非红即黑。

  2. 根节点必须是黑色。

  3. 叶子节点(NIL)必须是黑色。

  4. 红色节点的子节点必须是黑色(不能红红相连)。

  5. 从任一节点到其每个叶子的所有路径,包含相同数目的黑色节点。

结论 :这些规则确保了红黑树从根到叶子的最长路径不会超过最短路径的两倍 。因此,它的查找、插入、删除时间复杂度稳稳地 保持在 O(log n)。


二、 为什么嵌入式底层(Linux内核)对它情有独钟?

嵌入式系统(比如我项目里用的 i.MX6ULL)算力有限、内存紧张。Linux 内核之所以大量使用红黑树,是因为它在**"++查找效率"++** ++和**"插入/删除的维护成本"**之间找到了完美的平衡++(比 AVL 树旋转次数少,对 CPU 更友好)。

它在 Linux 内核里到处都是,最经典的三大应用如下:

1. 进程调度(CFS 完全公平调度器)

Linux 需要从一堆就绪的进程里,挑出那个"运行时间最短"的进程来执行 。内核用红黑树把所有进程按虚拟运行时间(vruntime)排好序,树的最左下角的节点,就是下一个要被调度的进程。有了红黑树,调度器找下一个进程的时间是 O(log n),极大提升了系统的实时性。

2. 内存管理(VMA)

每个进程都有自己独立的虚拟内存空间。Linux 用红黑树来管理这些虚拟内存区域(VMA)。当我们申请内存或者发生缺页中断时,内核能通过红黑树极快地找到对应的内存块。

3. I/O多路复用(epoll)

在写高并发的网络服务器时,epoll 底层用了三块核心数据结构,其中一块就是红黑树。当有海量的 socket 连接(几万条)时,epoll 用红黑树来高效地存放和查找所有的文件描述符(fd),使得增删改查的效率始终保持在 O(log n)。


三、 面试怎么答?(防坑指南)

如果面试官问:"你项目里用过红黑树吗?"

绝对不能说"我手写过红黑树" ,因为红黑树的代码极其复杂,应届生如果真能手搓,早就去造神级框架了,写了容易在面试官深挖"左旋右旋代码,变颜色"时直接翻车。

满分话术:

"我目前的单片机项目中暂时没有用到手写红黑树。但在学习 Linux 内核机制时,我了解到它是内核非常重要的基础数据结构 。比如 CFS 调度器用它来管理进程,epoll 用它来管理海量连接,利用了它 O(log n) 的稳定查找性能。它不仅比普通链表快,而且比 AVL 树旋转次数少,非常适合对算力敏感的嵌入式操作系统。"


四、总结

  • 红黑树 = 自平衡二叉查找树,核心是 O(log n)。

  • 作用:防止树退化为链表,平衡了查找效率与维护成本。

  • Linux 三大应用:进程调度、内存管理、epoll。

相关推荐
小向是个Der1 小时前
P02_你的变量住在哪里_教学文档
经验分享·笔记·stm32·单片机
叼烟扛炮1 小时前
Linux 学习笔记(三十一):线程概念、底层分页机制与初体验
linux·运维·服务器·笔记·学习·1024程序员节
星恒随风1 小时前
Linux Socket UDP编程(一):手写UDP回显服务器与客户端,从socket、bind、recvfrom到网络字典服务器完整实战
linux·服务器·网络·笔记
H.莓飛1 小时前
【数据结构】归并与外排序
linux·服务器·c语言·开发语言·数据结构·visual studio
junwua1 小时前
qnx hypervisor 的中文版
linux·运维·服务器·自动驾驶
小猪佩奇TONY1 小时前
Linux 内核学习(19) --- linux waitqueue
linux·学习·waitqueue
凉、介1 小时前
深入理解 ARMv7-M | 异常/中断处理
笔记·学习·嵌入式·arm
蒸蒸yyyyzwd1 小时前
工具、力扣、中间件学习笔记
笔记·八股
深圳老胡1 小时前
液面探测功能的硬件方案对比:原理、优缺点与选型建议
笔记·单片机