LIST_HEAD:该函数定义并初始化了一个链表例程,这些例程中的大多数都只接受一个或者两个参数:头节点或者头节点加上一个特殊链表节点(以下代码来自于Linux 2.6.22/include/linux/list.h) #define LIST_HEAD_INIT(name) {&(name),&(name) } #define LIST_HEAD(name) \ struct list_head name = LIST...
可以通过LIST_HEAD(my_lsit)来进行一个双向链表的初始化,初始化后,my_list的prev和next指针都将指向自己,如下: structlist_head my_list = {&my_list, &my_list}; 正常的链表都是为了遍历结构体中其它有意义的字段而创建的,但是上面定义的my_list中只有prev和next指针,因此没有实际意义的字段数据,所以,需要...
/* 子进程链表 */ struct list_head children; /* 兄弟进程链表 */ struct list_head sibling; /* 线程组领头线程指针 */ struct task_struct *group_leader; /* 在进程切换时保存硬件上下文(硬件上下文一共保存在2个地方: thread_struct(保存大部分CPU寄存器值,包括内核态堆栈栈顶地址和IO许可权限位),内核...
* list, after a COW of one of the file pages. A MAP_SHARED vma * can only be in the i_mmap tree. An anonymous MAP_PRIVATE, stack * or brk vma (with NULL file) can only be in an anon_vma list. */ struct list_head anon_vma_chain; /* Serialized by mmap_sem & * page_tabl...
*/structlist_headchildren;/* list of my children */structlist_headsibling;/* linkage in my parent's children list */structtask_struct*group_leader;/* threadgroup leader */ 这些字段具体描述如下: real_parent。指向其父进程,如果创建它的父进程不再存在,则指向PID为1的init进程。
struct task_struct __rcu *real_parent; /* real parent process */struct task_struct __rcu *parent; /* recipient of SIGCHLD, wait4() reports */struct list_head children; /* list of my children */struct list_head sibling; /* linkage in my parent's children list */ ...
work_struct的数据结构如下,暂时我们还无法关注其原理,只关注如何去开启一个work #include<linux/include/workqueue.h>typedefvoid(*work_func_t)(structwork_struct*work);structwork_struct{atomic_long_tdata;structlist_headentry;work_func_tfunc;#ifdefCONFIG_LOCKDEPstructlockdep_maplockdep_map;#endif}; ...
一、双向链表list_head Linux内核驱动开发会经常用到Linux内核中经典的双向链表list_head,以及它的拓展接口和宏定义:list_add、list_add_tail、list_del、list_entry、list_for_each等。 在内核源码中,list_head结构体的定义在文件source_code/include/linux/types.h文件中,结构体定义如下: ...
[PIDTYPE_MAX];.../* 指向创建其的父进程,如果其父进程不存在,则指向init进程 */struct task_struct __rcu*real_parent;/* 指向当前的父进程,通常与real_parent一致 */struct task_struct __rcu*parent;/* 子进程链表 */struct list_head children;/* 兄弟进程链表 */struct list_head sibling;/* 线程...