TSS任务状态段的问题
任务状态段TSS中有一个区域叫做“内层堆栈指针区域”,书上对其有如下2段解释:
“TSS的内层堆栈指针区域中有三个堆栈指针,它们都是48位的全指针(16位的选择子和32位的偏移),分别指向0级、1级和2级堆栈的栈顶,依次存放在TSS中偏移为4、12及20开始的位置。当发生向内层转移时,则把适当的堆栈指针装入到SS及ESP寄存器以变换到内层的堆栈,外层堆栈的指针保存在内层堆栈中。没有指向3级堆栈的指针,因为3级是在最外层的,所以任何一个向内层的转移都不可能转移到3级。
但是,当特权级由内层向外层变换时,并不把内层堆栈的指针保存到TSS的内层堆栈指针区域。这表明向内层转移时,总是把内层堆栈认为是一个空栈。因此,不允许发生同级内层转移的递归,一旦发生向某级内层转移,那么返回到外层的正常途径是相匹配的向外层返回。”
可能是本人水平有限,这两段话我实在是没有理解:
1.在第一段中,“当发生向内层转移时,......,外层堆栈的指针保存在内层堆栈中”,最后半句“外层堆栈的指针保存在内层堆栈中”是什么意思呢?是不是作者的笔误,应该为“保存到‘内层堆栈指针区域’中”?如果不是笔误,那为什么要“保存在内层堆栈中”呢?
2.在第二段中,“当特权级由内层向外层变换时,并不把内层堆栈的指针保存到TSS的内层堆栈指针区域。这表明向内层转移时,总是把内层堆栈认为是一个空栈”,为什么“当特权级由内层向外层变换时,并不把内层堆栈的指针保存到TSS的内层堆栈指针区域”就能够表明“向内层转移时,总是把内层堆栈认为是一个空栈”呢?有因果关系么?
3.还是第二段,最后一句话“因此,不允许发生同级内层转移的递归,一旦发生向某级内层转移,那么返回到外层的正常途径是相匹配的向外层返回”,这句完全不理解,首先认为前半句话“不允许发生同级内层转移的递归”和后半句话“一旦发生向某级内层转移,那么返回到外层的正常途径是相匹配的向外层返回”没有逻辑关系,其次就是前半句话和后半句话的含义都没理解——为什么“不允许发生同级内层转移的递归”(这里,“同级内层转移的递归”的含义不懂),又为什么“一旦发生向某级内层转移,那么返回到外层的正常途径是相匹配的向外层返回”(这里,“相匹配的向外层返回”的含义也没弄清楚)。
大家看了我的问题之后,相信应该知道,我对这个“内层堆栈指针区域”根本就没理解阿,希望高手能够给我指点一下,先谢谢了。