7.3 任务寄存器(Task Register)

任务寄存器(TR)通过指向一个TSS,寻址了当前正在执行的任务。图7-3显示了处理器如何访问当前任务的TSS。

任务寄存器有一个“可见部分”(也就是说,可以被指令读写的部分)和一个“不可见部分”(由处理器操作,对应着可见部分,不可以通过指令来读写)。可见部分的选择子部分选择了一个在GDT中的TSS。处理器用不可见部分来缓存TSS描述符中的基址和界限值。把基址和界限保存在一个寄存器中可以提高任务的执行性能,因为处理器不必每次都访问内存来得到当前任务TSS的这些值。

LTR指令和STR指令是用来更改和读取任务寄存器的可见部分的。两条指令都有一个操作数,一个在内存中的或在通用寄存器中的16-位选择子。

LTR(Load task register)加载一个选择子操作数到任务寄存器的可见部分,这个选择子必须指定一个在GDT中的TSS描述符。LTR也用TSS中的信息来加载任务寄存器的不可见部分。LTR是一条特权指令,只能当CPL是0时才能执行这条执令。LTR一般是当操作系统初始化过程执行的,用来初始化任务寄存器。以后,任务寄存器(TR)的内容由每次任务切换来改变。

STR(Store task register)存储任务寄存器的可见部分到一个通用寄存器或者到一个内存的字内。STR不是特权指令。