linux-kernel-analysis-1
Contents
analysis01
设计理念
机制与策略分离 机制 – 提供什么样的功能 策略 – 如何使用这些功能
说实在的这句话第一次听到还是挺震撼的, 一时觉得大学里的操作系统都不知道在干嘛, 我们学的就是机制, 比如进程创建功能, 进程创建完成后具体如何使用与OS内核不再有关. 文件创建功能, 文件创建完,如何使用交给用户. 其实很类似编程中的接口, 接口定义功能, 实现负责具体的策略.
内核类型
- 单内核 (Linux)
可加载的 Linux 内核模块, 提高维护性.
- 微内核
Linux Kernel
双链表
结构
struct list_head{
struct list_head *next , *prev
};
这个结构很有意思, 改变两个指针的含义, 会发现几乎描述了很多数据结构. 只有一个 *next, 单链表, 只进行头部插入数据-栈, 只进行尾部插入数据-队列 *left, *right
初始化
define LIST_HEAD_INIT(name){&name, &name}
前后指针都指向自己
声明并初始化
define LIST_HEAD(name) struct list_head(name){LIST_HEAD_INIT(name)}
判空
static inline int list_empty(const struct list_head*head){
return head->next == head;
}
添加节点
static inline void _ _list_add(struct list_head*new,struct list_head*prev,struct_head*next){
next->prev = new;
new->next = next;
new->prev = prev;
prev->next = new;
}
static 该函数作用域仅在本文件内, 可以隐藏信息 inline 编译器展开该函数
static inline void _ _list_add_tail(struct list_head*new,struct list_head*head){
_ _list_add(new,head->prev,head);
}