说点历史的话,很多计算机技术一开始的设计目的跟今天是不一样的。
分页这个技术的发展路线大致是:
内存置换 ---> 虚拟内存 --- +--> 段页模式(分页) 内存分段 ---> 段交换 -----/
分页这个技术,历史至少有50年以上了,但最早的目的不是为了保护,最早是为了解决内存不足,也就是类似于虚拟内存。
但早期的虚拟内存技术五花八门,太古老的技术不说了,DOS时代就有OVL格式文件,就是把一个巨大的可执行文件分段(不是汇编语言里的段)加载,可以使用一小块内存来运行比较大的应用。当年的FOXBASE(后来的Visual FoxPro)就是这么干的。
Intel的CPU也不是一开始就支持分页的,在80286的时代,CPU已经有了保护模式,但此时只分段,不分页。如果内存不够用的话,不像现在这样采用的是缺页中断,而是把整个段(segment)都交换出去,如果一个段特别大,那么段交换(segment swap)的时间就非常难以忍受了。
80286出现以后,收到的各种反馈显示,保护模式很好,但这种只分段的模式并不理想。Intel也开始明白这么搞不是办法,所以从其它体系架构里吸取了分页的概念,才有了今天的段页模式。如果一个段的内存访问失效,触发的是缺页中断,而不是“缺段中断”,当然了80286的坑很多,不止这一个。
引入了分页的概念以后,大家发现分页能很好的控制权限,不用像80286那种坑人的段权限管理方式,所以才有了今天的平坦内存模型等概念。
所以,早期(非Intel架构)的分页技术,是为了解决内存不足的问题。Intel引入分页技术,最早是要解决段交换(segment swap)的性能问题。这些才是历史上真正的原因。
一个技术的引入,最后的应用和当初的目的可能完全不一样。当然了,现在我们看到分页技术,可以解决地址空间隔离的问题,可以解决物理内存不足的问题,可以控制内存访问权限等等。
所以如果是教科书式的回答,那么可能就是前面说的地址空间隔离之类的选项;如果是从计算机硬件发展的角度上看,最早只是为了解决段交换的性能。至于你怎么回答,这就要看你是想面对考试,还是说想了解一些硬件发展历史了。
题主问的页面算法,应该指的是页面交换算法,需要注意的是,这里的交换算法是操作系统实现的,具体哪些页面应该在内存里,哪些在磁盘上,是操作系统决定的,CPU只是机械式的执行操作系统的指令。
目前操作系统里最常见的应该是LRU(Least recently used,最近最少使用)算法,或者是LRU的某种变种。就是如果需要换页,找到最近最久没有被使用的页面,然后换掉它。
LRU算法的资料非常多。
除此之外,还有FIFO(先进先出),Random(随机)等算法,很多年前的时候是有操作系统用这类算法的。有兴趣可以去维基百科上查看词条:
Windows或者Linux都是针对LRU算法进行一些微调,比如LRU的调度单元不一定是一个4K页,可能是N个4K页等等。
参考资料:
https:// en.wikipedia.org/wiki/P age_(computer_memory)
https:// en.wikipedia.org/wiki/I ntel_80286
https:// en.wikipedia.org/wiki/I 386
https:// en.wikipedia.org/wiki/P age_replacement_algorithm