1、什么是进程?Linux操作系统的进程有什么特点?
进程在操作系统中执行特定的任务。进程可以理解为处于活动状态的计算机程序。
Linux是一个多处理操作系统。进程具有独立的权限与职责。如果系统中某个进程崩溃,它不会影响到其余的进程。每个进程运行在其各自的虚拟地址空间中,通过核心控制下可靠的通讯机制,它们之间才能发生联系。
Linux必须跟踪系统中每个进程以及资源,以便在进程间实现资源的公平分配。如果系统有一个进程独占了大部分物理内存或者CPU的使用时间,这种情况对系统中的其它进程是不公平的。
在实用中,某些特定环境下要求运行巨大数量的进程,如Internet 上运行的服务器,因为目前Linux Kernel 稳定版(v2.2.X)存在最大进程数的限制,这笔小小的缺憾多少为Linux的推广带来局限,使众多的用户对Linux驻足观望。
2、什么是最大进程?为什么会有最大进程的限制?
Kernel 版本2.2.X及以前版本使用X86CPU的全局描述符表(gdt)作为基础,每一个进程占用gdt表的两个条目。因gdt的大小受到X86体系结构的限制,所以最大进程的数量也受到这项限制,一般计算最大能达到4090个进程数。
版本2.4.X将要解决这个问题,为此引入了许多其他先进技术,强化了多CPU的支持,但也因此增加了复杂度。而且看来测试达到稳定尚需时日。
我们通过修改Kernel的进程管理,采取了更加实际和灵活的机制来突破最大进程限制。
3、遇到这个限制,有几种处理方法?
最简单的方法就是等待版本2.4.X的发布。但它何时发布,是美国人的事,我们心里没底。而最迫切的用户需求就摆在面前,时间不等人,我们承认这是一个临时性的方案,但它使我们至少抢占了半年左右的时间,并且赢得了用户对Linux的信任。
实际上,我们突破进程数限制的方案,极大的体现了灵活性。以前必须先改Kernel中的进程数参数,再依据新的参数重新编译内核。我们不能期望每一用户都去自己编译内核,所以现在重启时,特设了一个LILO参数,可通过修改此参数,传入内核,从而达到实际进程数的变动。
这种改动实现的方法,实现了可定制的模式,处处为用户着想,充分体现了冲浪技术的风格。因此实际上我们做了两种改动,一是改动内核突破了进程限制,二是你可以自己定制所需的进程数。
4、能简要的说说你们突破进程限制的原理吗?
Kernel ver 2.2.X事先为每个进程号分配了gdt表的入口,而gdt的大小又受到X86体系结构的限制,所以才出现了最大进程数这一限制。
然而事实上,用事先为每个进程号分配gdt入口的办法毫无必要,PCB中也没必要保存寄存器值tr、ldtr,任务切换时以PCB中的ldt和tss段首址动态地设置到某个gdt入口就行了。
打个通俗的比方:就好象Kernel ver 2.2.X 为每个进程授予了终身教授的职位,而这样使得官僚机构占据了空间。我们的做法是实行实时应聘制,进程哪个来了哪个上,动态的分配,这样在理论上就取消了4090的限制。而实际也证明了我们的方法切实可行。
5、最后的结果如何?
经过我们的修改,使系统进程理论上的上限数可设置到2的31次方。但实际使用中,每增加一个进程,纯内核内存空间会有分配的代价,详细的计算方法可参照我们的技术文档。
实现了此种修改以后,哪怕是一些为SUN、HP写的程序(众所周知它们对进程的要求很大),也能够顺利的移植到Linux平台,实现企业互联网的关键应用。
6、我能够从中获得什么?
如果您是厂商,曾经因为Linux的最大进程限制而产生疑虑,那么现在我们可以自豪的说,我们已经解决了这个问题---Linux完全可以承担您企业服务器平台的关键应用。
如果您是Linux内核爱好者,您将得到我们这次改动的全部Open Source的源代码;并且还有进一步的技术文章告诉您,我们是如何做的。Linux 并不神秘,我们希望有更多的爱好者参与到 Linux的Kernel Hacker中来。(Xteamlinux提供稿件)