繁体   English   中英

在x86-32上执行任务切换

[英]Task switching on the x86-32

ESP和SS指的是什么? 例如,如果我从具有优先级0的TASK_1切换到具有相同优先级0的另一个TASK_2的任务切换。上下文切换完成后将使用(ESP和SS)或(SS0和ESP0) 。

1- SS0,SS1,SS2仅在任务中“内部”进行堆栈切换时使用吗?

2- SS是否可以持有任何特权级别的堆栈段,还是仅专用于环3的堆栈段?

我假设您正在谈论的是32位TSS(任务状态段),它是CPU用于各种目的的内存结构。 在ESP和SS字段中,CPU在CPU管理的任务切换期间保存旧任务的ESP和SS,并恢复新任务的ESP和SS值。 与其他通用和段寄存器字段(例如EAX或DS)一样,在任务切换期间将保存和还原这些字段。

在任务切换期间,从不使用ESP0,ESP1,ESP2,SS0,SS1,SS2字段。 仅当中断或异常导致同一任务中的特权级别更改时才使用它们。 这将导致堆栈切换,将来自当前TSS的适当ESP#和SS#值加载到ESP和SS寄存器中,并将旧的ESP和SS值保存在新堆栈中。 CPU永远不会更改这些TSS字段。 当中断处理程序返回特权较低的代码时,CPU从堆栈中恢复保存的ESP和SS值。

尽管任务切换可以导致CPU的特权级别更改,但它绝不会导致任务的特权级别更改。 新任务将以先前执行时的特权级别恢复执行。

请注意,虽然32位保护模式本质上要求操作系统设置TSS,但并不需要操作系统使用TSS进行任务切换。 操作系统还可以使用其自身的机制以及大多数32位x86操作系统的工作方式来手动切换任务。 (由于CPU在64位长模式下不提供任务切换机制,因此所有64位x86 OS都是这样工作的。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM