为什么 IA 32 任务是不可重入的

问题描述 投票:0回答:1

我对 IA32 任务有疑问。

TSS 只允许为一项任务保存一个上下文;因此,一旦 任务被调用(调度),递归(或可重入)调用 任务会导致任务的当前状态丢失。

我根本不明白为什么任务在 IA 32 中是不可重入的。如果你有一个任务正在运行,然后你使用实际任务的 tss 段选择器进行 jmp 远操作,则任务的当前状态将保存在tss。然后它会搜索tss描述符,并加载之前保存的状态。因此,EIP 将指向下一条指令等。这个推理有什么问题吗?

我了解繁忙位的工作原理,但不知道他们禁止调用同一任务的原因。我注意到,如果您有一个嵌套任务链,然后一个调用自身,它将创建一种循环,因为 tss 的前一个任务链接将是其自身。

x86 task intel tss
1个回答
0
投票

最近,我一直在阅读Intel IA-32开发人员手册。 我对Ia-32任务的非递归调用的理解是:

  • 一个 TSS 只能保存一项任务的一种状态。
  • 假设一个任务可以递归调用,那么这个任务应该分为过去时和现在时。
  • 任务切换时,过去时任务的状态将保存到TSS。
  • 现在时任务也将从同一个 TSS 检索状态。
  • 现在时任务已执行,CPU 寄存器的状态已发生显着变化。
  • 完成现在时任务后,根据任务切换的逻辑,CPU应该通过现在时任务的TSS中的反向链接回到过去时任务的执行状态。
  • 但是,由于过去时和现在时任务是同一个任务,因此它们的状态存在于同一个 TSS 中。
  • 因此,TSS 只保存现在时任务的状态,无法返回到过去时任务的状态。
  • IA-32 通过 TSS 描述符中的 BUSY 位阻止对某个任务的递归调用。
© www.soinside.com 2019 - 2024. All rights reserved.