|
但是,在任务切换时,处理器并不把换出任务但是的寄存器CR3和LDTR的内容保存到TSS中的地址映射寄存器区域。事实上,处理器也从来不向该区域自动写入。因此,如果程序改变了LDTR或CR3,那么必须把新值人为地保存到TSS中的地址映射寄存器区域相应字段中。可以通过别名技术实现此功能。
4.链接字段
链接字段安排在TSS内偏移0开始的双字中,其高16位未用。在起链接作用时,地16位保存前一任务的TSS描述符的选择子。
如果当前的任务由段间调用指令CALL或中断/异常而激活,那么链接字段保存被挂起任务的 TSS的选择子,并且标志寄存器EFLAGS中的NT位被置1,使链接字段有效。在返回时,由于NT标志位为1,返回指令RET或中断返回指令IRET将使得控制沿链接字段所指恢复到链上的前一个任务。
5.其它字段
为了实现输入/输出保护,要使用I/O许可位图。任务使用的I/O许可位图也存放在TSS中,作为TSS的扩展部分。在TSS内偏移66H处的字用于存放I/O许可位图在TSS内的偏移(从TSS开头开始计算)。关于I/O许可位图的作用,以后的文章中将会详细介绍。
在TSS内偏移64H处的字是为任务提供的特别属性。在80386中,只定义了一种属性,即调试陷阱。该 属性是字的最低位,用T表示。该字的其它位置被保留,必须被置为0。在发生任务切换时,如果进入任务的T位为1,那么在任务切换完成之后,新任务的第一条指令执行之前产生调试陷阱。
6.用结构类型定义TSS
根据上图给出的任务状态段TSS的结构,可定义如下的TSS结构类型:
TSS STRUC
TRLink DW 0
DW 0
TRESP0 DD 0
TRSS0 DW 0
DW 0
TRESP1 DD 0
TRSS1 DW 0
DW 0
TRESP2 DD 0
TRSS2 DW 0
DW 0
TRCR3 DD 0
TREIP DD 0
TREFlag DD 0
TREAX DD 0
TRECX DD 0
TREDX DD 0
TREBX DD 0
TRESP DD 0
TREBP DD 0
TRESI DD 0
TREDI DD 0
TRES DW 0
DW 0
TRCS DW 0
DW 0
TRSS DW 0
DW 0
TRDS DW 0
DW 0
TRFS DW 0
DW 0
TRGS DW 0
DW 0
TRLDTR DW 0
DW 0
TRTrip DW 0
TRIOMap 本文章更多内容:<<上一页 - 1 - 2 - 3 - 4 - 5 - 下一页>> |