百科问答小站 logo
百科问答小站 font logo



内存为什么要分页? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

说点历史的话,很多计算机技术一开始的设计目的跟今天是不一样的。

分页这个技术的发展路线大致是:

       内存置换 ---> 虚拟内存 ---                           +--> 段页模式(分页) 内存分段 ---> 段交换 -----/     

分页这个技术,历史至少有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页等等。


参考资料:

en.wikipedia.org/wiki/P
en.wikipedia.org/wiki/I
en.wikipedia.org/wiki/I
en.wikipedia.org/wiki/P




  

相关话题

  为什么内存条的频率会有2133这么奇怪的数字?为什么不能做成2200呢? 
  为什么内存表面是粗糙的,CPU是很光滑的? 
  为什么 32G 内存的笔记本电脑比 16G 内存版本贵那么多? 
  电脑如何在进行高速下载的情况下,还可以流畅的运行其他程序? 
  32位保护模式下,段基地址应尽量选取16字节对齐的那些地址,可使访问的性能最大化? 
  Java中 栈内存的存取速度仅次于寄存器,如何做到的? 
  为什么 Java 和 JS 等语言需要 VM,不能直接操作内存堆栈空间? 
  主板四个内存槽,为什么插第一个和第四个也能组成双通道,不是只能插13或者24吗? 
  8G手机内存和12G内存有什么区别? 
  为什么 32G 内存的笔记本电脑比 16G 内存版本贵那么多? 

前一个讨论
在嵌入式商用里面哪款RTOS(实时操作系统)比较多人用?
下一个讨论
如果让计算机不使用操作系统做服务器性能上是否会更有优势?





© 2024-09-28 - tinynew.org. All Rights Reserved.
© 2024-09-28 - tinynew.org. 保留所有权利