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

时间:2024-05-31 08:21:36

主要是TSS、TSS描述符、TR和任务门描述符学习总结
1 任务状态段(TSS)
任务状态段(Task-State Segment(TSS)),保存任务状态信息的系统段为任务状态段。图7-2描述32位CPU的TSS信息。TSS主要分为动态字段和静态字段。
TSS(任务状态段) TSS描述符 任务寄存器(TR) 任务门描述符 学习总结
  在任务切换过程中当任务挂起时,处理器会更新动态字段,动态字段有:
 (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)。
TSS(任务状态段) TSS描述符 任务寄存器(TR) 任务门描述符 学习总结

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的访问。
TSS(任务状态段) TSS描述符 任务寄存器(TR) 任务门描述符 学习总结

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