# Swap Space ## swapping / paging 首先要來說明的是 swapping 和 paging 這兩個名詞的差異,在恐龍前面的章節裡,我們在講 ==swapping== 是指: > 當可用的 physical memory 少到了一定的程度時,我們會把一些 processes <font color = "red">整個</font> 從 memory 移到 swap space,以獲得更多的 physical memory 空間 但是在現在的系統裡面,我們已經很少會這樣把整個 process swap out,而是改成結合 swapping 和 virtual memory 的技術,需要 swap out 時只把某些 processes 的<font color = "red">某些 pages</font> swap out 既然「原本的 swapping」 很少用了,有些系統現在就乾脆直接把 swapping 和 paging 兩個字交錯使用,來表達這兩個詞現在的概念越來越是指相同的一件事情 ## Swap Space 管理 因為 Virtual Memory 是++用 Secondary Storage 的空間來當作 main memory 的延伸++,而要去 access 這些設備相對來說當然比去 access main memory 慢很多,所以<font color = "red">用 swap space 絕對會讓 system performance 大幅降低</font> > <font color = "snake">Secondary Storage</font>: > high speed disk 或 NVM device (NVM device 舉例來說像是 flash, SSD, ROM, disk, HD, magnetic tape, floppy disk 等等) 因此,我們對 swap space 的 implementation 的關注點就變成如何去提升 throughput > 98 交 19. > The system performance decreases if the swap space technology is used. ### swap space 大小 首先要談的是 swap space 應該要多大? 就像前面說過的,雖然現在的系統基本上都用 paging,但如果是用 swapping 的系統, swap space 要放的東西就是整個 process 的 image,包括 code, data...;反觀用 paging 的系統,就只需要放一些 pages 而已 > 98 交 19. > The swap space can hold the code segment and data segment of ++any process++. >> 但 kernel 的 code, data 必須一直在 main memory 中 所以 swap space 的大小根據 - 各個系統採取的方式不同 (swapping / paging) - physical memory 的大小 - 要 back up 的 virtual memory 有多少 - swap space 是放在 secondary storage 的哪個部分 以及其他種種原因,不同系統的 swap space 的大小可能會差很多,不過不管如何,在衡量 swap space 應該有多大時<font color = "red">多一點總比少一點好</font> 為什麼呢? 可以想想如果 swap space 不夠了會怎麼樣,假設有一天某個系統的 swap space 用完了,那我們就沒辦法做 paging,沒辦法把暫時可能用不到的 page swap out,因此 memory 不夠用的時候我們就只能直接 abort 某個 process(把某個 process 給砍了),或是甚至整個系統都掛掉 因此我們的選擇就會是寧可多犧牲一點 secondary storage 的空間,雖然這些空間可能原本可以拿來放其他檔案,但頂多就是 file 能放的數量少一點,也不會怎樣,至少比前面說過的那些問題要好多了 不過, swap space 的大小隨著時代的演進還是有越來越小,舉例來說像是 Linux ,以前 Linux 的 swap space 是 physical memory 的兩倍大,但是現在因為 paging 的 algorithm(選擇要 swap out 哪個 page 的演算法)越來越成熟,現在 Linux 的 swap space 大小已經大幅降低 另外要補充的是,有些系統(包含 Linux)會<font color = "green">把 swap space 分散在不同的 device 上</font>,這樣在不斷在 swapping / paging 的 I/O 負擔就可以分散到整個系統的 I/O bandwidth ### Swap Space 的位置 swap space 應該要放在哪裡呢? 我們已經知道 swap space 是指 secondary storage 的某部分空間,但是確切來說放在哪、怎麼放有兩種可能: 1. 直接從檔案系統挖一塊空間當作 swap space 2. 分割出額外的空間(raw partition) #### 一、 如果是第一種做法, swap space 就只是被當作一個 file system 裡的大檔案,所以我們可以用原本<font color = "green"> file system 的 routine</font>來建立 swap space、命名、分配空間給它 > 98 交 19. It is <font color = "red">inefficent</font> for both ++access performance++ and ++disk utilization++ to implement the swap space as a large file in a normal file system #### 二、 如果是第二種做法,swap space 被建立在一個分開的 <font color = "snake">raw partition</font>,上面沒有 file system,也沒有 directory structure,沒辦法像第一種方法用 file system routine 來做各種 operation 取而代之的是<font color = "snake"> swap-space storage manager</font>,負責 allocate / deallocate 這塊 raw partition 的 blocks 對 swap-space storage manager 來說,在選擇 algorithm 來決定如何分配、收回 swap space 空間的時候,考量的點是<font color = "red">速度</font>是否有效率,而不是 swap space 的空間有沒有有效率的被利用,因為 swap space 比起 file system 常用多了(我們常常需要不斷地 swapping / paging) 因此,在這種情況下<font color = "red">內碎</font>的比率會提升,但是沒關係,因為 swap space 裡的 data 相對 file system 裡的檔案來說也活沒有多久,<font color = "green">每次 boot time swap space 的內容都會被重置</font> 不過,要注意的是用 raw partition 這個方法<font color = "red">在 disk partitioning 的時候就會建立固定大小的 swap space</font>,所以如果要增加 swap space 的空間,只能選擇重新 partition device,或是在別的地方再建立新的 swap space # Reference - 恐龍 11.6 (p.467-469)