Swapping

Motivation

我們的 memory 只夠 5 個 process 使用但我們想要讓 10 個 process 同時在電腦上跑,此時我們就可以讓暫時沒在跑(waiting state)的 process 暫時儲存在 secondary storage

Basic Concept

Backing Store

Backing store 就是用來暫存的 disk space,他有兩個需求:

  1. 它的大小必須足以存放使用者所有 process 的 memory image
  2. 它必須支援 direct access,也就是能快速定位並讀寫特定 process 的資料

為了達成第二個要求 backing store 通常是一個特殊的 swap partition 而非一般的 file system

Swap In/Swap Out

Swap Out:OS 選一個 process (),把它的整個記憶體放到 backing store 釋放他原本佔的 RAM

Swap In:當 需要再被執行時,OS 再把它從 backing store 複製回 RAM

Detail procedure: D-OS-Ch10e-Page_Replacement

Roll Out, Roll In

這是 swapping 的一種變體,專門搭配優先權排程使用。當一個高優先權的 process 需要執行,但記憶體不夠時,OS 就把低優先權的 process swap out (roll out) 讓高優先權者執行完後再被換回來


Analysis

Problem

Swapping Efficiency

Swapping 的代價是時間,整個 swap time 幾乎都花在資料搬移上,除了資料傳輸速度這個無法避免的原因,還有另一個原因:

在 contiguous allocation 下,OS 為 process 預先配置一整塊連續的實體記憶體,但無法得知哪些部分真正有資料、哪些只是空白未使用。因此每次 swapping 都必須搬移整塊配置的實體記憶體,包含那些從未寫入資料的空白區域

Victim Choosing Problem

要找一個「記憶體用量差不多、優先權較低、又不在 ready 狀態」的 process 來 swap out 很難,而且如果選錯,會造成 fragmentation

這兩個問題都發生在 contiguous memory allocation 的時代,在 paging 時代解決了大半(除了資料傳輸速度無解外)

Solution

Solution for Contiguous Memory Allocation

我們提供 request_memory()/release_memory 這類 system call 讓 process 能夠主動告訴 OS 「我現在真正在使用多少記憶體」,如此一來每次 swapping 就只需要搬移那些記憶體就夠了

Swapping

D-OS-Ch04da-Swapping_with_Paging