汇编网首页登录博客注册
masmaster的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
文章收藏

[2010-10-12 10:13] 任务状态段(2)

1,寄存器保护区域
    寄存器保存区域位于TSS内偏移20H至5FH处,用于保存通用寄存器、段寄存器、指令指针和标志寄存器。 当TSS对应的任务正在执行时,保存区域是未定义的;在当前任务被切换出时,这些寄存器的当前值就保存在该区域。当下次切换回原任务时,再从保存区域恢复出这些寄存器的值,从而使处理器恢复成该任务换出前的状态,最终使任务能够恢复执行。

2,内层堆栈指针区域
   为了有效地实现保护, 一个任务在不同的特权级下使用不同的堆栈。比如当从外层特权级3变换到内层特权级0时,任务使用的堆栈也同时从3级堆栈变换到0级堆栈;当从内层特权级0变换到外层特权级3时,任务使用的堆栈也同时从0级堆栈变换到3级堆栈。所以,一个任务可能具有四个堆栈,对应四个特权级。 四个堆栈需要四个堆栈指针。
    TSS的内层堆栈指针区域中有三个堆栈指针, 他们都是48位的全指针(16位的选择子和32位的偏移), 分别指向0级、1级和2级堆栈的栈顶,依次存放在TSS中偏移4、12和20开始的位置。 当发生像内层转移时,则把适当的堆栈指针装入SS及ESP寄存器以变换到内层的堆栈,外层堆栈的指针保存在内层堆栈中。 没有指向3级的堆栈的指针,因为3级是最外层,所以任何一个向内层的转移都不吭能转移到3级。
    但是,当特权级由内向外变换时, 并不把内层堆栈的指针保存到TSS的内层堆栈指针区域。 这表明向内层转移时,总是把内层堆栈认为是一个空栈,。 因此,不允许发生同级内层转移的递归, 一旦发生向某级内层转移,那么返回到外层的正常途径是相匹配的向外层返回。
评论次数(0)  |  浏览次数(1137)  |  类型(汇编语言笔记) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码