欢迎来到天天文库
浏览记录
ID:38841382
大小:360.32 KB
页数:19页
时间:2019-06-20
《linux内核taskstruct结构体字段分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、linux内核源码分析进程管理(一)郭海林2012.9.29重要数据结构——双向链表(1)结构体定义:structlist_head{structlist_head*next,*prev;};list_headlist_headlist_headlist_headnextprevnextprevnextprevnextprev重要数据结构——双向链表(2)为什么要使用这种结构?容器机制——将对象嵌入到另一个对象中怎样通过链表元素找到容器对象的实例?nextprevtask_structlist_headnextprevtask_st
2、ructlist_headnextprevtask_structlist_head重要数据结构——双向链表(3).../include/linux/list.hlist_entry(p,t,m)已知类型为t的数据结构包含了一个list_head字段,该字段的名字是m,地址为p,返回类型为t的数据结构地址list_entry(0x.....,structtask_struct,tasks)重要数据结构——散列表(1)结构体定义表头:structhlist_head{structhlist_node*first;};节点:structh
3、list_node{structhlist_node*next,**pprev;};重要数据结构——散列表(2)pprevnexthlist_headhlist_nodenullfirstfirstfirsthlist_nodepprevnextpprevnexthlist_nodenull为什么要这么定义?进程结构体剖析(1)structtask_struct{volatilelongstate;/*-1unrunnable,0runnable,>0stopped*///...longexit_state;//...}进程的状态宏
4、定义:#defineTASK_RUNNING0#defineTASK_INTERRUPTIBLE1#defineTASK_UNINTERRUPTIBLE2#define__TASK_STOPPED4#define__TASK_TRACED8/*intsk->exit_state*/#defineEXIT_ZOMBIE16#defineEXIT_DEAD32//...进程结构体剖析(2)structtask_struct{//...structlist_headtasks;//将系统中所有进程通过双向链表链接起来!//...}怎样访问
5、所有的进程呢?#definefor_each_process(p)for(p=&init_task;(p=next_task(p))!=&init_task;)#definenext_task(p)list_entry_rcu((p)->tasks.next,structtask_struct,tasks)给出全局pid号,怎么找到相应进程的task_struct?进程结构体剖析(3)structtask_struct{//...pid_tpid;//进程标识符(线程)pid_ttgid;//线程组的领头线程IDstructta
6、sk_struct*group_leader;//threadgroupleader//...}系统调用getpid()返回什么?进程结构体剖析(4.1)structtask_struct{//...structtask_struct__rcu*real_parent;/*realparentprocess*/structtask_struct__rcu*parent;/*recipientofSIGCHLD,wait4()reports*/structlist_headchildren;/*listofmychildren*/st
7、ructlist_headsibling;/*linkageinmyparent'schildrenlist*///...}进程之间的关系:父子关系兄弟关系childrensiblingchildrensiblingchildrensiblingchildrensiblingchildrensiblingADCBEPNNPPPNNP进程结构体剖析(4.2)假设现在有进程A,生成三个子进程B、C、D,B进程又生成一个子进程E。五个task_struct怎么进行链接?进程结构体剖析(5.1)structtask_struct{//...
8、/*PID/PIDhashtablelinkage.*/structpid_linkpids[PIDTYPE_MAX];//...}enumpid_type{PIDTYPE_PID,PIDTYPE_PGID,PIDTYPE_SID,P
此文档下载收益归作者所有