版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、小記憶體軟體設計小記憶體軟體設計李俊宏李俊宏2002OutlinenIntroductionnSmall architecturenSecondary storagenCompression nSmall data structurenMemory allocation2002Introductionn小記憶體軟體應用小記憶體軟體應用nMobile computingnEmbedded systemnSmall session in servernMain framenSmall computernWeb servernJVMnLimited extendibilitynOld PC or S
2、ervernLarge data (multimedia)2002Mobile computing devices2002Picture of AutoPC2002Beaming from HPC to AutoPC2002作業系統作業系統 for PDAnLinuxnPalm OSnWin CE OSnREX OSnSymbian OSnAndroidnOthers2002Andorid Demo2002記憶卡記憶卡Compact Flash (CF)Smart Media (SM)Memory Stick (MS)Multi Media Card (MMC)Secure Digital (
3、SD)2002PDA OS 電源管理電源管理nSleep mode(turn off)nSystem ClocknInterruptnRAM nDoze modenLCDnDigitizernMain clocknProcessor clocknRunning mode(1 sec)nProcessor executing2002程式的執行程式的執行 (PALM)nPreemptive multitaskingnUser Interface Application Shell(UIAS) n一次只執行一個程式一次只執行一個程式nLaunch coden告知應用程式開始和顯示运用者介面告知應用程
4、式開始和顯示运用者介面n啟動事件迴圈啟動事件迴圈nEvent PCDiskRAMCPUprogramPDACPURAMprogram2002記憶體的管理記憶體的管理RAM in Palm OS 2002記憶體的管理記憶體的管理(storage RAM)2002記憶體的管理記憶體的管理(storage RAM)2002記憶體受限的問題的普通解法記憶體受限的問題的普通解法n減少靜態與全域變數的數目減少靜態與全域變數的數目n減少記憶體的运用減少記憶體的运用n遞迴函數能够呵斥堆疊空間缺乏遞迴函數能够呵斥堆疊空間缺乏n降低執行檔的體積降低執行檔的體積n降低降低 Bitmap 解析度解析度, 防止运用防止
5、运用 WAV 檔案檔案n動態配置記憶體要檢查能否配置胜利動態配置記憶體要檢查能否配置胜利n一次要足程式需求的記憶體一次要足程式需求的記憶體還有其他的方法嗎還有其他的方法嗎?2002Small architecturenIntroductionnMemory limitnSmall interfacesnPartial failurenCaptain OatesnRead only memorynHooks 2002Introductionn如何管理整個系統所用的記憶體如何管理整個系統所用的記憶體n記憶體區段數量大小假设遭到限制會束縛整個系統記憶體區段數量大小假设遭到限制會束縛整個系統n系統由多
6、個元件組成系統由多個元件組成n元件可由不同團隊完成元件可由不同團隊完成n元件的記憶體需求量會動態改變元件的記憶體需求量會動態改變n簡單的設計簡單的設計 - Monolithic Systemsn只適用於簡單系統只適用於簡單系統n讓每個元件管理本人的記憶體運用狀態讓每個元件管理本人的記憶體運用狀態2002Introduction (cont.) MemorymodulemodulemodulemodulemodulemoduleMonolithic SystemsDecomposed system組件設計組件相互連結方式組件共同政策2002Introduction (cont.) n設計組件介面
7、須考慮之問題設計組件介面須考慮之問題n記憶體的可剪裁性記憶體的可剪裁性 (Tailorability)n不同情形下运用一样組件能够會有不同的記憶不同情形下运用一样組件能够會有不同的記憶體需求體需求n提供記憶體操控的方法以精確配置記憶體提供記憶體操控的方法以精確配置記憶體nVector v=new Vector(10)nv.ensureCapacity(20)nv.trimToSize()n讓客戶負責管理組件讓客戶負責管理組件n運用運用callbacks管理記憶體讓客戶提供自已須要管理記憶體讓客戶提供自已須要的記憶體配置函數的記憶體配置函數n記憶體战略記憶體战略2002Pattern 4: St
8、rategy 把演算法則整個換掉把演算法則整個換掉Strategy: 戰略先提供配置記憶體的和release記憶體的函式界面, 實作時再實作出特定战略.2002在在small architecture 中的問題中的問題nHow to allocate memory?nHow to reduce communication load?nHow to process unpredictable memory requirement?nHow to satisfy the most important memory requirement?nHow to use the read only memo
9、ry (ROM)?nHow to modify the data in ROM?2002How to allocate memory?n問題問題n如何在多個組件之間分配記憶體如何在多個組件之間分配記憶體n解答解答nMemory limit (fixed sized heap, memory partitions)n為每個元件設置記憶體限額為每個元件設置記憶體限額, 超出限額的請求超出限額的請求, 予以拒予以拒絕絕.n描画描画n系統包含多個組件系統包含多個組件, 每個組件有各自的記憶體需求每個組件有各自的記憶體需求n組件的記憶體需求隨程式的執行而動態變化組件的記憶體需求隨程式的執行而動態變化n記
10、憶體有限記憶體有限, 假设一個組件霸佔太多記憶體假设一個組件霸佔太多記憶體, 會妨礙其會妨礙其他組件任务他組件任务n設計者可以為每個任務設一個合理的記憶體上限設計者可以為每個任務設一個合理的記憶體上限2002How to allocate memory?n步驟步驟n記錄當前每個組件配置的記憶體數量記錄當前每個組件配置的記憶體數量n如修正組件的記憶體配置常式如修正組件的記憶體配置常式, 使其計算使其計算目前所运用的記憶體數目目前所运用的記憶體數目n確保組件所配置的記憶體數量不超過分確保組件所配置的記憶體數量不超過分配限額配限額.n理想狀態下應當透過理想狀態下應當透過試驗試驗, 檢視記憶檢視記憶體
11、用量體用量的手段來為每個組件事先設定限的手段來為每個組件事先設定限額額.2002How to allocate memory?n結果結果n因每個組件的記憶用量都有限額因每個組件的記憶用量都有限額, 所以組所以組件可獨立測試件可獨立測試 (system predictability)n容易找出那些組件因記憶體缺乏而產生容易找出那些組件因記憶體缺乏而產生問題問題 (localization) n能够會產生問題的情形能够會產生問題的情形n一個任務一個任務(task)正常任务正常任务, 但另一任務因但另一任務因記憶體缺乏而失敗記憶體缺乏而失敗n因任務大量通訊所引發的錯誤因任務大量通訊所引發的錯誤nMe
12、mory fragmentation waste2002How to allocate memory?n實做實做n攔截記憶體管理操作函式並加以修正以攔截記憶體管理操作函式並加以修正以追蹤記憶體运用情形追蹤記憶體运用情形(如如c+的的 new, delete)n組件各自运用分離的組件各自运用分離的heap各自管理各自管理n分離的行程分離的行程2002Process in MemoryTemporary data:Function parameterReturn addressLocal variablesGlobal variablesRun time memory2002Example 1:
13、限制物件所运用記憶體總量class MemoryRestrictedClass public:enum LIMIT_IN_BYTES=10000;static size_t totalMemoryCount;void* operator new(size_t aSize);void operator delete(void* anItem, size_t aSize);size_t MemoryRestrictedClass:totalMemoryCount=0實作記憶體限制物件實作記憶體限制物件2002Example 1: 限制物件所运用記憶體總量void* MemoryRestricted
14、Class:operator new(size_t aSize)if (totalMemoryCount + aSize LIMIT_IN_BYTES)throw (bad_alloc();totalMemoryCount += aSize;return malloc(aSize); void* MemoryRestrictedClass:operator delete(void* anItem, size_t aSize)totalMemoryCount -= aSize;free(char*)anItem); 在在new 方法中檢查能否超過限制方法中檢查能否超過限制記錄記憶體运用情形記錄記
15、憶體运用情形2002Example 2: 限制物件實體數量限制物件實體數量class RestrictedClassstatic final int maxNumberOfInstances = 5;static int numberOfInstances = 0;public RestrictedClass()nunberOfInstances+;if (numberOfInstances maxNumberOfInstances) System.gc();/確認一切的渣滓都被回收確認一切的渣滓都被回收if (numberOfInstances maxNumberOfInstances) t
16、hrow new OutOfMemoryError(maxNumberOfInstances5); 最大物件實體數量最大物件實體數量再丟出異常訊號Public void finalize()-numberOfInstances;物件終結時要作的動作物件終結時要作的動作2002Memory limit applicationnUNIX (for user process)nEPOC (heap maximum size)nWinCE (process usage memory upper bound, data usage memory upper bound)nJVM (total heap
17、size, java process size)2002練習練習n請設計一物件請設計一物件, 其有其有6個函式個函式, 主程式可以呼叫這主程式可以呼叫這6個函個函式式:n1: function1n2: function2n3: function3n4: closef1n5: closef2n6: closef3n假設每次呼叫前三個函式假設每次呼叫前三個函式, 都會配置都會配置10, 20, 30byte的記的記憶體憶體, 而呼叫後三個函式可以釋放相關記憶體而呼叫後三個函式可以釋放相關記憶體. 請限制請限制整個物件的記憶體运用在整個物件的記憶體运用在100byte內內. 假设超過記憶體假设超過記
18、憶體限制的話限制的話,物件應給主程式記憶體缺乏的訊息物件應給主程式記憶體缺乏的訊息.n請撰寫此物件及其測試程式請撰寫此物件及其測試程式2002How to reduce communication loadn問題問題n各組件負責管理自理本身記憶體之運用各組件負責管理自理本身記憶體之運用n組件透過介面彼此溝通組件透過介面彼此溝通n如何降低組件介面溝通本钱如何降低組件介面溝通本钱n解答解答nSmall interfacesn設計出讓客戶端得以控制資料傳輸的介面設計出讓客戶端得以控制資料傳輸的介面n描画描画n系統包含多個組件系統包含多個組件, 每個組件有各自的記憶體需求每個組件有各自的記憶體需求n組
19、件透過介面彼此進行通訊組件透過介面彼此進行通訊n通訊能够要配置額外的記憶體通訊能够要配置額外的記憶體n資料提供者能够需求通用的介面資料提供者能够需求通用的介面, 提供不同的資料型提供不同的資料型態給不同的模組態給不同的模組, 使記憶體需求大增使記憶體需求大增2002How to reduce communication loadn步驟步驟n將介面之間的資料傳輸量最小化將介面之間的資料傳輸量最小化n決定資料傳輸的品質程度決定資料傳輸的品質程度2002How to reduce communication loadn結果結果n傳送用記憶體生命週期很短,可減少傳送用記憶體生命週期很短,可減少nEnh
20、ancing predictability, locality, design quality, and maintainabilitynSupporting advance real time behaviorn須考慮的問題須考慮的問題nProgrammer disciplinenProgrammer effortnTest cost2002How to reduce communication loadn實做實做nPass by value vs. pass by referencenExchanging memory across interfacesnLending : 客戶出借記憶體
21、給服務提供者客戶出借記憶體給服務提供者nBorrowing:客戶獲服務提供者所擁有物:客戶獲服務提供者所擁有物件的存取權件的存取權nStealing :客戶接纳服務提供者配置的:客戶接纳服務提供者配置的物件,並負責歸還物件,並負責歸還nIncremental interfacesn一次只傳部份資料,分多次傳完一次只傳部份資料,分多次傳完2002Lending客戶出借記憶體給服務提供者客戶出借記憶體給服務提供者Client objectProvider objectd: Data1. Get(d)1.1 Set(1)DocumentProperties d = new DocumentPrope
22、rties();wordProcessor.getCurrentDocumentProperties(d);.long docsize = d.getSize();long doctime = d.getEditTime();.d = null;將d借給wordProcessor讓它進行處理Client 對d進行處理委託provider作一些事釋放釋放2002Borrowing客戶獲服務提供者所擁有物件的存取權客戶獲服務提供者所擁有物件的存取權Client objectProvider objectd: Data1. Get():d2. Release(d)1.1 Set(1)Document
23、Properties d = wordProcessor.getDocumentProperties();long docsize = d.getSize();long doctime = d.getEditTime();.wordProcessor.releaseDocumentProperties(d);2002Stealing客戶接纳服務提供者配置的物件,並負責歸還客戶接纳服務提供者配置的物件,並負責歸還Client objectProvider objectd: Data1. Get():d1.1 new(1)2. deleteDocumentProperties d = wordPr
24、ocessor.getDocumentProperties();long docsize = d.getSize();long doctime = d.getEditTime();.d = null;管理責任2002Incremental interfacesn运用情形运用情形nTo pass a sequence or collection of data itemsnLimited memorynFragmented memory n實作實作nMultiple callingnPass data by lending iteratornGet data from writable iter
25、atornPass data by borrow iteratorClient objectProvider objectAvailable space1. Get():d1.1 new(1)2. deleteWanted spaceStealing:Required space available space2002Multiple callingClient objectProvider objectd2: Data3. new(2)d1: Data2. take(d1)4. take(d2)5. doAction()1. new(1)2002Multiple calling (cont.
26、)Case A:for (int i=0;i num_new_paras;i+) wordProcessor.addParagraph(parasi);wordPcessAddedParagraphs();Case B:spookivity.findGhosts(transparent|dead);While (spookivity.moreGhostsToProcess() ghostScreen.addDisplay(spoolivity.getNextGhost();將大量圖片分批傳到將大量圖片分批傳到wordProcessor中中再讓wordProcessor處
27、理2002Pass data by lending iterator (client)The code in client :ghostScreen.displayAllGhosts(Spookivity.ghostIterator();The code in component:Void displayAllGhosts(Iterator it) while (it.hasNext() displayGhost(Ghost) it.next(); 傳遞一個指向內部群集之一的iterator組件憑此組件憑此iterator存取客戶資訊存取客戶資訊2002Iterator: a BookShel
28、f exampleBooksBookShelfIterator2002Pass data by borrow iteratorIterator it = spookivity.findGhostsIterator(transparent|dead);While (it.hasNext() ghostScreen.displayGhost(Ghost) it.next();借入一個借入一個iterator2002Memory limit applicationnPalmOS APInEPOC APInClient-server interfacenlendingnUNIX file system
29、 callnread(int fid, char *buf, int nchars);2002How to process unpredictable memory requirement?n問題問題n如何處理不可預見的記憶體需求如何處理不可預見的記憶體需求n解答解答nPartial failure (graceful degradation)n確保即使記憶體用盡也要讓系統平安運作確保即使記憶體用盡也要讓系統平安運作n描画描画n無論如何降低程式記憶體需求還是用光了無論如何降低程式記憶體需求還是用光了n寧可放棄非關鍵任務而不放棄關鍵任務寧可放棄非關鍵任務而不放棄關鍵任務n持續不斷執行比完美執行更
30、重要持續不斷執行比完美執行更重要n持續不斷執行比系統崩潰更是重要持續不斷執行比系統崩潰更是重要n系統中的可用記憶體數量隨著時間變化很大系統中的可用記憶體數量隨著時間變化很大2002How to process unpredictable memory requirement?State 1State 2State 3Examples:Displaying textDisplaying more textDisplaying still more textProcessing Processing fails拒絕動作,拒絕動作,回到前一平回到前一平安狀態安狀態Out of memory stat
31、ealternative 1alternative 2進入降級方式進入降級方式2002How to process unpredictable memory requirement?n結果結果nReduced memory requirementsnEnhanced software usability, quality, reliability and predictabilitynSupporting advance real time behaviorn須考慮的問題須考慮的問題nProgrammer disciplinenProgrammer effortnSoftware global
32、 complexitynTesting cost2002How to process unpredictable memory requirement?n實作實作n偵測記憶體耗盡偵測記憶體耗盡n到達平安狀態到達平安狀態n釋出資源釋出資源n降級方式降級方式n未雨綢繆預防未雨綢繆預防2002How to process unpredictable memory requirement?n範例範例n找出一種字型載入主記憶體找出一種字型載入主記憶體nClass StrapFontn static Font myDefaultFont = new Font(Dialog, Font.PLAIN, 12)
33、;n /假设运用者要求之字型無法用便轉用佔較小記憶體之原始字型假设运用者要求之字型無法用便轉用佔較小記憶體之原始字型n .n public static Font defaultFont()n return myDefaultFont;n n Public static Font font(String name, int style, int size)n Font f;n try f = privateGetFont(name, style, size); n catch (BadFontException e) return defaultFont();n catch (OutOfMem
34、oryError e) return defaultFont();n return f;n n2002Partial failure applicationnEPOCnDegraded modesnPower PointnPhotoShopnMFC (plotting window)2002How to satisfy the most important memory requirements?n問題問題n如何滿足對記憶體的最重要需求如何滿足對記憶體的最重要需求n解答解答nCaptain Oates (Cache releasen犧牲非絕對必要之元件所运用的記憶體犧牲非絕對必要之元件所运用的記憶體, 以滿足更重要的任務以滿足更重要的任務n描画描画n系統有在背景執行的元件系統有在背景執行的元件n應用程式為了提高性能應用程式為了提高性能, 會以快
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 正畸治疗知识普及
- 高效能项目管理流程指南
- 业务谈判技巧及风险控制手册
- 老人走失夜间搜救志愿者预案
- 房地产项目销售技巧与谈判策略
- 企业品牌形象宣传物料设计规范模板
- 城市道路防滑路面材料耐磨性能测试可行性分析
- 金属踢脚线安装监理细则
- 电动汽车充电基础设施规划与部署手册
- 工程项目进度延误风险应对项目经理预案
- 手术室跟台人员培训课件
- 《商务英语口译》课件-模块2.2 贸易全流程口译
- 赣州农村集市管理办法
- 湖南省2025年中考语文真题试卷(含答案)
- 2025年西药药剂员(初级)职业技能鉴定考试题库(含答案)
- 开展新项目评审程序
- SA8000-社会责任程序文件(完整版)
- 2019-2025年注册土木工程师(水利水电)之专业知识练习题(一)及答案
- 2025年广东省汕尾市中考二模语文试题(含答案)
- 幼儿园兴趣班合作协议书范本
- 生产部门三年规划
评论
0/150
提交评论