歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux綜合 >> Linux資訊 >> Linux文化

淺談沖浪突破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提供稿件)


Copyright © Linux教程網 All Rights Reserved