Chinaunix首页 | 论坛 | 博客
  • 博客访问: 377509
  • 博文数量: 47
  • 博客积分: 967
  • 博客等级: 准尉
  • 技术积分: 1290
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-25 16:14
文章分类

全部博文(47)

文章存档

2019年(1)

2014年(1)

2013年(9)

2012年(36)

分类: LINUX

2012-05-27 14:22:05

   Linux的进程和轻量级进程/线程均有相应的进程描述符task_sruct结构,task_struct也是进程的唯一标识,我学习进程也将从task_struct开始。该结构定义在include/linux/sched.h文件中。
  

task_struct

  1. struct task_struct{
  2. volatile long state;
  3. 这个字段用来描述进程的运行状态。其中volatile关键字的作用是告诉编译器不要对其优化,编译器有一个缓存优化的习惯,比如说第一次在内存中读取这个变量,编译器发现后面还会用到这个变量,为提高存取速度,编译器优化时有时会先把变量读取到一个寄存器中;以后,再取变量值时,就直接从寄存器中取值,这个关键词的意思就 让编译器不要优化,每次都从内存中读取数,这样确保了每次读取的都是最新的状态。
  4. struct list_head tasks;
  5. 该字段是进程组长链表,表示的是PCB的进点,并通过双向循环链表链接起来。
  6. struct mm_struct *mm;
  7. 该字段描述的是进程的内存信息(描述每个进程拥有的地址空间,也就是进程编译链接后形成的空间)
  8. pid_t pid; /*进程ID号*/
  9. pid_t tgid; /*线程组ID号*/
  10. struct task_struct *real_parent; /*真正的父进程*/
  11. struct tassk_struct *parent; /*父进程,非调试情况等同于real_parent*/
  12. struct list_head children; /*子进程链表,是表头*/
  13. struct list_head sibling; /*兄弟进程链表,是结点*/
  14. struct list_head thread_group;
  15. 该字段将一个线程组(一个进程)中的所有线程的PCB通过链表连接起来。
  16. char comm[TASK_COMM_LEN];
  17. 该字段是是用一个字符数组记录进程的名字,不包含路径。

     
阅读(3663) | 评论(0) | 转发(2) |
0

上一篇:双向循环链表的建立

下一篇:Makefile

给主人留下些什么吧!~~