免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 901 | 回复: 0
打印 上一主题 下一主题

Linux进程管理(3) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-21 11:28 |只看该作者 |倒序浏览
    进程组是与完成某个处理相关的进程集合,集合中有个一进程是Leader。会话是与控制终端相关联的进程组的集合,也有一个Leader进程。在与控制终端相关的进程组中,只有一个进程组是负责与控制终端直接通信的,负责输入输出。该进程组叫做前台进程组,其他进程组就叫做后台进程组。

    每个进程都有一个ID,叫做PID,每个线程组有一个ID,叫做TGID,每个进程组有一个ID,叫做PGID,每个会话有一个ID,叫做SID。
    pid的定义如下:
    struct pid{
        int nr;//进程的pid
        struct hlist_node pid_chain;//链接具有同一个散列值但不同nr值的struct pid
        struct list_head pid_list;//链接具有同一个散列值且具有同一个nr值的struct pid
    };
    对于struct pid中的pid_chain,不仅具有解决散列冲突功能,同时具有进程组织结构管理的功能。
    在pid.c里定义了一个叫做pid_hash的静态变量,它是一个包含4个元素的数组,4个元素分别是指向pid,tgid,pgid,sid四个散列表数组。
    pid散列表中的每个元素都是一个具有相同pid值的双向链表的链表;tpid散列表中的每个元素指向一个线程组leader,通过它双向连接着该线程组中的其他非leader线程;gpid散列表中的每个元素指向一个进程组leader,通过它双向连接着该进程组中所包含的各个线程组的Leader。进程组Leader同时也是其中一个线程组的leader;sid散列表中的每个元素指向一个会话的leader,通过它双向连接着该会话中所包含的各个线程组的Leader。会话的Leader同时也是其中一个线程组的leader。以上链接都是通过pid_chain实现,这就是上面说的进程组织管理功能。

    pid值的分配是通过一个叫做pidmap_array的数组来管理的。关于数组的大小,有下面几个宏定义:
    #define PID_MAX_DEFAULT 0x8000
    #define PID_MAX_LIMIT (sizeof(long) > 4 ? 4*1024*1024 : PID_MAX_DEFAULT)
    #define PIDMAP_ENTRIES  ((PID_MAX_LIMIT + 8*PAGE_SIZE - 1)/PAGE_SIZE/8)
PIDMAP_ENTRIES就是pidmap_array数组的大小。pid是采用加1的方式分配,如果,超过上限值,则返回到最小值开始新一轮加1操作。每个pid值都与pidmap_array中的一个bit位对应,如果pid值被占用,则相应bit位置1;如果空闲,则相应bit位置0;


   


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/91477/showart_1837316.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP