iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 17
0
自我挑戰組

OS作業系統學習系列 第 17

第十七天 Memory Management(記憶體管理)--上

第十七天 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),以下有參考圖:
https://ithelp.ithome.com.tw/upload/images/20181101/20112132MoK5Su1oNc.png
接著來說address binding(地址的連結):
程式在disk上需要來到memory才能執行,這時就會形成input queue。這些通常都會被load到記憶體的起始位置0000,但實際上不一定要用這個記憶體位置,或是已經有被使用了。簡單來說,位置在不同的地方有不同的表現方式:

  • 一開始時,地址都只是一個象徵而已 -> 0000
  • 編譯後(compile),地址會連接到relocatable address -> 0010
  • 最後經由linker或是loader,relocatable address會連接到absolute address(絕對地址) -> 7010

而與記憶體位置的連結可以在三個時間點:

  1. Compile time(編譯時間):由compiler決定
    如果記憶體位置已經知道,就可以生成absolute address,但起始位置改變的話,就要重新生成。
  2. Load time(載入時間):由linking loader或linking editor決定
    編譯時無法確認,則生成relocatable address。(不一定由固定位置執行)
  3. Execution time(執行時間):由OS動態決定
    如果記憶體區段要執行時被移動,連結才會延到這時。(這需要硬體上的支援、彈性高,但執行慢效率差)

而address分為兩種:

  • Logical address:CPU所產生的位置,又叫做virtual address
  • Physical address:記憶體看到的位置(經過memory unit處理過)

那memory unit是什麼呢?他的全名其實叫Memory-Management Unit(MMU),一種可將虛擬位置轉換成實體位置的硬體設備。Base register在這就被稱為relocation register,以下有參考圖:
https://ithelp.ithome.com.tw/upload/images/20181101/20112132VwXBCA2Hmi.png
當有很多程式要執行時,會用dynamic linking的方式處理,他會運用stub存放要用到的memory-resident library routine,當後來要執行時,會把stub換成address of routine,也就是說只有被叫到的模組才會進到memory。

剩下的明天繼續~~


上一篇
第十六天 Deadlocks(死結)--下
下一篇
第十八天 Memory Management(記憶體管理)--中
系列文
OS作業系統學習30

尚未有邦友留言

立即登入留言