1.为什么Linux不在链表结构体中放数据,而是在数据结构体中放链表结构体struct list_head?

如果使用前一种方法,对于每一个数据结构都需要定义专门的链表,而后一种方法,只需要在新的数据结构体中放入统一的双向链表list_head即可,然后通过list_entry获取该链表指针指向的数据结构体

2.为什么list_entry(ptr, type, member)member使用的是sibling而不是children

这是因为task_struct->children->next指向的是下一个进程的sibling成员而不是children成员

3.task_struct中除了包含parentchildren等可以找出父进程子进程的成员外,还包含tasks成员,这是一个双向循环链表,里面包含了所有的进程结构体

4.Linux内核中条件判断语句使用likelyunlikely正确可以提高程序指令跳转执行速度,其中likely这个宏里面使用!!是将判断表达式转化为bool类型