任务状态段TSS及TSS描述符、局部描述符表LDT及LDT描述符

1.TSS介绍

在一个多任务环境中,当发生了任务切换,需保护现场,因此每个任务的应当用一个额外的内存区域保存相关信息,即任务状态段(TSS);TSS格式固定,104个字节,处理器固件能识别TSS中元素,并在任务切换时读取其中信息。

2.GDT、TSS、LDT对比
GDT/LDT/TSS对比内容
GDT(全局描述符表)整个系统只有一个GDT;
通过全局描述符寄存器GDTR进行定位;
段描述符
LDT(局部描述符表)每个任务都配有一个LDT,LDT基地址、界限等信息存放在任务对应的TCB中;
通过局部描述符寄存器GDTR进行定位;
将LDT视为一种特殊的内存段,则可为每一个LDT创建一个LDT描述符,将描述符存放到GDT中;
访问LDT时:GDT选择子==>访问GDT==>LDT描述符==>访问LDT(==>加载到LDTR);
段描述符
TSS(任务状态段)每个任务都配有一个TSS,TSS基地址、界限等信息可以存放在任务对应的TCB中;
通过任务寄存器TR进行定位;
将TSS视为一种特殊的内存段,则可为每一个TSS创建一个TSS描述符,将描述符存放到GDT中;
访问TSS时:GDT选择子==>访问GDT==>TSS描述符==>访问TSS(==>加载到TR);
保存任务相关信息

各部分关系图:

3.任务寄存器TR与局部描述符表寄存器LDTR

TR,LDTR总指向当前任务的TSS,LDT。

TR(LDTR)寄存器包含16位TR(LDTR)描述符选择子+描述符高速缓存器;
加载TR和LDT分别使用指令ltr和lldt:

//操作数可以为16位通用寄存器或16位单元内存地址,不论寄存器还是内存单元,内容为16位TSS(LDT)选择子
ltr r/m16
lldt r/m16

将TSS(LDT)选择子加载到TR(LDTR)后,CPU访问GDT==>得到TSS(LDT)描述符==>将段界限、基址加载到TR(LDTR)高速缓存部分;若为TSS则TSS中’B’置1即忙;

3.TSS描述符格式

TSS描述符存放在GDT中;

TYPE中'B':忙,刚创建时应为0,任务开始执行,挂起时为1,由硬件管理,防止切换任务切到自己;TSS描述符DPL必须为0,只有CPL为0能调用;
4.LDT描述符格式

LDT描述符存放在GDT中,在GDT中的选择子可以存入相应的TCB中;

段基地址指示LDT在内存中的起始地址;
段界限指示LDT的范围;
S-TYPE固定为'0-0010',表明为LDT描述符;
5.TSS结构
组成作用
0:任务链接域 前一个任务的TSS描述符的GDT选择子
SS0,SS1,SS2
ESP0,ESP1,ESP2
分别是0,1,2特权级的栈段选择子和对应栈段的栈顶指针;
该部分应由任务创建者填写,且属于一般不变的静态部分,用于当通过门进行特权级转移时切换的栈
28:CR3 分页相关
32~92部分处理器各寄存器快照,用于任务切换时,保存状态以便将来恢复现场;
多任务环境中,每创建一个任务,OS至少要填写EIP,EFLAGS,ESP,CS,SS,DS,ES,FS,GS,当该任务第一次执行时,处理器从这加载初试环境,并从CS:EIP处开始执行,从此运行期间由固件更改;
96:LDT段选择子 即当前任务的LDT描述符的GDT选择子;
100:T 用于软件调试,在多任务环境中,若为1,每次切换到该任务引发一次调试异常中断;
I/0映射起始地址 用于决定当前任务是否可以访问特定硬件端口,填TSS段界限(103)即代表不用;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值