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