簡介
分頁(英語:Paging),是一種
作業系統里
存儲器管理的一種技術,可以使電腦的
主存可以使用存儲在
輔助存儲器中的數據。作業系統會將輔助存儲器(通常是
磁碟)中的數據分區成固定大小的區塊,稱為“頁”。當不需要時,將分頁由主存(通常是
記憶體)移到
輔助存儲器;當需要時,再將數據取回,載入主存中。相對於
分段,分頁允許存儲器存儲於不連續的區塊以維持檔案系統的整齊。分頁是磁碟和記憶體間傳輸數據塊的最小單位。
分頁/虛擬記憶體能有助“大大地”降低整體及額外非必要的 I/O 次數,提高系統整體運作性能。因為這能有助提高 RAM 的讀取命中率,也透過其內部的高效率算法來達到 I/O 數據流的預快取工作,通過與之相關的等等手段也能很好地提高了 CPU 的使用效率,而擁有大物理記憶體的用戶更可能考慮利用如
Ramdisk、
Supercache、SoftPerfect RAM Disk等模擬出硬碟分區來同時將虛擬記憶體/系統臨時檔案等設定其上以進一步加強系統性能,及達至保障硬碟的措施。分頁是
虛擬記憶體技術中的重要部分。
概覽
分頁就是當數據並沒有映射在
隨機存取存儲器上時,作業系統必需控制使程式繼續運行所會做的動作。一般來說,作業系統會將運行中程式的數據放至隨機存取存儲器上空的幀中,將不需要的數據從幀上清除,但如果隨機存取存儲器沒有空的幀可用,作業系統會把一部分的數據存回輔助存儲器然後釋放。輔助存儲器會用分頁的方式將檔案存在經過平均分配大小的頁上,等到隨機存取存儲器需要使用時再寫回。如果在隨機存取存儲器釋放數據過後還需要更新數據,系統必須將數據先寫回後更新,再存入輔助存儲器中。高性能的系統需要在替換隨機存取存儲器上的數據時消耗較少的時間,所以一般的系統會採取最近最少使用算法(LFU)來達到較高的效果。
命中和缺頁
由於更早地被發明(20世紀60年代早期),類似
CPU-
存儲器之間的
SRAM快取,虛擬存儲器系統使用不同的術語。
系統顛簸
儘管在整個運行過程中程式引用的不同頁面總數(也就是虛擬記憶體大小)可能超出物理存儲器(DRAM)總大小,但是程式常常在較小的活動頁面(active page)上活動,這個集合叫作工作集(working set)或常駐集(resident set)。在工作集被快取後,對它的反覆調用將使程式命中提高,從而提高性能。
大部分的程式都可以在存儲器獲取數據和讀取中達到穩定的狀態,當程式達到穩定狀態時,存儲器的使用量通常都不會太大。虛擬記憶體雖然可以有效率的去控制存儲器的使用,但解決大量的
頁缺失還是造成系統遲緩的主要因素。當工作集的大小超過物理存儲器大小,程式將發生一種不幸的情況,這種情況被稱為“顛簸(Thrashing)”,頁面將不停地寫入、釋放、讀取,由於大量的丟失(而非命中)而損失極大性能。用戶可以增加隨機存取存儲器的大小或是減少同時在系統里運行程式的數量來降低系統顛簸的機率。
頁面調度
分享
在
多任務處理或多用戶的環境下,經常遇到不同的程式需要用到相同的數據,如果採用個別處理的話,很多的存儲器會被浪費掉,分享的功用使不同的程式可以使用相同的存儲器。分享功能還需注意的是系統必須要分離經過修改過後的數據以防止其他程式需要用到修改前的數據。
實現
Ferranti Atlas
Windows 3.X和Windows 9x
Windows NT
Unix及類Unix系統
在
Unix及類
Unix系統中,系統會定期更新隨機存取存儲器與虛擬記憶體間的數據,其中有些系統會在硬碟上劃一塊專門的區塊作為頁面檔案交換檔案用,稱為交換分區(swap partitions),有些系統還可以把這個區塊用檔案的形式出現。
在
Linux核心2.6以上中,因為系統可以直接繞過其他程式直接跟檔案形式的分區交換,分區檔的速度已經可以跟交換分區一樣快了,且分區檔可以自動被存放在硬碟讀取最頻繁的地方,不過
紅帽公司還是建議將硬碟劃專門區塊做使用。不過使用檔案形式的分區的靈活度較高,可以自由存放在任一個磁碟,更改成任一大小,在硬碟劃專門區塊後除非使用特殊的工具,否則無法更動位置及大小。Linux可以創建無數個分區,並將檔案排優先權,硬碟讀取越頻繁的地方通常越是系統優先使用該分區,因此要謹慎的排好優先權,否則會大大的降低系統的性能。
OS X使用多重的分區檔案,雖然它可以存到其他的地方,但默認就會將檔案存到硬碟的根目錄中。
32位硬體限制
由於32位的硬體
地址匯流排最高只能定址到4GB的位置,超過的部分將不能被電腦進行分頁使用存儲器。