当前位置:Linux教程 - Linux文化 - 冲浪创新——突破最大进程数的限制

冲浪创新——突破最大进程数的限制


冲浪平台(中国)软件技术有限公司近日宣布,他们已经成功解决了传统Linux最大进程数4096限制的问题。这一突破表明Linux在真正进入企业级大规模应用方面又取得了更深一步的进展。

关于是否确立这一研发项目,冲浪的研发部足足犹豫了一个月,基本决定之后,又考虑了两周,最后还是决定:做!该犹豫的理由太多了:时间宝贵、冲浪的新产品急待推出、解决这样一个难题很明显是吃力不讨好的事,而做的理由只有一个:解决用户在使用Linux时真正遇到的问题。

冲浪一直以来都很关注用户的反馈。正是因为用户的一套大规模Email系统在linux平台上运行,遇到了进程数不够的问题,才有了解决最大进程数限制的课题。但冲浪很担忧,这种担忧不是从技术角度考虑的,冲浪相信自己的工程师们可以解决这个问题。现在的事实也的确证明了这一点:只要下定决心,冲浪可以解决技术难题,甚至有关kernel 方面的。冲浪的担心在于Kernel V2.4.X已声明可以解决这一问题,即使解决了这一难题,也只能是临时的方案,Kernel V2.4.X出来后,所有的技术都要跟它兼容。这样做是否值得?但是本着解决用户问题,减少用户使用Linux疑虑的原则,冲浪决定还是要做,况且,即便是Kernel V2.4.X出来了,要测试达到稳定尚需时日,于是便有了今天的成果:冲浪突破了最大进程数的限制。

那么如何在Kernel V2.2.X现有条件下突破4090进程数的限制呢?经分析发现,关键在于任务切换时,CPU必须恢复成下一个进程的状态,而这可以通过任务寄存器(tr)和局部描述符表寄存器(ldtr)的值获得,因为这两个指针寄存器指向gdt表中的特定入口(Kernel ver 2.2.X事先为每个小于4090进程号分配了gdt表的入口),在固定gdt入口中有相应的两个段描述符ldt段和tss段的首址,于是可转到相应的段获取详细的关于进程任务及对任务的描述。同时因为kernel在进程控制块(PCB)中保存了任务寄存器和局部描述符表寄存器的值,并且在进程控制块中也可以找到ldt段和tss段的首址, 所以对于超出的进程用事先为每个进程号分配gdt入口的办法不是很必要,进程控制块中也没必要保存任务寄存器和局部描述符表寄存器的值,任务切换时以进程控制块中的ldt和tss段首址动态地设置到某个共享gdt入口就行了。具体方法是:在gdt表中插入与CPU个数相同多的项,作为每颗CPU的专用项,用于超出GDT表之外的进程运行使用,仍留下4090-32=4058项用于原有算法使用。这些保留入口由所有超出4058项的进程共享,但每个CPU必须互斥,在理论上取消了4090的限制,又由于同一颗CPU同时只能运行一个进程,因此方案可行。

此方案以尽量简单的改动来突破最大进程数的限制,并在lilo设置文件中写上特定参数,启动时自动传入内核,就可以实现在kernel V2.2.X下超过4090个的进程数了。此方案在突破进程数限制的同时也灵活了对进程数的修改。在从前,不论进程数是512或1024,都要先在源代码中修改进程数,再重新编译,才能改进程数,这是只有程序员级的人才有能力做到的。而现在只需在重启时,设置一个LILO参数,就可轻松地修改最大进程数,是所有使用者都能做的。这也是程序编写的方向,更灵活、更易用。

冲浪的这一成果,是对自己最好的证明:冲浪有好的人才、好的技术。同时,秉持着Linux自由、开放的天性,冲浪要把这一来之不易的成果与所有热爱Linux自由技术的人分享,不久冲浪网站将全面公开这一源代码。

做中国自己的OS,而不仅仅是汉化,是冲浪的发展方向,冲浪人对此从没有犹豫过。自从开发XteamLinux 以来,经常加班、一个又一个的技术难题、听不到掌声,所有这些都没有阻挡冲浪前进的步伐。冲浪人自豪地说:“在冲浪做软件的人,都是要做伟大软件的人”。一份耕耘、一份收获,所有的努力都会在明天带来收获。期待着冲浪的下一个创新。(XteamLinux提供稿件)