80X86 分段机制(读书笔记)
GDT(全局描述符表)本身并不是一个段,而是线性地址空间的一个数据结构。GDT的线性地址和长度必须加载进GDTR寄存器中。LDT(局部描述符表)存放在LDT类型的系统段中。此时GDT必须含有LDT的段描述符。如果系统支持多LDT的话那么每个LDT都必须在GDT中有一个段描述符和段选择符。LDT的段描述符可以在GDT的任何地方。
段选择符
段选择符是段的一个16位标识符。段选择符并不直接指向段而是指向段描述符表中第一的段描述符。段选择符3个字段内容:
1.请求特权级RPL 提供了保护信息。
2.表指示标志TI TI=0表示描述符在GDT中;TI=1表示描述符在LDT中。
3.索引值 给出了描述符在GDT或LDT表中的索引号。
选择符通过定位段表中的一个描述符来指定一个段,并且描述符中包含有访问一个段的所有信息,例如段的基址,段长度和段属性。
处理器不使用GDT表中的第一项,指向GDT该项的选择符用作为空选择符。当把空选择符加载到一个段寄存器(除了CS和SS以外)中时处理器并不产生异常。但是当使用含有空选择符的段寄存器用于访问内存时就会产生异常。当把空选择符加载到CS或SS段寄存器中时将会导致一个异常。
当一个段选择符被加载到一个段寄存器可见部位时处理器也同时把段选择符指向的段描述符中的段地址、段限长以及访问控制信息加载到段寄存器隐藏部分(影子寄存器)。
在对描述符表中描述符做过任何改动之后就立刻重新加载6个段寄存器。这将把描述符表中的相应位段信息重新加载到影子寄存器中。
段描述符
段描述符是GDT和LDT表中的一个数据结构项。用于相处理器提供有关一个段的位置和大小信息以及访问控制的状态值。每个段描述符长度是8字节,含有三个主要字段:段基址、段限长和段属性。段描述符通常由编译器、连接器、加载器或者操作系统来创建,但绝不是应用程序。
对于下扩段,减小段限长度,字段中的值会在该段地址空间底部分配新的内存而不是在顶部分配。80X86的栈总是向下扩展的,因此这种实现方式很适合扩展堆栈。
段基地址应该对齐16字节边界。
代码和数据段描述符类型
如果堆栈的长度需要动态的改变。那么堆栈段可以是一个向下扩展的数据段(拓展方向标志置位)。这里动态改变段限长将导致栈空间被添加到栈底部。
系统段描述符指向系统段(如LDT段和TSS段),门描述符就是一个“门”对于调用、中断或陷阱门。其中含有代码段的选择符和段中程序入口的指针。
80X86 分段机制(读书笔记)的更多相关文章
- mysql锁机制 读书笔记
目录 MySQL锁机制 1.什么是锁 2.lock与latch 3.InnoDB存储引擎中的锁 3.1锁的类型 3.2 一致性非锁定读 3.3 一致性锁定读 4 锁的算法 4.1行锁的3中算法 4.2 ...
- 《Java并发编程实战》第十五章 原子变量与非堵塞同步机制 读书笔记
一.锁的劣势 锁定后假设未释放.再次请求锁时会造成堵塞.多线程调度通常遇到堵塞会进行上下文切换,造成很多其它的开销. 在挂起与恢复线程等过程中存在着非常大的开销,而且通常存在着较长时间的中断. 锁可能 ...
- 副本机制与副本同步------《Designing Data-Intensive Applications》读书笔记6
进入到第五章了,来到了分布式系统之中最核心与复杂的内容:副本与一致性.通常分布式系统会通过网络连接的多台机器上保存相同数据的副本,所以在本篇之中,我们来展开看看如何去管理和维护这些副本,以及这个过程之 ...
- 《android开发艺术探索》读书笔记(十)--Android的消息机制
接上篇<android开发艺术探索>读书笔记(九)--四大组件 No1: 消息队列MessageQueue的内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表,因为单链表 ...
- 《android开发艺术探索》读书笔记(二)--IPC机制
接上篇<android开发艺术探索>读书笔记(一) No1: 在android中使用多进程只有一种方法,那就是给四大组件在AndroidMenifest中指定android:process ...
- Windows内核读书笔记——Windows异常分发处理机制
本篇读书笔记主要参考自<深入解析Windows操作系统>和<软件调试>这两本书. IDT是处理异常,实现操作系统与CPU的交互的关口. 系统在初始化阶段会去填写这个结构. ID ...
- 《Java并发编程的艺术》读书笔记:二、Java并发机制的底层实现原理
二.Java并发机制底层实现原理 这里是我的<Java并发编程的艺术>读书笔记的第二篇,对前文有兴趣的朋友可以去这里看第一篇:一.并发编程的目的与挑战 有兴趣讨论的朋友可以给我留言! 1. ...
- Linux内核学习笔记3——分段机制和分页机制
一 分段机制 1.什么是分段机制 分段机制就是把虚拟地址空间中的虚拟内存组织成一些长度可变的称为段的内存块单元. 2.什么是段 每个段由三个参数定义:段基地址.段限长和段属性. 段的基地址.段限长以及 ...
- 《android开发艺术探索》读书笔记(三)--分发机制和滑动冲突
接上篇<android开发艺术探索>读书笔记(二) No1: 通过MotionEvent对象可以得到点击事件发生的x和y坐标,getX/getY返回的是相对于当前View左上角的x和y坐标 ...
随机推荐
- C#-日期格式表
自定义格式表: 格式模式 说明 d 月中的某一天.一位数的日期没有前导零. dd 月中的某一天.一位数的日期有一个前导零. ...
- Two ways to create file using 'doc'.
Here are two ways to create file using 'doc' command: Method i: copy con [file name][enter key] [con ...
- 1.PhotoShop缩小图片的三种方式
先声明,本人不是高前端的,若有不当或者不合理的地方,还望前端爱好者多多指教.此处只是留作个人记录备忘. PS中有三种缩小 1.视图缩小,那方法很多缩放工具.Ctrl+"-",导航器 ...
- [转帖]SD卡&FLASH&USB
来源:http://www.cypress.com Cypress官网,了解任何芯片都应该从它的官网入手,资料一定是最多最原始的,像Ronnie学习. Cypress’s EZ-USB® FX2LP™ ...
- TOM大师脚本01-查找未建索引的外键
[oracle@Oracle11g 2016]$ cat 022201.sql column columns format a30 word_wrappedcolumn tablename forma ...
- 1、大部分社交平台接口不支持https协议。
参考文献来自:http://wiki.mob.com/ios9-%E5%AF%B9sharesdk%E7%9A%84%E5%BD%B1%E5%93%8D%EF%BC%88%E9%80%82%E9%85 ...
- corejava_chap02
//单行注释 --不能用在一行代码的中间/**/多行注释 --任何地方/** */文档注释 文档注释用在:package.class.member variables.member method. ...
- 342. Power of Four
题目: Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Example ...
- linux安装时提示发生不正常错误问题
跳过md5系统较检(每个系统版本都有一个md5编码唯一) 在安装CentOS时 提示 找不到磁盘,是否安装程序,选择安装程序进行"下一步" 提示: 发生不规则,不正常错误 原因:没 ...
- 那些年被我坑过的Python——山外有山(第四章)
装饰器: 定义: 本质是函数,(装饰其他函数)就是为其他函数添加附加功能原则: 1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 优点: 装饰器带来的最直观的好处:减少对函数的细化 ...