iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 22
0
自我挑戰組

非本科系也能懂和該懂得作業系統系列 第 22

Day 22 - logical address v.s. physical address

  • 分享至 

  • xImage
  •  

昨天提到說記憶體能夠在三個時間點 1) compile time, 2) load time, 3)run time去做address binding,實際把Proecss上的記憶體位置建立出來,也談到了一些缺點與其解決的方法。作業系統本身有給予一定的彈性去讓寫程式的人去控制記憶體要在什麼時候被binding,也是透過這樣的方法去優化記憶體的使用,今天就來談談什麼樣的方法。

Dynamic Loading

通常一支比較大的程式,往往會把一些區塊模組化,方便管理與重複使用,在進一步模組成為了函式庫,專門處理某一方面的事情。通常一支大型的程式使用的函式庫不計其數,Dynamic Loading的概念是指當要使用到目標函式庫的功能才將其Loading到程式裡面,就很像我們平常在寫程式,在執行的時候才把資料的記憶體給new出來的感覺。

Static Linking

曾經我的平行運算老師在講這件事情的時候,我覺得我什麼都聽不懂,但現在理解後發現只是很簡單的一個概念。程式編譯在做Linking時可以選擇Static或Dynamic Linking,Static Linking比較單純,直接把全部的函式庫一起塞進去程式裡,變成一大包,並且在loading的時候也是整包一起Loading,且有可能會存了重複的函式庫;Dynamic Linking則是會將函式庫作為DLL(Dynamic link library)放在外部,並且直到運行時才將其載入,並且只會載入一個實體進去Process,因此如果有多處都使用這個函式庫並不會重複載入,更節省空間。

logical address & physical address

為了簡化記憶體動態管理的複雜度,其中設計了一套機制是由logical address去映射到physical address,physical address指的是記憶體上實際的位址,再次想像記憶體是一串很長的儲存空間,physical address指的就是空間上的某個位置,比如說第幾百個byte之類的;但這一串的記憶體空間是所有Process共用的,在取用的時候還要去相互查看memory的使用狀態實在麻煩,所以logical address的概念就出現了,logical address可以是一個連續的虛擬記憶體空間,而這些空間會再去對應到實際的記憶體位置(physical address)。

對於開發人員來說,所處理的記憶體位置都是logical address,每個Process的logical address都是無關的,就算值重複了也不會複寫到相同的記憶體空間,管理一個Process的記憶體比管理全部的記憶體來的單純,而將logical address map到physical address上面這件事情,就由硬體(MMU)去做。

如果記憶體位置是在compile-time或load-time就決定好的,其logical address會與physical address相同,反之如果是run time,logical address並不會與physical address相同。


上一篇
Day 21 - Memory address binding
下一篇
Day 23 - Memory allocation
系列文
非本科系也能懂和該懂得作業系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言