悟空学Linux专栏----第5篇

  悟空决定按照Linux达人教的方法研究Linux内核,他想首先研究Linux内核中数据结构,第一个吸引悟空的是Linux双向链表。

  很多程序设计双向链表的方式是如下:

  Struct fox{

  Int tail_length;

  Int weigth;

  Struct fox *next;

  Struct fox *prev;

  };

  但是Linux内核的双向链表采用了另外一种方式来实现上面的结构体的双向链表,具体的实现如下:

  Struct list_head {

  Struct list_head *next;

  Struct list_head *prev;

  };

  Struct fox{

  Int tail_length;

  Int weigth;

  Struct list_head list;

  };

  虽然这个结构体Struct list_head相当的简单,但是却是Linux内核中最为通用的一个结构体,被很多复杂的结构体包含着。然而令悟空感到神奇的是为什么,Linux要采用这种方式来管理Linux的双向链表,而没有采用通用的方式。

  悟空翻阅了很多资料都没有找到答案,最后终于在《Linux内核的设计与实现第三版》这本书中找到了答案。原来采用第一种设计的时候,几乎每种类型的结构体都需要实现双向链表的管理接口,这直接导致了双向链表的管理复杂,而且无法统一管理,和Linux的设计精神简单、高效背道而驰。而采用了第二种双向链表的实现方式,使得双向链表的管理变得相当简单,只需要一套简单的接口就能管理所有的双向链表,其主要的接口如下:

  初始化链表元素:void INIT_LIST_HEAD(struct list_head *list);

  链表头插入:list_add(struct list_head *new,struct list_head *head);

  链表尾插入:list_add_tail(struct list_head *new,struct list_head *head);

  删除元素:list_del(struct list_head *entry);

  这大大的简化了双向链表的管理难度,真是简单即美。

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wukonglinux/article/details/46800545
个人分类: 悟空学Linux专栏
上一篇悟空学Linux专栏----第4篇
下一篇悟空学Linux专栏----第6篇
想对作者说点什么? 我来说一句

跟阿铭学Linux第二版

2013年11月24日 421KB 下载

跟阿铭学Linux第二版(电子版)

2014年10月30日 415KB 下载

跟阿铭学Linux(第3版)

2018年05月21日 47.21MB 下载

跟阿铭学Linux++第3版-目录完整

2018年06月14日 60.73MB 下载

跟阿铭学Linux(第3版)【试读】

2017年07月14日 12.86MB 下载

asp.net入门.第5篇

2007年12月26日 35.4MB 下载

Linux就该这么学15期视频教程

2018年06月25日 227B 下载

跟阿铭学linux_第二版

2018年02月10日 414KB 下载

电子书:跟阿铭学Linux 第3版

2018年04月13日 47B 下载

跟阿铭学Linux.chm

2018年02月24日 651KB 下载

没有更多推荐了,返回首页

关闭
关闭