Chinaunix首页 | 论坛 | 博客
  • 博客访问: 358510
  • 博文数量: 38
  • 博客积分: 1935
  • 博客等级: 上尉
  • 技术积分: 724
  • 用 户 组: 普通用户
  • 注册时间: 2005-11-23 16:34
文章存档

2010年(4)

2009年(33)

2008年(1)

分类:

2009-05-03 23:43:04


  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 进行任务切换
阅读(1511) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~