轉自:http://hezongjian.com/blog/?p=9693
眾所周知,CE的核心是完全重新寫的,與9x根nt沒有任何關係,這給CE帶來了較好的即時性及靈活性。從誕生之日起,CE的核心改過兩次,第一次是3.0,極大的增強了即時性,第二次是6.0,去除了記憶體/應用32 / 32的限制。如此看來,貌似已經比較完美了。從6.0發布以來,我一直樂觀的覺得6.0的核心應該可以至少再頂三個版本了,下次更新核心大概要到CE 9.0了(猴年馬月….)。但是計劃不如變化快,資訊產業瞬息萬變,很多預言都會被證明是很可笑的。我的這個“預言”也不例外(對在08年TechEd上聽我演講的聽眾說聲抱歉,當時我還極力鼓吹多餘的Kernel feature都是沒必要的)。短短几年時間,如果現在你再問我新版本的CE要不要改核心。我會一口咬定,改,最好馬上改。
個人觀點,欠改的地方有兩個,記憶體映射和SMP支援。
首先說記憶體映射。CE從誕生之日起就在Kernel的3GB起始處映射了2個512MB的虛擬位址。一個是有cache的,一個是沒cache的。這使得CE最大的實體記憶體就只有512MB,512已經是理論極限了,再多了就不認了。512這個數字在嵌入式系統上一直是天文數字,幾年前還是。誰知道隨著智能手機軟體(應用複雜化)跟硬體(記憶體白菜價)的飛速發展,在手機上裝個512MB的記憶體也沒什麼大不了的。在CE上,如果裝了512MB記憶體,麻煩還真不小。這個限制應該改了。倒也不是難事,只是向下相容性要打折扣了。
其次說一下SMP。CE誕生以來一直是針對單CPU的,即使在PC機上,多核技術已經興盛很長時間了,但是依然沒有能夠打動CE加入SMP支援,因為用CEPC的人,一般也不會找個多核CPU。時代又不同了,CE支援的主流平台──ARM,這幾年也跟著玩起了多核。ARM11, ARM Cortex A9都玩起了MPCore。這一玩,不得了了。如果CE不跟著玩,幾年後,可能行動裝置上就看不到CE的影子了。*nix系統(iphone和android)可是原生支援SMP的。雖然*nix系統即時性沒有CE高,但是人家畢竟支援smp,可以把CPU的能力都發揮出來。CE啊,抓緊把spinlock,CPU Affinity這些Desktop Windows上的東西搬過來吧(BSP的實現又複雜化了,當然這些東西要BSP支援)。
其它還有沒有要改的呢,可能有。例如Windows訊息機制,現在的WM_LBUTTONDOWN, RBUTTONDOWN訊息已經遠遠不適合multi touch了。當然這個可能不需要改核心,driver和API改改就可以,魅族的手機已經實現了。
下一個版本的CE大概今年就會發布吧。新的CE裡面這兩點會不會改進,目前還沒有官方的訊息。拭目以待吧。
(參考資料,ARM的多核:http://www.arm.com/products/CPUs/ARM11MPCoreMultiprocessor.html)
關於512M的大小和地址限制,沒辦法,MIPS和SH 硬體上就這麼訪問虛擬記憶體地址空間的,所以只要CE一天要相容這2個玩意,這個包袱還得一直背下去。