前言:Symbian是由Ericsson、Panasonic、NOKIA、Simens AG、Sony Ericsson等公司所共同開(kāi)發(fā)并擁用的專(zhuān)為手機硬件而設計的作業(yè)系統,其包含了函式庫(libraries)、用戶(hù)界面(user interface)架構和共用工具(common tools)的參考實(shí)現(reference implementation),Symbian作業(yè)系統的前身是Psion的EPOC作業(yè)系統,當初僅設計為ARM架構處理器獨占使用。
圖說(shuō):Symbian的官方圖標志。
而Symbian在2004年7月股權變動(dòng)后,Nokia的持股比例從32.2%上升到47.9%,維持其第一大股東的地位。為了力拱Symbian,Nokia也發(fā)動(dòng)產(chǎn)業(yè)鏈上的內容開(kāi)發(fā)商來(lái)說(shuō)服手機廠(chǎng)商加強采用Series 60平臺,除了聯(lián)合各移動(dòng)通信終端設備廠(chǎng)商共同支持Symbian作業(yè)系統外,還將該移動(dòng)通信終端設備平臺授權給Samsung、Siemens和 Panasonic,以統一各家移動(dòng)通信終端設備平臺來(lái)加強開(kāi)放性以及降低軟件開(kāi)發(fā)成本。
Symbian的成立理念除了有加強開(kāi)放性以及降低軟件開(kāi)發(fā)成本等考量以外,將微軟這只軟件巨獸給擋在移動(dòng)應用門(mén)外是另外一個(gè)重點(diǎn),由于幾大移動(dòng)電話(huà)業(yè)者早已看出微軟對于移動(dòng)市場(chǎng)也有著(zhù)極大的興趣,遲早會(huì )將手伸進(jìn)來(lái)攪和,因此藉由成立Symbian,成為各大手機廠(chǎng)商的通用系統核心,應用程式也可以極大的比例互通,藉以形成規模,造成進(jìn)入門(mén)檻。只不過(guò)微軟巨獸的稱(chēng)號可不是簡(jiǎn)單就能得到的,在推出Windows mobile移動(dòng)作業(yè)系統家族之后,隨著(zhù)架構與性能的逐步改善,已經(jīng)在移動(dòng)裝置逐漸闖出一片天,想要完全阻擋微軟的入侵,似乎已經(jīng)是一件不可能的事。
Symbian的設計特性以Symbian作業(yè)系統為基礎的智能型手機,在使用者介面上的設計則是以套件形式提供廠(chǎng)商多種不同的選擇,比如說(shuō)常見(jiàn)于Sony Ericsson手機的UIQ介面,Nokia手機的Series 60、Series 80、Series 90等,以及諸如封閉式平臺如由Fujitsu、Mitsubishi、Sony Ericsson和Sharp合作開(kāi)發(fā)應用于NTT DoCoMo所采用的FOMA(Freedom of Mobile Multimedia Access,世界上第一個(gè)WCDMA網(wǎng)路)等等。提供不同型態(tài)的手機操作方式(介面與輸入方式),以及程度不等的擴展性。
而Symbian本身也是一款支援先占式多工、多執行緒,以及具備存儲器保護功能的作業(yè)系統,由于最初是專(zhuān)為移動(dòng)裝置所設計,一般行動(dòng)裝置(如手機)等在硬件資源上都相當有限,無(wú)法如桌上平臺作業(yè)系統般,對硬件需求可以無(wú)限制的膨脹。為了要盡可能在維持系統的可操作性以及穩定性的前提之下,延長(cháng)采用Symbian作業(yè)系統的移動(dòng)裝置的使用時(shí)間,因此它在資源控管上就進(jìn)行得非常嚴格,除了利用各種方式來(lái)降低存儲器的需求以外,程式寫(xiě)作是采用事件驅動(dòng)的方式,當存儲器中沒(méi)有應用程式發(fā)出事件處理需求,中央處理器將會(huì )被關(guān)閉,藉以節省電源消耗。
在整個(gè)處理流程概念上,應用到了活動(dòng)物件(Active Object)的方式,活動(dòng)物件是一種多工處理的形式,其具備了協(xié)同式多工(cooperative multitasking)的特性,在架構上,當一個(gè)物件做了一個(gè)非同步服務(wù)的要求時(shí)(比如說(shuō)系統要送出一個(gè)SMS信息),當要求成立之后,作業(yè)系統就會(huì )辨別出該負責該服務(wù)執行緒內的活動(dòng)物件,并且喚醒負責搭載該物件的執行緒,物件本身也將會(huì )被附加一個(gè)啟動(dòng)排程,并且將控制權交給該物件。
在實(shí)作上,一個(gè)執行緒內將會(huì )有許多的物件,每個(gè)物件都有其各自負擔的行程,但是晤見(jiàn)之間并不是完全獨立的,而是可以互相作用,當A物件的行程與B物件有相關(guān)時(shí)(比如說(shuō)傳送短信與連接到網(wǎng)路服務(wù)的物件彼此就要互相作用),物件與物件、執行緒與執行緒之間都會(huì )有相互的請求,甚至執行緒本身也可以對該執行緒內的物件做處理請求動(dòng)作。這個(gè)軟體設計概念其實(shí)相當古老,早在70年代就已經(jīng)被發(fā)展出來(lái)。利用這些處理規則,Symbian可以很有效率的處理所有的工作流程,并且延長(cháng)電池使用時(shí)間。
雖說(shuō)因為這些技術(shù)的緣故,在Symbian上設計應用程式的難度將會(huì )有所提升,但是基本上由于可采用的程式開(kāi)發(fā)工具相當多,相關(guān)的官方資源與支援也相當完備,雖然基本上Symbian的原生開(kāi)發(fā)語(yǔ)言是C++,一般來(lái)說(shuō)是采用VC++、Visual Studio以及Carbide等,但是開(kāi)發(fā)者也可以采用OPL、Python、Visual Basic、Simkin以及Perl等來(lái)搭配J2ME以及自行開(kāi)發(fā)的JAVA來(lái)使用,具備有相當大的彈性空間。
Symbian作業(yè)系統結構Symbian具備有一個(gè)微核心架構,在架構內定義了包含排程系統以及存儲器管理機制,不過(guò)網(wǎng)路與檔案系統則是外加在使用者端服務(wù),沒(méi)有包含在微核心架構之內。在基本層內,包含了檔案服務(wù),可在服務(wù)內提供類(lèi)似DOS外觀(guān)的檔案系統(每個(gè)邏輯或實(shí)體磁碟裝置都擁有各自的磁碟代號,利用反斜線(xiàn)來(lái)當作目錄的定義系統)。Symbian支援多種不同的檔案系統,通常這些檔案系統被隱藏在最底層,而不會(huì )被顯示出來(lái)。
Symbian具備了一個(gè)相當龐大的網(wǎng)路以及通信子系統,包含了三種主要服務(wù),這三個(gè)主要的服務(wù),分別是ETEL(EPOC telephony)、ESOCK(EPOC協(xié)定)及C32(序列通信回應機制)。這三種服務(wù)都有其Plun-in結構,舉例來(lái)說(shuō),ESOCK可容許不同的「.PRT」協(xié)定模組,藉以實(shí)作多種不同種類(lèi)的網(wǎng)路協(xié)定架構。這些相關(guān)架構也包含了諸如藍芽、紅外線(xiàn)以及USB等短距離有線(xiàn)/無(wú)線(xiàn)通信中。
在使用者介面上,也包含了大量的程式碼,雖然使用者介面大多是,第三方廠(chǎng)商所維護但是所有使用者介面的基本類(lèi)別與次系統都是被包含在Symbian架構之中,相關(guān)的繪圖功能程式碼也被包含在Symbian功能服務(wù)中,這些程式碼功能包含了視窗服務(wù)、自行、點(diǎn)矩陣圖形服務(wù)等等。
至于在應用程式結構方面,則是提供了不同的應用程式引擎,不同的應用程式都會(huì )分散到各種不同的動(dòng)態(tài)連結函式庫(DLL)引擎以及圖形化程式中,當然,Symbian本身也提供了相當多現成的DLL給程式開(kāi)發(fā)者使用。
Symbian作業(yè)系統的體系從1998年Symbian正式出現以來(lái),
歷經(jīng)了十數次的改版,目前Symbian OS最新的版本為9.3版,但是提供給開(kāi)發(fā)者的卻不是這種單純的OS層次程式碼,轉而代之的是以套件形式來(lái)推出的配套方案。目前類(lèi)似的配套方案主流有Nokia公司的S60與Sony Ericsson的UIQ這兩種。
圖說(shuō):采用UIQ 3.0版的Sony Ericsson P990。
Nokia為Symbian提供了4種方案,分別是S40平臺、S60平臺、S80平臺以及CDMA方案。CDMA方案是給具備基本通話(huà)、短信、通信錄管理功能手機使用,屬于非?;镜念?lèi)型,支援彩色螢幕,但是可擴充能力以及功能方面非常簡(jiǎn)化,是專(zhuān)門(mén)給最低階產(chǎn)品開(kāi)發(fā)應用。S40平臺至專(zhuān)門(mén)提供用來(lái)設計具備基本功能的智能型手機系統,提供了標準的JAVE中界、FLASH應用等等,不過(guò)最高解析度設定在320*240,因此定位于中高階產(chǎn)品應用,在操作介面上做了相當程度的簡(jiǎn)化。S80則是著(zhù)重于個(gè)人資料輔助處理功能上,在定位上,就與Windows CE類(lèi)似,以全功能完整提供各種應用程式以及網(wǎng)路服務(wù),以雙手操作最佳化。在開(kāi)發(fā)應用程式上可使用C++或者是JAVA等彈性方案。不過(guò)以上這三種方案主要都是應用于NOKIA的產(chǎn)品中,幾乎沒(méi)有第三方廠(chǎng)商采用。
而S60可以說(shuō)是目前最主流的智能型手機作業(yè)系統,主要是以單手操作為其人機介面概念,除了NOKIA以外,也被諸如Panasonic、SAMSUNG、Motorola等廠(chǎng)商所采用,使用范圍相當廣,此平臺除了包含了完整的事務(wù)輔助處理功能以外,更包含游戲、影音等熱門(mén)功能,并支援了目前流行的移動(dòng)通信網(wǎng)路以及Wi-fi無(wú)線(xiàn)網(wǎng)路等環(huán)境使用,在產(chǎn)品競爭方面,可以說(shuō)是最高的,雖然對于硬件廠(chǎng)商來(lái)說(shuō)競爭非常大,但是對于軟件開(kāi)發(fā)商來(lái)說(shuō),只要針對S60平臺開(kāi)發(fā)一套軟件,即可應用于不同的廠(chǎng)牌智能型手機中,除了市場(chǎng)可大幅擴張以外,相對的開(kāi)發(fā)成本也可有效降低,不需要針對每個(gè)平臺來(lái)去做底層架構上的更動(dòng)。消費者也不必擔心買(mǎi)了特定廠(chǎng)牌的S60平臺手機會(huì )有軟件支援度不足的狀況,畢竟這些智能型移動(dòng)產(chǎn)品在核心架構上都是屬于系出同門(mén),只有硬件設計理念有所不同而已。
圖說(shuō):采用S60第三版的Nokia N73。
S60目前已經(jīng)發(fā)展到3.1版(或稱(chēng)為S60 3rd Edition Feature Pack 1),是基于最新的Symbian OS 9.2的基礎上,而不同版本之間因為支援解析度以及使用者介面的不同,就有可能造成應用程式的不相容,比如說(shuō)第三版開(kāi)始使用的Symbian OS 9.1,與過(guò)去S60 2.X版所採用的Symbian OS 8架構有著(zhù)明顯的不同,9.1版採用了新的ARM EABI 2進(jìn)位執行檔模型,在應用程式管理及安全性上有不小的變更,因此舊版針對Symbian OS 8環(huán)境所開(kāi)發(fā)的軟件就無(wú)法沿用到S60 第三版上,最新的S60 3.1版中,則是將Symbian OS版本推進(jìn)到9.2版,這個(gè)版本是在2006年第一季釋出,變動(dòng)部分,主要是支援了藍芽2.0、OMA裝置管理等,不過(guò)在實(shí)際產(chǎn)品上,採用S60 3rd Edition Feature Pack 1的N95,已經(jīng)應用了不少Symbian OS 9.3的特色,包含HSDPA、802.11協(xié)定以及更多語(yǔ)言的支援等等。
圖說(shuō):采用S60 3.1版的Nokia N95。
圖說(shuō):采用S60 3.1版的SAMSUNG SGH-i520。
Symbian應用軟件的開(kāi)發(fā)上一段文章有提到,基于Symbian的應用平臺有5種以上,這些平臺提供了不同的開(kāi)發(fā)套件供開(kāi)發(fā)人員使用,其中最主要的就是UIQ以及S60這兩種。個(gè)別手機廠(chǎng)商或者是同家族系列通常都會(huì )在網(wǎng)路提供可下載的開(kāi)發(fā)套件以及軟體開(kāi)發(fā)環(huán)境。Symbian的C++語(yǔ)言程式設計,都是在Commercial IDE之下完成,比較常見(jiàn)的開(kāi)發(fā)套件就屬于微軟的Visual Studio,CodeWarrior的Symbian版本也常被應用來(lái)開(kāi)發(fā)專(zhuān)屬應用程式,至于2006年時(shí),Nokia則是使用Carbride.C++來(lái)取代CodeWarrior。
Carbride.C++是基于Eclipse IDE 3.1環(huán)境以及支援Symbian特定功能的Eclipse CDT 3.0.2延伸套件的整合開(kāi)發(fā)工具,基本上Carbride.C++使用與CodeWarrior相同的編譯器,Carbride.C++也被分支為CDT的少數幾個(gè)部分,但幾乎都被包含在Eclipse附加套件上。在架構上,Carbride.C++與標準Eclipse安裝非常類(lèi)似,它可以被應用在其他種類(lèi)的語(yǔ)言發(fā)展上,比如說(shuō)JAVA與Perl等(必須利用Eclipse的自我升級功能來(lái)安裝正確的附加套件)。由于Carbride.C++使用了Eclipse的組建管理系統(Eclipse’s Managed Build System)來(lái)建立Symbian的可執行檔,相較起標準Symbian開(kāi)發(fā)工具,Carbride.C++在建立執行檔的能力方面要來(lái)的更為優(yōu)秀許多,不過(guò)這個(gè)開(kāi)發(fā)工具倒也不是都毫無(wú)缺點(diǎn),首先,它就無(wú)法完全反映出標準Symbian OS開(kāi)發(fā)工具的任何功能上的加強或改變,其次,使用Carbride.C++必須具備更高深的程式寫(xiě)作技巧,以及Symbian的底層結構和使用者介面的瞭解也必須更透徹。而在程式編譯過(guò)程,Carbride.C++所提供的編譯工具也有可能會(huì )隱含瑕疵,導致編譯出來(lái)的程式有不正常動(dòng)作的情形。
此外,Borland IDE也有專(zhuān)為Symbian設計的版本;在Linux與MAC OS X環(huán)境下也有社群技術(shù)支援的開(kāi)發(fā)工具使用,部分Symbian允許公開(kāi)關(guān)鍵工具的原始碼。
Symbian系統的程式設計技巧最重要的一點(diǎn),就是將核心程式碼與使用者介面部分的程式碼分開(kāi),分成不同的模組這么一來(lái)可以有助于應用程式在不同使用者介面系統之間的移植動(dòng)作更為順利。方法之一就是將所有與介面控制非相關(guān)部分都放到獨立的核心DLL之中,使用者介面則是直接對核心DLL做出連結,藉由存取該DLL而達到功能上的應用。
另一個(gè)方法便是再原始碼的階段就做出區分,整個(gè)應用程式包括核心引擎與使用者介面可以包一包編譯為單一檔案,但是在原始碼部分的撰寫(xiě)與存放就要放置到不同的.CPP與.H檔案中,以便于管理及測試。採用這種設計方式,在移植往新介面時(shí),負擔也可以有效減輕,為了適應新的介面,只要變更控制使用者介面的原始碼即可,核心部分的變動(dòng)可以縮小到最低程度。
本地端語(yǔ)言的支援要利用Symbian OS本身的控制方式來(lái)提供,而不能將本地語(yǔ)言寫(xiě)死到程式碼中,除非市場(chǎng)僅只著(zhù)眼于本地,不然為了將來(lái)國際化版本的開(kāi)發(fā)以及國別轉換,將介面語(yǔ)言寫(xiě)死到程式碼中,會(huì )造成將來(lái)改版上的困擾。
盡量使用Symbian所提供的官方SDK中的API來(lái)開(kāi)發(fā)應用程式,避免使用第三方廠(chǎng)商或自行開(kāi)發(fā)的API,以避免將來(lái)作業(yè)系統改版或SDK版本變更之后,應用程式大幅經(jīng)過(guò)改寫(xiě)才能獲得作業(yè)系統支援的情況。
不同的硬件架構對于資源的管理方式都有可能不同,因此要盡量考慮到不同硬體對其系統資源的分配方式,而不要所有在程式開(kāi)發(fā)過(guò)程中所需要的硬件或軟件功能都能在硬件中獲取,而特定硬件資源的取用代號也可能會(huì )因硬件而異,因此采用相對位址,而不是絕對位址,可以避免在不同硬件上執行程式的不相容情形。
存儲器管理是Symbian程式設計的最重要部分由于Symbian OS本身就是針對存儲器與運算資源都頗為受限的硬件來(lái)開(kāi)發(fā),應用程式可能在各種情況之下碰到存儲器耗盡,或者是硬件資源被其他應用程式占用的情況,這些例外情況無(wú)法透過(guò)修改程式碼來(lái)獲得改進(jìn),因此必須遵守幾個(gè)規則:
■ 不要占用不必的存儲器空間。
■ 當程式執行完畢,必須記得將所使用到的資源釋放出來(lái)。
■ 在程式對作業(yè)系統本身申請存儲器占用時(shí),都必須準備好面對存儲器不足的情況。
■ 當存儲器不足的情況出現時(shí),就必須將應用程式回歸到原始狀態(tài),并且將原本占用到的資源回吐出來(lái)。
此外,在程式碼中,盡可能使用SDK中所推薦的存儲器控制指令以及流程,避免造成應用程式的錯誤。為了避免應用程式有存儲器洩漏的狀況時(shí),卻無(wú)法即時(shí)做出反應,導致應用程式崩潰,可以利用一些小技巧,將特定檢查碼放在程式碼的開(kāi)頭與結尾,藉以找出會(huì )導致存儲器洩漏的部分程式碼。
Symbian OS中的執行緒管理與工作進(jìn)程管理在Symbian OS中,每個(gè)工作進(jìn)程都包含了一個(gè)或多個(gè)執行緒,執行緒是程式執行的基本單位,由于Symbian OS中是屬于先占式多工設計,這也意味著(zhù),每個(gè)執行緒都有自己的執行時(shí)間,除非系統將CPU使用權轉移到其他執行緒中。當系統調度時(shí),執行緒的定址空間是受到保護的,因此每個(gè)使用者端執行緒都有自己的專(zhuān)屬空間與時(shí)間,可避免互相受到干擾。每個(gè)執行緒都有各自的stack以及heap,heap可以是私有的,也可以被其他執行緒所共享。雖然Symbian OS支援多執行緒執行,但基本上還是為單執行緒工作處理做最佳化,因此在應用程式開(kāi)發(fā)上,大多推薦以Active Object(類(lèi)似協(xié)同式多工的一種處理方式)來(lái)代替多執行緒的執行方式。
在Symbian OS中使用單執行緒有幾個(gè)考量,主要是由于每個(gè)執行緒都有各自的stack耗用,使用單執行緒可以減少存儲器耗用,而在執行緒之間切換,要比使用Active schduler來(lái)進(jìn)行Active Object切換來(lái)得慢,而單執行緒也不需要處理不同執行緒之間的戶(hù)斥狀況,因此也可以簡(jiǎn)化程式碼的設計,減少錯誤的發(fā)生。
不過(guò)在特定的情況之下,使用多執行緒還是有其優(yōu)點(diǎn)的,比如說(shuō),當要為了保證所執行任務(wù)的持續性時(shí),比如說(shuō)播放音樂(lè ),不想讓音樂(lè )工作被其他短信活動(dòng)等干擾而中斷,因此就可以將之獨立為一個(gè)執行緒來(lái)處理。而特定應用程式中,也有因為原先設計就比較適合使用多執行序架構,比如說(shuō)電子游戲,單執行緒處理可能會(huì )導致音效或動(dòng)畫(huà)顯示不同步。
不過(guò)在啟動(dòng)執行緒之后,執行緒的stack就不能再增加,否則可能會(huì )導致該執行緒崩潰,這是在程式設計時(shí),所必須要注意的一點(diǎn)。
結論Symbian OS具備了極高品質(zhì)的設計特性,其應用的廣泛度,也被層出不窮的新產(chǎn)品所證明,除了高階硬體以外,中低階硬件也可以無(wú)痛的導入。由于行動(dòng)裝置逐漸走向低成本與高性能走向,備有不同平臺開(kāi)發(fā)方案的Symbain可以很好的適應這些不同的應用需求,在架構上,也要比競爭對手更容易發(fā)揮出硬件的效能。目前市場(chǎng)現況來(lái)說(shuō),採用Symbian的移動(dòng)裝置已經(jīng)突破一億臺,而發(fā)展中國家如印度、中國大陸以及巴西等都是人口密集的大國,將來(lái)出貨量更有水漲船高的可能,IDC預估,到2011年,全球移動(dòng)裝置出貨量可能高達10億部以上,不論是針對開(kāi)發(fā)中國家的低階硬件產(chǎn)品或是為年輕用戶(hù)準備的高階全功能產(chǎn)品,都是產(chǎn)業(yè)界所不能忽視的市場(chǎng)機會(huì )。
(52RD.com)