分页存储

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: 分页存储

分页存储(Paging)是一种现代计算机系统中广泛采用的内存管理技术,它将主存(RAM)划分为固定大小的连续区域,称为“页”(Page)。同时,将进程的逻辑地址空间划分为同样大小的虚拟页(Virtual Page)。分页存储的主要目的是实现虚拟内存管理,使得进程可以使用比实际物理内存更大的地址空间,并支持进程的并发执行和内存共享。以下是对分页存储系统的主要特性和工作原理的详细介绍:

主要特点:

  1. 逻辑地址与物理地址分离
  • 分页存储系统引入了两级地址结构:逻辑地址(由进程生成)和物理地址(由硬件识别)。逻辑地址由页号(Page Number, PN)和页内偏移(Offset)组成。物理地址则对应主存中的实际位置,由物理页号(Physical Page Number, PPN)和页内偏移组成。
  1. 页表
  • 为了将逻辑地址转换为物理地址,系统为每个进程维护一张页表(Page Table)。页表是一个数组,每个条目(Page Table Entry, PTE)对应进程的一个虚拟页。PTE包含该虚拟页对应的物理页号以及其他控制信息,如有效位(Valid/Invalid Bit)、访问位(Accessed Bit)、修改位(Dirty Bit)等。
  1. 硬件支持
  • 系统硬件(如MMU,Memory Management Unit)负责逻辑地址到物理地址的转换。当CPU发出一个逻辑地址访问请求时,MMU首先提取出页号和页内偏移,然后查找页表获取对应PTE中的物理页号。如果有效位为1(表示该虚拟页已映射到物理内存),则将物理页号与页内偏移拼接成物理地址,完成地址转换;否则触发缺页异常(Page Fault),由操作系统介入处理。
  1. 页面大小
  • 页面大小通常是2的幂(如4 KiB、2 MiB等),这样可以简化地址转换过程。页面大小的选择应考虑系统性能、内存利用率和外部碎片等因素。
  1. 页面替换算法
  • 当发生缺页异常,且主存已满时,需要选择一个已存在的物理页将其内容换出到辅存(如硬盘上的交换空间),以便为新的虚拟页腾出空间。常用的页面替换算法包括:最久未使用(LRU)、先进先出(FIFO)、最近最少使用(LFU)、Clock算法、二次机会等。
  1. 内存保护
  • 通过页表中的权限位(如读/写/执行权限)实现对每个虚拟页的访问权限控制,防止非法访问和数据破坏。

工作原理:

  • 进程创建与加载
  • 当操作系统创建或加载一个进程时,为其分配页表,并根据进程的内存需求,将部分或全部虚拟页映射到物理内存。初始时,可能只有部分页面被装入内存,其余页面在首次访问时触发缺页异常。
  • 地址转换
  • 进程执行过程中,CPU生成逻辑地址。MMU截获访问请求,通过查页表将逻辑地址转换为物理地址。若所需页面已在内存中,则直接访问;否则触发缺页异常。
  • 缺页异常处理
  • 操作系统收到缺页异常后,检查是否因访问越界或权限错误导致。若合法,根据页面替换算法选择一个牺牲页(Victim Page),将其内容换出到辅存,并更新页表。然后,从辅存加载所需的虚拟页内容到空出的物理页,更新页表,并重试原访问指令。
  • 页面换出与换入
  • 页面换出时,操作系统将牺牲页的内容写回辅存,并更新页表。页面换入时,操作系统从辅存读取所需虚拟页内容到空闲物理页,并更新页表。换出和换入过程可能涉及磁盘I/O,因此会引入一定延迟。
  • 页面共享
  • 分页存储支持进程间的内存共享。多个进程的页表可以映射到相同的物理页,从而实现数据或代码的共享。这对于减少内存占用、提高系统效率(如共享库文件)非常有用。

优缺点对比:

优点:

  • 灵活的内存管理:分页存储支持任意大小的内存分配,且易于实现内存的动态分配与回收。
  • 虚拟内存:使得进程可以使用超过物理内存大小的地址空间,通过页面换入换出实现按需访问,大大提高了内存利用率。
  • 内存保护:通过页表中的权限位实现对每个虚拟页的访问控制,增强了系统的安全性。
  • 进程并发执行:每个进程有自己的页表,通过逻辑地址到物理地址的转换,实现了进程间内存的隔离,支持多进程并发执行。

缺点:

  • 额外开销:分页存储引入了页表查询、地址转换等额外开销,可能影响系统性能。现代硬件通过TLB(Translation Lookaside Buffer)缓存最近使用的页表项,以降低这部分开销。
  • 内部碎片:由于页面大小固定,分配给进程的内存可能会出现不能完全填满页面的情况,导致内部碎片。
  • 页面换入换出:频繁的页面换入换出(Thrashing)会导致大量的磁盘I/O,严重影响系统性能。

总结来说,分页存储是一种重要的内存管理技术,通过逻辑地址与物理地址的分离、页表的使用以及硬件的支持,实现了虚拟内存管理、内存保护和进程并发执行。尽管存在额外开销和内部碎片等问题,但通过优化硬件(如TLB)和页面替换算法,现代操作系统已经能够在很大程度上克服这些挑战,使得分页存储成为现代计算机系统不可或缺的一部分。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
相关文章
|
SQL Oracle 关系型数据库
什么是分页?如何使用分页?(一)
什么是分页?如何使用分页?
173 0
|
6月前
|
存储 关系型数据库 C语言
开启内存分页
开启内存分页
60 0
|
存储
分页与分段(1)
分页与分段
48 0
|
存储
分页与分段(2)
分页与分段(1)
38 0
37zTree - 分页加载大数据量
37zTree - 分页加载大数据量
123 0
|
存储 SQL 缓存
分页列表缓存,你真的会吗
开源中国的红薯哥写了很多关于缓存的文章,其中多级缓存思路,分页列表缓存这些知识点给了我很大的启发性。 写这篇文章,我们聊聊分页列表缓存,希望能帮助大家提升缓存技术认知。
分页列表缓存,你真的会吗
|
SQL 存储 关系型数据库
什么是分页?如何使用分页?(二)
什么是分页?如何使用分页?
75 0
|
SQL 关系型数据库 MySQL
Mysql排序后分页,因数据重复导致分页数据紊乱的问题
Mysql排序后分页,因数据重复导致分页数据紊乱的问题
161 0