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. eclipse alt + '/' not working.

    searching for google,I observed that the 'content assist' shortcut key was take placed with 'ctrl + ...

  2. Web性能压力测试之Webbench使用详解

    Webbench是知名的网站压力测试工具,它是由Lionbridge公司(http://www.lionbridge.com)开发.Webbench能测试处在相同硬件上,不同服务的性能以及不同硬件上同 ...

  3. 分享最近写的 两条sql语句

    1. 搭建基本环境 插入测试数据 insert into jgdm (jgdm,jgmc)  values('12300000000','河南省');insert into jgdm (jgdm,jg ...

  4. C# 异步操作

    在程序中,普通的方法是单线程的.但中途如果有大型的操作,比如读取大文件,大批量操作数据库,网络传输等,都会导致程序阻塞,表现在界面上就是程序卡或者死掉,界面元素不动了,不响应了.C#异步调用很好的解决 ...

  5. java通过移位转16进制

    public class Main { public static void main(String []args) { Main main = new Main(); System.out.prin ...

  6. Java线程(学习整理)--4---一个简单的生产者、消费者模型

     1.简单的小例子: 下面这个例子主要观察的是: 一个对象的wait()和notify()使用情况! 当一个对象调用了wait(),那么当前掌握该对象锁标记的线程,就会让出CPU的使用权,转而进入该对 ...

  7. printf 缓冲区问题

    突然发现printf的问题,看了这个很有意思,学习一下 转自:http://blog.csdn.net/shanshanpt/article/details/7385649 昨天在做Linux实验的时 ...

  8. Web控件

    Web控件可分三类 HTML控件 html服务器控件是在HTML控件的基础上,额外增加了一个在当前页面唯一的ID属性值和一个runat = "server" 属性html服务器控件 ...

  9. 简单的html5 File base64 图片上传

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. github克隆项目中的子模块submodule时遇到的问题

    GitHub真是个开源大宝库,不只能学习代码,还能学习git的使用! 最近在研究Off-the-Record-iOS项目(https://github.com/chrisballinger/Off-t ...