当前位置: 首页 > article >正文

页表(Page Table)

页表(Page Table)

概述: 实现虚拟内存的重要数据结构,作用是将虚拟地址映射到物理地址,从而允许操作系统和硬件进行有效的内存管理。虚拟内存技术允许程序使用比物理内存更大的地址空间

基本结构:

虚拟内存被划分为固定大小的页面(通常是4KB、8KB),物理内存被划分为固定大小的页框。然后页表保存着虚拟页面到物理页框的映射关系。

虚拟地址和物理地址都可以分成两部分:

  • 页号:页面的编号
  • 页内偏移:页面内的偏移量

页表的层级结构: 单一的页表结构可能非常大,查找效率较低。为了优化内存使用和查找速度,操作系统通常会使用多级页表结构:

  • 一级页表:包含虚拟地址空间的最上层的页号映射
  • 二级页表:用于映射一级页表中的页号进一步细分
  • 三级页表:类似地,进一步细化映射关系

页表项(Page Table Entry, PTE): 通常包含

  • 物理页框号:该PTE映射到的物理内存页框地址
  • 有效位:标记该PTE是否有效。若无效,表示该虚拟页面没有映射到物理内存,可能需要缺页中断(Page Fault)。
  • 访问权限:如可读、可写、可执行等权限
  • 脏位:标记该页面是否被修改过。若修改过且没有写回磁盘,则表示该页面为脏页面,需进行写回操作
  • 引用位:在页交换算法中使用,表示该页面是否最近被访问过
  • 缓存控制:指示该页面的缓存行为,如是否允许缓存

页表管理的关键操作:

  • 页表的创建与销毁:每个进程通常都会有自己的页表,操作系统在进行进程创建时为其分配页表,在进程结束时销毁页表。
  • 页表更新:当进程访问某个虚拟地址时,操作系统需要检查该地址是否有对应的PTE,如果没有,则发生缺页中断,操作系统需要更新页表
  • 页表切换:每个进程都有独立的虚拟地址空间。因此,切换进程时需要切换页表。这通常是通过更新页表基址寄存器来完成。
  • 页表缓存:为了加速地址转换,现代CPU通常会使用快表(TLB, Translation Lookaside Buffer),这是一个小型缓存,用于存储最近访问的PTE,每次进行地址转换时,CPU会先查询TLB,若为命中,则需要访问页表

页表的管理策略:

  • 分页与段式管理: 分页和分段式两种不同的内存管理方式,现代操作系统通常结合这两种方式,分页提供了一种均匀的虚拟地址空间,而分段则根据程序的逻辑结构划分地址空间
  • 分配策略:操作系统通常根据需求将内存分配给页表,包括动态分配和按需分配。多级页表可以动态地分配内存,提高内存利用率
  • 页交换:操作系统可能将一些页表项映射到磁盘的swap空间中, 称为虚拟内存的交换。当物理内存不足时,操作系统会将不活跃的页面交换出去,腾出空间给新的页面

http://www.kler.cn/a/529044.html

相关文章:

  • 几种K8s运维管理平台对比说明
  • Java篇之继承
  • HarmonyOS NEXT:保存应用数据
  • 智慧园区如何利用智能化手段提升居民幸福感与环境可持续性
  • 理解神经网络:Brain.js 背后的核心思想
  • 学习数据结构(5)单向链表的实现
  • 面向npm的实时仪表板Dashly
  • 红黑树介绍
  • 搜索旋转排序数组(二分查找)
  • cf集合***
  • NTU:多模态大模型的知识获取能力评估
  • Python 梯度下降法(七):Summary
  • 第一个Python程序
  • 深入了解 SSRF 漏洞:原理、条件、危害
  • 2021 年 12 月大学英语四级考试真题(第 1 套)——纯享题目版
  • 使用frp访问内网web、ssh和隧道搭建
  • 本地部署 DeepSeek-R1:简单易上手,AI 随时可用!
  • 85.[1] 攻防世界 WEB easyphp
  • Java小白入门教程:ArrayList
  • (超实用教程)利用MSF制作exe程序木马
  • javaSE.Object类
  • Web_php_unserialize
  • 代码随想录-训练营-day16
  • MongoDB 删除文档
  • DeepSeek回答禅宗三重境界重构交易认知
  • 项目集成Spring Security认证部分