当前位置: 技术问答>linux和unix
容纳进程个数,计算NR_TASKS的问题
来源: 互联网 发布时间:2016-03-06
本文导语: 能容纳的进程的个数是由GDT表项个数决定的。 我知道,除去一些系统保留,剩余的GDT表项有8180项。 为什么计算NR_TASKS的时候要除以2,得到4090个进程。 看一个帖子上说:http://www-128.ibm.com/developerworks/cn/linux/l-memmod/ 任...
能容纳的进程的个数是由GDT表项个数决定的。
我知道,除去一些系统保留,剩余的GDT表项有8180项。
为什么计算NR_TASKS的时候要除以2,得到4090个进程。
看一个帖子上说:http://www-128.ibm.com/developerworks/cn/linux/l-memmod/
任何情况下,GDT 中的条目数 8180,因此:
2 * NR_TASKS = 8180
NR_TASKS = 8180/2 = 4090
(为什么使用 2 * NR_TASKS?因为对于所创建的每个进程,都不仅要加载一个 TSS 描述符 —— 用来维护上下文切换的内容,另外还要加载一个 LDT 描述符。)
好像不是每个进程都有TSS的吧,ms只有当前的进程才有TSS对不对,还有不是说Linux基本上不用LDT吗?为什么每个进程还要产生一个LDT呢?
不解~!!!!
我知道,除去一些系统保留,剩余的GDT表项有8180项。
为什么计算NR_TASKS的时候要除以2,得到4090个进程。
看一个帖子上说:http://www-128.ibm.com/developerworks/cn/linux/l-memmod/
任何情况下,GDT 中的条目数 8180,因此:
2 * NR_TASKS = 8180
NR_TASKS = 8180/2 = 4090
(为什么使用 2 * NR_TASKS?因为对于所创建的每个进程,都不仅要加载一个 TSS 描述符 —— 用来维护上下文切换的内容,另外还要加载一个 LDT 描述符。)
好像不是每个进程都有TSS的吧,ms只有当前的进程才有TSS对不对,还有不是说Linux基本上不用LDT吗?为什么每个进程还要产生一个LDT呢?
不解~!!!!
|
这个是由I386体系决定的, I386 最初的设计是同时为每一任务提供独立内存管理的, 所以就需要LDT这个个寄存器, 但在LINUX 中并没有这样做, 而是进程在用户空间里统一分配内存. 每个进程还要产生一个LDT 据说是为兼容WINDOWS 的程序运行方式, ok?