分页(英语:Paging),是一种作业系统记忆体管理的一种技术,可以使电脑的主记忆体可以使用储存在辅助记忆体中的资料。作业系统会将辅助记忆体(通常是磁盘)中的资料分割成固定大小的区块,称为“页”(pages)。当不需要时,将分页由主记忆体(通常是内存)移到辅助记忆体;当需要时,再将资料取回,载入主记忆体中。相对于分段,分页允许记忆体储存于不连续的区块以维持档案系统的整齐。[1]分页是磁盘和内存间传输数据块的最小单位。

分页/虚拟记忆体能有助“大大地”降低整体及额外非必要的 I/O 次数,提高系统整体运作效能。因为这能有助提高 RAM 的读取命中率,也透过其内部的高效率算法来达到 I/O 数据流的预缓存工作,通过与之相关的等等手段也能很好地提高了 CPU 的使用效率,而拥有大实体记忆体的用户更可能考虑利用如RamdiskSupercacheSoftPerfect RAM Disk等模拟出硬碟分区来同时将虚拟记忆体/系统临时档案等设置其上以进一步加强系统效能,及达至保障硬碟的措施。分页是虚拟记忆体技术中的重要部份。

概览

分页就是当资料并没有映射在随机存取记忆体上时,作业系统必需控制使程式继续运行所会做的动作。一般来说,作业系统会将运行中程序的资料放至随机存取记忆体上空的帧中,将不需要的资料从帧上清除,但如果随机存取记忆体没有空的帧可用,作业系统会把一部分的资料存回辅助记忆体然后释放。辅助记忆体会用分页的方式将档案存在经过平均分配大小的页上,等到随机存取记忆体需要使用时再写回。如果在随机存取记忆体释放资料过后还需要更新资料,系统必须将资料先写回后更新,再存入辅助记忆体中。高效能的系统需要在替换随机存取记忆体上的资料时消耗较少的时间,所以一般的系统会采取最近最少使用演算法(LRU)来达到较高的效果。

命中和缺页

由于更早地被发明(20世纪60年代早期),类似CPU-存储器之间的SRAM缓存,虚拟存储器系统使用不同的术语。

  • 虚拟存储器系统中,DRAM缓存命中,为称读取一个地址时,该地址在DRAM缓存中的过程。命中过程不需要程序再从磁盘中缓慢读取数据。[2]
  • 相对地,DRAM不命中称为缺页(page fault)。由于页帧由有效位实际页号(或磁盘地址)构成,当有效位标记为0时,即表明该地址未在缓存中,调用该地址则会引发缺页异常,从而从磁盘中拷贝需要的内容,覆盖缓存中的一个牺牲页,从而能够命中。过多的缺页将导致反复的磁盘读取和写入,非常耗费计算时间。

系统颠簸

尽管在整个运行过程中程序引用的不同页面总数(也就是虚拟内存大小)可能超出物理存储器(DRAM)总大小,但是程序常常在较小的活动页面(active page)上活动,这个集合叫作工作集(working set)或常驻集(resident set)。在工作集被缓存后,对它的反复调用将使程序命中提高,从而提高效能。

大部分的程序都可以在记忆体获取资料和读取中达到稳定的状态,当程序达到稳定状态时,记忆体的使用量通常都不会太大。虚拟记忆体虽然可以有效率的去控制记忆体的使用,但解决大量的页缺失还是造成系统迟缓的主要因素。当工作集的大小超过物理存储器大小,程序将发生一种不幸的情况,这种情况被称为“颠簸(Thrashing)”,页面将不停地写入、释放、读取,由于大量的丢失(而非命中)而损失极大效能。[3]使用者可以增加随机存取记忆体的大小或是减少同时在系统里执行程序的数量来降低系统颠簸的机率。

页面调度

  • 当需要用到资料时再向系统请求,使系统将资料由辅助记忆体传入记忆体上,这就叫“需求分页”。它使得系统不需要将全部的程序都放在记忆体上,减少了所需要的记忆体的数量。[4][5][6]所有现代系统都使用按需页面调度(paging)的方式。
  • 当系统查看分页表时认为某些资料可能需要用到,而先将资料传到记忆体上的行为,就叫做“先行分页”, 当记忆体够大的话通常会采取这种方式。[6]
  • Unix系统会定期使用sync程序来清理所有经过更动的帧,它会将所有被更动过的帧存到辅助记忆体中。Windows系统有时亦会进行类似功能的操作,它可以使新程序在开启时更快速。

分享

多任务处理多用户的环境下,经常遇到不同的程序需要用到相同的资料,如果采用个别处理的话,很多的记忆体会被浪费掉,分享的功用使不同的程序可以使用相同的记忆体。分享功能还需注意的是系统必须要分离经过修改过后的资料以防止其他程序需要用到修改前的资料。

实作

Ferranti Atlas

第一台支援分页系统的电脑是Atlas[7][8] 这台电脑有著分割成各250字的分页的结合存储

Windows 3.X和Windows 9x

微软为了要使1990年的Windows 3.x不像Windows 1.0Windows 2.0一样需要大量的硬体资源,因而把分页系统加到Microsoft Windows内。系统会创造名为 386SPART.PARWIN386.SWP 的隐藏档来跟记忆体交换档案,通常可以在根目录找到,有时候也会生成在 WINDOWS 资料夹中。此档案的大小决定分页档的大小(可以在控制面板中调整),如果使用者移动或删除这个档案会在下次开机时出现蓝屏死机

Windows NT

Windows NT的系统中(如Windows XPVista78 等),分页档名为 pagefile.sys 并储存在根目录中。有时在开机磁区会出现系统崩溃并出现记忆体倾印的状况,Windows系统会将分页档作为暂存用途,并在下次重起系统时释放分页档的空间。

Unix及类Unix系统

Unix类Unix系统中,系统会定期更新随机存取记忆体与虚拟记忆体间的资料,其中有些系统会在硬碟上划一块专门的区块作为分页档交换档案用,称为交换分区(swap partitions),有些系统还可以把这个区块用档案的形式出现。

Linux

Linux核心2.6以上中,因为系统可以直接绕过其他程序直接跟档案形式的分区交换,分区档的速度已经可以跟交换分区一样快了,[9]且分区档可以自动被存放在硬碟读取最频繁的地方,不过红帽公司还是建议将硬碟划专门区块做使用。不过使用档案形式的分区的灵活度较高,可以自由存放在任一个磁碟,更改成任一大小,在硬碟划专门区块后除非使用特殊的工具,否则无法更动位置及大小。Linux可以建立无数个分区,并将档案排优先顺序,硬碟读取越频繁的地方通常越是系统优先使用该分区,因此要谨慎的排好优先顺序,否则会大大的降低系统的效能。

OS X

OS X使用多重的分区档案,虽然它可以存到其他的地方,但预设就会将档案存到硬碟的根目录中。

32位元硬体限制

由于32位元的硬体位址汇流排最高只能定址到4GB的位置,超过的部分将不能被电脑进行分页使用记忆体。

参考资料

  1. ^ RAM, virtual memory, pagefile, and memory management in Windows. Microsoft. [2012-11-26]. (原始内容存档于2015-03-03). 
  2. ^ 《深入理解计算机系统》(美)Randal E.Bryant, David R. O'Hallaron 著.机械工业出版社(2010).第九章 虚拟存储器. 9.3. Page538.
  3. ^ 《深入理解计算机系统》(美)Randal E.Bryant, David R. O'Hallaron 著.机械工业出版社(2010).第九章 虚拟存储器. 9.3. Page540.
  4. ^ 请求分页技术. 2008-03-06 [2012-11-27]. [永久失效链接]
  5. ^ 需求分頁 - 台灣科技大學. [2012-11-27]. (原始内容存档于2016-03-04). 
  6. ^ 6.0 6.1 虛擬記憶體管理 - 和春技術學院. [2012-11-27]. (原始内容 (PPT)存档于2013-12-03). 
  7. ^ Atlas. Computer50. [2012-11-27]. (原始内容存档于2012-07-28). 
  8. ^ Atlas Architecture. Chilton-computing.org.uk. [2012-11-27]. (原始内容存档于2012-12-10). 
  9. ^ Andrew Morton: Re: Swap partition vs swap file. LKML.ORG. [2012-11-27]. (原始内容存档于2010-11-24). 

参见