概念说明
英语里有很多地方用到headroom/tailroom;比如内核里的skb结构体里;
这个headroom/tailroom, 字面解释就是头部空间,尾部空间;一看到尾这个字呢,就可以想到,理解起来,不能拿人当参照物,因为对于人来说,和头像对的部位是脚,不是尾。但是从人的第一印象,如果说headroom,肯定首先想到的是人的头。
这和其他很多动物的情况不相同。其他动物,比如蛇,狗,毛毛虫来说,和头相对的部位是尾。
那我们在理解head/tail的时候,是按照蛇来理解还是狗呢?其实是按照具体情况具体分析。例如skbuff,需要用蛇虫来理解比较确切,因为在网络线上穿越的数据包的形式和蛇非常类似,狗有腿不太适合。
这样按照蛇的形体来理解 headroom和tailroom,就稍微好了一些。头部空间,就是蛇的头部之前的空间,余量。尾部空间,就是尾巴之后的空间,余量。
实际含义
最后,这个headroom与tailroom的用途是什么呢?如果这一层意思理解不了很容易就弄丢这个概念。
最终这两个概念的用途是在说:头部有空间,可以继续向着这个方向生长,增长,增加,前进;尾部有空间,就可以向着尾部的方向,继续延申,扩展,扩大。
如果确确实实想要以人为参照物,需要将tail换成foot,同时想象自己处于一个空置的房间,而且处于失重的状态,那么在头顶之上有一个屋顶:屋顶到头顶之间的空间就是headroom。而脚底板与地板之间的空间就是tailroom。
举例
While some execution resources such as caches, execution units, and buses are shared, each logical processor has its own architecture state with its own set of general-purpose registers, control registers to provide increased system responsiveness in multitasking environments, and headroom for next generation multithreaded applications.
这里的意思就是,为后续的提高留有空间。
skb_buff
这个结构体里有这个headroom和tail room的原因是,协议栈的特质:
在从上层到下层的传递过程中,需要对数据添加每层的头,而且要做尾添加checksum,验证的一些数据在里面。