iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 18
1
自我挑戰組

OS作業系統學習系列 第 18

第十八天 Memory Management(記憶體管理)--中

第十八天 Memory Management(記憶體管理)--中

Swapping:
在程式執行時,process有時會需要暫時離開記憶體,之後會再搬回來執行,這就叫做swapping,搬上搬下的動作我們稱為roll out跟roll in。而在這裡的硬碟(disk)我們會將它稱作backing store,兩者是互通的。

Swap時需要考量搬回來時是否還能在同樣的位置,這就要看binding method怎麼做了!但其實swap是一件很累的是,所以一定是到記憶體無法負荷時,才會用的大絕招。在早期swap是很重要的,但現在多用虛擬記憶體(後面一章會詳細說明)來處理了。

說到這裡也許有人或覺得怪怪的,之前我們不是有提過context switch?他跟swap有什麼差別呢?swap就跟我們上面提的一樣,是process在記憶體搬上搬下的,而context switch是兩個process在轉換資訊的過程。

舉例來說,當現在CPU處理一個process到一半,要用到另外一個process,這時如果那個process不在記憶體內,就要把它swap進來,然後再跟現在的process進行context switch,但這裡context switch的時間就會被拉長,因為還要把一個process搬出去,再把一個搬進來。這時我們可以運用system call來知道記憶體的使用,看是否有足夠的空間能直接把需要的process拉進來,不用一個換一個,浪費時間。
而swap還會遇到一個問題,如果他要移除正在執行的I/O呢?他有三個選擇:

  1. 不把它swap out讓他繼續執行
  2. 就把它swap out,不做I/O了
  3. 交給kernel來做(在記憶體內搬來搬去),但是會造成double buffering,有overhead的可能性存在(這是最常用的方法)

現在我們來說說記憶體的分配方法!
Multiple-partition allocation:

在main memory中兩部分,resident operating system(kernel)跟user processes,kernel握有low memory,而user processes握有high memory。

這個方法是將記憶體切割成使用效率好的大小,當process執行完後,他會將空間是放給下一個process使用。以下有參考圖:
https://ithelp.ithome.com.tw/upload/images/20181102/20112132OPo5KAAhtH.png
我們在找可用的記憶體空間有三種方法:

  1. First-fit:
    第一個容納得下就直接使用
  2. Best-fit:
    看完所有記憶體空間,選一個夠大,而且最接近自己大小的使用。最後可能會生成許多很小的記憶體空間
  3. Worst-fit:
    看完所有記憶體空間,選一個最大的使用。最後可能會生成很大的記憶體空間

但是不管用哪種方式,都會產生碎片(fragmentation):

  • External fragmentation:剩下小塊小塊的記憶體空間,無法使用
  • Internal fragmentation:記憶體空間給過大使用時,process用不到,外面需要使用的也用不到

要解決碎片的方法就用compaction,將process移來移去,讓其餘的記憶體空間能夠聚在一起,但是process必須是dynamic才可以這樣做,而且I/O在這也還是個問題。


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

尚未有邦友留言

立即登入留言