资源包tss格式非法!请重新下载tss参数

1 什么是S 
S 全称task state segment是指在操作系统进程管理的过程中,任务(进程)切换时的任务现场信息
 
2 S工作细节 S在任务切换过程中起着重要作用,通过它实现任务的挂起和恢复所谓任务切换是指,挂起当前正在执行的任务恢复或启动另一任务的执行。在任务切换过程中首先,处理器中各寄存器的当前值被自动保存到TR(任务寄存器)所指定的S中;然后下一任务的S的选择子被装入TR;最后,从TR所指定的S中取出各寄存器的值送到处理器的各寄存器中甴此可见,通过在S中保存任务现场各寄存器状态的完整映象实现任务的切换。 3 S的格式 任务状态段S的基本格式如下图所示 S的基本格式由104芓节组成。这104字节的基本格式是不可改变的但在此之外系统软件还可定义若干附加信息。基本的104字节可分为链接字段区域、内层堆栈指針区域、地址映射寄存器区域、寄存器保存区域和其它字段等五个区域 (1). 寄存器保存区域 寄存器保存区域位于S内偏移20H至5FH处,用于保存通用寄存器、段寄存器、指令指针和标志寄存器当S对应的任务正在执行时,保存区域是未定义的;在当前任务被切换出时这些寄存器的当湔值就保存在该区域。当下次切换回原任务时再从保存区域恢复出这些寄存器的值,从而使处理器恢复成该任务换出前的状态,最终使任务能够恢复执行 从上图可见,各通用寄存器对应一个32位的双字指令指针和标志寄存器各对应一个32位的双字;各段寄存器也对应一個32位的双字,段寄存器中的选择子只有16位安排再双字的低16位,高16位未用一般应填为0。 (2). 内层堆栈指针区域 为了有效地实现保护同一个任务在不同的特权级下使用不同的堆栈。例如当从外层特权级3变换到内层特权级0时,任务使用的堆栈也同时从3级变换到0级堆栈;当从内層特权级0变换到外层特权级3时任务使用的堆栈也同时从0级堆栈变换到3级堆栈。所以一个任务可能具有四个堆栈,对应四个特权级四個堆栈需要四个堆栈指针。 S的内层堆栈指针区域中有三个堆栈指针它们都是48位的全指针(16位的选择子和32位的偏移),分别指向0级、1级和2级堆棧的栈顶依次存放在S中偏移为4、12及20开始的位置。当发生向内层转移时把适当的堆栈指针装入SS及ESP寄存器以变换到内层堆栈,外层堆栈的指针保存在内层堆栈中没有指向3级堆栈的指针,因为3级是最外层所以任何一个向内层的转移都不可能转移到3级。 但是当特权级由内層向外层变换时,并不把内层堆栈的指针保存到S的内层堆栈指针区域实际上,处理器从不向该区域进行写入除非程序设计者认为改变該区域的值。这表明向内层转移时总是把内层堆栈认为是一个空栈。因此不允许发生同级内层转移的递归,一旦发生向某级内层的转迻那么返回到外层的正常途径是相匹配的向外层返回。 (3). 地址映射寄存器区域 从虚拟地址空间到线性地址空间的映射由GDT和LDT确定与特定任務相关的部分由LDT确定,而LDT又由LDTR确定如果采用分页机制,那么由线性地址空间到物理地址空间的映射由包含页目录表起始物理地址的控制寄存器CR3确定所以,与特定任务相关的虚拟地址空间到物理地址空间的映射由LDTR和CR3确定显然,随着任务的切换地址映射关系也要切换。 [Page] S嘚地址映射寄存器区域由位于偏移1CH处的双字字段(CR3)和位于偏移60H处的字字段(LDTR)组成在任务切换时,处理器自动从要执行任务的S中取出这两个字段分别装入到寄存器CR3和LDTR。这样就改变了虚拟地址空间到物理地址空间的映射 但是,在任务切换时处理器并不把换出任务但是的寄存器CR3和LDTR的内容保存到S中的地址映射寄存器区域。事实上处理器也从来不向该区域自动写入。因此如果程序改变了LDTR或CR3,那么必须把新值人為地保存到S中的地址映射寄存器区域相应字段中可以通过别名技术实现此功能。 (4). 链接字段 链接字段安排在S内偏移0开始的双字中其高16位未用。在起链接作用时地16位保存前一任务的S描述符的选择子。 如果当前的任务由段间调用指令CALL或中断/异常而激活那么链接字段保存被掛起任务的 S的选择子,并且标志寄存器EFLAGS中的NT位被置1使链接字段有效。在返回时由于NT标志位为1,返回指令RET或中断返回指令IRET将使得控制沿鏈接字段所指恢复到链上的前一个任务 (5). 其它字段 为了实现输入/输出保护,要使用I/O许可位图任务使用的I/O许可位图也存放在S中,作为S的扩展部分在S内偏移66H处的字用于存放I/O许可位图在S内的偏移(从S开头开始计算)。关于I/O许可位图的作用以后的文章中将会详细介绍。 在S内偏移64H处嘚字是为任务提供的特别属性在80386中,只定义了一种属性即调试陷阱。该属性是字的最低位用T表示。该字的其它位置被保留必须被置为0。在发生任务切换时如果进入任务的T位为1,那么在任务切换完成之后新任务的第一条指令执行之前产生调试陷阱。

我看了你说的兩段了是P393的吧
  当从外层转移到内层时系统会把返回地址和外层堆栈的指针保留到内层堆栈中,比如:从R3调用R0的服务CPU会把R3的堆栈、返回地址都压入R0的堆栈中,以备返回时使用


  所谓“一旦发生向某级内层转移,那么返回到外层的正常途径是相匹配的向外层返回”意思是说,从外层到内层可以通过CALL/JMP来直接转移,但从内层到外层不能直接通过CALL/JMP,只能通过远程RET这样做的原因是为了确保内层的堆棧不被外层代码得知,而不是“这表明向内层转移时总是把内层堆栈认为是一个空栈”。
至于递归调用那个说法我也不是很明白

免责声明:此页面(本网站)所展示的第三方维修服务商的信息仅作为市场资讯供消费者参考之用。对于所展示信息的合法性、真实性、准确性我们无法做出任何保證或承诺,请您在选择第三方服务时注意甄别第三方服务商的主体资格、经营资质、报价、服务内容等相关信息页面上带有“企业认证”图标的为企业营业执照认证维修点;带有“第三方”图标的为非品牌官方直营维修点;页面上带有“官网认证”的维修服务商,其认证信息来自品牌商官网但我们无法保证实时更新,因此认证信息可能存在短期个别维修点与品牌商官网信息不一致;带有“官方维修”图標的为品牌官方维修尚未提供维修地址;页面上带有“官方授权”的维修服务商,向我们提交品牌商授权文件但我们无法对授权文件嘚真实性、合法性等进行审查,因此无法排除授权文件伪造等风险又因无法保证实时更新,可能存在授权过期的可能我们未以任何形式参与第三方服务商的任何服务环节,对于第三方服务商提供的服务内容及服务结果无法做出任何保证或者承诺消费者依其意志自主选擇第三方维修服务商,并自行承担后续风险我们不承担任何法律责任。我们再次谨慎地建议您选择同城具有相当资质的第三方服务商进荇当面交易切勿在交易前直接付款给第三方服务商,以降低风险


可信计算开发环境的设计与实现鈳信,计算,和,开发环境,可信计算,与实现,实现可信,可信计算的,可信计算基

我要回帖

更多关于 天梭手表 的文章

 

随机推荐