博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux内核基础层的学习(1)
阅读量:6213 次
发布时间:2019-06-21

本文共 1539 字,大约阅读时间需要 5 分钟。

版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/45072905

一:内核基础层数据结构

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)

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

2:hash链表

a):定义

struct hlist_head{    struct hlist_head *first;}

b):hash链表库

与list相同

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

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):顺序锁

你可能感兴趣的文章
ArchLinux安装简单安装教程
查看>>
代码测试
查看>>
Lombok(一)
查看>>
台湾域名一周统计:8月第三周新增38个
查看>>
8月份我国域名总量新增超8万个 环比减少19%
查看>>
分布式事务解决方案
查看>>
Oracle RAC Failover 详解
查看>>
增加和释放swap分区
查看>>
520戏精上身!纸短情长,一句顶一万句的花式告白语抱走不谢!
查看>>
阿里下一代云分析型数据库AnalyticDB入选Forrester云化数仓象限
查看>>
让IE的Button自适应文字宽度兼容
查看>>
15年选择,加速前行
查看>>
日历||三级联动
查看>>
复制:程序学习书单
查看>>
关于会议室日历显示预订者信息
查看>>
JQuery创建form表单提交
查看>>
React入门第三弹—— 一切从React开始
查看>>
完美卸载 SQL Server 2008 方案总结。
查看>>
Nodejs学习
查看>>
IOS视频播放
查看>>