Operating System Concepts--chap9 Memory Management;
為什么80%的碼農都做不了架構師?>>> ??
這一章節的memory management內容覆蓋從bare-machine approach到paging和segmentation;
9.1 background
我們在編程時候所操作的地址--logical address和實際機器中的地址--physical address不是一樣的;
他們之間的mapping是通過Memory Management Unit來進行轉換,通常是通過[relocation,offset]這樣的典型組合來完成;
而且他們之間的binding,也有幾種情況:
1,compile time:在程序編譯的時候就bind,那么這個地址肯定是絕對地址;
2,load/execution time:load/execute程序的時候bind,這種情況普遍有個模式:Relocable Addr+offset的模式,程序操作offset,然后由系統來確認Relocable addr的值,在不同情況改變relocable addr那么程序就被在memory中移來移去;
定義:
logical address:由cpu產生的address
physical address:memory unit所見的address
dynamic loading:一個模塊知道被使用的時候才會被load
dynamic linking:推遲link,但是需要os的支持,因為link會需要考慮process的protection,
9.2 swapping
swapping:針對process而言,執行的時候swap進內存,不執行的時候swap出去;
一些基于優先級的算法來支持swapping
9.3 continuous memory allocation
就是給定一塊內存,比如256M,來支持alloc/free;
《the art of computer programming》給出著名的heap算法
1,把內存用鏈表串起--開始的時候就一個節點,隨著分配和釋放,連續內存被打散,形成鏈表;
2,另外用hash表來索引節點,[key,value]--[內存塊大小,內存塊的地址],hash表有多個,以size大小分類--1k-2k的一類,2k-4k的一類,4k-8k的一類...
我們需要alloc內存出來時迅速定位到hash表,然后選擇best fit的模塊進行分類;
分配時如果已有內存塊大于所需,就裂開,
free時,如果歸還內存前后有free的內存,就merge
最大問題是:external fragmentation,可能剩余10M內存,但是都是零碎的小塊,無法alloc出一個1m的空間;
由于游戲開發中,內存有一定的規律,比如在ps3中管理顯存,就可以根據游戲需要,特殊處理render target,resolve buffer這類問題,
利用游戲的特性來進行優化,而不是單純的去做支持general的工作;會很大程度上降低這個工作;
9.4 paging
paging--允許process的logical address是連續的,但是physical address是不連續的;非常牛逼的做法;
基本概念
physical memory被分成大小一樣的一塊塊,called frame
logical memory分成大小一樣的一塊塊,叫page
page靈活的map到frame中,邏輯地址中連續的page,在physical memory中就是可以分散的分配的;
requirements
需要page table,frame table
而且在真正訪問內存的時候,需要做邏輯地址向物理地址的轉換,這會大大降低速度,硬件的支持不可避免;
TLB作為page table的cache出現,加快邏輯物理轉換速度;
more:
可以有多級page table,shared page table。。。
9.5 segmentation
segmentation:支持用戶角度對內存的劃分;
比如我們coding時候常說的:stack,heap,全局區等等;
以segmentation table做管理,以[base,offset]對來索引,可以區域保護和共享,享受external fragmentation;
9.6 segmentation with paging
把segmentation架在paging上,通過segmentation的[base,offset]地址訪問到page的[page_number,offset]再到physical memory;
很靈活很牛逼,有硬件支持也很快,intel 80386這么干的;
?
原文鏈接: http://blog.csdn.net/ccanan/article/details/1575551
轉載于:https://my.oschina.net/dtec/blog/44686
總結
以上是生活随笔為你收集整理的Operating System Concepts--chap9 Memory Management;的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于博客
- 下一篇: ORA-01994 故障一例