设为首页 加入收藏

TOP

pre-empting taskintel手册-Chapter7-Task Management(二)
2017-10-11 18:26:45 】 浏览:3109
Tags:pre-empting taskintel 手册 -Chapter7-Task Management
权限级保护,一个任务运行在R3 ,使用与其他R3任务相同的LDT和页表,访问代码,错误的数据和其他任务的栈

       使用任务管理功能来处理多任务应用程序是可选的,多任务能在软件中处理,每个软件定义的任务都执行在单IA-32架构任务的上下文中




7.2  任务管理数据结构

     处理器定义了五种与任务相关的数据结构

    1.   任务状态段 (TSS)

    2.   任务门描述符

    3.   TSS描述符

    4.   任务寄存器

    5.   EFLAGS寄存器中的NT  Flag

    当在保护模式的时候,在最少一个任务时,一个TSS或者TSS描述符必须被创建,并且TSS的段选择子必须被加载到TR寄存器中

       

7.2.1   任务状态段-TSS

        任务需要恢复的处理器状态信息,保存在叫做系统段的TSS中,图片7-2显式了32位CPU下,任务的TSS格式,TSS字段主要分为两类:动态字段和静态字段

        任务切换期间,当一个任务被暂停的时候,处理器会更新动态字段,下面的这些都是动态字段

        1.   普通寄存器字段: EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP

        2.   段寄存器字段:      CS DS ES SS FS GS

        3.   EFLAGS寄存器

        4.   EIP寄存器字段

        5.   上一个任务的链接字段:包含了上一个任务的TSS的段选择子(更新发生在call   interrupt  exception初始化造成的任务切换),这个字段(有时叫做back link字段)允许一个任务使用IRET指令返回到上一个任务

     处理器读取静态字段,通常不会改变它们,这些字段是任务创建的时候设置的,下面的是静态字段

       1.    LDT断选择子字段:包含了任务的LDT的段选择子

       2.    CR3控制寄存器字段: 包含了任务使用的页表的基址,总所周知,CR3也被叫做PDBR

       3.    权限级0  1  2栈指针字段:这些栈字段包含了栈段的段选择子(SS0  SS1  SS2)和栈内偏移(ESP0  ESP1  ESP2)组成的逻辑地址,对于特定任务,这些字段是静态的,如果栈切换发生在任务中,SS和ESP将会改变

      4.    T-FLAG(debug trap): 当设置这个flag的时候,当任务切换到这个任务的时候,T-flag会造成处理器产生一个调试异常

     5.     I/O位图基址字段:包含一个相对于TSS中的基址的16位偏移到I/O允许位图和中断重定向位图,当存在的时候,这些映射被存储在TSS中的较高地址,I/O映射基址指向了I/O允许位图的基址和中断重定向位图的结束

    如果分页被使用:

     1.  避免任务切换期间,处理器读取104个字节时,TSS存在于两个物理页(也就是页边界只有部分TSS),处理器可能执行不正确的地址翻译,任务切换期间,处理器读写每个任务的TSS的104字节(使用连续的物理地址作为TSS的第一个字节的物理地址),如果这104个字节不是物理连续的,处理器将会访问不挣钱的信息,而且也不会产生PF异常

    2.  上一个任务的和这次任务的TSS的物理页,和每一个描述符表项都应该标记为可读可写

    3.  在任务切换初始化的时候,如果包含这些结构的页面存在于内存中,任务切换会更快的执行

 




7.2.2   ?TSS描述符

       TSS类似于其他的段,是被段描述符定义的,图片7-3显式了TSS描述符的格式,TSS描述符只能位于GDT中,它不能位于LDT或者IDT中

       在CALL 和 JMP期间,试图用TI位为1(代表当前的LDT)的段选择子访问TSS会造成GP异常,在IRET的期间,会造成无效的TSS异常(#TS),试图加载TSS的段选择子到其他段寄存器也会造成GP异常

       类型字段的Busy-Flag标志着任务是否繁忙,繁忙的任务代表正在运行或者暂停,类型字段的值如果是1001B,代表的就是一个inactive的任务,如果类型字段是1011B,那么就代表是一个繁忙的任务,任务不会递归,处理器使用Busy-FLag检测一个试图调用执行已经被中断的任务,为了确保一个Busy-Flag只与一个任务相关,每个TSS应该只有一个TSS描述符指向它    

 

    基址,段界限,DPL, G,P的功能类似于数据段描述符中的使用,在32位TSS中,如果TSS描述符的G为0,limit的值必须大于等于67h, TSS的最小size大于1

首页 上一页 1 2 3 4 5 下一页 尾页 2/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇关于消息队列 下一篇初始Winsock编程

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目