Intel® 64 and IA-32 Architectures Software Developer's Manual:Vol 3 Section 6

本文详细介绍了IA-32架构下的任务管理机制,包括任务的定义、任务数据结构的组成及其状态等内容。探讨了如何通过不同指令调度任务执行,并解释了任务切换的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第六章

任务管理器


这章描述了IA-32架构任务管理机制。这些机制只在处理器运行于保护模式时有效。
这章关注于32位任务和32位TSS数据结构。对于16位任务和16位TSS数据结构,参照6.6节,16位任务状态段(TSS)。对于64位模式任务管理,参照6.7节,64位模式下的任务管理。

6.1 任务管理器总揽

一个任务是一个处理器可以分派,执行和挂起的工作单元。它可以被用于执行程序,任务或者进程,操作系统服务功能,中断或者异常处理,内核或者执行功能。
IA-32架构提供了保存任务状态的机制,为了分发任务去执行和从一个任务切换到另一个任务。当在保护模式执行时,所有的处理器执行都可以放入一个任务。即便只有一个任务的简单系统。更复杂的系统可以使用处理器任务管理器机制去支持多任务应用。

6.1.1 任务数据结构

一个任务由两部分构成:任务执行空间和任务状态段(TSS)。任务执行空间由一个代码段,一个栈段和一个或者多个数据段构成(参照图6-1)。如果一个操作系统或者执行者使用处理器的特权级保护机制,任务执行空间也给每个特权级提供了一个隔离栈。
TSS规定了组成任务执行空间的段,并且给任务状态信息提供了存储空间。在多任务系统中,TSS也提供了链接任务机制。
一个任务是通过它的TSS段选择子被识别。当一个任务被加载进处理器执行时,段选择子、基址、段限、TSS段描述符属性都会被加载到任务寄存器中(参照2.4.4,任务寄存器(TR))。
如果任务实现了换页,用于任务的页目录基址会被加载进控制寄存器CR3。

任务数据结构

[图6-1,任务数据结构]

6.1.2 任务状态

以下项定义了当前正在执行任务的状态
  • 任务的当前执行空间,由存于段寄存器(CS、DS、SS、ES、FS和GS)的段选择子定义
  • 通用目的寄存器状态
  • EFLAGS寄存器状态
  • EIP寄存器状态
  • 控制寄存器CR3状态
  • 任务寄存器状态
  • LDTR寄存器状态
  • I/O映射基址和I/O映射(保存于TSS)
  • 特权级0、1、2栈指针(保存于TSS)
  • 上一次执行任务的链接(保存于TSS)
在分发一个任务之前,所有的这些项都会被存于任务TSS,除了任务寄存器的状态。同时,LDTR寄存器的完整内容也不会包含在TSS中,只有LDT段选择子。

6.1.3 执行一个任务

软件或者处理器可以通过以下方式调度任务执行
  • 使用CALL指令直接调用任务
  • 使用JMP指令直接跳入任务
  • 隐式调用(通过处理器)一个中断处理任务
  • 隐式调用一个异常处理任务
  • 当EFLAGS寄存中的NT标志位被设置时返回(一个IRET指令发起)
所有调度任务的方式识别任务后通过指向一个任务门或者TSS任务的段选择子去调度。当用CALL或者JMP指令调用任务时,指令中的选择子可能直接选择TSS或者保存有TSS选择子的任务门。当调度一个任务去处理一个中断或者异常时,中断或者异常的IDT项必须包含一个拥有选择子的任务门。
当一个任务被调度执行时,在当前正在运行的任务和被调度的任务之间发生切换。任务切换时,当前正在执行任务(被称为任务状态或者上下文)的执行环境被保存在它的TSS并且任务执行挂起。被调度的任务上下文装载到处理器并且以新装载在EIP寄存器指向的指令为入口点执行。如果因为系统上次初始化而任务没有被运行,该EIP将指向任务代码的首条指令;否则,当系统上次活跃,在任务执行最后指令之后EIP将指向下一条指令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值