Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1030708
  • 博文数量: 123
  • 博客积分: 5051
  • 博客等级: 大校
  • 技术积分: 1356
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-14 10:56
文章分类
文章存档

2012年(1)

2011年(21)

2010年(13)

2009年(55)

2008年(33)

分类: LINUX

2009-03-10 09:21:19

任务管理(基于80x86体系结构)

1、任务:处理器可以分配调度,执行和挂起的一个工作单元。可用于执行程序,任务或者是进程,操作系统服务,中断或异常处理过程和内核代码。保存任务状态,分配任务执行以及一个任务切换到另外一个任务。可以通过中断,异常,跳转或者是调用来执行一个任务。描述符表中与任务相关的描述符有两类:任务状态段描述符和任务门。任务切换很像过程调用,但是任务切换会保存更加多的处理器状态信息。任务切换会将控制权完全转移到一个新的执行环境,即新任务的执行环境。任务切换不会像过程调用这样,将信息保存于堆栈中,而是将处理器的状态信息保存在内存中称为任务状态段的数据结构中。

2、任务的构成
一个任务有两个部分:任务执行空间和任务状态段TSS。任务执行空间包括代码段,堆栈段和一个或者是多个数据段,如果操作系统使用了处理器的特权级保护机制,那么任务执行空间需要为每个特权级提供一个独立的堆栈空间。而TSS则是指定了构成任务执行空间的各个段,并为任务状态信息提供存储空间。多任务中,TSS还为任务之间的链接提供了处理方法。每一个任务都是使用指向其TSS的段选择符来指定或者是通过一个指向任务门的选择符来确定。当一个任务被加载进处理器中执行时,该任务的段选择符,基地址,段限长以及TSS段描述符属性就会被加载进任务寄存器TR中。当前执行任务的状态由处理器中的以下所有内容组成:
1、所有通用寄存器和段寄存器信息;
2、标志寄存器EFLAGS、程序指针EIP、控制寄存器CR3、任务寄存器和LDTR寄存器;
3、段寄存器指定的任务当前执行空间;
4、I/O映射位图基地址和I/O位图信息(在TSS中);
5、特权级0、1和2的堆栈指针(在TSS中);
6、链接至前一个任务的链指针(在TSS中)。

3、任务的执行
软件或者是处理器可以使用下面的方法之一来调度执行一个任务:
1、使用CALL指令明确地调用一个任务;
2、使用JMP指令明确地跳转到一个任务(Linux内核使用的方式);
3、(由处理器)隐含地调用一个中断句柄处理任务;
4、隐含地调用一个异常句柄处理任务。                          

当进行任务调度执行时,当前正在运行任务和调度任务之间会自动发生任务切换操作。在任务切换期间,当前运行任务的执行环境会被保存到它的TSS中并且暂停该任务的执行。此后新调度任务的上下文会被加载进处理器中,并且从加载的EIP指向的指令处开始执行新的任务。(如果一个任务被其他的任务所取代,那么当前任务的TSS段选择符会被保存到被调用者的TSS中,从而提供了一个返回调用者的链接。为了节省系统资源或者是系统安全,任务不应该跳转到自己,这一点是必须的。)
多个任务之间的相互干扰是怎样来进行避免的呢?
作为任务切换操作的一部分,处理器会切换到另一个LDT,从而允许每个任务对基于LDT的段具有不同的逻辑到物理地址的映射。同时,页目录寄存器CR3也会在切换时被重新加载,因此每个任务可以有自己的一套页表。这些保护措施因此实现了隔绝各个任务并防止它们相互干扰。

4、任务管理数据结构
处理器为多任务的执行提供了以下的寄存器和数据结构:
1、任务状态段TSS
2、TSS描述符
3、任务寄存器TR
4、任务门描述符
5、标志寄存器EFLAGS中的NT标志。
通过上面的数据结构的应用,任务之间可以进行切换工作。

任务状态段TSS:用于恢复任务执行而所要保存的处理器状态信息。在TSS段中包含了两大类:动态字段和静态字段。动态字段即当任务切换而被挂起时,处理器会更新动态字段的内容。

TSS描述符:任务状态段TSS使用段描述符来进行定义,这与其他段相同。但是TSS描述符只能存放在GDT中。

任务寄存器TR:其中存放着16位的段选择符以及当前任务TSS段的整个描述符。这些信息是从GDT中当前任务的TSS描述符复制过来的。这个用法很有意思,CPU使用这个不可见部分来缓冲TSS段描述符内容。任务寄存器的操作指令为LTR和STR,但是这两条指令只是用于操作TSS的选择符。LTR指令只能被特权级0的程序执行,并通常用于系统初始化期间。毋庸置疑,LTR系统初始化的使用是为了加载TR寄存器的初始值。而在之后的系统运行过程中,TR的内容会在任务切换时自动改变。

任务门描述符:此引入是为了提供一个任务间地、受保护的引用。任务门描述符中的TSS选择符字段指向GDT中的一个TSS段描述符。这个选择符字段中的RPL域不用。当程序在访问一个任务的时候,可以通过任务门描述符或者是TSS段描述符来实现。





















阅读(1808) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~