虚拟内存

操作系统设计了虚拟内存,每个进程都有自己的独立的虚拟内存。

虚拟内存的好处

  • 进程的运行内存摆脱物理内存的限制:程序运行符合局部性原理,CPU 访问内存会有很明显的重复访问的倾向性,对于那些没有被经常使用到的内存,我们可以把它换出到物理内存之外,比如硬盘上的 swap 区域。
  • 各个进程间内存相互独立:每个进程都有自己的页表,所以每个进程的虚拟内存空间就是相互独立的,互不影响,避免进程间地址冲突问题。
  • 页表项可以用于控制属性:页表项中可以设定页的读写权限,标记该页是否存在,为操作系统提供了更好的安全性。

虚拟内存定义

  • 虚拟内存是一种扩展物理内存的优化方法。虚拟内存将内存以的形式存储在硬盘中并使用缓存,模拟更大的内存容量。
  • 物理内存是计算机中的实际硬件内存,由RAM芯片组成。

虚拟内存与物理内存的区别

虚拟内存拓展了物理内存容量,并提供了更灵活的内存管理机制,但付出的代价是访问速度较慢

  • 大小:物理内存的容量是固定的,而虚拟内存的大小可以超过物理内存的容量。
  • 访问速度:物理内存的访问速度较快,而虚拟内存的访问速度相对较慢,因为它需要与磁盘进行交互。
  • 地址空间:物理内存使用物理地址进行访问,而虚拟内存使用虚拟地址,通过内存管理单元(MMU)映射到物理内存。
  • 管理方式:物理内存的管理相对简单,而虚拟内存的管理涉及页表页面置换等技术。
  • 可用空间:物理内存的可用空间有限,而虚拟内存可以提供更大的可用空间,因为它可以使用磁盘空间作为扩展。

内存分段

内存分页

在Linux操作系统中,非连续分区的内存分配主要依赖于分页存储管理来实现。

页表

分页就是把整个虚拟和物理内存空间切分成一段固定的大小。这样一个连续并且尺寸固定的内存空间称之为页(page)。在linux中,每个页大小为4KB

虚拟地址和物理地址间通过页表映射。

  • 页表存储在内存中,内存管理单元mmu完成将虚拟地址转换为物理地址的工作。
  • 由于内存空间都是预先划分的,不会像分段那样在段与段之间产生外部内存碎片
  • 内存分页机制分配内存的最小单位是,可能导致出现页内出现内存浪费,导致内部内存碎片

在分页机制下,虚拟地址分为两部分,页号页内偏移。页号作为页表的索引,页表包含物理页每页所在物理内存的基地址,这个基地址与页内偏移的组合就形成了物理内存地址。 内存转换流程:

  1. 把虚拟内存地址切分为页号和偏移量。
  2. 根据页号,从页表中查询对应的物理页号。
  3. 物理页号加上偏移量就得到了物理内存地址。

段页

段页式内存管理的优点

  • 灵活性:结合段式和页式的优点,既方便管理不同类型的程序和数据,又能细致地分配和利用内存。
  • 保护性:通过访问权限设置,对内存进行细粒度的访问控制,增强数据安全性。
  • 共享性:支持多个程序共享内存段或页,减少冗余存储,提高内存使用效率。
  • 虚拟化支持:通过页表和地址转换实现虚拟地址到物理地址的映射,支持虚拟内存技术。