最近在学习哈工大操作系统时碰到了TSS的相关知识,感觉还牵涉到了GDT、LDT的相关知识,这里大概把相关的知识总结一下,以供以后参考

全局描述符表GDT
在计算机从实模式(16位)转换到保护模式(32位)的过程中,段寄存器却一直是16位,只能访问64KB内存,但是保护模式下的内存范围是4GB,16位段寄存器就能够访问所有内存的秘诀就在于GDT这一结构,保护模式下段寄存器中保存的不再是段基址,而是是段选择子,通过段选择子在GDT表中索引段描述符,而段描述符当中存储着真正的段基址(32位),因此全局描述符表GDT中存储的段描述符就相当于内存段的身份证,记录着一个内存段的各种信息(前面说的段基址只是段描述符信息的一部分)。而TSS和LDT都存储在内存中,因此都需要在GDT表中注册自己的描述符。下面的图可以表示出三者之间的关系。

硬件为为多任务提供原生支持,最主要的提供的解决方案就是LDT和TSS
1.LDT
LDT和GDT是对应的,GDT是全局描述符表,是保护模式下内存段(数据段、代码段等)的登记表,LDT是局部描述符表,是任务私有的结构,一个任务对应一个LDT。LDT同样存储在内存中的一段区域中,因此也需要在GDT中注册,拥有自己的描述符来描述某任务的LDT的起始地址及偏移量大小,这样才能够在之后通过段选择子准确访问到它。
但是因为每加入一个任务都要在GDT中添加新的LDT描述表,当任务运行时,该任务的LDT位于LDTR指向的地址,因此每切换一个任务都要重新加载LDTR,非常麻烦,因此现在很少使用LDT作为多任务的切换方式了

2.TSS
(1)TSS必须在GDT中注册描述符
TSS也是内存中的一段内存,和其他普通段一样,也要在GDT中注册自己的描述符,即TSS描述符,因此TSS和LDT一样,都必须要在GDT中注册描述符。
(2)TSS与特权级紧密相关。
TSS是每一个任务都有的结构,用于每一个任务的标识,相当于任务的身份证,其中低28字节的ss字段和esp字段分别表示0-2特权级对应栈的段选择子和栈指针。当处理器由低向高特权级转移时,低特权级的栈地址会被压入高特权级的栈中,所以当使用retf或iret指令时,处理器由高向低特权级转移,就会在高特权级的栈中取出低特权级栈的地址。
(3) TSS与多任务处理息息相关
每个任务都被关联了一个任务状态段(TSS),当加载新任务时,CPU自动把当前任务的状态存入当前任务的TSS,然后将新任务的TSS中的数据加载到对应寄存器,这样就实现了任务切换,TR寄存器就是专门存储TSS选择子的寄存器,它始终指向当前正在运行的任务。

全局描述表GDT、任务状态段TSS、局部描述表LDT之间的关系相关推荐

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

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

  2. 任务状态段TSS和TSS描述符

    摘自<Intel® 64 and IA-32 Architectures Software Developer's Manual Combined Volumes1, 2A, 2B, 2C, 2 ...

  3. 一步步编写操作系统 53 任务状态段TSS介绍

    操作系统是利用PCB来维护所有任务的,包括进程和线程,但cpu提供的是TSS,linux系统可没用它,因为效率太低.但是还是要了解下TSS才清楚操作系统中某些操作的原因. 本节中所讲的特权级与它有着密 ...

  4. 数据库表(字段类型、约束、截断表、修改表字段、重命名表)

    字段类型: 在这里只列举一些常用的字段类型: 整数类型:int(Integer):普通大小的整数 小数类型: float(m,d):单精度浮点数,m表示数字长度,d表示小数位数,例如float(5,2 ...

  5. 一步步编写操作系统 61 任务状态段 TSS

    I/O位图是位于TSS中的,它可以存在也可以不存在,它只是用来设置对某些特定端口的访问,没有它的话便默认为禁止访问所有端口.正是由于它可有可用,所以TSS的段界限TSS limit(即实际大小-1)并 ...

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

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

  7. x86保护模式 任务状态段和控制门

    x86保护模式    任务状态段和控制门 每个任务都有一个任务状态段TSS     用于保存任务的有关信息     在任务内权变和任务切换时  需要用到这些信息    任务内权变的转移和任务切换  一 ...

  8. gdt描述_全局描述符表(GDT)详解

    在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descriptor Table). 为什么要有GDT Real Mode编程模型 我们首先考虑一下在Real ...

  9. 全局描述符表(GDT)——《x86汇编语言:从实模式到保护模式》读书笔记09

    在进入保护模式之前,我们先要学习一些基础知识.今天我们看一下全局描述符表(Global Descriptor Table, 简称GDT). 同实模式一样,在保护模式下,对内存的访问仍然使用段地址加偏移 ...

最新文章

  1. Linux网络 - 数据包的发送过程
  2. 命保住了!五年时间,我们也搞了一个技术中台
  3. 软件单元测试工具比较
  4. 理解SSL必须要理解的密码技术
  5. 修改系统路径 linux,Linux修改sudo的PATH路径的解决方法
  6. 深度案例 | TO B 企业如何从 0 到 1 实现数据驱动?
  7. sports at liverpool
  8. mysql截取栏目字符_mysql截取小数点后1位
  9. C/C++中输入带空格的字符串 string 转 char*
  10. 字符串后面去0、补0
  11. 编写程序乘法口诀表C语言,陈广川问:c语言编程九九乘法口诀表 怎样用c语言写九九乘法口诀表?...
  12. oracle linux6 u盘安装,U盘安装RHEL6
  13. 游戏桌面壁纸|英雄联盟,热爱游戏的朋友看这里
  14. 大学生医保的报销范围
  15. python中不同进制的整数之间可以直接运算_python学习第三天总结(进制与位运算,)...
  16. C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编
  17. 人口普查中应该具备的计算机知识,人口普查知识问答
  18. JRebel设置快捷键+激活方式
  19. Tuxera NTFS for Mac(mac读写NTFS磁盘工具)
  20. 计算机9针485接口,串口RS232__485的9针引脚定义

热门文章

  1. 基于easyexcel的MySQL百万级别数据的excel导出功能
  2. mysql tee使用_MYSQL tee的功能测试
  3. 打字练习软件——JavaFx
  4. pr premiere内存不足
  5. 操作系统的内存释放原理
  6. oracle 同义词,表空间,表分区
  7. Fiddler抓包指南:结合Proxifier工具
  8. cad二次开发 java_基于.NET的CAD二次开发学习笔记一:CAD开发入门
  9. Cad二次开发(三)
  10. 图片加水印转网络图片(COS)