歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> Linux文化 >> 沖浪創新——突破最大進程數的限制

沖浪創新——突破最大進程數的限制

日期:2017/2/27 12:18:08   编辑: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提供稿件)


Copyright © Linux教程網 All Rights Reserved