第十九天 Memory Management(記憶體管理)--下之一
昨天說的compaction是運用記憶體就的方法,接下來要提的兩個方法是比較新穎的!
Segmentation(分段):
配合使用者的觀點,把記憶體的logical配置分段。而使用者的觀點是記憶體模樣,是由許多不同大小的segment所組成,並沒有先後順序,以下有例圖:
他的結構是將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)或是限制唯獨、唯寫、唯執行。以下有參考圖:
Paging(分頁):
Paging是為了解決fragmentation(external fragmentation可以解決,但internal fragmentation還是會存在)跟處理很多不同大小的process。其中要先分清楚兩個名詞:
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])
以下有參考圖:
而剛才有說還是不能解決internal fragmentation,現在我們用算的來解釋!
假設page的大小是2048 bytes,而process的大小是72766 bytes,這樣算起來process會被分成36個page,但最後一個page會剩下962的空間,這就是internal fragmentation,除非process的大小剛剛好,不然還是會有fragmentation的問題在。可是我們也不能為了不要有internal fragmentation,就把frame size縮很小,會產生很多page table,他也是會佔記憶體的,這樣反而得不償失。
明天我們來把最後一部分結束!!