第十七天 Memory Management(記憶體管理)--上
今天我們來介紹Memory Management,先來說說需要知道的背景!
Program要執行的話,就必須要從硬碟中取出,帶到記憶體內才可以執行。
CPU能夠直接存取register跟memory的內容。Memory unit只能看到位置(address)跟要做什麼事的需求(read or data and write request)。Register或指令的運作通常都在CPU clock(或是更少)內完成。Main memory可能會花費數個CPU時間週期,造成stall(memory < register speed),這時就需要cache的出現,他的速度介於兩者之間。
Base and limit register,使用這兩個暫存器來定義logical address space,分別紀錄process起始記憶體位置(base register)跟process所佔記憶體位置大小(limit register),以下有參考圖:
接著來說address binding(地址的連結):
程式在disk上需要來到memory才能執行,這時就會形成input queue。這些通常都會被load到記憶體的起始位置0000,但實際上不一定要用這個記憶體位置,或是已經有被使用了。簡單來說,位置在不同的地方有不同的表現方式:
而與記憶體位置的連結可以在三個時間點:
而address分為兩種:
那memory unit是什麼呢?他的全名其實叫Memory-Management Unit(MMU),一種可將虛擬位置轉換成實體位置的硬體設備。Base register在這就被稱為relocation register,以下有參考圖:
當有很多程式要執行時,會用dynamic linking的方式處理,他會運用stub存放要用到的memory-resident library routine,當後來要執行時,會把stub換成address of routine,也就是說只有被叫到的模組才會進到memory。
剩下的明天繼續~~