1. 前言
在内核和驱动开发中,**FIFO(First-In-First-Out,先进先出队列)**是一种极为常用的数据结构。它广泛应用于缓冲区管理、异步通信、事件队列、数据流处理等场景。Linux 内核为此提供了通用、高效、线程安全的 kfifo 实现,支持多种数据类型、静态/动态分配、并发访问等特性。
本文将系统分析 kfifo 的设计原理、内核实现、关键 API。
2. kfifo 的设计原理
2.1 什么是 FIFO
FIFO 是一种队列结构,遵循“先进先出”原则。即最先入队的数据最先出队。其典型操作包括:
-
入队(put/in):将数据放入队尾。
-
出队(get/out):从队头取出数据。
-
判空/判满:判断队列是否为空或已满。
2.2 kfifo 的核心思想
kfifo 采用环形缓冲区(circular buffer或者叫ring buffer)实现 FIFO。其基本原理如下:
-
用一个固定大小的数组作为缓冲区,数组大小必须为 2 的幂(便于取模优化)。
-
维护两个指针/计数器:
in(写入位置)、out(读取位置)。 -
入队时将数据写入
in指向的位置,in
订阅专栏 解锁全文
552

被折叠的 条评论
为什么被折叠?



