11.07.2006

Program 的execution image : EXE, DLL, STACK, HEAP, UNUSED..
沒有virtual memory 的machine,因為各section 內不可中斷,所以一些object (DLL, heap) unload, load 後,就會出現memory fragementation。

section 內不可中斷: STACK 內用來存放stack ,當STACK用"滿"時,也就是pointer 頂到了在他前面的DLL section,不可能跳過這些區域,由未使用的UNUSED section 中,再找一塊memory 出來,當作是STACK,繼續工作。因為UNUSED Section 和STACK Section 並不連續,stack pointer沒辦法工作。

範例是用DLL來作比喻:假設DLL section load有兩個DLL : DLL1, DLL2,當DLL2 不需要使用了,program unload DLL2,然後load另一個DLL : DLL3,如果DLL 3 < DLL2,則可以順利的load到原DLL 2 空出來的區域,但是當DLL3 > DLL2時,DLL2 空出來的區域就浪費掉了。

使用virtial memory 的machine,同樣的 execution image : memory 的管理以4k 為單位,可以任意mapping到pysical memory中,所以即使physical memory 上兩塊不連續的區域,都可以藉由virtial memory translation 讓他們在virutal memory space中是連續的(一個接在另一個的後面),所以memory fragementation 最大不會超過4k。

沒有留言: