Chapter 2. Mbufs: Memory Buffers
来源:互联网 发布:windows 开源shell 编辑:程序博客网 时间:2024/05/16 13:42
1. MBUF有下面四种形态
2. 用下面的方法可以巧妙的解决函数递归调用问题
#define MGET(m, how, type) { \
MALLOC((m), struct mbuf *, MSIZE, mbtypes[type], (how)); \
if (m) { \
(m)->m_type = (type); \
MBUFLOCK(mbstat.m_mtypes[type]++;) \
(m)->m_next = (struct mbuf *)NULL; \
(m)->m_nextpkt = (struct mbuf *)NULL; \
(m)->m_data = (m)->m_dat; \
(m)->m_flags = 0; \
} else \
(m) = m_retry((how), (type)); \
}
struct mbuf * m_retry(i, t)
int i, t;
{
register struct mbuf *m;
m_reclaim();
#define m_retry(i, t) (struct mbuf *)0
MGET(m, i, t);
#undef m_retry
return (m);
}
3. m_pullup函数的说明
struct mbuf * m_pullup(register struct mbuf *n, int len);
函数原型如上,函数的作用是,保证第一个mbuf包含最少len字节的数据,以便执行mtod。
如果请求的len字节数据分布在cluster上,那么会将这些字节复制到一个新的mbuf中,之后将新mbuf和原mbuf拼接成mbuf链。
4. m_copy函数的说明
#define m_copy(m, o, l) m_copym((m), (o), (l), M_DONTWAIT)
函数的作用是,复制mbuf链m中的l字节的数据到一个新的mbuf链
如果mbuf链m中的数据存在于cluster上,则不执行真正的copy动作,而是增加cluster的引用计数。
所有的cluster的引用计数,均在全局数组mclrefcnt[]中维护
- Chapter 2. Mbufs: Memory Buffers
- Mbufs: Memory Buffers
- Mbufs(Memory Buffers) and Output Processing
- Memory Buffers
- Chapter 2. Memory Addressing
- Chapter 4 Cache Memory
- Chapter 5 Internal Memory
- Chapter 6 Extern Memory
- Chapter 9 Memory Management
- Chapter 10 Virtual Memory
- Chapter 12. Dynamic Memory
- Byte Buffers and Non-Heap Memory
- Android eglCreateWindowSurface Memory Allocation Kinds of Buffers Memory Share
- Chapter 4. Memory Management Debugging
- Chapter 6 Memory Hierarchy --- Locality
- Chapter 6 Memory Hierarchy -- Summary
- Chapter 6. Memory(Final,over)
- An intro to modern OpenGL. Chapter 2.1: Buffers and Textures
- C# TreeView控件的使用
- 应聘时最漂亮的回答
- 在Ubuntu里创建程序的快捷方式
- 嵌入式linux串口通信自发自收测试程序
- POJ 1028 Web Navigation
- Chapter 2. Mbufs: Memory Buffers
- 六个必看的小故事
- (2011.08.10 - 2011.08.15)六天的学习小记
- JBPM学习日志(五)
- 下列程序运行时会崩溃,请找出错误并改正,并且说明原因
- .NET 中的验证控件详解:
- IsPostBack深入探讨
- 为了练好口语,你敢不敢每天读一遍,坚持一个月
- Oracle 10g (归档与非归档)日志模式切换、日志管理