「下午是實操環節,大家可以帶著自己的問題來,我們現場調試、現場解答。」
盧為冰說完,側身讓出講台,陳洋走上來,打開電腦,投影幕布上出現了一張深藍色的幻燈片。
「各位好,我是陳洋。」他推了一下眼鏡,目光掃過全場。
「深藍系統從S1到S3,一共經歷了一個大版本和兩個小版本的疊代。我今天不講細節,講思路。」
他按了一下翻頁筆,屏幕上出現了一張時間線圖,從2008年9月到2009年10月,標記了三個關鍵節點。
「S1發布的時候,我們在做一件沒有人做過的事,把一個智能作業系統塞進聯發科MTK6225這種主頻不到200MHz的晶片裡。
當時市面上的主流觀念是,智能機系統需要至少400MHz以上的處理器才能流暢運行。
但我們做到了,在MTK6225上跑深藍系統1.0,第一次實現了多任務。」
台下響起一陣低低的議論聲。
坐在第三排的一個天語工程師小聲跟旁邊同事說:「那時候我們還在用MTK做功能機,完全沒想到還能跑智能系統。」
陳洋等議論聲平息後,繼續翻到下一頁。
「S2我們換到了MTK6268,246MHz的CPU跑WCDMA協議棧,再加上深藍系統1.5的多任務調度,這套方案在當時是唯一的。
市場上沒有任何一款246MHz處理器能同時跑3G協議棧和智能作業系統,除了我們。」
「為什麼能做到?」他切換了一張幻燈片,上面是一張對比表格。
「因為深藍系統的任務調度器是事件驅動的,不是時間片輪轉的。安卓的任務調度器是基於Linux內核的CFS完全公平調度器,適用於通用計算場景,但在行動裝置上,這種調度器天然存在三個問題。」
屏幕上的對比表格,左邊是安卓,右邊是深藍,逐行列出了差距:
「第一,響應延遲。安卓的CFS調度器為了保證公平性,會頻繁進行上下文切換,每次切換都有微秒級的開銷。在後台任務多的時候,前台應用的響應延遲會被拉高。
深藍的事件驅動調度器不做時間片輪轉,只響應中斷和事件。沒有後台任務排隊的時候,前台應用能獨占CPU資源,響應速度更快。
第二,內存管理。安卓應用是用Java寫的,運行在Dalvik虛擬機上,GC垃圾回收機制會不定期觸發。
每次GC都會暫停所有線程幾毫秒到幾十毫秒不等,用戶感知到的就是卡頓。深藍應用用C/C++原生開發,沒有虛擬層,沒有GC暫停,內存管理是手動控制的。
第三,電源管理。安卓的電源管理策略基於Linux內核的wakeup機制,任何一個應用都可以申請wakeup鎖,後台應用鎖住CPU導致耗電增加。
深藍系統沒有後台wakeup機制,所有後台任務都走推送通道,系統會在沒有任務時進入深度睡眠狀態。」
雷俊的手裡的筆從剛才開始就沒有停過,他寫得很快,幾個關鍵點在他筆記本上已經被畫了圈。
安卓的調度器是公平導向的,深藍的調度器是響應導向的。
安卓有GC暫停,深藍沒有虛擬層。
安卓的電源管理是應用主動控制,深藍的電源管理是系統主動控制。
這三條差異,單獨看每一處都是微小的優化,但合在一起,就是深藍系統在低端硬體上能跑得更流暢的底層原因。
而這也意味著,安卓在底層架構上就輸了。
雷俊放下筆,抬起頭看著投影幕布上的對比表格。
他心裡很清楚,安卓2.0雖然剛剛發布,但它的底層架構並沒有變,CFS調度器沒改,Dalvik虛擬機還在用,電源管理策略也沒有本質變化。
谷歌在安卓2.0上做的優化是上層應用的,比如多點觸控的支持、瀏覽器引擎的升級、相機接口的改進。
這些優化對於提升用戶體驗確實有幫助,但解決不了底層架構的先天問題。
安卓的卡頓,是刻在基因里的。
而深藍系統的流暢,也是刻在基因里的。
他抬起頭,重新看向講台,比剛才更專注了一些。
陳洋翻了翻幻燈片,屏幕上出現了一張簡單的系統架構分層圖。
「接下來我快速過一下深藍系統的分層架構。最底層是內核,基於CNM微架構自研,我們叫它深藍內核,現在已經是第二個版本了。
第二層是硬體抽象層,包括觸控、基帶、音頻、電源管理這些核心驅動。
第三層是系統服務層,包括推送服務、帳號體系、應用商店接口。
最上層是UI桌面,圖標、壁紙、過渡動畫、設置面板,這一層是完全可定製的。」
他按了一下翻頁筆,屏幕上出現一張更詳細的分層圖,每一層都用不同的顏色標註出來,旁邊註明了哪些對合作廠商開放、哪些不開放。
「聯盟成員能接觸到的,主要是第三層的系統服務API和第四層的UI定製接口。
第三層的推送服務、帳號體系、應用商店接口,我們以SDK的方式提供,合作廠商可以在自己的系統鏡像里集成這些服務。
「重點是第四層。」他用翻頁筆的紅點圈了一下最上面的區域。
「桌面啟動器、圖標包、壁紙、鎖屏界面、設置面板的樣式,這些我們完全開放定製。
你們想做自己的風格,改桌面、改圖標、改動畫,這些都沒問題。
只要不改動底層服務,不改動系統API,不改動推送協議,其他的都可以自己發揮。」
雷俊快速記了幾筆,在旁邊畫了一個問號,然後舉手。
「陳總,我有一個具體的問題。」他放下手。