ILD

内核数据结构之:list
2018-7-3
内核链表是一个doubly linked list,是一个双向循环链表。Linux使用链表时,将链表放入数据结构中。头文件:链表头定义在123struct list_head { struct list_head *next, *pre

内核数据结构之:kfifo
2018-7-7
kfifo是一个环形缓存,是一个队列,实现FIFO功能。kfifo头文件linux/kfifo.h,实现代码:lib/kfifo.c1 结构体kfifo有一个结构体,定义在linux/kfifo.h中:1234567struct __kfifo { unsigned int in

内核数据结构之:idr
2018-7-8
IDR分配一个整数,并关联到一个指针。内核很多地方有这个应用场景,如device names,POSIX timers等。IDR底层通过radix tree实现。相关文件:lib/radix-tree.clib/idr.cinclude/idr.h有3种方式定义并初始化一个idr变量:1 静态分配,

内核数据结构之:rbtree
2018-7-11
红黑树是一种自平衡二叉搜索树。红黑树和AVL树类似,但是最差情况下的插入和删除更快,查询时间稍微变慢,但仍然是O(log n)。Linux红黑树实现在/lib/rbtree.c,头文件linux/rbtree.hLinux红黑树对速度进行了优化,减少了一层indirection,提高了缓存命中率。和

dev_error与pr_error和printk的区别
2018-7-14
pr_*()和printk()一样,但是pr_*()包含了对应的KERN_XXXX。dev_*()和pr_*()一样,但是会打印struct device的标识信息。所以pr_info和dev_info并不是用在特定的启动阶段,用这些函数能打印出来的,printk也能。这和early printk用

Kernel Interrupts
2018-8-4
Linux内核支持Nested interrupt,但是不支持reentrant interrupt。处理某一中断时,同类型的中断在所有CPU上被禁止,因此ISR不必设计成可重入的。但是新的其它类型的中断可以打断正在处理的中断,这就是中断嵌套,isr需要支持nested interrupt。中断相

softirq
2018-8-10
下半部的历史:下半部机制状态BH在2.5中移除任务队列 task queues在2.5中移除软中断 softirq从2.3开始引入tasklet从2.3开始引入工作队列 work queue从2.5开始引入软中断软中断是在编译期间静态分配的。软中断由下述结构体表示,定义在

Process Management & Scheduling
2018-8-19
Process Descriptor and the Task Structure进程描述符是struct task_struct类型,定义在,进程描述符包含了进程的所有信息。Allocating the Process Descriptortask_struct结构使

Kernel Synchronization 1: atomic operation
2018-8-20
Causes of Concurrency内核中,下面的东西会导致并发中断软中断和任务队列内核抢占Sleeping and synchronization with user-spaceSymmetrical multiprocessingAtomic Operations在很多体系架构中,对齐的

Kernel Synchronization 2: spin lock
2018-8-20
spin lock自旋锁,和架构相关,使用汇编实现。架构相关的代码定义在,但是使用的接口定义在在单处理器上,实际上不需要锁,只需要禁止内核抢占。注意:Spin Locks are not recursive获取一个你已经获取的锁,你

Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.