• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Jiang's C++ Space

            創作,也是一種學習的過程。

               :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::

            博主:關于Windows Mobile的ROM和RAM的相關問題,我也確實夠頭大的,雖然自己經過了一些研究有了一些結論,但還是未能完全解釋為什么會這樣,今天偶爾找到一篇文章,總算比較全面的描述了這些相關的細節問題,雖然對于一個軟件開發者來說,不明白這些也關系不大,但有一個比較全面的了解很明顯能夠幫助我們理清思路。

            轉自:http://club.tech.sina.com.cn/mobile/thread-61369-1-1.html

            網上看帖,發現常有網友尤其新手在問:我的機器標稱有128 MB 的RAM,為什么打開系統設置里的內存選項卻顯示總的程序內存(RAM)只有11x MB或10x MB。機器RAM說是64 MB, 可是為什么總的內存顯示只有5x 甚至4x MB?

            回答則是五花八門,莫衷一是:內置軟件,后臺程序,開機服務和程序,系統緩存或緩沖池,常駐內存的核心占用,系統占用,甚而解釋為刷系統就占用的(部分ROM占用).……

            個別回答更為武斷:誰的PPC使用中的內存加上剩余內存會等于機器所標稱的內存的?--所以實在沒有深究的必要。

            話雖如此,畢竟這個差值對不同的機器往往不同,個別甚至相差還很大,因而很多用戶仍免不了有些心中惴惴。

            那么究竟哪種解釋更為準確呢?本文的目的就是解開一部分用戶心中的這個疑惑。

            【誰用了我的內存?】
            為什么WM5/6系統顯示的總程序內存(RAM)會比標稱內存總量少幾兆,十幾兆,甚至幾十兆字節的容量呢?

            產生這種疑問的根源在于WM5/6系統設置實際并沒有顯示出實際總的RAM容量,它所顯示的只是WM操作系統在載入時及載入后應用程序和進程所可控制/支配的內存總量,它包括“已使用”(In use)和“閑置”(Free)兩部分。其中“已使用”部分除操作系統占用外,還包括了硬件驅動,個人信息管理,電話撥號等在系統啟動時自動加載的,用戶實際沒有控制權的程序。這些程序,一部分來自微軟,一部分來自設備制造商,還有一部分來自移動通訊服務商(PPC Phone)。

            除設置中所顯示的總容量外,其余部分的內存被固定用作了其它方面的用途而并未被系統設置里的內存狀況顯示所計算在內。這是用戶所不能控制的并且更為隱蔽的另一部分被占內存。

            這部分隱蔽的被占內存主要被用在了五個方面。

            1. 緩存池(Page Pool)

            系統運行程序,程序代碼和代碼所產生的數據都會消耗內存。對于NOR型flash ROM的設備,代碼可以從ROM里直接被CPU調用執行。這種執行方式叫作“立即執行”或“就地執行” (XIP: execute in place)。對于NAND型flash ROM的設備,程序代碼必須首先被調入內存,然后再從內存里被CPU逐條執行。如果沒有緩存池,代碼會首先被全部調入普通的內存里。緩存池實際上就是起到了限制執行代碼時占用過多內存的作用,也就是說,超出了緩存池容量的其余代碼不會被預先調入內存,而只有需要時再行調入。

            WM5系統的NAND型ROM設備的緩存池大小一般是4.5 MB。

            2. 射頻協議棧(Radio Stack)

            在PPC手機中,有相當部分的代碼是用于和發射基站間的通訊。在某些設備里,這一無線通訊模塊有自己的RAM和ROM。而在其它設備里,無線通訊模塊的代碼是被存儲在系統的ROM里的。這樣,它或者是就地執行,或者是調入內存執行。如果是后者,那么這部分被占內存會直接從總的內存中劃掉而不被計入系統設置里所顯示的總的內存容量的。

            這一模塊(射頻協議棧)占用約 4 MB內存。

            3. 直接存取內存區(DMA Buffers)

            一些硬件可以不經CPU的處理和控制而自行寫內存,這叫作直接性內存讀寫(DMA: Direct Memory Access)。這塊內存區在系統加載前已被事先分出(而不受CPU支配)。這種方式的優點在于能夠極高效和通常更低能耗地進行數據的傳送。在早期的 PPC里,這主要用在音頻采集上,通常占用內存很小。現在,它被用于視頻采集,從而也占用了大得多的內存。

            機器的生產商會根據機器在應用方面的定位來調整這部分內存的大小。譬如如果主要用途是預設為拍照,則會需要較小的DMA內存,而如果考慮用于攝像,則需要占用大得多的內存,而如果是視頻會議的話,所需內存會更大。

            直接存取內存區的容量從300 KB 到 6 MB 不等。對于把視頻采集作為主要應用方向之一的機器,可能會在4 MB左右。

            4. 核心區(XIP Kernel)

            操作系統最核心的部分需要就地執行(XIP)的模式。對于NAND型ROM的設備,在系統加載時,需要把這部分代碼首先載入內存,并從這部分代碼開始執行后面的任務。由于系統正在運行時還無法分辨正被執行的這部分核心代碼是從ROM還是RAM執行的,所以它會假設是從ROM里執行的從而把這部分內存排除在外。

            核心區占用約 1.5 到 2 MB 大小。

            5. 幀緩沖區(the Frame Buffer)

            這部分內存專門用作存儲當前屏幕上顯示的一切信息。大多數設備,每個像素占用兩個字節(16-bit 65535種色彩)。所以一般320x240的QVGA屏需要150 KB,而640x480的VGA屏需要600 KB。有時為了顯示性能方面的原因,機器 會設置兩個幀緩沖區,這樣就會占用1.2 MB的內存容量。

            最后來做一下加法:Page Pool (+Radio Stack)+DMA Buffer+XIP Kernel+Frame Buffer

            4.5 (+4) + 0.3 | 6 + 1.5 | 2 + 0.15 | 1.2 = 6.45 | 13.7 (10.45 | 17.7)

            所以基于NAND型ROM 的PPC里所占用的未顯示內存范圍在6.45-13.7 MB,PPC Phone會多占用約4 MB。而基于NOR型flash ROM的機器可能會減少約4.5 MB (PPC) 的內存占用。其它方面,有攝像頭尤其更強調動態視頻攝錄效果的設備占用容量會更大,VGA顯示的機器也會高一些。

            舉例:手頭的HP iPAQ 21x (PPC,640x480 VGA,無攝像頭,WM6,NAND flash ROM): 128 MB(總)-121.40(顯示)=6.6 MB,與上面的估算結果相當符合。對于現在市場上一般配置的PPC手機(基本都是基于NAND型flash ROM的設備),這部分未顯示內存大約會占用13-15 MB的空間。

            另外,需要說明的個例是HTC Touch DiaMond。該款機器號稱有192 MB DDR SDRAM,但實際上其中的64 MB是內置于CPU中的顯存(供3D圖形顯示用,有說亦用于無線模塊的),所以對整個系統而言,可資利用的有效內存仍只有128 MB(內存利用上在圖形顯示方面或許會節省一些---未知)。因此與其它128 MB RAM的類似配置的設備相比,鉆石機的用戶并沒有發現在可用RAM上有什么優勢。HTC Touch HD的標稱RAM容量也存在同樣的數字游戲。

            最后強調的一點是,在對內存的利用和分配上,機器生產商總可能會針對不同型號機器的某些組件作一定調整,也總會在預載應用軟件與速度及用戶可利用的內存資源上作出取舍。所以即使對于具有相同操作系統和同樣標稱內存但不同款型的機器,機器啟動后的用戶可用內存也可能會相差很大。

            【關于Flash ROM的基本常識】

            在性能上,RAM的讀寫速度非常快(讀、寫速度基本相當),由于需要頻繁刷新,也非常耗電(所以對掌上設備而言,RAM并非完全是多多益善,過多閑置無用的RAM會耗掉大量不必要的電力);而ROM的讀寫速度相比RAM慢很多,尤其是寫入速度更慢,但耗電較少(由于不需要高頻刷新來維持記憶)。

            所以應用上,ROM主要是用以存儲程序和數據,而RAM主要用以運行程序。

            Flash ROM 按照實現的整個電路邏輯結構及相應存儲單元擦寫操作的不同分為NAND和NOR兩種類型。NOR型提供完整的尋址與資料總線,并允許隨機存取內存上的任何區域,因而其特點是讀取數據快,但需要較長的時間進行擦寫。NAND型沒有隨機存取外部尋址總線,必須以區塊性的方式進行讀取。與NOR型相比,它具有具有較快的擦寫時間,但數據讀取的速度較慢。NAND型ROM的每個儲存單元的面積也更小,這使得NAND Flash相較于NOR Flash具有較高的儲存密度與較低的單位存儲成本。同時它的可重復擦寫次數也高出NOR Flash一個量級。所以現在所有的存儲卡都是NAND型的flash ROM。

            NOR型ROM更類似傳統的ROM,支持CPU進行字節級別的讀取。而NAND型ROM則類似于硬盤,適合作為大量數據存儲介質。所以對于NOR型 ROM,CPU可以進行就地執行(XIP)而省去了把代碼先讀入RAM的步驟,載入和運行代碼的速度更快,并可減少所需的RAM空間。

            在實際系統中,XIP只能用于底層的(操作系統)代碼。對于后續安裝的被列入文件系統的程序,是必須載入RAM才能夠被CPU執行的。

            對于NOR flash ROM和XIP的關系再補充一點的是,并非NOR型flash ROM都會選擇XIP方式。因為對于一塊flash ROM芯片不能同時進行讀/寫操作,所以如果代碼和數據都裝在一個ROM上,既要XIP,又要同時進行數據寫入的話,實現上相當麻煩(因為寫入時無法從 ROM讀入代碼,所以對中斷的處理會很復雜)。所以解決方法或者是不用XIP,或者是將XIP代碼和數據區分離在兩個ROM上,或者采用比較復雜的技術來實現(IPSM)。

            【關于設備里ROM的占用情況】
            應有的朋友的要求,這里補充說明一下關于ROM的占用情況。對于ROM占用,由于沒有黑幕(除引導記錄和文件分配表外),所以情形相對簡單一些。

            與RAM的情況有些類似,在系統設置里,ROM,即存儲內存(Storage)的總容量與設備的標定ROM相比有一個幾十兆的大缺口。舉例而言,HP iPAQ 210系列,WM6.0, 標定256 MB ROM, 系統設置顯示總存儲內存為162.30 MB, 有近96 MB的差值。但發現并解釋這個差值則簡單明了得多。這部分系統設置沒有顯示的空間是從軟件意義上來說的真正的ROM(只讀)部分,文件系統沒有讀寫的權力,是系統的操作系統和備份文件以及預裝在ROM部分的程序(包括來自微軟,設備制造商以及移動服務商,對于自制的系統還包括ROM包里的其它程序和數據),主要裝在\windows目錄下。用資源管理器查看屬性會發現有ROM屬性,對文件無法修改,也無法復制--操作系統是禁止對ROM文件的操作的。所以操作系統在顯示時把這部分干脆拿了出來,因為這是文件系統無法使用的部分。修改這部分文件的途徑只有通過刷ROM來重寫。硬啟時設備也是通過這部分文件來恢復系統到初始狀態。

            硬啟后會發現存儲內存的已使用部分并不是0,這是根據ROM文件恢復的,文件系統內可以讀寫的部分操作系統的文件。現在我們做加法。把所有設備上的存儲空間(除存儲卡外)加起來。以手頭的iPAQ為例,用Resco Explorer,把所有目錄和文件全選(包括"iPAQ File Store“,這實際是從系統的flash ROM分出的一個存儲卡結構,在硬啟時不會被刷新),去掉SD Card和CF Card(如果有的話)以及RAM Disk (RAM模擬的)為111.15 MB。系統設置里的空閑存儲空間為134.83 MB。總的ROM容量就是:111.15+134.83 = 245.98 MB。

            這個數字接近256 MB了,但仍有約10 MB的差距。

            這里可以想到的有兩種解釋。

            第一,是由文件系統的結構,尤其是大量小文件造成的。

            一般寫入一個1個字節甚至0字節的文件,雖然查看發現全部文件的總字節數沒有增加,但實際上這個文件已經占用了一個區,比如512個字節的空間,所以系統的可用空間實際已經減少了512個字節。對于大文件來講,這個比例會很低,但對小文件,這個浪費的空間比例很高,尤其是很多小文件時,浪費的總的空間就相當可觀了。這個現象在硬盤上尤其突出,因為它的每個最小的文件單位-簇的空間相對更大,所以比如1個字節的文件,會占用4KB或更大(fat, fat32)的有效空間。

            但WM系統的ROM(只讀)文件使用的不是一般的文件體系,而是壓縮的形式,即文件大小是多少,就會實際占用多少(關于這一點,見下一部分的說明)。這樣就只能由第二點來解釋。

            第二,ROM的總空間的確小于標定容量。

            這里涉及到存儲介質容量的單位問題。在計算機應用方面,1KB=1024字節,而不是1000, 1MB=2^20, 1GB=2^30。但是存儲介質(硬盤,存儲卡等)的生產廠家在宣傳產品時,偷換了單位,即標定容量的1MB=1,000,000 字節,而不是2^20=1,048,576 字節,1GB=1,000,000,000字節,而不是2^30=1,073,741,824字節,從而變相降低了成本。所以買回來的號稱80G的硬盤,計算機上顯示的可用空間只有70多GB。存儲卡也是如此。(少5% (M為單位)到 7%(G為單位))

            所以對于和存儲卡在物理上一致的系統內置ROM,出現同樣的數字游戲也并不新奇。

            另外就是flash ROM的實際容量對于比如每個卡可能都不同,有一個波動范圍,flash ROM在生產時也會留有一定的冗余空間以備出現壞區時備用。

            所以考慮第二點原因,245.98 X 1.024^2= 257.93 MB,這與標定的256 MB的ROM總容量是基本吻合的。

            注:關于這部分的討論可能有錯漏,需參考更多資料核實。

            【 關于WM系統“\Windows”目錄下的兩類文件 】
            搞清這一點,其一是為上一部分關于ROM空間的分析作補充說明,其二是為了闡明為什么通常無法對\Windows系統里的ROM屬性的文件進行常規的文件操作,為什么對有些系統文件(非ROM屬性)卻可以。

            實際上WM系統對內置ROM的使用,的確是分成了兩部分區別對待的。其一是文件(Files)部分,其二是模塊(Modules)部分。

            文件部分與磁盤、存儲卡等用來存放文件的存儲空間的性質和文件結構是一類的,原則上用戶具有完全的讀寫權力。操作系統里所有圖片及多媒體文件都被存放在這一部分。這也是為什么我們可以隨意更換桌面圖片--盡管桌面圖片文件也是屬于操作系統自帶的文件之一。一些程序也是以通常的(可執行)文件形式存放在這部分的,所以也會發現對某些“\Windows“的可執行文件我們也可以隨意處置。(博主:假如我刪除了這類文件,在硬重置的時候它們會被恢復么?如果會,那如何解釋?

            對于第二部分的文件,則用常規的方法來進行操作一般都是無能為力的。查看屬性就會發現這類文件都標有一個“ROM”屬性,而且無法更改。實際上,這部分程序文件在被刷入flash ROM前,是經過了特別處理的。大多數文件的文件頭已被截去,文件代碼和數據在ROM里的存放地址也是完全固定的。所以從存放的形式來說,這些程序是可以直接被運行而不必先被調入RAM的。即便不需要XIP,這種存儲形式也提高了代碼載入、執行的效率。另外,這些文件本身變小了,而且不同文件能夠以更緊湊的形式存放在這個部分,從而節省了ROM空間。

            存放的形式也決定了即使可以把ROM屬性的程序文件拷貝出來(有工具可以做到),也無法立即使用它們--必須再利用工具重新生成一個正常文件(加上文件頭),同時還要考慮到有些程序可能針對特定的設備進行過代碼的優化與壓縮--這決定了這不是一件直截了當,總能成功的活兒。 所以通常制作的新ROM總是非常依賴于特定機型的。

            posted on 2010-12-19 12:27 Jiang Guogang 閱讀(652) 評論(0)  編輯 收藏 引用 所屬分類: Windows Embedded Programming
            香蕉久久夜色精品国产小说| 伊人久久一区二区三区无码| 久久婷婷国产综合精品| 国产精品久久久久久久| 国产免费久久久久久无码| 成人综合久久精品色婷婷| 99久久精品国内| 久久精品免费网站网| 乱亲女H秽乱长久久久| 久久99国产精品久久久 | 日本WV一本一道久久香蕉| 少妇精品久久久一区二区三区| 久久亚洲欧美日本精品| 少妇人妻88久久中文字幕| 国产成人精品久久| 亚洲精品乱码久久久久久中文字幕| 久久九九青青国产精品| 少妇无套内谢久久久久| 久久精品无码免费不卡| 久久久久久久久无码精品亚洲日韩 | 人人狠狠综合久久88成人| 久久AⅤ人妻少妇嫩草影院| 国产成人综合久久久久久| 亚洲愉拍99热成人精品热久久 | 久久人妻少妇嫩草AV无码专区| 久久精品国产99国产精品澳门| 欧美久久一区二区三区| 欧美一级久久久久久久大| 国产精品一区二区久久国产| 久久久久人妻一区二区三区vr| 日韩久久无码免费毛片软件| 伊人久久综在合线亚洲2019| 91精品国产乱码久久久久久| 蜜臀av性久久久久蜜臀aⅴ| 久久婷婷五月综合97色直播| 亚洲AV无码成人网站久久精品大| 青青青青久久精品国产h久久精品五福影院1421 | 88久久精品无码一区二区毛片 | 亚洲国产精品高清久久久| 久久WWW免费人成一看片| 一本久道久久综合狠狠躁AV|