7.8.1 任务间的切换
Pentium或80486等处理器均支持多任务,这就意味着系统中同时存在着多个任务,各任务之间可相互切换。 1.任务状态段 任务状态段TSS是内存的一个区域,其中存放着一个任务的全部运行信息。TSS的格式如图7.30所示。 由图730可以看到,TSS主要包括如下几部分: ① 各特权级(0~2级)的堆栈指针。 ② LINK存放父任务的选择符,或者说它是返回到那个任务(调用任务)的选择符。 ③ CR3用于存放CR3的内容:页目录基地址及PCD,PWT等。 ④ LDT选择符的作用是,任务利用LDT选择符,可以找到自己的LDT。 ⑤ T位用于调试。 ⑥I/O位图区有8K×8bit,共64K位,分别表示处理器可寻址的64K个I/O口。 ⑦位图偏移量。 ⑧保留部分。
2. 任务的切换 任务的切换可利用下述4种方法实现: ①用长JMP/CALL指令的目的选择器访问TSS描述符(忽略目的地址的偏置量); ②当标志字的NT位为“1”,执行IRET指令时,TSS内的返回连接选择器作为新任务的TSS选择器; ③用长JMP/CALL指令的目的选择器访问任务门(忽略目的地址的偏移量),新任务的TSS选择器由任务门加载; ④中断发生,访问IDT中的任务门,新任务的TSS选择器由任务门加载。 若经检查认为可以进行任务切换,则需进行如下处理: 第一步,将离去任务的状态存放在离去任务的TSS中。 第二步,将新任务的TSS所对应的选择符和描述符分别装入TR和相应的描述符寄存器中,并将描述符中的类型码由9(可用TSS描述符)变为B(处于忙状态的描述符)。 第三步,将现行任务的TSS中的通用寄存器、段寄存器、EFLAGS、CR3和LDT选择符装入处理器中。