1.TSS介绍

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

2.GDT、TSS、LDT对比

GDT/LDT/TSS 对比 内容
GDT(全局描述符表) 整个系统只有一个GDT;
通过全局描述符寄存器GDTR进行定位;
段描述符
LDT(局部描述符表) 每个任务都配有一个LDT,LDT基地址、界限等信息存放在任务对应的TCB中;
通过局部描述符寄存器GDTR进行定位;
将LDT视为一种特殊的内存段,则可为每一个LDT创建一个LDT描述符,将描述符存放到GDT中;
访问LDT时:GDT选择子==>访问GDT==>LDT描述符==>访问LDT(==>加载到LDTR);
段描述符
TSS(任务状态段) 每个任务都配有一个TSS,TSS基地址、界限等信息可以存放在任务对应的TCB中;
通过任务寄存器TR进行定位;
将TSS视为一种特殊的内存段,则可为每一个TSS创建一个TSS描述符,将描述符存放到GDT中;
访问TSS时:GDT选择子==>访问GDT==>TSS描述符==>访问TSS(==>加载到TR);
保存任务相关信息

各部分关系图:

3.任务寄存器TR与局部描述符表寄存器LDTR

TR,LDTR总指向当前任务的TSS,LDT。

TR(LDTR)寄存器包含16位TR(LDTR)描述符选择子+描述符高速缓存器;
加载TR和LDT分别使用指令ltr和lldt:

//操作数可以为16位通用寄存器或16位单元内存地址,不论寄存器还是内存单元,内容为16位TSS(LDT)选择子
ltr r/m16
lldt r/m16

将TSS(LDT)选择子加载到TR(LDTR)后,CPU访问GDT==>得到TSS(LDT)描述符==>将段界限、基址加载到TR(LDTR)高速缓存部分;若为TSS则TSS中’B’置1即忙;

3.TSS描述符格式

TSS描述符存放在GDT中;

TYPE中'B':忙,刚创建时应为0,任务开始执行,挂起时为1,由硬件管理,防止切换任务切到自己;TSS描述符DPL必须为0,只有CPL为0能调用;

4.LDT描述符格式

LDT描述符存放在GDT中,在GDT中的选择子可以存入相应的TCB中;

段基地址指示LDT在内存中的起始地址;
段界限指示LDT的范围;
S-TYPE固定为'0-0010',表明为LDT描述符;

5.TSS结构

组成 作用
0:任务链接域 前一个任务的TSS描述符的GDT选择子
SS0,SS1,SS2
ESP0,ESP1,ESP2
分别是0,1,2特权级的栈段选择子和对应栈段的栈顶指针;
该部分应由任务创建者填写,且属于一般不变的静态部分,用于当通过门进行特权级转移时切换的栈
28:CR3 分页相关
32~92部分 处理器各寄存器快照,用于任务切换时,保存状态以便将来恢复现场;
多任务环境中,每创建一个任务,OS至少要填写EIP,EFLAGS,ESP,CS,SS,DS,ES,FS,GS,当该任务第一次执行时,处理器从这加载初试环境,并从CS:EIP处开始执行,从此运行期间由固件更改;
96:LDT段选择子 即当前任务的LDT描述符的GDT选择子;
100:T 用于软件调试,在多任务环境中,若为1,每次切换到该任务引发一次调试异常中断;
I/0映射起始地址 用于决定当前任务是否可以访问特定硬件端口,填TSS段界限(103)即代表不用;

任务状态段TSS及TSS描述符、局部描述符表LDT及LDT描述符相关推荐

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

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

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

    最近在学习哈工大操作系统时碰到了TSS的相关知识,感觉还牵涉到了GDT.LDT的相关知识,这里大概把相关的知识总结一下,以供以后参考 全局描述符表GDT 在计算机从实模式(16位)转换到保护模式(32 ...

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

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

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

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

  5. 汇编实例解析--利用tcb,tss,全局tss,ldt管理任务实现任务切换

    1.引导程序 ; 职责:; 1.完成实模式到保护模式切换; 2.安装保护模式下4个基础段描述符; 3.将指定位置物理磁盘程序加载到指定物理内存位置; 4.为加载的程序构造&安装3个段描述符; ...

  6. USB描述符(附加USB HID报告描述符 )

    USB描述符介绍 USB描述符是主机识别USB设备的依据,主机根据设备的描述符来加载相应的驱动 USB描述符的作用 USB描述符信息存储在USB设备中,在枚举过程中,USB主机会向USB设备发送Get ...

  7. t’触发器真值表和状态方程_触发器的逻辑功能通常可用 特征方程 、 状态转换图 、 功能真值表 和 时序波形图 等多种方法进行描述。 ( )_学小易找答案...

    [单选题]电气装置控制 ,只有轿门和所有层门完全关闭时,电梯才能正常运行. [多选题]公共物品的特征? [判断题]触发器按动作特点可分为基本型.异步型 .主从型和边沿型. ( ) [判断题] [论述题 ...

  8. 统计单词的数量 描述 输入一个英文句子,以回车符结束,单词间以空格分隔,标点符号后跟至少一个空格,统计并输出单词的个数(仅统计单词,数字按单词计,不计算标点符号,重复单词出现几次就统计几次)。‪‬‪‬

    统计单词的数量 描述 输入一个英文句子,以回车符结束,单词间以空格分隔,标点符号后跟至少一个空格,统计并输出单词的个数(仅统计单词,数字按单词计,不计算标点符号,重复单词出现几次就统计几次).‪‬‪‬ ...

  9. gdt描述_全局描述符表GDT

    写在前面 添油加醋系列第二弹--剖析GDT 话说C语言的话除了刷刷OJ外,就是用来实现操作系统这个大头了.C语言比C++少了很多很多臃肿的语法特性,写起来非常优美(至少写操作系统是这样的).虽说C++ ...

最新文章

  1. 仿射加密简述和Win32版本实现
  2. pycharm 如何导入、导出设置?
  3. Java nio Socket非阻塞模式
  4. 两路虚拟化服务器,当四核多路服务器碰上虚拟化
  5. Python数据可视化之Excel气泡图
  6. 物联网可能面临灾难性安全风险
  7. Shiro入门视频课程——笔记(一)
  8. (六)洞悉linux下的Netfilteriptables:如何理解连接跟踪机制?(2)
  9. 区块链java开发教程,JAVA区块链项目实战视频课程
  10. Pygame教程系列三:绘制文本篇
  11. 微信小程序 云开发 图片内容安全 珊瑚图片内容安全 api
  12. webpack-theme-color-replacer自定义element-ui主题
  13. USB CCID理解
  14. Hadoop大数据原理(2) - 分布式文件系统HDFS
  15. python递归函数例题_递归案例python
  16. vue 2.0使用tinymce-vue富文本
  17. 线性规划(matlab篇)
  18. 杭电2001_杭电考研851数据结构2001-2015年真题
  19. QT获取微秒级时间戳
  20. 《请别叫我奥特曼,我只是你望尘莫及的神话》

热门文章

  1. 高级着色语言(HLSL) 基础
  2. 山西省计算机专业的专科排名,2021年山西十大专科学校排名 山西最好的高职院校...
  3. 电商行业市场行情解析,shopee虾皮平台讲解
  4. LoadRunner(一)Win10系统下LoadRunner12的安装下载
  5. 小学计算机反思案例,小学数学有效教学案例及反思
  6. 围观!物联网卡的销售渠道有哪些?
  7. 矩阵中的主元是什么意思(在消去过程中起主导作用的元素)
  8. xctf攻防世界 REVERSE 高手进阶区 Guess-the-Number
  9. 《第七天》---By余华
  10. 厦门理工学院 oj-1184 默罕默德的炸弹