页表(Page Table)

devtools/2025/2/2 20:09:55/

页表(Page Table)

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

基本结构:

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

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

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

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

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

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

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

页表管理的关键操作:

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

页表的管理策略:

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

http://www.ppmy.cn/devtools/155524.html

相关文章

跨组织环境下 MQTT 桥接架构的评估

论文标题 中文标题: 跨组织环境下 MQTT 桥接架构的评估 英文标题: Evaluation of MQTT Bridge Architectures in a Cross-Organizational Context 作者信息 Keila Lima, Tosin Daniel Oyetoyan, Rogardt Heldal, Wilhelm Hasselbring Western Norway …

2024第十五届蓝桥杯网安赛道省赛题目--rc4

rc4 一、查壳 无壳,32位 二、IDA分析 1.main 2.sub_401005 根据题目以及该函数的内容都可以让我们确定这是个rc4加密题。 所以

C++实现状态模式

首先上代码&#xff1a; #include <iostream> #include <memory>class Context;class State { public:virtual void Handle(Context * context) 0; //纯虚函数virtual ~State() default; //虚析构函数 };//创建状态A class ConcreateStateA : public State{…

第四章-SUSE- Rancher-容器高可用与容灾测试-RKE2(容灾测试)

系列文章目录 第一章-SUSE- Rancher-容器高可用与容灾测试-RKE2-外置Mysql&#xff08;主备集群搭建&#xff09;-CSDN博客 第二章-SUSE- Rancher-容器高可用与容灾测试-RKE2-集群搭建&#xff08;外置Mysql&#xff09; 第三章-SUSE- Rancher-容器高可用与容灾测试-Rancher-…

独立游戏RPG回顾:高成本

刚看了某纪录片&#xff0c; 内容是rpg项目的回顾。也是这个以钱为核心话题的系列的最后一集。 对这期特别有代入感&#xff0c;因为主角是曾经的同事&#xff0c;曾经在某天晚上听过其项目组的争论。 对其这些年的起伏特别的能体会。 主角是制作人&#xff0c;在访谈中透露这…

Android Studio 新版本24.2.2 运行后自动切到 LogCat

最近更新了 Android studio 版本&#xff0c;发现有个问题&#xff1a; 每次 Run app 之后。都会自动切换到 run 标签。这让我非常不习惯。我个人习惯在app 运行后查看Logcat 最后靠 deepSeek 找到一种解决方案&#xff1a; Android Studio 中截图如下&#xff1a;

微机原理与接口技术期末大作业——4位抢答器仿真

在微机原理与接口技术的学习旅程中&#xff0c;期末大作业成为了检验知识掌握程度与实践能力的关键环节。本次我选择设计并仿真一个 4 位抢答器系统&#xff0c;通过这个项目&#xff0c;深入探索 8086CPU 及其接口技术的实际应用。附完整压缩包下载。 一、系统设计思路 &…

C#面试常考随笔6:ArrayList和 List的主要区别?

在 C# 中&#xff0c;ArrayList和List<T>&#xff08;泛型列表&#xff09;都可用于存储一组对象。推荐优先使用List<T>&#xff0c;因为它具有更好的类型安全性、性能和语法简洁性&#xff0c;并且提供了更丰富的功能。只有在需要与旧代码兼容或存储不同类型对象的…