【操作系统-61】非连续管理方式-基本分页存储管理
基本分页存储管理(Basic Paging Memory Management)是一种常见的内存管理方式,属于非连续存储管理方式。它将程序的内存划分为固定大小的页面(Pages),并将内存中的空闲空间划分为大小相等的页框(Page Frames)。每个页面都可以被映射到物理内存中的任意一个页框,避免了内存分配时的连续性限制,从而有效地解决了外部碎片问题。
一、基本分页存储管理的工作原理
-
划分页面和页框:
-
虚拟地址空间: 程序的虚拟内存被划分为固定大小的页面(通常为4KB、8KB等),每个页面对应一个页号(Page Number)。
-
物理地址空间: 物理内存被划分为大小相等的页框(Page Frame),每个页框也有一个编号(Frame Number)。
-
-
地址映射:
-
程序在运行时,使用的是虚拟地址,虚拟地址由两部分组成:页面号和页面内偏移量(Offset)。
-
操作系统通过页表(Page Table) 维护虚拟地址与物理地址之间的映射关系。页表记录了每个虚拟页面号(Page Number)对应的物理页框号(Frame Number)。
-
虚拟地址 → 物理地址的转换由虚拟页面号在页表中查找对应的物理页框号,然后加上页面内偏移量得到物理地址。
-
-
内存访问:
-
当程序需要访问某个地址时,它使用虚拟地址,该地址中的页面号通过页表转换为物理页框号,然后再加上偏移量,最终定位到实际的物理内存地址。
-
-
分页操作:
-
页面加载: 当程序运行时,操作系统根据需要将页面从磁盘加载到物理内存中的页框。
-
页面置换: 如果物理内存不足,操作系统需要决定哪些页面应该被换出磁盘,哪些页面应该加载到内存中。这一过程涉及到页面置换算法。
-
二、基本分页存储管理的特点
-
非连续性分配:
-
每个进程的页面可以被分配到物理内存中的任意位置,不要求连续存放。这样就避免了传统的连续分配方式带来的外部碎片问题。
-
-
解决外部碎片问题:
-
由于页面是固定大小的,而且页面可以任意分配到物理内存中,不需要连续的空闲空间,因此有效解决了外部碎片问题。
-
-
灵活性高:
-
程序的每个页面都可以在物理内存的不同位置,这使得内存资源的分配更加灵活,内存利用率更高。
-
-
页面大小固定:
-
在基本分页存储管理中,每个页面的大小是固定的(如4KB),这使得内存管理较为简单。
-
-
内部碎片:
-
基本分页管理虽然解决了外部碎片问题,但它可能产生内部碎片。如果程序的某个页面的大小小于一个页面的大小,那么剩余的空间就成为了内部分配浪费。尽管这种浪费相对较小,但它仍然是分页管理的一个缺点。
-
三、基本分页存储管理的结构
-
虚拟地址:
-
在分页存储管理中,虚拟地址通常分为两个部分:页号(Page Number)和偏移量(Offset)。
-
页号: 虚拟地址中的高位部分,用来在页表中查找相应的物理页框号。
-
偏移量: 虚拟地址中的低位部分,指示在页面内的数据位置。
-
-
-
页表:
-
页表(Page Table)是操作系统用来记录虚拟页面到物理页框映射关系的数据结构。
-
每个进程都有一张页表,它保存了该进程的虚拟页面号与物理页框号之间的映射关系。页表通常存储在内存中,地址转换的过程中需要查询页表。
-
-
物理地址:
-
物理地址由页框号和偏移量组成。页框号通过页表映射得到,偏移量来自虚拟地址中的相应部分。
-
四、基本分页存储管理的地址转换过程
-
给定一个虚拟地址:
-
虚拟地址由页号(Page Number)和偏移量(Offset)两部分组成。假设虚拟地址的结构为:
-
页号: 高位部分
-
偏移量: 低位部分
-
-
-
查找页表:
-
操作系统通过虚拟地址中的页面号在页表中查找对应的物理页框号(Frame Number)。
-
-
构建物理地址:
-
查找到物理页框号后,将偏移量与物理页框号结合,构成最终的物理地址。
-
-
访问内存:
-
使用物理地址来访问实际的内存位置。
-
五、基本分页存储管理的常见问题
-
页表的大小:
-
页表记录每个虚拟页面与物理页框的映射关系,如果进程的虚拟地址空间很大,页表可能会变得非常庞大。为了管理大型页表,操作系统可能采用多级页表(如两级页表、三级页表等)或反向页表等优化方法。
-
-
页面置换算法:
-
当物理内存不足时,操作系统需要决定哪些页面应该被换出磁盘,哪些页面应该加载到内存中。常见的页面置换算法包括最近最少使用(LRU)、最不常用(LFU)、先进先出(FIFO)等。
-
-
内存碎片:
-
虽然分页管理消除了外部碎片问题,但每个页面的大小是固定的,如果程序的某个页面没有完全利用,可能会出现内部碎片,即浪费内存空间。
-
六、基本分页存储管理的优缺点
优点:
-
避免外部碎片: 分页管理将内存分割成固定大小的页面,可以有效避免外部碎片的产生。
-
简化内存分配: 每个进程的内存不需要连续分配,内存资源的分配更为灵活和高效。
-
灵活的内存使用: 虚拟地址空间与物理地址空间的分离,使得程序可以使用更多的内存(如虚拟内存技术)。
缺点:
-
内部碎片: 每个页面固定大小,因此如果某个页面没有完全被使用,剩余空间就会浪费,导致内部碎片。
-
页表开销: 大规模的虚拟地址空间可能导致页表非常庞大,特别是在处理大程序或多进程的系统中,页表的管理和查找可能会带来较大的开销。
-
页面置换开销: 当内存不足时,操作系统需要频繁进行页面置换,尤其是在内存需求波动较大的情况下,页面置换可能导致性能下降。
七、总结
基本分页存储管理是一种高效的内存管理方式,它通过将内存划分为固定大小的页面和页框,避免了传统内存分配方式中连续性要求带来的外部碎片问题。分页管理的优势在于灵活性和高效性,但它也面临内部碎片、页表管理和页面置换开销等问题。分页存储管理通常用于需要支持虚拟内存的操作系统中,并在多进程、内存需求变化较大的环境中表现优越。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)