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




  

相关话题

  ”返回在函数内malloc的内存是安全的,但是容易造成问题,最好的做法是返回传入的指针。“怎么理解? 
  如何看待小米 10 全系标配 LPDDR5 内存? 
  采用32位cpu的系统,如果内存采用字编址方式能否支持更大的内存了? 
  将内存当硬盘用是否可行(请注意展开详细描述)? 
  小米手机6运行内存为什么是6GB而不是8GB? 
  从操作系统内存管理来说,malloc申请一块内存的背后原理是什么? 
  为何微软不在新的操作系统中让 32 位支持大于 4GB 的内存? 
  为什么微信占用的内存这么大? 
  内存(RAM) 1T 以上是什么体验? 
  为什么内存条涨价厉害,涨了三倍多快四倍? 

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





© 2024-12-18 - tinynew.org. All Rights Reserved.
© 2024-12-18 - tinynew.org. 保留所有权利