日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

嵌入式操作系统内核原理和开发(内存分配算法)

發布時間:2024/4/18 windows 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 嵌入式操作系统内核原理和开发(内存分配算法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
內存分配是操作系統必須面對的一個環節,除非這個系統本身不需要內存安排,所有業務可以通過全局數據和堆棧搞定。內存分配其實不困難,但是由內存引申出來的東西就比較復雜了。早前沒有MMU,系統本身的空間和用戶空間沒有優先級之分,所以不同的程序之間的內存都是共享的,相互影響也是不可避免的。所以,一般來說,除了內存分配之外,還需要一些日志信息、檢測信息幫助我們進行調試和分析。當然,這些都不是我們關心的內容,我們關注的就是內存有哪些通用的分配算法。

?

????(1)固定內存分配

??? 固定內存分配算法是最簡單的算法,也是最好理解的算法。比如說有16M內存,現在我們假設分配的基本內存是4K,那么總共有16M/4K = 4K個單元。所以,如果用戶想申請內存,最多就是4K次。如果用戶想要多一點內存,那么系統把相鄰的內存分給用戶使用即可。

?

????(2)鏈表內存分配

??? 固定內存分配雖然好,但是還有一個缺點,那就是如果存在很多的浪費機會。試想一下,如果用戶只要幾十個byte,那么也要分配給它4K個字節,浪費的空間超過了99%。所以在此基礎之上,我們提出了鏈表內存算法。鏈表算法中保存有空閑結點,內存釋放的時候,那么內存查到空閑結點,該合并合并,該釋放的釋放;當然如果要申請內存的話,那方法就多了去了,可以最差申請、最優申請、最好申請,這些都是可以的。

?

????(3)伙伴算法

??? 鏈表算法相比較固定內存算法,可以節省不少內存。但是鏈表算法本身有一個特點,那就是容易形成內存碎片。所以,我們可以結合固定分配和鏈表算法的特點,把內存分配成8、16、32、64、128、256、512大小的幾種鏈表。鏈表內部的大小都是相同的,鏈表之間是倍數的關系。分配內存的時候,我們首先尋找最合適的鏈表,然后分配內存,如果內存空間不夠,可以向高一級的內存鏈表申請,這樣拆解下來的內存可以分配到低一級別的鏈表;釋放內存的時候,我們也要注意內存的合并和組合。

?

????(4)基于內存池的伙伴算法

??? 伙伴算法固然好,但是如果某一種內存申請特別頻繁,那么在伙伴算法中就需要進行反復的拆分和合并處理。一方面,這會影響了內存的分配效率,另外一方面也比較容易造成內存的分配碎片。所以,我們可以在伙伴算法的基礎之上構建一個內存池,在內存釋放的時候,只是標注當前內存不再使用,但是并沒有真正釋放,等到內存池中所有的內存都不再使用的時候再進行釋放,這在一定的程度上會提高內存的分配效率。特別是系統運行一段時間后,這種效果是特別明顯的。

?

??? (5)工作集算法

??? 工作集的算法本質上說不是一種算法,它只是一種基本思想。我們知道,在系統穩定之后,內存中分配的大小、配置的比例關系都是相對固定的,變化不是特別大。如果我們可以把這些數據給記錄下來,在系統啟動的時候預先分配好這些內存,那么不就可以提升系統的啟動速度了嗎?當然工作集中的參數設定更多的是一種經驗值,它需要我們綜合各種因素進行分析,反復比較才會得出比較好的結果。

?

??? 這五種算法只是給出了基本思想,只有付出于實踐,多加操練才能從中有所收獲。

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的嵌入式操作系统内核原理和开发(内存分配算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。