百科问答小站 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




  

相关话题

  在内存特定位置填数据后,placement new 是否完全等价与cast? 
  这是个什么芯片?哪家公司的,具体参数有什么? 
  64G内存是什么体验? 
  如何看待2020年5月14日,京东上架纯国产DDR4内存(采用国产长鑫颗粒)——光威弈系列Pro? 
  为什么移动设备有而电脑没有3GB内存? 
  操作系统是不是也是加载到内存中再执行的? 
  使用内存超过32G(含)的电脑是种怎样的体验? 
  内存卡、SSD固态硬盘长时间不通电,里面的数据会丢失吗? 
  为啥物理内存越大,windows占用的内存就越大? 
  为什么内存条涨价厉害,涨了三倍多快四倍? 

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





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