TSS(任务状态段) TSS描述符 任务寄存器(TR) 任务门描述符 学习总结

2023-10-12 16:30

本文主要是介绍TSS(任务状态段) TSS描述符 任务寄存器(TR) 任务门描述符 学习总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

主要是TSS、TSS描述符、TR和任务门描述符学习总结
1 任务状态段(TSS)
任务状态段(Task-State Segment(TSS)),保存任务状态信息的系统段为任务状态段。图7-2描述32位CPU的TSS信息。TSS主要分为动态字段和静态字段。
这里写图片描述
  在任务切换过程中当任务挂起时,处理器会更新动态字段,动态字段有:
 (1)通用寄存器字段—任务切换之前,EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI寄存器状态。
 (2)段选择符字段—任务切换之前,ES,CS,SS,DS,FS,GS寄存器保存的段选择符。
 (3)EFLAGS寄存器字段—任务切换之前,EFAGS寄存器的状态。
 (4)EIP字段—任务切换之前,EIP寄存器的状态。
 (5)先前任务链接字段—包含先前任务的TSS的段选择符。该字段禁止任务通过使用IRET指令返回先前的任务。
当任务创建时会创建静态字段,静态字段可读,不可写:
 (1)LDT段选择符字段—包含任务LDT的段选择符。
 (2)CR3控制寄存器字段—包含任务使用的页目录的物理基地址。CR3也被称为page directory base register(PDBR)页目录基址寄存器。
 (3)特权级0,1,2栈指针字段—包含栈段(因为任务运行在不同特权级下,需要不同的栈段,故相应的SS0,SS1,SS2)的段选择符的逻辑地址和栈的偏移(不同特权级相应的ESP0,ESP1,ESP2)。在特定的任务中该字段是静态的,但是如果栈切换发生在单个任务中,SS和EIP的值就会改变。
 (4)T标志(调试陷阱,100字节,位0)—如果设置,当切换任务时,会引起调试异常。
 (5)I/O映射基址字段—是16位的偏移,包含从I/O权限位图和中断导向表中TSS的基地址。

2 TSS 描述符
就像其它段描述符描述段的一些性质一样,TSS描述符用来描述TSS的某些性质。TSS描述符仅可能存放在GDT中,不能存放在LDT或IDT中。32位模式下,TSS描述符格式如下:
当G标志是0时,界限字段的值大于或等于67H(103字节),比TSS(104字节)的大小少一个字节。如果切换到任务的TSS界限字段小于67H会产生无效TSS异常(#TS)。
这里写图片描述

3 任务寄存器(task register)
任务寄存器拥有当前任务的TSS的段选择符和段描述符(32位基地址,16位段界限和描述符参数)。任务寄存器具有可见部分(软件可以读和写)和不可见部分(只能被处理器访问,软件不能读写)。可见部分中的段选择符指向GDT中TSS描述符。不可见部分缓存TSS的描述符。指令LTR(加载任务寄存器)和STR(保存任务寄存器)加载和保存任务寄存器的可见部分。LTR指令让任务寄存器加载TSS描述符的段选择符,该指令只能运行在特权级0,该指令通常用来系统初始化时初始化任务寄存器。指令STR可以将任务寄存器的可见部分保存到通用寄存器或内存中。该指令可以运行在任何特权级。
系统上电或复位时,段选择符和基址指向默认值0,界限设为FFFFH。
下图描述了,任务寄存器中可见部分的段选择符加载TSS描述符的段选择符,访问GDT中TSS描述符,通过TSS描述符访问TSS。同时TSS描述符中的基址和界限字段的值又加载到任务寄存器的不可见部分的基址和界限字段,这样做的目的是下次访问该TSS时可以不用通过GDT中的TSS描述符访问TSS,而是直接通过缓存在任务寄存器中的基址和界限字段访问TSS,加快了系统对TSS的访问。
这里写图片描述

4 任务门描述符(Task-Gate Descriptor)
任务门描述符用来间接地、保护引用任务。结构如下图。任务门描述符可以放在GDT,LDT和IDT中。任务门描述符中的TSS段选择符字段指向GDT中的TSS描述符。在任务切换过程中,任务门描述符中DPL字段控制访问TSS描述符。当程序通过任务门调用和跳转到一个任务时,CPL和门选择符的RPL字段必须小于等于任务门描述符中的DPL。
这里写图片描述
任务可以通过任务门描述符或TSS描述符被访问。LDT中任务门,GDT中的任务门和IDT中任务门可指向相同的任务,如下图:
这里写图片描述
good luck!

这篇关于TSS(任务状态段) TSS描述符 任务寄存器(TR) 任务门描述符 学习总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/197076

相关文章

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Linux之计划任务和调度命令at/cron详解

《Linux之计划任务和调度命令at/cron详解》:本文主要介绍Linux之计划任务和调度命令at/cron的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux计划任务和调度命令at/cron一、计划任务二、命令{at}介绍三、命令语法及功能 :at

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

SpringSecurity JWT基于令牌的无状态认证实现

《SpringSecurityJWT基于令牌的无状态认证实现》SpringSecurity中实现基于JWT的无状态认证是一种常见的做法,本文就来介绍一下SpringSecurityJWT基于令牌的无... 目录引言一、JWT基本原理与结构二、Spring Security JWT依赖配置三、JWT令牌生成与