任务切换的核心在于TSS。
TSS(Task State Segment)是一个任务存在的标志。一个任务可以没有自己的LDT,但是一定要有TSS。保护模式下的处理器的一个设计目标就是支持多任务。TSS是为了达到此目标而引入的最重要的数据结构。TSS和任务唯一对应,保存有任务运行状态相关的所有必要信息。任何时候,只要获知一个任务的TSS,就相当于获知了该任务现在运行在了什么地方,所有寄存器是什么值,LDT在哪儿,等等,故而可以跳转到此任务,让此任务继续运行——这就是任务切换的本质。
有三种任务切换方式:中断,call,jmp。其中,中断是最常见的任务切换方式,经常用于操作系统内的任务调度。通过call与jmp的任务切换则由代码主动发起。从本质上来说,这三种任务切换方式的“输入参数”都是TSS。但是任务门作为中介在中断方式中被使用,而call与jmp指令则既可以间接以指向任务门的描述符为输入参数,也可以直接用TSS选择子为输入参数。几个相关的数据结构的关系如下所示。
中断发生 或者 call 或者 jmp
|
|
(任务门)
|
|
TSS选择子
|
|
TSS
上图的意思是:当TSS作为中断或者call或者jmp的输入参数时,CPU会发起任务切换,切换到TSS所指向的那个任务。TSS由TSS选择子指向,而TSS选择子又可选的(中断则是必须)被任务门指向(实则是作为一个域包含在内)。
中断和call引起的任务切换都可以通过iret指令返回。中断和call引起的任务切换都是所谓“嵌套式”任务切换。从旧任务切换到新任务时,旧任务以TSS选择子的方式反向链接在新任务的TSS中,且新任务EFLAG中的NT(Nested Flag)位被置1。同时,虽然CPU已经从旧任务切换到新任务,但是旧任务TSS中的B(Busy)位依然保持为1。嵌套式的任务切换倒更像是在同一个任务内不同过程之间的跳转。相比之下,jmp所引起的任务切换则“更像”是任务切换,它并不导致嵌套关系的发生。旧任务的B位清零,新任务EFLAG中的NT位被清零。
总之,任务切换的核心在于TSS。
TS PS PES全称
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
上一篇:spring cloud 与spring boot版本对应
下一篇:汇编es寄存器
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
ES PES TS流的区别
数字信号实际传送的是数据流,一般数据流包括以下三种:ES是原始码流,包含视频、音频或数据的连续码流。TS是传输流,是续的n个(比如说5个)188个长度的TS
extension 视频会议 互联网 电话 网络