原文:模仿Linux内核kfifo实现的循环缓存

想实现个循环缓冲区 Circular Buffer ,搜了些资料多数是基于循环队列的实现方式。使用一个变量存放缓冲区中的数据长度或者空出来一个空间来判断缓冲区是否满了。偶然间看到分析Linux内核的循环缓冲队列kfifo的实现,确实极其巧妙。kfifo主要有以下特点: 保证缓冲空间的大小为 的次幂,不是的向上取整为 的次幂。 使用无符号整数保存输入 in 和输出 out 的位置,在输入输出时不对i ...

2016-11-16 16:58 2 2852 推荐指数:

查看详情

Linux内核kfifo

一、kfifo原理 kfifo实现原理是采用循环(环形)队列。 二、kfifo特点 1、采用环形缓冲区来实现,提供一个无边界的字节流服务。采用环形缓冲区的好处为,当一个数据元素被用掉后,其余数据元素不需要移动其存储位置,从而减少拷贝提高效率。 2、保证缓冲区大小 ...

Fri Sep 18 18:21:00 CST 2020 0 756
linux内核Kfifo环形队列

1、前言   最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核kfifo改过来的。缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。例如一个进程A产生数据发给另外一个进程B,进程B需要对进程A传的数据进行处理并写入文件,如果B没有处理 ...

Tue Nov 21 06:13:00 CST 2017 0 5549
linux内核数据结构之kfifo

1、前言   最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核kfifo改过来的。缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。例如一个进程A产生数据发给另外一个进程B,进程B需要对进程A传的数据进行处理并写入文件,如果B没有处理 ...

Thu Dec 19 09:24:00 CST 2013 5 29596
Linux内核数据结构之kfifo详解

本文分析的原代码版本: 2.6.24.4 kfifo的定义文件: kernel/kfifo.c kfifo的头文件: include/linux/kfifo.h   kfifo内核里面的一个First In First Out数据结构,它采用环形循环队列的数据结构来实现,提供 ...

Thu Mar 21 20:29:00 CST 2019 0 1036
linux内核无锁缓冲队列kfifo原理

Linux kernel里面从来就不缺少简洁,优雅和高效的代码 比如,通过限定写入的数据不能溢出和内存屏障实现在单线程写单线程读的情况下不使用锁。因为锁是使用在共享资源可能存在冲突的情况下。还用设置buffer缓冲区的大小为2的幂次方,以简化求模运算,这样求模运算就演变为 (fifo-> ...

Sat Sep 21 04:06:00 CST 2019 0 552
Linux kernel kfifo分析【转】

转自:https://zohead.com/archives/linux-kernel-kfifo/ 本文同步自(如浏览不正常请点击跳转):https://zohead.com/archives/linux-kernel-kfifo/ kfifoLinux kernel 中的一个 ...

Wed Jan 10 18:32:00 CST 2018 0 1017
Linux内核设计与实现》读书笔记(十六)- 页高速缓存和页回写

好久没有更新了。。。 主要内容: 缓存简介 页高速缓存 页回写 1. 缓存简介 在编程中,缓存是很常见也很有效的一种提高程序性能的机制。 linux内核也不例外,为了提高I/O性能,也引入了缓存机制,即将一部分磁盘上的数据缓存到内存中。 1.1 原理 ...

Fri Nov 22 02:18:00 CST 2013 5 4448
Linux-内核缓存区和write行为

《Unix环境高级编程》 应用缓冲技术能很明显的提高系统效率。内核与外围设备的数据交换,内核与用户空间的数据交换都是比较费时的,使用缓冲区就是为了优化这些费时的操作。其实核心到用户空间的操作本身是不buffer的,是由I/O库用buffer来优化了这个操作。比如read本来从内核读取数据时是比较 ...

Tue Aug 30 21:32:00 CST 2016 0 5250
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM