Table of Contents
基本术语
- 八个位的量通常称为八位组(octet), 本书使用最常见的术语字节(byte).
- 术语向量(vector)和数组(array)是交互替换使用的。
- 在上下文中, 术语“入口数据(ingress)"和”输入数据(input)“会交互使用,
“出口数据(egress)"和”输出数据(output)“也一样。
本书常用的缩写
缩写 | 意义 |
---|---|
L2 | 链路层(如ethernet) |
L3 | 网络层(如ip) |
L4 | 传输层(如tcp/udp/icmp) |
BH | 下半部(Bottom Half) |
IRQ | 中断(事件) |
RX | 接收 |
TX | 发送 |
引用计数
引用计数函数
- 递增函数: xxx_hold()
- 递减函数: xxx_release()
有时候,释放函数被称为xxx_put(),例如net_device结构的释放函数为dev_put().
垃圾回收
内核不用虚拟内存,直接使用物理内存。
异步
定时扫描,把那些可以释放的数据结构释放掉。
常见的准则:释放引用计数为0或null的数据结构。
同步
当内存不足的情况下,直接触发垃圾回收,不用等待同步机制。
函数指针
- 执行一个函数指针之前,必须先检查其值。避免使用为null的函数指针。
if (dev->init && dev->init(dev) != 0 ) { ... }
缺点
缺点:使阅读代码稍显困难。
goto语句
使用环境
- 用于处理函数内的不同返回代码。
- 用于跳出一层以上的循环嵌套。
捕捉bug
- BUG_ON(): 参数为真时,打印错误消息,然后内核panic.
- BUG_TRAP(): 参数为真时, 内核会打印出警告消息。