线性地址和物理地址
Intel架构下
- 凡是在代码中书写的内存地址都是逻辑地址, 也就是采用基地址:偏移量, 我们能够直接看到的也是逻辑地址, 通过左移等操作可以计算出对应的物理地址(在实模式下逻辑地址与物理地址没有中间层所以是可以的, 但是在保护模式则是行不通的, 再说)
实模式下
- 逻辑地址通过左移等操作可以计算出对应的物理地址
保护模式
- 在逻辑地址和物理地址之间多了一个中间层线性地址
- 逻辑地址左移等操作计算出来的是线性地址而不再是物理地址了, 线性地址就是32位的整数
- 通过分页机制将线性地址转为32位的物理地址
在Intel保护模式下32位为了兼容老式机强制要求分段机制, 但是在其他硬件平台则只是支持了分页机制
- Linux为了可以解决硬件平台的不兼容, 巧妙的绕过了Intel的分段机制, 那就是将所有的基地址为0x00000000, 偏移量为4GB的范围
- IA-32还规定需要为代码段和数据段创建不同的段, 注意: 段地址和基地址不同, 基地址是保存在CPU的寄存器中的, 而段地址就是一个Label而已, 同时Intel的CPU有0和3两个特权, 这两个级别的代码段和数据段是不能共用的, 所以要为两个级别创建不同的代码段和数据段
在Intel64位下去掉了段机制, 直接使用线性地址(32位整数)访问内存地址
- 这样我们就可以理解下面的代码了
; 在保护模式下32位(还是采用段机制访问内存) ; 初始化临时的要进入到IA-32e模式的GDT数据结构 LABEL\_GDT64: dq 0x0000000000000000 LABEL\_DESC\_CODE64: dq 0x0020980000000000 LABEL\_DESC\_DATA64: dq 0x0000920000000000 GdtLen64 equ $ - LABEL\_GDT64 GdtPtr64 dw GdtLen64 - 1 dd LABEL\_GDT64 ; 我们知道GdtPtr64中的值是要加载到gdtr寄存器中的, 而gdtr中的4b保存的地址, 这里我们发现地址时就是一个线性地址而不是0x00000:004114等等

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
2.0解析系列 | 一文详解新一代OceanBase云平台
OB君:9月21日,OceanBase 2.0 在云栖大会上重磅发布。我们将在接下来的时间里为大家持续推出 “OceanBase 2.0 技术解析系列” 文章,分别从 可运维性、分布式架构、数据可用性、性价比及兼容性 五个方面对OceanBase 2.0的产品新特性及其背后的技术原理进行深入的解析。本文将带你全面解析新一代的OceanBase云平台,更多内容欢迎持续关注本系列! 本文作者:笑言 现任蚂蚁金服OceanBase团队技术专家,2014年加入阿里巴巴,从事领域涉及分布式事务中间件、中间件高可用,目前主要负责OCP 2.0系统的建设工作。 原文: OceanBase云平台(OceanBase Cloud Platform,以下简称OCP)是一款专门用来管理OceanBase数据库集群的管控平台。通过OCP,可以一键安装、部署、升级
- 下一篇
Windows平台JxCore打包
1.下载JxCore https://raw.githubusercontent.com/jxcore/jxcore-release/master/0311/jx_win64v8.zip 2.解压并配置环境变量 3.查看环境变量配置是否成功 jx –version 4.打包命令 Jx package test.js test 如图所示: test.jxp这是一个中间件文件,包含了需要编译的完整项目信息。 test.jx 这是一个完整包信息的二进制文件,可运行在客户端上 5.继续在当前目录下用以下命令执行生成的 .jx二进制文件 jx test.jx command_line_arguments
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8编译安装MySQL8.0.19