Linux内核数据结构
来源:互联网 发布:2016下半年的网络综艺 编辑:程序博客网 时间:2024/04/30 11:39
一、概述
Linux内核提供了一些常用的数据结构并建议开发者尽量重用,而不需要再去实现一些类似的数据结构。这篇博客主要描述一下Linux内核提供的链表、队列、映射及二叉树这四种常用数据结构。当然这里提到的每一种数据结构要说清楚都需要不少的篇幅,而这篇博文只是简要分析一下Linux内核设计的理念,以便在选用时能做到心中有数。
二、链表
链表是最常用的一种数据结构,用来组织一系列的数据。链表不同于静态数组,它的长度可变,且通过指针来指向前或后的节点元素,所以每个节点之间内存可能都不连续,这也使得它的插入和删除操作变得极为简单。
Linux内核定义了自己的链表数据结构,不同于其它一些系统将链表的前后指针植入某个结构体,Linux将一个链表的结构体(list_head)植入需要构成链表的节点结构体中。如下形式:
struct list_head{ struct list_head *prev; struct list_head *next;};
struct myNode{ void * data; struct list_head list; /* 所以myNode节点构成链表 */};Linux通过container_of()宏来获取list_head链表嵌入的inode指针,从而实现对inode元素的链表组织。
LInux提供了一些列操作链表的函数定义在<linux/list.h>头文件里面,包括添加、删除、遍历等常规操作。
LInux这种链表组织形式提供了一些统一的操作方法,避免了内核编程时链表的多样化设计带来的困惑,使得开发工程师可以更多的专注于其它设计,并减少了大量的编码工作,这种设计理念很值得学习。其实这种设计在生活中也存在活生生的例子,比如挂钩式窗帘做好滑轨和环扣以后,可以随意挂上不同的窗帘,当需要更换窗帘时就不再需要拆掉滑轨等重新制作,而只要更换窗帘布即可。
三、队列
任何操作系统都少不了一种模型,那就是生产者——消费者模型,队列就是实现这种模型的基础数据结构,它是一种FIFO的模型,用来完美解决生产消费的关系。Linux内核通用队列实现叫做kfifo,它定义在/kernel/kfifo.c中,其声明在文件<linux/kfifo.h>中。
Linux的队列同其他系统定义的队列差不多,提供了一列的函数供开发者调用,包括初始化、推入数据、取出数据、peek数据、销毁队列以及查询队列状态等函数。具体见kfifo.c源码文件。
四、映射
映射通常也叫做关联数组,其实就是一组唯一键组成的集合,每个键对应必然关联某个特定的值,映射必须提供下面三个操作函数:add(key, value); remove(key); value = lookup(key);
- Linux内核数据结构
- Linux内核数据结构
- linux内核数据结构
- linux内核中的数据结构
- Linux内核数据结构
- Linux内核关键数据结构
- linux内核数据结构
- Linux内核数据结构
- Linux内核数据结构
- Linux内核常用数据结构
- linux 内核数据结构调试
- Linux内核数据结构 kfifo
- Linux内核数据结构分析
- Linux内核数据结构
- linux内核数据结构以及内核调试
- 《Linux内核设计与实现》- 内核数据结构
- 《Linux内核设计与实现》--内核数据结构
- Linux内核数据结构(一)
- nginx配置https
- 【搜狗笔试题】给定一个数组a[N],我们希望构造数组b[N]
- 阿克曼函数
- 点击form表单的Input自动提交的问题
- Qt4样式表
- Linux内核数据结构
- 我的Unix笔记
- VC知识库全套视频下载 VIP套餐(共16套)
- linux鸟哥私房菜学习笔记一
- 程序员 2014-9-25 一天的奇妙之旅
- Fitnesse使用系列六
- MKNetworkKit与AFNetworking和ASIHTTPRequest,MKNetworkKit用法与介绍
- 传说中的CSS~让我来告诉你吧~Cascading Style Sheets
- leetcode-Reverse Words in a String