当前位置:Linux教程 - Linux文化 - 浅谈冲浪突破Linux Kernel稳定版(v2.2.X)进程限制

浅谈冲浪突破Linux Kernel稳定版(v2.2.X)进程限制


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提供稿件)