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的内存寻址机制的更多相关文章

  1. Linux内存寻址之分段机制

    前言 最近在学习Linux内核,读到<深入理解Linux内核>的内存寻址一章.原本以为自己对分段分页机制已经理解了,结果发现其实是一知半解.于是,查找了很多资料,最终理顺了内存寻址的知识. ...

  2. Linux内存寻址之分段机制及分页机制【转】

    前言 本文涉及的硬件平台是X86,如果是其他平台的话,如ARM,是会使用到MMU,但是没有使用到分段机制: 最近在学习Linux内核,读到<深入理解Linux内核>的内存寻址一章.原本以为 ...

  3. Linux内存寻址之分页机制

    在上一篇文章Linux内存寻址之分段机制中,我们了解逻辑地址通过分段机制转换为线性地址的过程.下面,我们就来看看更加重要和复杂的分页机制. 分页机制在段机制之后进行,以完成线性—物理地址的转换过程.段 ...

  4. Linux内核源码分析 day01——内存寻址

    前言 Linux内核源码分析 Antz系统编写已经开始了内核部分了,在编写时同时也参考学习一点Linux内核知识. 自制Antz操作系统 一个自制的操作系统,Antz .半图形化半命令式系统,同时嵌入 ...

  5. linux与C内存管理机制

    转自知乎专栏:https://zhuanlan.zhihu.com/p/51855842?utm_source=wechat_session&utm_medium=social&utm ...

  6. 【读书笔记::深入理解linux内核】内存寻址【转】

    转自:http://www.cnblogs.com/likeyiyy/p/3837272.html 我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0 ...

  7. 【读书笔记::深入理解linux内核】内存寻址

    我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开 ...

  8. Hbase读写流程和寻址机制

    写操作流程 (1) Client通过Zookeeper的调度,向RegionServer发出写数据请求,在Region中写数据. (2) 数据被写入Region的MemStore,直到MemStore ...

  9. 2.1 自动内存管理机制--Java内存区域与内存溢出异常

    自动内存管理机制 第二章.Java内存区域与内存溢出异常 [虚拟机中内存如何划分,以及哪部分区域.什么样代码和操作会导致内存溢出.各区域内存溢出的原因] 一.运行时数据区域 Java虚拟机所管理的内存 ...

随机推荐

  1. [knowledge][ETA] Encrypted Traffic Analytics

    思科ETA主页 https://www.cisco.com/c/en/us/solutions/enterprise-networks/enterprise-network-security/eta. ...

  2. scala-高阶函数

    //1类似于lambda表达式的函数直接量====================== var get = (name: String) => { println(123 + name) } g ...

  3. CloudStack+KVM环境搭建(步骤很详细,说明ClockStack是用来管理虚拟机的)

    文章目录环境准备配置本地域名解析关闭selinux安装ntp服务安装管理端安装Mysql数据库安装服务端RPM:初始化CloudStack数据库:初始化cloudstack管理服务器安装系统虚拟机安装 ...

  4. Qt5线程错误:QThread: Destroyed while thread is still running(执行runThread->exit(0))

    背景: 当前类,编写接收子线程类信号的槽函数和触发子线程类执行的信号: 新建一个子线程类,编写槽函数和信号,MyClass *m_MyClass=new MyClass(): 新建一个线程对象QThr ...

  5. svn 修改文件的可执行权限

    设置svn可执行权限,svn:executable 1)svn propset svn:executable on 文件名/文件夹名 2)svn propset svn:executable on t ...

  6. HashMap如何解决取Value值为Null

    场景: 用HashMap方法时候,取Keys时候自认为敲的肯定是准确无误,然后能得到对应的Values 值.  但写脚本代码时候不好习惯,没事总喜欢敲个空格建,导致取Keys之后多空格. Featur ...

  7. Innodb semi-consistent 简介

    A type of read operation used for UPDATE statements, that is a combination of read committed and con ...

  8. netstat 查看端口

    -l 仅列出有在监听(listen)的服务状态 -n 拒绝显示别名,能显示数字的全部转化成数字 -p 显示建立相关链接的程序名 -t 仅显示 tcp 相关选项 -u 仅显示 udp 相关选项 -a 显 ...

  9. mysql 内置功能目录

    mysql 内置功能 视图介绍 mysql 内置功能 视图 使用 mysql 内置功能 触发器介绍 mysql 内置功能 触发器 实验 mysql 内置功能 事务 介绍 mysql 内置功能 存储过程 ...

  10. 照葫芦画瓢之爬虫豆瓣top100

    import requestsimport reimport jsonfrom requests.exceptions import RequestExceptiondef get(url):    ...