long mode 下的 TSS 和 task gate

转自:点击打开链接

long mode 已经不支持使用 TSS 机制进行任务切换。TSS 必须存在的唯一原因依然是:需要提供每个权限级别的 stack 指针。但是,由于不支持 TSS 任务切换机制,所以,long mode 下的 TSS segment 和原来的 TSS segment 有很大的改变。



1、long mode 下的 TSS segment 去掉了必要的执行环境,包括:GRPs 集、Selector Registers 集、eflags 寄存器、CR3 寄存器、指令指针 EIP、LDT selector 以及 Task link。
  这些执行环境在 x86 环境中是必须的。但是在 x64 的 long mode 下的 TSS segment 中这些环境要素已经没用处了,x64 的 Tss segment 唯一的作用就是提供 stack pointer。

2、long mode 下的 TSS segment 中的 stack pointer 被扩展至 64 位,SS selector 被抛弃。同时又增加了 7 个 stack pointer。这些新增的 7 个 stack pointer 和原来的 stack pointer 意义和用途都不同 。
  原来的 3 个 stack pointer 意义是代表权限级别为 0、1、2 的通用 stack pointer,在任务切换时,若发生了 stack 切换时相应级别的 stack pointer。
  新增的 7 个 stack pointer 是特定用途的 stack pointer,仅用于发生中断和异常时使用。这 7 个 stack pointer 意即:Interrupt Stack Table(IST)IST ~ IST7。使用于 interrupt 或 trap gate descriptor 中。在 interrupt/trap gate descriptors 里指出相应的 stack pointer 号,从而进入相应的 stack。



  由于在 long mode 下不支持 TSS segment 任务切换机制,所以,在 long mode 下没有 task gate 存在。当然也不支持使用 TSS selector 进行任务切换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值