Windows Mobile的ROM,RAM可能會(huì)比較令人迷惑,這是因?yàn)椋翰僮飨到y(tǒng)所說(shuō)的ROM,RAM并不是硬件上的ROM芯片和RAM芯片。概念不同,所以必須理解清楚這個(gè)不同之后才能繼續(xù)。
首先說(shuō)硬件上的ROM,RAM,我們購(gòu)買(mǎi)手機(jī)的時(shí)候,在手機(jī)參數(shù)里通常喜歡這么說(shuō)明(以我的HTC HD2為例):
ROM:1024M
RAM:576M
這是什么意思呢?這指的是手機(jī)上面的兩顆芯片的數(shù)據(jù)容量,ROM這顆芯片其實(shí)并非真的Read-only,它的特點(diǎn)只是斷電后上面數(shù)據(jù)不會(huì)丟失,而RAM這顆芯片則跟我們PC上的內(nèi)存條芯片一樣,斷電后數(shù)據(jù)丟失。
接下來(lái)是操作系統(tǒng)所說(shuō)的ROM和RAM,Windows Mobile的刷機(jī)其實(shí)就是將ROM文件的內(nèi)容寫(xiě)入到那顆ROM芯片去。而操作系統(tǒng)第一次啟動(dòng)的時(shí)候?qū)⑼瓿梢恍┖罄m(xù)的相關(guān)初始化。Windows Mobile所認(rèn)為的ROM,指的是ROM芯片中被寫(xiě)入的那些只讀的部分,這部分的內(nèi)容是不能改變的,(刷機(jī)才能改)那么剩下的能被程序和操作系統(tǒng)改變的,就是RAM了,所以RAM也不等同于硬件上的RAM芯片,它還包括了ROM芯片中可以讀寫(xiě)的那一部分。
那么,下面所提到的ROM和RAM都是操作系統(tǒng)概念上的ROM和RAM,而不是硬件上ROM芯片和RAM芯片。
任何Windows Mobile設(shè)備,ROM保存了整個(gè)操作系統(tǒng),包括操作系統(tǒng)自帶的那些應(yīng)用程序,也都在ROM里邊。如果ROM里邊的模塊(在資源管理器中看到的可執(zhí)行文件,通常是EXE和DLL,在這里稱之為模塊)沒(méi)有被壓縮,那么操作系統(tǒng)就它“當(dāng)?shù)貓?zhí)行”(Excute In Place,也就是縮寫(xiě)詞XIP);反之,如果ROM里邊的模塊是壓縮過(guò)的,那操作系統(tǒng)就只能先把模塊解壓縮到RAM中,然后再在RAM中執(zhí)行它。至于哪些模塊可以XIP,那是OEM相關(guān)的。
使用XIP有很大好處,最重要的是節(jié)省了寶貴的RAM,也節(jié)省了模塊家載入RAM中所需要消耗的時(shí)間。
那我們平常安裝的軟件,保存的配置,是存放在哪里呢?——存放在“對(duì)象存儲(chǔ)”(Object Store)或者卡上,存放在“對(duì)象存儲(chǔ)”或者卡上的可執(zhí)行模塊,是無(wú)法XIP的,只能先加載入RAM,然后再在RAM中執(zhí)行。
上面提到了“對(duì)象存儲(chǔ)”,下面進(jìn)一步講解:
Windows Mobile的RAM(再次提醒一下,指的不是硬件上的RAM芯片)分為兩個(gè)部分:
其一就是“對(duì)象存儲(chǔ)”,“對(duì)象存儲(chǔ)”里的內(nèi)容在斷電后繼續(xù)保留,不會(huì)丟失;另一個(gè)就是“程序內(nèi)存”,程序內(nèi)存的內(nèi)容會(huì)在斷電后丟失。
“對(duì)象存儲(chǔ)”存放的內(nèi)容包括各種文件,數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)記錄,注冊(cè)表等;而“程序內(nèi)存”則存放應(yīng)用程序運(yùn)行時(shí)候的堆(heap)和棧(stack)。
當(dāng)Windows Mobile啟動(dòng)的時(shí)候,它創(chuàng)建了單獨(dú)的4G虛擬地址空間,這4G的空間中劃分了33個(gè)格子,每個(gè)格子32M,所有的進(jìn)程共享這個(gè)地址空間,當(dāng)一個(gè)進(jìn)程啟動(dòng)的時(shí)候,操作系統(tǒng)就為它選一個(gè)格子來(lái)映射。這是跟桌面的Windows很不一樣的機(jī)制,據(jù)說(shuō)Windows CE 6.0已經(jīng)改進(jìn)了這種內(nèi)存機(jī)制,但最新版本的Windows Mobile 6.5其實(shí)還是基于Windows CE 5.x內(nèi)核的。微軟這么設(shè)計(jì)估計(jì)是因?yàn)橄牍?jié)省便攜式設(shè)備本來(lái)就很寶貴的資源,但這樣做的缺點(diǎn)顯而易見(jiàn),一是只能最多跑32個(gè)進(jìn)程(第1個(gè)格子總是用來(lái)映射前端進(jìn)程的地址空間),二是每個(gè)進(jìn)程默認(rèn)只能有32M的虛擬空間(雖然你還可以通過(guò)內(nèi)存映射文件機(jī)制或調(diào)用VirtualAlloc函數(shù)來(lái)分配超過(guò)32M的虛擬內(nèi)存)。
我們?cè)赪indows Mobile的系統(tǒng)設(shè)置里面看到的“主內(nèi)存”,指的就是RAM。而ROM呢?ROM不光是只讀,我認(rèn)為它還是不可讀,幾乎不可見(jiàn)的,常規(guī)的程序是看不到ROM的,即便你能夠在資源管理器里找到那些屬于ROM的“文件”,但你還是無(wú)法讀取它或者將它“復(fù)制”出來(lái)。

如上圖,主內(nèi)存分兩類,一是“存儲(chǔ)”,一是“程序”,其實(shí)也就是前面提到的“對(duì)象存儲(chǔ)”和“程序內(nèi)存”了。也許你發(fā)覺(jué)“程序”的總內(nèi)存只有460.02M,而不是硬件上標(biāo)稱的576M,要解釋這個(gè)可相當(dāng)不容易,具體參考我前面轉(zhuǎn)載的一篇文章:
http://www.shnenglu.com/guogangj/archive/2010/12/19/136927.html