设为首页 加入收藏

TOP

pre-empting taskintel手册-Chapter7-Task Management(一)
2017-10-11 18:26:45 】 浏览:3107
Tags:pre-empting taskintel 手册 -Chapter7-Task Management

       这节描述了IA-32架构的任务管理功能,只有当处理器运行在保护模式的时候,这个功能才是有效的,这节的侧重点在32位任务和32位TSS结构上,关于16位的任务和16位TSS结构,请看7.6节,关于64位模式中,具体任务管理的信息,请看7.7节

 7.1 任务管理概述

       任务是处理器可以调度,执行和暂停的一个工作单元,它可以执行一个程序,任务,进程,操作系统服务程序,中断例程,异常例程,内核实用程序

      32位架构提供了一种机制,可以保存任务状态,调度要执行的任务,并且切换一个任务到另一个任务,当操作系统位于保护模式的时候,所有处理器的执行都发生在任务中,即使简单的操作系统,也必须定义至少一个任务,复杂的操作系统可以使用处理器的任务管理功能来支持多任务程序

   7.1.1  任务结构

        任务由两部分组成,任务执行空间和任务状态段(TSS),任务执行空间由一个代码段,一个栈段和一个或者更多的数据段组成,如果一个操作系统或者可执行程序使用了处理器的权限级保护机制,那么任务执行空间也提供了一个分开的栈为每种权限级

    TSS指定了组成任务执行空间的段和为任务状态信息提供了存储空间,在多任务系统中,TSS也提供了一种链接任务机制    

    任务是由它的TSS段选择子定义的,当处理器加载一个任务并且执行的时候,段选择子,基址,界限和TSS段描述符属性加载进TR中(细看2.4.4),如果任务执行在分页模式中,那么任务使用的页目录基址则被加载进CR3中

7.1.2  任务状态

     下面几项定义了当前正在执行任务的状态

       1.  由段寄存器中的段选择子定义的任务的当前执行空间(CS DS SS ES FS GS)

      2.   普通寄存器的状态

      3.   EFLAGS寄存器的状态

      4.   EIP寄存器的状态

     5.    CR3寄存器的状态

     6.   TR寄存器的状态

     7.   LDTR寄存器的状态

     8.   IO映射基址和IO映射(存在于TSS中)

     9.   特权级0,1, 2的栈指针(存在于TSS中)

     10.  链接上一个执行任务(存在于TSS中)

     在调度一个任务之前,除了TR寄存器状态,上面的所有信息都被包含在TSS中,同样,LDTR寄存器的所有内容都不保存在TSS中,仅仅LDT的段选择子存在

7.1.3   执行一个任务

     软件或者处理器可以利用下面的方法调度一个任务去执行

     1.  显式的利用CALL指令调用一个任务

     2.  显式的利用JMP指令跳转到任务中

     3.   显式的调用一个中断处理程序任务(通过处理器)

     4.  显式的调用一个异常处理程序任务

     5.   一个return (一个IRET指令),当EFLAGS寄存器中的NT标志置1的时候

        以上所有的调度一个任务的方法标识着任务被调度,并且段选择子指向了一个任务门或者任务的TSS,当用CALL指令或者JMP指令调度一个任务的时候,指令中的选择子可以直接选择一个TSS或者保存TSS选择子的任务门,当调度一个任务处理一个中断或者异常的时候,IDT项必须包含一个保存中断或者异常处理程序TSS的选择子任务门

    

       当任务将要被调度执行的时候,任务切换就发生在当前正在执行的任务和被调度的任务之间,在任务切换期间,当前正在执行任务的执行环境(任务的状态或者上下文)被保存在它的TSS中并且任务被暂停,被调度任务的执行环境被加载进处理器中,并且刚刚加载的EIP寄存器指向了任务开始执行的指令,如果从上次系统初始化后,任务没有运行,EIP将执行任务代码的第一条指令,否则,当任务上次是active的时候,它将指向上次任务执行后的指令的后一条指令

      如果当前正在执行的任务(calling task)被正在调度的任务(called task)调用,那么calling task的段选择子则被保存在called stack的TSS中,作为link back提供给calling task

       对于所有的32位处理器来说,任务都不是递归的,一个任务不能CALL或者JMP它自己

      中断和异常能被Handler task的任务切换处理,处理器执行一个任务切换去处理中断或者异常,并且返回的时候自动从一个中断程序任务或者异常程序任务切换回到被中断的程序,这种机制也能处理发生在中断任务期间的中断

      作为任务切换的一部分,处理器也能切换到另一个LDT,LDT-BASED段中,允许每个任务都有一个逻辑地址到物理地址的映射,任务切换的时候,页目录基址寄存器CR3会重新加载,允许每个任务有它自己的页表,这种保护机制帮助了任务之间的隔离,并且预防了任务之间的干扰

       如果保护机制不被使用,处理器不会提供任务之间的保护,即使操作系统使用了多种

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

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目