[保护模式]非PAE模式
文章目录
- 非PAE 非物理地址扩展
- 线性地址 有效地址 物理地址
- CR3
- PDE/PTE
- 物理页的属性
- 通过线性地址访问PDT和PTT
- 指向PDT的线性地址 0xC0300000
- 总结
- 指向PTT的线性地址 0xC0000000/C0001000
- 总结
- 访问PDT与PTT公式总结
非PAE 非物理地址扩展
线性地址 有效地址 物理地址
如下指令:
mov eax,dword ptr ds:[0x12345678]
这个地址如果想访问成功,首先取决于段机制,看当前的环境能否通过段权限检查以及是否超过limit限制等等。其次,取决于页机制。
- 其中,0x12345678是有效地址
- ds.base+0x12345678是线性地址
- 线性地址也不是真正的地址,还有一个地址被称为物理地址
CPU会通过这个线性地址作为一个目录,去索引物理地址。问题在于A进程有一个地址0x12345678,B进程也有一个地址0x12345678。那么CPU通过什么去分别找到这两个相同内存地址的不同的物理地址呢?答案是页目录基址。
CR3
每个进程都有一个CR3寄存器,保存页目录基址。这个基址是物理地址。CR3指向一个物理页,一共4096字节,如图:
PDE/PTE
- CR3寄存器保存的物理地址指向页目录表PDT,里面的每一个成员叫PDE。页目录表大小为4KB,每个成员为4个字节。
- 每一个PDE又指向页表PTT,里面的每一个成员叫PTE。页表大小为4KB,每个成员为4个字节。
- 每一个PTE都指向物理页,每个物理页大小为4096个字节
- PDE与PTE都是4个字节(32位),前20位是物理地址,后12位是属性
- PTE可以没有物理页,也可以指向物理页,但只能对应一个物理页
- 多个PTE可以指向同一个物理页
- 每一个线性地址都会经过一个PDE和PTE最终指向一个物理页,这个物理页能不能读写取决于经过的PDT和PTE的后12位
物理页的属性
- 物理页的属性由PDE和PTE共同决定
- P:是否有效
- R/W:是否可读可写,0代表只读,1代表可读可写
- U/S:U/S=0 物理页只允许特权用户访问;U/S=1 物理页普通用户也能访问。高2G以上的内存只有内核才能访问的原因是U/S位设置的问题,如果将内核的某个页设置为1,就可以在R3进行访问了
- A:是否被访问过,访问过设置为1。即使只访问一个字节也会导致PDE和PTE置1
- D:是否被写过;0没有被写过,1被写过
- PS:只对PDE有意义,
PS==PageSize
的意思。当PS==1
的时候PDE直接指向物理页,无PTE,低22位是页内偏移。此时,线性地址只能拆成两段:大小为4MB,俗称大页 - 9-11位:当P位为0时,CPU会产生缺页异常,此时这两位标识了该线性地址是否有效,也标识了该线性地址对应的物理内存所在
通过线性地址访问PDT和PTT
指向PDT的线性地址 0xC0300000
现在问题来了,如果我们想访问0这个地址,那么就必须找到PDT和PTT,而CR3里面保存的PDT是物理地址,提供给CPU使用的,代码只能访问线性地址。
如何解决这个问题呢?有一个线性地址,指向的是PDT,这个地址就是0xC0300000,下面对这个地址进行拆分
0xC0300000
#二进制为:
1100 0000 0011 0000 0000 0000 0000 0000
#拆成10:10:12
1100 0000 00------>0x300*4=C00
11 0000 0000------>0x300*4=C00
0000 0000 0000
将这个线性地址拆分之后,找到的对应的物理页就是CR3保存的页目录PDT基址所在的物理页。那就意味着我们可以直接通过这个线性地址去修改PDT。
**结论:**C0300000存储的值就是PDT,如果我们要访问第N个PDE,那么有如下公式:
0xC0300000+N*4
总结
- 通过0xC0300000找到的物理页就是页目录表
- 这个物理页既是页目录表本身也是页表
- 页目录表是一张特殊的页表,每一项PTE指向的不是普通的物理页,而是指向其他的页表
指向PTT的线性地址 0xC0000000/C0001000
也就是说通过0xC0300000这个线性地址可以任意修改页目录表,但如果我们要设置某个线性地址PDE和PTE那么还要能够访问PTT,如何访问呢?
答案是通过这两个线性地址:0xC0000000/C0001000。
通过拆分可以知道,访问0xC0000000这个地址就等于是访问第一个PTT表;访问C0001000这个地址就等于是访问第二个PTT表。两个地址之间相差0x1000。如果想访问第三个PTT表的话以此类推。
总结
- 页表被映射到了从0xC0000000到0xC03FFFFF的4M空间
- 在这1024个表中有一张特殊的表:页目录表
- 页目录表被映射到了0xC0300000开始处的4K地址空间
访问PDT与PTT公式总结
PDI:页目录表索引
PTI:页表索引
访问页目录表的公式:0xC0300000+PDI*4
访问页表的公式:0xC0000000+PDI*4096+PTI*4
与PTT公式总结
PDI:页目录表索引
PTI:页表索引
访问页目录表的公式:0xC0300000+PDI*4
访问页表的公式:0xC0000000+PDI*4096+PTI*4
[保护模式]非PAE模式相关推荐
- python 正则表达式 re (.*?)和(.*)的区别(贪婪模式非贪婪模式)惰性匹配
贪婪模式 .* 非贪婪模式 .*? 1. .匹配任意除换行符"\n"外的字符: 2. *表示匹配前一个字符0次或无限次: 3. +或*后跟?表示非贪婪匹配,即尽可能少的匹配,如*? ...
- netty-阻塞模式,非阻塞模式
以下方法为阻塞模式(单线程) 只能干一件事. import lombok.extern.slf4j.Slf4j;import java.io.IOException; import java.net. ...
- Java技能树-RE-元字符-贪婪模式/非贪婪模式
1 需求 2 语法 Greedy quantifiers X? X, once or not at all X* X, zero or more times X+ X, one or more tim ...
- [保护模式]PAE模式
文章目录 PAE模式 2-9-9-12分页 非PAE模式为什么是10-10-12 PAE模式为什么是2-9-9-12 总结 PDPTE结构 PTE结构 PTE结构 XD标志位(AMD中称为NX,即No ...
- oracle非归档模式下如何备份,Oracle之RMAN数据库在非归档模式下的备份和恢复
1.数据库在非归档模式下的备份 SQLgt; archive log list;数据库日志模式 非存档模式自动存档 禁用存档终点 USE_DB_RECOVERY_FIL 1.数据库在非归档模式下的备份 ...
- 非归档模式下重做日志覆盖后的rman恢复
非归档模式下重做日志覆盖后的rman恢复 实验原理:在非归档模式下,数据库的重做日志不会写入归档日志中,对数据库的恢复只能依靠3个联机重做日志.当第一个重做日志满了,就切换第二个重做日志中,以此类推, ...
- mysql 自动归档,如何将数据库从非归档模式转为自动归档模式:
这个问题小哥哥问过我,我一下卡住了,答不上来,他骂我,学了那么久,这么简单的东西你都不会?我低头默默无语!我确实没有反抗的权利,只能在被骂完之后赶紧学去!这个就是我的命,我的学习永远跟不上他们的步骤, ...
- 数据挖掘之关联分析七(非频繁模式)
非频繁模式 非频繁模式,是一个项集或规则,其支持度小于阈值minsup. 绝大部分的频繁模式不是令人感兴趣的,但其中有些分析是有用的,特别是涉及到数据中的负相关时,如一起购买DVD的顾客多半不会购买V ...
- oracle 存档终点修改,Oracle 归档模式与非归档模式的切换
Oracle 归档模式与非归档模式的切换 1.查看oracle是否处于归档模式 arichive log list; 数据库日志模式 非存档模式 自动存档 ...
最新文章
- java 稀疏数组和二维数组转换,并保存稀疏数组到文件后可以读取
- 区块链80%项目靠同一个故事拿钱,但标准链说最坏的时机就是好的开始
- java action 上传文件_JavaWeb框架_Struts2_(七)-----文件的上传和下载
- Mysql:This version of MySQL doesn’t yet support ‘LIMIT IN/ALL/ANY/SOME 错误解决
- [渝粤教育] 西南科技大学 理论力学 在线考试复习资料
- Java快速入门学习笔记8 | Java语言中的数组
- linux ps指令查看进程,linux下查看进程指令-ps
- 核心Element对象
- 对C#中事件的简单理解
- JSP电子病历管理系统
- 2020 CUMCM全国大学生数学建模竞赛 B题 Notes
- LocalDate获取时间戳
- C Primer Plus(6) 中文版 第6章 C控制语句:循环 6.2 while语句
- IT的道德和伦理-个人隐私
- 2022年保健品行业研究报告
- 【转】在数学的海洋中飘荡
- 通过主成分分析实现三维模型对齐【Principal Component Analysis】
- 工具说明书 - Beoplay E8耳机操作及电池更换
- 递推DP(至少和至多之间的转换
- 移动通信各制式、调制的速率及频谱利用率(2G-4G)
热门文章
- Py之matplotlib:python包之matplotlib库图表绘制包的简介、安装、使用方法(matplotlib颜色大全)详细攻略
- Python实现 灰色关联分析 与结果可视化
- MVC案例——模糊查询
- 一、Windows Server 2016 AD服务器搭建
- 数据库基础之一--DDL(数据库定义语言),DCL(数据库控制语言)
- Html5元素及基本语法
- Java解析HTML
- 围观窗体与组件03 - 零基础入门学习Delphi25
- (学)新版动态表单研发,阶段成果----1
- nRF5_SDK_12.3.0 编译micro-ecc摘要