六、内存分区和分页

142 阅读1分钟

一、分区

一个程序会划分为多个段落,分配内存时需要在内存中划分空间区域,如何划分? image.png

  • 如上图所示,存在两个分区表,空闲分区表和已分配分区表
  • 操作系统划分空闲区域的时候有相关的算法,这里不做深入讨论
  • 实际操作系统中并不使用内存分区来进行物理内存的分割

二、分页

实际物理内存是通过分页来分配的,而不是通过分区,因为分区的效率比较差,效率较低的原因:

image.png

由此,分页这个概念被提出,把内存分成多页,分配的时候按照页来分配

image.png

此时需要页表来记录所分配的页:

image.png

三、多级页表

页表的问题:会越来越大……:

image.png

如何解决呢?采用多级页表

image.png

四、快表

多级页表提高了空间效率但在时间上?

image.png

五、段页结合

通过虚拟内存的方式来实现分段,把段分成多页,通过页表找到物理内存

image.png

image.png

六、内存换入

如果虚拟内存比物理内存大怎么样,比如说只有1G的物理内存,如何给用户4G的感觉呢?

image.png

  • 请求调页的过程:
    • 首先产生缺页中断
    • 申请一个空闲页(没有空闲页,就要换出页)
    • 从磁盘上把缺的那一页读到内存中
    • 把物理页和虚拟内存建立映射(修改页表)

七、内存换出

并不是总有新的空闲页,所以需要换出一些页,发生在请求调页的时候,换出的数据就放在了swap分区