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 分段机制(读书笔记)的更多相关文章

  1. mysql锁机制 读书笔记

    目录 MySQL锁机制 1.什么是锁 2.lock与latch 3.InnoDB存储引擎中的锁 3.1锁的类型 3.2 一致性非锁定读 3.3 一致性锁定读 4 锁的算法 4.1行锁的3中算法 4.2 ...

  2. 《Java并发编程实战》第十五章 原子变量与非堵塞同步机制 读书笔记

    一.锁的劣势 锁定后假设未释放.再次请求锁时会造成堵塞.多线程调度通常遇到堵塞会进行上下文切换,造成很多其它的开销. 在挂起与恢复线程等过程中存在着非常大的开销,而且通常存在着较长时间的中断. 锁可能 ...

  3. 副本机制与副本同步------《Designing Data-Intensive Applications》读书笔记6

    进入到第五章了,来到了分布式系统之中最核心与复杂的内容:副本与一致性.通常分布式系统会通过网络连接的多台机器上保存相同数据的副本,所以在本篇之中,我们来展开看看如何去管理和维护这些副本,以及这个过程之 ...

  4. 《android开发艺术探索》读书笔记(十)--Android的消息机制

    接上篇<android开发艺术探索>读书笔记(九)--四大组件 No1: 消息队列MessageQueue的内部存储结构并不是真正的队列,而是采用单链表的数据结构来存储消息列表,因为单链表 ...

  5. 《android开发艺术探索》读书笔记(二)--IPC机制

    接上篇<android开发艺术探索>读书笔记(一) No1: 在android中使用多进程只有一种方法,那就是给四大组件在AndroidMenifest中指定android:process ...

  6. Windows内核读书笔记——Windows异常分发处理机制

    本篇读书笔记主要参考自<深入解析Windows操作系统>和<软件调试>这两本书. IDT是处理异常,实现操作系统与CPU的交互的关口. 系统在初始化阶段会去填写这个结构. ID ...

  7. 《Java并发编程的艺术》读书笔记:二、Java并发机制的底层实现原理

    二.Java并发机制底层实现原理 这里是我的<Java并发编程的艺术>读书笔记的第二篇,对前文有兴趣的朋友可以去这里看第一篇:一.并发编程的目的与挑战 有兴趣讨论的朋友可以给我留言! 1. ...

  8. Linux内核学习笔记3——分段机制和分页机制

    一 分段机制 1.什么是分段机制 分段机制就是把虚拟地址空间中的虚拟内存组织成一些长度可变的称为段的内存块单元. 2.什么是段 每个段由三个参数定义:段基地址.段限长和段属性. 段的基地址.段限长以及 ...

  9. 《android开发艺术探索》读书笔记(三)--分发机制和滑动冲突

    接上篇<android开发艺术探索>读书笔记(二) No1: 通过MotionEvent对象可以得到点击事件发生的x和y坐标,getX/getY返回的是相对于当前View左上角的x和y坐标 ...

随机推荐

  1. PHP上传原理及应用

    概要 1.FORM表现enctype属性 2.$_FILES系统函数 3.move_uploaded_file函数 4.is_uploaded_file函数 1.FORM标签的enctype属性 只有 ...

  2. 项目报错,tomcat中引起

    1.项目报错,但发现工程并没有错.此刻错误应该定位如下,即工程里面引用的jar可能有错,可能是路劲变了....

  3. if elsif;报错;new赋值

    1. IF INSERTING THEN          BEGIN 中间不能为空          END;ELSIF DELETING THEN         BEGIN          E ...

  4. 十六、C# 常用集合类及构建自定义集合(使用迭代器)

    常用集合类及构建自定义集合 1.更多集合接口:IList<T>.IDictionary<TKey,TValue>.IComparable<T>.ICollectio ...

  5. mac 连接linux

    1.ssh 通过ssh 的方式直接连接linux ssh name@ip -22 例:ssh  zyc@192.168.1.100 -22 这个的前提是linux 要开启ssh 服务 先看一下linu ...

  6. jacob 操作word

    1. 首先下载jacob-1.18.zip,解压后有两个文件jacob.jar 和 jacob.dll.需要把jacob.jar放到你工程的classpath中并且把jacob.dll放到jdk的bi ...

  7. QT QSettings 操作(导入导出、保存获取信息)*.ini文件详解

    1.QSettings基本使用 1.1.生成.ini文件,来点实用的代码吧. QString fileName;fileName = QCoreApplication::applicationDirP ...

  8. ZOJ 刷题记录 (。・ω・)ノ゙(Progress:31/50)

    [热烈庆祝ZOJ回归] P1002:简单的DFS #include <cstdio> #include <cstring> #include <algorithm> ...

  9. 将fastjson元素转化为String[]

    在fastjson中如果JSONObject中添加了 String[] 类型的元素 例如 JSONObject jo = new JSONObject(); String[] array = {&qu ...

  10. php开发利器

    phpstorm 当前版本2016.1 之前用的为Zend studio,比之notepad++确实方便很多,不过很多方面还是不方便的,比如定位文件,上传下载到svn什么的. 看到phpstorm新版 ...