80x86的内存寻址机制
80x86的内存寻址机制
80386处理器的工作模式:
模式。
模式之间可以相互转换,而模式之间不可以相互转换。
DOS系统运行于实模式下,Windows系统运行与保护模式下。
实模式:
80386处理器被复位或加电的时候以实模式启动。
一样的,(段寄存器内容-段地址)SA(16bit)*16+EA(16bit)(偏移地址),其中32位的地址线只是用了低20位(16+4=20)寻址空间为2^20B = 1MB。
不能对内存进行分页管理,指令寻址的地址就是内存中的实际的物理地址,所以在实模式下,所有的段都是可读、可写和可执行的。
的中断方式和8086相同,利用中断向量表定位中断服务程序的地址,其中个字节,其中2个字节为SA,2个字节为EA。
位)为1 转换成保护模式。
保护模式:
位地址线全部使用到,寻址空间高达4GB。
个优先级,分别是ring0~ring3。
位)为 0 转换成保护模式。
模式:
程序而设置的。例如:CMD命令运行的“MS-DOS应用程序”在Windows操作系统中运行。
模式是的寻址方式,寻址空间为1M。
80386的内存寻址机制:
一样。
重点在保护模式下:
段描述表(Segment Table):分为全局描述表(GDT Global ...) 和 局部描述表 (LDT local ...),其中段描述表里存放 段描述符。
段描述符(Segment Descriptor):优先级,是否可读写可执行,等描述段的参数,共64位。
段选择器(Segment Selector):16位的段寄存器,存放段选择器,存放段描述表的“索引”。
GDT:GDT全局描述表只有一个,包含系统中所有任务都可用的段描述符,包含操作系统中代码段、数据段、堆栈段以及各个任务的LDT段等,由GDTR指向。
LDT:每个任务都有各一个独立的LDT,包含每个任务私有的代码段、数据段、堆栈段 以及 该任务所使用的一些门描述符,例如任务门和调用门描述符等,由LDTR指向。
GDTR 直接指向内存地址, LDTR、CS、DS、SS、ES、FS 和GS 存放索引值,指向局部描述表中内存段对应的描述符在全局描述表中的位置,则只要该表LDTR,系统当前的LDT就会切换,方便了各个任务切换和任务之间数据的隔离,GDT不会随着任务的切换而切换。
具体的寻址过程:
位,1位]位TI位表示在DT中的位置,TI=0 在 GDT中,TI=1 在 LDT中。
虚拟地址为:SA(16bit):EA(32bit) 的计算
(段寄存器内容-段地址)SA(16bit)*16+EA(32bit)(偏移地址)注意偏移为32bit
分两种情况:
一、TI = 0
① 从GDTR寄存器中获取GDT的基址
位),找到SD(段描述符)
③ SD 中包含了段的基址、限制长、优先级等各种属性,得到段的起始地址
④ 在③中得到的起始地址加上偏移,得到物理地址
二、TI = 1
① 从GDTR寄存器中获取GDT的基址
② 从LDTR寄存器中获取LDT描述符 在 GDT中的索引
③ 根据②中得到的索引,找到 LDT的描述符
④ 通过LDT的段描述符,得到LDT段的起始地址
位),找到SD(段描述符)
⑥ SD 中包含了段的基址、限制长、优先级等各种属性,得到段的起始地址
⑦ 在⑥中得到的起始地址加上偏移,得到物理地址
补充知识:
控制寄存器是一些特殊的寄存器,它们可以控制CPU的一些重要特性。
CR0:
,则保护模式启动,如果PE=0,则在实模式下运行。
31位是分页允许位(Paging Enable),它表示芯片上的分页部件是否允许工作。
就可以禁用则可将其恢复。(NT5.x系列,SSDT hook的一种改写SSDT的方法)
80x86的内存寻址机制的更多相关文章
- Linux内存寻址之分段机制
前言 最近在学习Linux内核,读到<深入理解Linux内核>的内存寻址一章.原本以为自己对分段分页机制已经理解了,结果发现其实是一知半解.于是,查找了很多资料,最终理顺了内存寻址的知识. ...
- Linux内存寻址之分段机制及分页机制【转】
前言 本文涉及的硬件平台是X86,如果是其他平台的话,如ARM,是会使用到MMU,但是没有使用到分段机制: 最近在学习Linux内核,读到<深入理解Linux内核>的内存寻址一章.原本以为 ...
- Linux内存寻址之分页机制
在上一篇文章Linux内存寻址之分段机制中,我们了解逻辑地址通过分段机制转换为线性地址的过程.下面,我们就来看看更加重要和复杂的分页机制. 分页机制在段机制之后进行,以完成线性—物理地址的转换过程.段 ...
- Linux内核源码分析 day01——内存寻址
前言 Linux内核源码分析 Antz系统编写已经开始了内核部分了,在编写时同时也参考学习一点Linux内核知识. 自制Antz操作系统 一个自制的操作系统,Antz .半图形化半命令式系统,同时嵌入 ...
- linux与C内存管理机制
转自知乎专栏:https://zhuanlan.zhihu.com/p/51855842?utm_source=wechat_session&utm_medium=social&utm ...
- 【读书笔记::深入理解linux内核】内存寻址【转】
转自:http://www.cnblogs.com/likeyiyy/p/3837272.html 我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0 ...
- 【读书笔记::深入理解linux内核】内存寻址
我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开 ...
- Hbase读写流程和寻址机制
写操作流程 (1) Client通过Zookeeper的调度,向RegionServer发出写数据请求,在Region中写数据. (2) 数据被写入Region的MemStore,直到MemStore ...
- 2.1 自动内存管理机制--Java内存区域与内存溢出异常
自动内存管理机制 第二章.Java内存区域与内存溢出异常 [虚拟机中内存如何划分,以及哪部分区域.什么样代码和操作会导致内存溢出.各区域内存溢出的原因] 一.运行时数据区域 Java虚拟机所管理的内存 ...
随机推荐
- 读书笔记iOS-Core-Animation-Advanced-Techniques,iOS性能调试工具
调试卡顿,除了使用timer profile,还可以使用 OpenGL ES驱动工具 OpenGL ES Driver工具显示的GPU利用率,打开Color Blended Layers 我们给图片和 ...
- LeetCode 706 Design HashMap 解题报告
题目要求 Design a HashMap without using any built-in hash table libraries. To be specific, your design s ...
- PopupMenu动态创建菜单
1.TPopupMenu一条横线在Caption输入一个'-'就可以了.2.在Caption输入名字之后加入一个&就可以不显示快捷键,比如: 退出& 这样退出按钮的快捷键就不会显示出 ...
- 《Linux 文本处理》- awk 分析 nginx 日志
废话不多说,简单了解一下 awk - 强大的文本分析工具,也就是分析日志 最常用的就是分析日志了吧,做统计什么,这里也拿 nginx 日志来做分析 1:统计出现次数 - 比如状态码出现次数 - 先直接 ...
- MSSQL2008 部署及开启远程连接
最近不少用户在windows2003 server 32位操作系统上安装SQL Server2008总是失败,出现大量错误.今天经过通过我反复测试安装,找出了一个便捷的安装方法,节省大家宝贵时间,具体 ...
- window 系统显示svg、psd格式文件
可以安装SVG Explorer Extension来预览略缩图原地址:https://svgextension.codeplex.com 参考地址 github上 exe 文件下载地址 https: ...
- java读取配置文件的信息
1. 首先,工程结构如下: 注:a. 蓝色标注的两个文件是和com包平级的,都在src下.EnnNotificationPushProxy.ini是这个工程的配置文件,log4j.properties ...
- 深入理解Java虚拟机笔记
1. Java虚拟机所管理的内存 2. 对象创建过程 3. GC收集 4. HotSpot算法的实现 5. 垃圾收集器 6. 对象分配内存与回收细节 7. 类文件结构 8. 虚拟机类加载机制 9.类加 ...
- linux网络设置和虚拟机克隆转移之后网卡找不到
linux网络设置和虚拟机克隆转移之后Error:No suitable device found:no device found for connection 'System eth0'问题解决 ...
- Java设计模式(一)普通工场模式 抽象工场模式
设计模式 设计模式是前人总结的,为了解决一类问题而总结的代码设计经验. 最初可能为了使用而使用,后面就会发现.非常多没想到的问题由于使用了正确的设计模式已经为你考虑到了.<design patt ...