`
hongbochen1223
  • 浏览: 43770 次
文章分类
社区版块
存档分类
最新评论

linux内核基础层的学习(1)

 
阅读更多

一:内核基础层数据结构
1:双向链表list
a):链表的定义

struct list_head{
 struct list_head *next,*pre;
 }

b):container对象和list_entry

#define container_of(ptr,type,member){  \
    const typeof(((type *)0->member) *_mptr = (ptr); \
    (type*)((char*)_mptr-offset(type,member));})
#define list_entry(ptr,type,member) \
    container_of(ptr,type,member)

对双向链表的详细介绍请参考我的博客:

linux内核list.h的学习

2:hash链表
a):定义

struct hlist_head{
    struct hlist_head *first;
}

b):hash链表库
与list相同

请参考下面文章的后面部分就是hash链表的内容:

linux内核list.h的学习

3:红黑树

a):实质上是自平衡二叉树
b):定义在rbtree.c文件中(静待博客更新,对rbtree的介绍)
c):应用场景
主要用在内存管理,IO调度算法等实现了红黑树

4:radix输–基树

a):定义在/lib/radix_tree.c中
b):radix树是一种空间换时间的数据结构,通过空间的冗余减少了时间上的消耗
(静待博客更新,对radix_tree的介绍)
c):page cache的管理使用了radix tree

二:内核基础层的同步机制
1:自旋锁
a):作用
(1):如果数据未锁,那么就获取锁并运行,如果数据已锁,那么就一定旋转(其实是反复执行一条指令)
(2):单处理器环境(非抢占式内核)下,自旋锁其实不起作用
(3):单处理器,抢占式内核环境下,自旋锁起的作用就是禁止抢占
b):自旋锁的调用
(1):spin_lock
(2):spin_unlock

2:内核信号量

a):定义在文件semaphore.h文件里
b):semaphore和mutex
(1):sema_init:计数可以为多
(2):init_mutex:计数为1的信号量
c):信号量的操作
(1):up:释放信号量
(2):down:获取信号量,如果不能获取,则进入睡眠状态
(3):down_trylock:获取信号量,如果不能获取则立即返回,进程不进入睡眠状态

注意:
自旋锁和信号量的区别
1:自旋锁可以用在中断处理函数和tasklet等不可睡眠的场景,而信号量不行
2:可睡眠的场景既可以使用信号量,也可以使用自旋锁,自旋锁通常用在轻量级场景

3:同步机制–原子变量
a):原子变量提供了一种原子的数据结构,对这种数据结构的读写不可被细分和打断
b):原子变量提供的调用
(1):atomic_add:加一个整数到原子变量
(2):automic_sub:从原子变量减去一个整数
(3):automic_set:设置原子变量的数值
(4):automic_read:读取原子变量的数值
4:同步机制–completion
a):completion提供了一种等待完成的机制
b):提供的调用
(1):wait_for_completion:等待操作完成
(2):complete:完成的信号
5:其他内核同步机制
a):CPU变量 DEFINE_PER_CPU
b):RCU锁
c):顺序锁

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>

版权声明:本文为博主原创文章,未经博主允许不得转载。

分享到:
评论

相关推荐

    Linux内核修炼之道

    很好Linux内核休息书籍 第一层次修炼的内容包括了前三章, 目的是希望您能够对 Linux 以及内核有个全面的认 识和了解,掌握分析 Linux 内核源代码的分析方法。 第 1 章主要介绍了 Linux 的 18 年成长史, 或许您会...

    Linux内核 内容很全

    第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 1.1.4 控制器和外设 8 1.1.5 地址空间 9 1.1.6 时钟 9 1.2 软件基础 9 1.2.1 计算机语言 9 ...

    深入理解LINUX内核(第三版)

    , 《深入理解Linux内核,第三版》指导你对内核中使用的最重要的数据结构、算法和程序设计诀窍进行一次遍历。通过对表面特性的探究,作者给那些想知道自己机器工作原理的人提供了颇有价值的见解。书中讨论了Intel特有...

    Linux编程--Linux内核

    Linux内核 前言 第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 1.1.4 控制器和外设 8 1.1.5 地址空间 9 1.1.6 时钟 9 1.2 软件基础 9 1.2.1 计算机语言 9 1.2.2 什么是操作...

    深入理解linux内核(中文).pdf

    本书将引导你畅游Linux内核中使用的最主要的数据结构、算法和编程技巧,讨论了具体的Intel平台的重要特点。但是本书涵盖的内容绝不限于代码所起的作用,它还阐明了Linux为什么如此运作的理论基础。本书涵盖Linux 2.4...

    Linux内核完全剖析基于0.12内核

    很经典的一本Linux内核方面的书,读者需要c和汇编,还有操作系统的基础理论。 作者在前几章介绍必要的保护模式编程和一些80x86接口编程,还有gcc和它的汇编。在到图书馆找一些资料就可以读下去,不会距人于千里之外...

    linux内核调试分析指南

    linux内核调试分析指南 linux内核调试分析指南--上篇 本文档已经转到下面的网址,位于zh-kernel.org的文档停止更新,请访问新网址 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一...

    深入理解linux内核中文第三版(高清有目录)

    深入理解linux内核中文第三版 没啥好说的 经典!!! 为了透彻理解Linux的工作机理,以及为何它在各种系统上能顺畅运行,你需要深入到内核的心脏。cPu与外部世界的所有交互活动都是由内核处理的,哪些程序会分享...

    linux网络编程

    《Linux网络编程》循序渐进地从应用层到Linux内核、从基本知识点到综合案例,向读者介绍如何在Linux下进行网络程序设计。《Linux网络编程》内容分为4个部分:Linux程序设计基础部分、Linux用户空间网络编程部分、...

    Linux网络编程

    《Linux网络编程》循序渐进地从应用层到Linux内核、从基本知识点到综合案例,向读者介绍如何在Linux下进行网络程序设计。《Linux网络编程》内容分为4个部分:Linux程序设计基础部分、Linux用户空间网络编程部分、...

    Linux内核--基于Netfilter的内核级包过滤防火墙实现.doc

    知识基础:本防火墙的开发基于对Linux内核网络栈有个良好的概念,本人对网络栈的分析是基于早期版本(Linux 1.2.13),在明确了网络栈架构的前提下,上升一步分析高级版本内核中的Netfilter防火墙实现原理,然后进行...

    LINUX编程白皮书 (全集)

    第一部分 Linux内核 前言 第1章 硬件基础与软件基础 6 1.1 硬件基础 6 1.1.1 CPU 7 1.1.2 存储器 8 1.1.3 总线 8 1.1.4 控制器和外设 8 1.1.5 地址空间 9 1.1.6 时钟 9 1.2 软件基础 9 1.2.1 计算机语言 9 1.2.2 ...

    Linux网络编程 part2

    part 2 本书内容分为4个部分:linux程序设计基础部分、linux用户空间网络编程部分、linux内核网络编程部分以及综合案例部分。内容包含linux系统概述、linux编程环境、linux文件系统简介、linux下的进程和线程、tcp/...

    深入浅出Linux驱动编程

     (1)设备驱动属于Linux内核的部分,编写Linux设备驱动需要有一定的Linux操作系统内核基础;  (2)编写Linux设备驱动需要对硬件的原理有相当的了解,大多数情况下我们是针对一个特定的嵌入式硬件平台编写驱动的...

    Linux内核设计与实现的课程实验指导书

    即便是有一定基础的人,学习Linux内核也是个莫大的考验。这里并不是吓唬初学者,而是希望能够使大家有个心里准备,学习Linux内核之旅充满艰难万险,但当你披荆斩棘一路走来,拨开云雾之时,无限感慨“风景这边独好看...

    嵌入式Linux网络体系结构设计与TCP/IP协议栈.part5

    全书共分12章,第1章概述Linux内核组件与内核技术特点,以及网络体系结构实现应用到的内核开发的基础知识。第2~5章在介绍了实现网络体系结构、协议栈、设备驱动程序的两个最重要的数据结构sk_buff和net_device的...

Global site tag (gtag.js) - Google Analytics