Linux内核分析
czhzasui
nullpter
展开
-
GCC通过变量的引用识别类型
#define min(x, y)({typeof(x) _min1 = (x);typeof(y) _min2 = (y);(void) (&_min1 == &min2);_min1 < _min2 ? _min1 : _min2;})一直不理解第四行(void) (&_min1 == &min2);查了下资料发现这样做的目的是为了避免不同类型的变量进行比...原创 2018-03-23 11:02:50 · 341 阅读 · 0 评论 -
GCC声明的特殊属性
在声明后面加上__attribute__((属性的类型))常用的属性format 参数的风格unused 表示函数或者变量可能并不会使用,这样即使函数或者变量不被调用,编译器也不会warningaligned 设定指定大小的对齐格式packed 设定最小可能的对齐,防止出现对齐问题...转载 2018-03-23 11:23:48 · 237 阅读 · 0 评论 -
缓存一致性协议(MESI协议)
大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入。由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存在一个问题,由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存...转载 2018-03-24 16:47:18 · 1472 阅读 · 0 评论 -
Linux内核的WRITE_ONCE函数分析
Linux kernel中list.h中 链表的初始化函数如下static inline void INIT_LIST_HEAD(struct list_head *list){ WRITE_ONCE(list->next, list); list->prev = list;}上面一段代码的作用是初始化链表,使前向指针和后向指针分别指向list自己。不理解WRITE_ONC...原创 2018-03-24 17:30:05 · 11377 阅读 · 0 评论