iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 19
1
自我挑戰組

OS作業系統學習系列 第 19

第十九天 Memory Management(記憶體管理)--下之一

第十九天 Memory Management(記憶體管理)--下之一

昨天說的compaction是運用記憶體就的方法,接下來要提的兩個方法是比較新穎的!

Segmentation(分段):
配合使用者的觀點,把記憶體的logical配置分段。而使用者的觀點是記憶體模樣,是由許多不同大小的segment所組成,並沒有先後順序,以下有例圖:
https://ithelp.ithome.com.tw/upload/images/20181103/20112132OFESTdICnd.png

他的結構是將logical address分成兩部分,segment-number和offset(分段起點到現在所在地的位置,平移量)。作業系統會為每個process準備segment table,每個table內會包含base跟limit。然後會用segment-table base register來記錄起始位置(base),用segment-table length register來記錄長度(limit),logical address經過segment table後會轉換成physical address。
而segment有保護機制,他會給驗證碼(validation bit)或是限制唯獨、唯寫、唯執行。以下有參考圖:
https://ithelp.ithome.com.tw/upload/images/20181103/20112132Z0ykacIbFM.png

Paging(分頁):
Paging是為了解決fragmentation(external fragmentation可以解決,但internal fragmentation還是會存在)跟處理很多不同大小的process。其中要先分清楚兩個名詞:

  • Frames:將實體記憶體(physical memory)切割成固定大小的block
  • Pages:將邏輯記憶體(logical memory)分成大小相同的block

Frames跟pages的大小相同,當program需要n個pages時,作業系統會去physical memory找n個free frame來放,frame間並不需用連續。作業系統會設置page table,轉換logical address變成physical address。page table的作用就是在告訴page對應的frame在哪裡,所以分成page number跟page offset。(CPU -> logical address ->[Page][Offset] -> page table -> [Frame][Offset])
以下有參考圖:
https://ithelp.ithome.com.tw/upload/images/20181103/20112132aAXctd8ZWe.png
https://ithelp.ithome.com.tw/upload/images/20181103/20112132d8KPkvB4Bq.png

而剛才有說還是不能解決internal fragmentation,現在我們用算的來解釋!

假設page的大小是2048 bytes,而process的大小是72766 bytes,這樣算起來process會被分成36個page,但最後一個page會剩下962的空間,這就是internal fragmentation,除非process的大小剛剛好,不然還是會有fragmentation的問題在。可是我們也不能為了不要有internal fragmentation,就把frame size縮很小,會產生很多page table,他也是會佔記憶體的,這樣反而得不償失。

明天我們來把最後一部分結束!!
/images/emoticon/emoticon13.gif


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

尚未有邦友留言

立即登入留言