看内核刚进入时加载临时gdt的代码:
lgdt __gdtdesc - KERNBASE
.data
gdt:
...
__gdtdesc:
.word 0x17
.long gdt-KERNBASE
其中KERNBASE = 0xC0000000。在lgdt指令中,使用了__gdtdesc的真实物理地址,而在__gdtdesc中,使用了gdt的真实物理地址。其中lgdt指令中的__gdtdesc真实地址,应该是要经过段式处理的,而__gdtdesc中的gdt地址呢?是否也需要经过段式处理才能访问呢?
查看intel的文档,GDTR/IDTR中的基地址,都是线性地址,LDTR/TR/CS/DS/ES/FS/GS/SS中不可见部分保存的基地址,也都是线性地址。在intel文档中有逻辑地址、线性地址和物理地址三种地址概念,其中逻辑地址包括段选择子和偏移值,逻辑地址经过运算(就是段选择子指定的段描述符中的基地址加上偏移值),将生成一个线性地址,而在启用了分页的情况下,线性地址经过页式转换,最终才生成物理地址。所以只有逻辑地址才需要经过段式处理,而GDTR/IDTR以及一系列存放选择子的段寄存器的不可见部分中保存的是线性地址,也就是无需再次进行段式处理的地址。
而CR3中保存的是当前页目录表的“物理地址”,就是说,可以直接拿来用的地址,无需进行段式处理,也无视进行页式处理,直接放到外部总线上就可以访问内存了。
可以看出,GDTR、IDTR等寄存器中的线性地址都可以分页,但CR3中的物理地址却不可再分段。这也很好理解,在x86 cpu中,地址都是先经过分段,然后再分页的,分页处理后的地址已经是物理地址了,不能再次进行处理了。
分享到:
相关推荐
hive 开发UDF 使用maven工程 引发jar包缺失 hive 开发UDF 使用maven工程 引发jar包缺失
Group : Development/Libraries Source RPM : ncurses-5.7-2.20090207.fc11.src.rpm Size : 1.71 MB Packager : Fedora Project Summary : Development files for the ncurses library Description : The ...
Root project 'Almost-Famous' +--- Project ':famous-cloud' +--- Project ':famous-config' \--- Project ':famous-unique' +--- Project ':famous-common' +--- Project ':famous-login' +--- Project ':famous-...
gEDA homepage: http://www.geda-project.org -----gschem.exe 1.9.2 (g9e1f72c) -----pcb.exe Compile Time Options ----- GUI: gtk : Gtk - The Gimp Toolkit Exporters: bom : Exports a Bill of Materials ...
Udacity-前端网页开发纳米学位-项目3-经典街机游戏克隆-欢迎来到游戏:《蛙人》 -直播版本链接: ://tulysg.github.io/Front-End-NanoDegree-Project3/ -支持课程:Object Oriented JavaScript, ...
2006-03-11 15:26 122,880 关键路径分析.mpp 2005-10-06 00:21 339,456 固定资产信息系统项目.mpp 2005-11-17 16:56 622,592 固定资产信息系统项目.多比较基准.mpp 2005-11-17 16:56 637,440 固定资产信息系统项目....
llvm-project_13.0.1-5.src.tar.gzllvm-project_13.0.1-5.src.tar.gzllvm-project_13.0.1-5.src.tar.gzllvm-project_13.0.1-5.src.tar.gzllvm-project_13.0.1-5.src.tar.gzllvm-project_13.0.1-5.src.tar.gzllvm-...
使用步骤:使用Keil打开Project--》RVMDK(uv5)--》iSO-STM32.uvprojx,对MCU进行代码烧录 二、My_TemAndHumCollection:上位机程序源码 ----->build:编译输出文件目录 ----->My_TemAndHumCollection.pro:QT ...
项目结构multi-module-project是我们的项目名称,其中包含多个模块:mmp-dal模块:数据访问层,提供对原始数据(主要指数据库)的操作mmp-integration模块:提供对第三方服务的调用mmp-commons模块:提供工具类、...
5. **Problem 5: 2的幂次方的和** - 知识点:幂运算,循环结构,数组操作,位运算(可选)。 - 解决方法:计算2的幂次方直到它们的和大于等于4000000,然后相加所有偶数的幂次方。 6. **Problem 6: 平方和与平方...
431-Project1:RIT CSCI 431
team-project-team2:由GitHub Classroom创建的team-project-team2
来自emule-project的原版emule,里面没有关键字过滤,可以自由的下载一切资源,不可多得啊~
composer create-project drupal-composer/drupal-project:9.x-dev some-dir --no-interaction 使用composer require ...您可以将新的依赖项下载到您的安装中。 cd some-dir composer require drupal/devel ...
CS-355-Project-2 CS 355 项目 2 MVC 完成! 使用 Intellij #MYSQL STATEMENTS SET foreign_key_checks = 0; -- Project 01 高中运动队数据库 -- 作者:MACKENZIE LARSON -- 日期:4/5/15 -- 如果存在则丢弃表 ...
WebUml-ProjectManager WebUml项目管理器后端。 职责: 用于元模型和表示模型元素的CRUD 要求: GIT 1.9( ) Java 8( ) Maven 3.0.5( ) heroku-toolbelt 3.6.0( ) MongoDB的 推荐工具: jq( ) 在...
《Project横道图很容易》这份参考资料,主要针对的是Microsoft Project软件在项目管理中的应用,特别是如何轻松绘制横道图(甘特图)这一核心功能。横道图是项目管理中常用的一种图形化工具,用于清晰地展示项目的...
Lesson 2 - Basic principles of learning a programming language UNIT 1 - VARIABLES, TYPES, EXPRESSIONS, AND STATEMENTS Lesson 3 - Introducing Python: a programming language Lesson 4 - Variables and ...
在这个项目中,"fireworx-streamline-project-master"可能包含源代码、配置文件和其他相关资源,以改善MATLAB的默认设置,提供更加智能化的代码提示功能。 MATLAB的快捷键通常分为两类:基本编辑器快捷键和特定功能...
"ncpi-project-forge" 是一个与项目管理相关的开源项目,它可能是一个工具或平台,专门用于支持“Project Forge”的工作。"light_bulb" 和 "notebook" 的符号可能暗示该项目提供了启发式方法或记录工具,帮助用户...