標籤:style blog http os 使用 ar 檔案 資料 sp
記憶體是SoC(System on Chip,片上系統)整合設計的重要模組,是SoC中成本比重較大的部分。記憶體管理的軟硬體設計是SoC軟體架構設計的重要一環,架構設計師必須要在成本和效率中取得平衡,做到在節省記憶體的同時保證整個系統的效能。系統記憶體需求評估是對嵌入式軟體架構師的最基本要求,同時也是其最重要的技能之一。一般在SoC項目立項的時候,架構師就要完成系統記憶體需求評估。
下面以一個多媒體電子解決方案中的SoC設計為原型,說明大致的評估流程:
1. 根據產品規格,對各個應用情境進行功能和效能分解
產品規格一般會描述應用功能情境和效能。架構師要對各個情境進行功能和效能分解,分析各個情境在記憶體使用量上的關係。包括:
1)列出所有的應用情境,明確各個應用的生命週期,在什麼時候開始,什麼時候結束。
2)系統是否要同時支援多個應用(多進程),例如聽歌曲的時候要瀏覽圖片,這意味中兩個應用是同時利用記憶體,不能進行應用記憶體分時複用;
3)系統是否要同時支援多種介質,例如同時訪問卡裝置和快閃記憶體裝置,一般在單進程時都只是訪問單種存放裝置,除非是實現資料複製,但在多進程的時候,不同的進程訪問不同的存放裝置也很正常,同時訪問不同的存放裝置意味著兩種驅動是同時使用記憶體。
4)系統是否要同時支援多種檔案系統。不同的存放裝置可能部署不同的檔案系統,其同樣存在2)中的問題。
5)明確系統支援的編解碼格式,其表現為演算法記憶體需求。不同的編解碼格式對記憶體的要求不同的,同樣的演算法時,不同的速率也導致不同的記憶體需求。
6)系統效能要求,例如LCD刷屏,有大塊framebuffer自然會有更好的效能。
2. 對系統軟體進行分層,明確每一層模組的組成
1)系統分啟動、驅動、作業系統、檔案系統、中介軟體(演算法、UI)、應用程式框架、應用等層次,一般的消費類電子產品,如多媒體裝置、遊戲機等產品系統都會分成多個層次。每個層次又會有多個模組組成,如驅動分字元裝置驅動和塊裝置驅動,一般按鍵屬於字元裝置,存放裝置一般屬於塊裝置;存放裝置裡可能支援nand flash、SD-MMC card、Uhost等;檔案系統又有FAT32、exfat等等;應用程式層當然會包括很多個應用程式。
2)明確每個應用實現所需要的軟體層次。有些應用可能要很多層,如音樂,從應用到應用程式框架(UI+按鍵)、API、中介軟體(解碼)、作業系統、驅動等層次,而設定應用是不需要解碼中介軟體的。
3. 明確每個軟體層次中記憶體分時複用的模組,找出最大記憶體需求的模組
如《節省記憶體的嵌入式軟體設計技巧》這篇文章提到,應用、驅動、中介軟體、資料區段都存在著複用的需求。要在2)中的各個軟體層次中區分各個不同的組成模組,明確各個模組是否能夠進行分時複用。在複用的情況下,找出最大記憶體需求的模組,如nand flash驅動要比card驅動複雜,那nand flash驅動的記憶體需求自然要高;而音樂應用自然要比設定或者FM等應用要複雜,其記憶體需求自然也要更多。
4.對最大記憶體需求模組的代碼進行分析,大致明確其常駐記憶體代碼和分塊(bank)管理的代碼。
常駐程式碼片段一般是調用頻繁的、效能要求高的程式碼片段,如中斷管理、訊息管理等。一般應用中大量的代碼是可以按需載入執行的,如音樂的音效管理和音量設定這些功能代碼並不要求很高的執行效能,其是可以分時載入到記憶體執行,能夠達到記憶體分時複用的目的。
5.確定各個軟體層次的常駐代碼空間和分時複用記憶體的空間
在成本的要求下儘可能減少常駐代碼空間,會導致代碼執行效能的降低,因為bank代碼執行前要先進行載入,一般是從nand flash或者card中讀取;在成本的要求下我們也想儘可能減少bank代碼複用的記憶體空間,同樣會導致bank代碼切換頻繁而降低效能,因此也不能一味地減少記憶體,而是仔細分析各個子模組的功能和效能對記憶體的大致要求。例如兩個子模組的函數實現是8k和4k,那我們可以考慮2K的複用空間,即前者分成4個bank,後者2個bank,是否能夠達到效能;如果複用空間設定為4K,效率會高一些,但成本會增加;如果設定為1k,那前者就會有8個bank,切換次數過多。
6.明確可以固化的代碼空間
應用的常駐代碼是不能固化的,因為不同的應用都需要常駐代碼,即其是變化的,而像作業系統的中斷管理、時間管理、任務調度管理等代碼一般是不變的,其可以固化到ROM中,這樣能達到節省記憶體的目的。
7.考慮其他特殊的需求
通過6,我們可以大致得到整個系統的記憶體需求。這時要考慮一些特殊的情境的記憶體需求,看之前制定的記憶體是否能夠滿足這個情境。例如啟動階段的記憶體需求分布,OS引導初始化時的記憶體要求等。這些並不是產品的規格,同樣是架構設計師要考慮的。
一般會對6中得到的記憶體再次評估,以進行細微的調整。
SoC嵌入式軟體架構設計之一:系統記憶體需求評估