诗和远方

Linux内核编译/内核数据结构/同步机制/信号量

https://www.bilibili.com/video/av22623285/?p=2

内核编译

块层编译的make文件:block目录的make文件 \drivers\block\Makefile

块层编译的配置文件:block目录的配置文件 \drivers\block\MKconfig

最终的头文件:\include\linux\autoconf.h


内核基础层数据结构:

双向链表list,路径:\include\linux\list.h

struct list_head{

  struct list_head *next, *prec;

}

哈希链表\include\linux\list.h

struct hlist_head{

  struct hlist_head *next, *prec;

}

单向链表:内核无单向链表的定义

红黑树(实质是自平衡二叉树)/lib/rbtree.c 内存管理、IO调度算法等等应用了红黑树

radix tree:/lib/radix-tree.c radix树是一种空间换时间的数据结构。用过空间的冗余减少了时间上的消耗。page cache的管理使用了radix tree



内核基础层同步机制:

自旋锁。文件:\include\asm-x86_64\spinlock.h 调用:spin_lock/spin_unlock


内核信号量

include\asm-x86_64\semaphore.h

arch\x86_64\kernel\semaphore.c

sema_init:技术可以为多

init_MUTEX:计数为1的信号量

调用:

Up:释放信号量

down:获取信号量。如果不能获取,进程进入睡眠态

down_trylock:获取信号量。如果不能获取,立即返回。进程不进入睡眠态


自旋锁可以用在中断处理函数中

内核信号量不能用在中断处理函数和tasklet等不可睡眠的场景

可睡眠场景即可用内核信号量,也可用自旋锁。自旋锁通常用在轻量级场景(lock、unlock之间时间比较短)


原子变量

原子变量提供了一种原子的数据结构,对这种数据结构的读写不可被细分和打断

include\asm-x86_64\atomic.h


completion提供一种等待-完成的机制

\include\linux\completion.h

wait_for_completion等待操作的完成;complete完成的信号


cpu变量DEFINE_PER_CPU

RCU锁:读的时候用call_rcu/写的时候用rcu_read_lock

顺序锁:read_seqbegin/write_seqlock


dead line调度算法中红黑树的应用

linux-2.6.11.12\drivers\block\deadline-iosched.c

dead line调度算法学习双向链表、hash链表的应用

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Catalog
标签列表
最新
最热
常用网站
站点信息
  • 文章总数:2016
  • 页面总数:1
  • 分类总数:17
  • 标签总数:518
  • 评论总数:0
  • 浏览总数:592287
Archives
Copyright © 2017-2019 www.my889.com Some Rights Reserved.
推荐使用 Chrome 浏览器浏览本站
沪ICP备17052342号
Sitemap XML