1、前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的。缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。例如一个进程A产生数据发给另外一个进程B,进程B需要对进程A传的数据进行处理并写入文件,如果B没有处理 ...
本文分析的原代码版本: . . . kfifo的定义文件: kernel kfifo.c kfifo的头文件: include linux kfifo.h kfifo是内核里面的一个First In First Out数据结构,它采用环形循环队列的数据结构来实现,提供一个无边界的字节流服务,并且使用并行无锁编程技术,即当它用于只有一个入队线程和一个出队线程的场情时,两个线程可以并发操作,而不需要 ...
2019-03-21 12:29 0 1036 推荐指数:
1、前言 最近项目中用到一个环形缓冲区(ring buffer),代码是由linux内核的kfifo改过来的。缓冲区在文件系统中经常用到,通过缓冲区缓解cpu读写内存和读写磁盘的速度。例如一个进程A产生数据发给另外一个进程B,进程B需要对进程A传的数据进行处理并写入文件,如果B没有处理 ...
1、前言 最近写代码需用到链表结构,正好公共库有关于链表的。第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域。后来看代码注释发现该代码来自linux内核,在linux源代码下include/Lish.h下。这个链表具备通用性,使用非常方便 ...
1、前言 最近写代码需用到链表结构,正好公共库有关于链表的。第一眼看时,觉得有点新鲜,和我之前见到的链表结构不一样,只有前驱和后继指针,而没有数据域。后来看代码注释发现该代码来自linux内核,在linux源代码下include/Lish.h下。这个链表具备通用性,使用非常方便。只需要 ...
参考自:https://blog.csdn.net/zhanglei4214/article/details/6767288 一、hlist结构简介 hlist_head 和 hlist_node 是位于linux内核中的数据结构,其设计初衷主要是为了减少Hash表的内存消耗 ...
目录 1. 进程相关数据结构 0x0: CURRENT宏 我们知道,在windows中使用PCB(进程控制块)来对进程的运行状态进行描述,对应的,在linux中使用task_struct结构体存储相关的进程信息 task_struct在linux/sched.h文件里 ...
内核数据结构贯穿于整个内核代码中,这里介绍4个基本的内核数据结构。 利用这4个基本的数据结构,可以在编写内核代码时节约大量时间。 主要内容: 链表 队列 映射 红黑树 1. 链表 链表是linux内核中最简单,同时也是应用最广泛的数据结构。 内核中定义 ...
一,内核对象 内核对象的结构图 一个内核对象分为对象头和对象体两个部分,在对象头中至少有一个object_header和其他信息。对象体紧挨着对象头中的object_header。 这里注意对象指针指向的并不是对象头,如果要访问对象头,需要拿对象体减去 ...
一、kfifo原理 kfifo实现原理是采用循环(环形)队列。 二、kfifo特点 1、采用环形缓冲区来实现,提供一个无边界的字节流服务。采用环形缓冲区的好处为,当一个数据元素被用掉后,其余数据元素不需要移动其存储位置,从而减少拷贝提高效率。 2、保证缓冲区大小 ...