段选择符用来表示指向哪个段描述符,即用来在段描述符中寻址,前13位是地址,能寻0到(2^13)-1,因此段描述符表的大小就是 8192,他还牵扯到一些特权级的限制,后三位;段描述符是用来表示这个段的一些性质的,比如段基址和段长之类的。我们在寻址的时候,一般是从段选择符找 到段描述符,然后从段描述符中取出段基址,加上偏移就形成了我们要访问的地址。

8086中有4个16位的段寄存器:CS、DS、SS、ES,分别用于存放可执行代码的代码段、数据段、堆栈段和其他段的基地址。

在 80386中,有6个16位的段寄存器,但是,这些段寄存器中存放的不再是某个段的基地址,而是某个段的选择符(Selector)。因为16位的寄存器 无法存放32位的段基地址,段基地址只好存放在一个叫做描述符表(Descriptor)的表中。因此,在80386中,我们把段寄存器叫做选择符。下面 给出6个段寄存器的名称和用途:

CS 代码段寄存器

DS 数据段寄存器

SS 堆栈段寄存器

ES、FS及GS 附加数据段寄存器

下面是对选择符和描述符的介绍:(来自:www.kerneltravel.net/kernel-book/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20Linux%E8%BF%90%E8%A1%8C%E7%9A%84%E7%A1%AC%E4%BB%B6%E5%9F%BA%E7%A1%80/2.3.5.htm)

选择符与描述符表寄存器

在实模式下,段寄存器存储的是真实的段地址,在保护模式下,16位的段寄存器无法放下32位的段地址,因此,它们被称为选择符,即段寄存器的作用是用来选择描述符。选择符的结构如图2.16所示:

图 2.16选择符的结构

可 以看出,选择符有三个域:第15~3位这13位是索引域,表示的数据为0~8192,用于指向全局描述符表中相应的描述符。第二位为选择域,如果 TI=1,就从局部描述符表中选择相应的描述符,如果TI=0,就从全局描述符表中选择描述符。第1、0位是特权级,表示选择符的特权级,被称为请求者特权级RPL(Requestor Privilege Level)。只有请求者特权级RPL高于(数字低于)或等于相应的描述符特权级DPL,描述符才能被存取,这就可以实现一定程度的保护。

我 们知道,实模式下是直接在段寄存器中放置段基地址,现在则是通过它来存取相应的描述符来获得段基地址和其它信息,这样以来,存取速度会不会变慢呢?为了解 决这个问题,386的每一个段选择符都有一个程序员不可见(也就是说程序员不能直接操纵)的88位(8*8+24)宽的段描述符高速缓冲寄存器与之对应。 无论什么时候改变了段寄存器的内容,只要特权级合理,描述符表中的相应的8字节描述符就会自动从描述符表中取出来,装入高速缓冲寄存器中(还有24位其他 内容)。一旦装入,以后对那个段的访问就都使用高速缓冲寄存器的描述符信息,而不会再重新从表中去取,这就大大加快了执行的时间,如图2.17所示

图 2.17 段描述符高速缓冲寄存器的作用

由于段描述符高速缓冲寄存器的内容只有在重新设置选择符时才被重新装入,所以,当你修改了选择符所选择的描述符后,必须对相应的选择符重新装入,这样,88位描述符高速缓冲寄存器的内容才会发生变化。无论如何,当选择符的值改变时,处理器自动装载不可见部分。

下面讲一下在没有分页操作时,寻址一个存储器操作数的步骤:

1. 在段选择符中装入16位数,同时给出32位地址偏移量(比如在ESI、EDI中等等)

2. 根据段选择符中的索引值、TI及RPL值,再根据相应描述符表寄存器中的段地址和段界限,进行一系列合法性检查(如特权级检查、界限检查),该段无问题,就取出相应的描述符放入段描述符高速缓冲寄存器中。

4. 将描述符中的32位段基地址和放在ESI、EDI等中的32位有效地址相加,就形成了32位物理地址。

注意:在保护模式下,32位段基地址不必向左移4位,而是直接和偏移量相加形成32位物理地址(只要不溢出)。这样做的好处是:段不必再定位在被16整除的地址上,也不必左移4位再相加。

寻址过程如图 2.18所示。

转载于:https://www.cnblogs.com/Mr-Shadow/archive/2013/02/03/2890887.html

段选择符和段描述符的关系相关推荐

  1. linux文件描述符泄漏,文件描述符(fd)泄漏排查一篇就够了

    生产多次遇到文件描述符(fd)泄露相关的问题, 文件描述符泄漏一般引起 的现象是文件句柄数(封面图)/tcp alloc(上图)增长.文章分为两部分介绍文件描述符相关内容,第一部分介绍文件描述基础知识 ...

  2. python 属性描述符_Python属性描述符(二)

    Python存取属性的方式特别不对等,通过实例读取属性时,通常返回的是实例中定义的属性,但如果实例未曾定义过该属性,就会获取类属性,而为实例的属性赋值时,通常会在实例中创建属性,而不会影响到类本身.这 ...

  3. linux 快组描述符,Linux 进程描述符 task struct

    大家都知道进程,可是知道linux是怎么管理其进程的吗?每一个进程都有一个进程描述符,具体是task_struct结构体存储相关的信息,在linux/sched.h文件里定义,那么我们先看看linux ...

  4. CPU保护模式 分页表 描述符 段选择子

    第一:实模式下程序的运行回顾. 程序运行的实质是什么?其实很简单,就是指令的执行,显然CPU 是指令得以执行的硬件保障,那么CPU如何知道指令在什么地方呢? 对了,80x86系列是使用CS寄存器配合I ...

  5. 分段管理机制(段描述符,描述符表,段选择符)

    逻辑地址-=>线性地址-=>物理地址 前面我们提到了当使用80x86微处理器时,有三种不同的地址: 逻辑地址(logical address):包含在机器语言指令中用来指定一个操作数或一条 ...

  6. 【2021.03.10】段描述符与段选择子、GDT、LDT

    要点回顾 前文提到,当写入一个段寄存器的时候,只给了一个16位的数值,但是段寄存器有96位. 那么剩下的80位从哪里来的?这个16位的数值是随便写的吗? Windbg指令 指令 功能 r 查看寄存器 ...

  7. 数据段描述符和代码段描述符(一)——《x86汇编语言:从实模式到保护模式》读书笔记10

    一.段描述符的分类 在上一篇博文中已经说过,为了使用段,我们必须要创建段描述符.80X86中有各种各样的段描述符,下图展示了它们的分类. 看了上图,你也许会说:天啊,怎么这么多段描述符啊!我可怎么记住 ...

  8. (2) [保护模式]段描述符

    段描述符 1. 段选择子 2. 段描述符 注解: 段选择子index的使用 查GDT表填充段寄存器 向上拓展与向下拓展 一致代码段与非一致代码段 隐式堆栈访问 如果文中有错误,还请指正 1. 段选择子 ...

  9. 任务状态段TSS及TSS描述符、局部描述符表LDT及LDT描述符

    1.TSS介绍 在一个多任务环境中,当发生了任务切换,需保护现场,因此每个任务的应当用一个额外的内存区域保存相关信息,即任务状态段(TSS):TSS格式固定,104个字节,处理器固件能识别TSS中元素 ...

最新文章

  1. spring配置文件中非bean标签的原理解析
  2. 章节六、2-异常---运行时异常
  3. 市场需求才是比特币优化的参考标准
  4. mysql+yes数据类型,怎样修改mysql列的数据类型?
  5. php输入安全验证漏洞,PHP 输入验证错误漏洞
  6. 计算机网络实验五静态路由与RIP协议,实验锐捷实训8-1--配置静态路由和rip协议...
  7. 还不知道如何使用 IDEA ?教你三招快速掌握 IDEA
  8. 三菱触摸屏程序和三菱PLC程序,程序都有注释
  9. wps文字表格制作拼音田字格模板_WPS文字怎么制作田字格 WPS文字制作田字格的方法...
  10. 就在昨天,张一鸣宣布卸任字节跳动CEO!
  11. BTA | 卢亮:数字货币开启电商红利新纪元
  12. 戴尔便携式计算机 故障,老DELL笔记本电脑常见故障“通病”问题
  13. 简单excel饼状图怎么做,bi工具怎么做饼状图
  14. 说说Redis的常用应用场景
  15. WdatePicker常用配置属性
  16. 手机app视频平台开发怎么做
  17. nacos-server1.4.1linux和windows版本下载
  18. 主机如何连接到URSim中的客户端接口
  19. EAST托卡马克上光纤电流传感器的研制与实验应用笔记1
  20. ubuntu18.04 分辨率设置

热门文章

  1. 基于S函数的BP神经网络PID控制器及simulink仿真
  2. python编写系统遇到的问题_python编写时遇到的小问题
  3. Python中文本文件的读取(包含指针移动)
  4. Jmeter系列之Jmeter+Grafana+InfluxDB实时监控
  5. 有哪些指标可以描述两个图(graph)的相似度?
  6. clean,compile,build,install,package区别
  7. YAM将于明日在DegenerativeFinance上发布uSTONKS
  8. 波卡二层扩容协议Plasm Network发布v1.7.0-dusty版本
  9. SAP License:雾里看花系列——SAP顾问应该脱离”保姆”的角色
  10. 信贷中的SAS,一份关于它的系统性内容|含案例