`
chong_zh
  • 浏览: 69982 次
  • 来自: 杭州
社区版块
存档分类
最新评论

Intel80386知识总结: 多任务支持

阅读更多
====================================================================
本文用于汇总整理Intel80386的多任务支持功能,
参考文献:
  • 《INTEL 80386 programmer's reference manual 1986》

本文是系列文章《Intel80386知识总结》的一部分。
===================================================================

1. 任务信息的管理机构
1.1 TSS
处理器把维护一个任务所需的所有信息都保存在一个特殊的段中:Task State Segment(TSS)。TSS的结构如下图所示:

TSS中的字段可以分为两组,一组是每次任务切换时都会更新的动态字段,另一组是只读的静态字段。动态字段包括:
  • 通用寄存器保存字段:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI
  • 段寄存器保存字段:ES、CS、SS、DS、FS、GS
  • 标志位寄存器保存字段:EFLAGS
  • 指令指针保存字段:EIP
  • 前一个任务的TSS选择符

静态字段包括:
  • 任务LDT的选择符
  • 寄存器PDBR的保存字段
  • CPL为0~2时的堆栈段选择符,共3个
  • T bit:Debug trap bit,等于1时,在每次任务切换时处理器都会产生一个调试异常
  • I/O Map base:I/O用


1.2. TSS描述符
即指向TSS的段描述符,其结构如下所示:

TSS描述符TYPE字段中的B bit是TSS的忙标志位,当TYPE字段=9时,表示该任务为非繁忙任务,当TYPE字段=11时,表示该任务为繁忙任务。i386的任务是不可重入的,处理器可以通过检查任务的B bit发现任务是否繁忙。TSS描述符的LIMIT字段必须大于等于103,大于103是允许的,可以系统软件被用来存储一些相关信息。
TSS描述符只能被保存在GDT中,通过TI=1的选择符访问TSS选择符会造成异常。不能直接通过把TSS描述符载入数据段寄存器来修改其中的内容,只能通过载入另一个指向TSS的数据段描述符来修改TSS。

1.3. TR寄存器
TR寄存器给出了当前任务的TSS,通过TR寄存器访问TSS的路径如下图所示:


1.4. 任务门
i386提供任务门机制作为间接的受保护的访问TSS的方式,其结构如下所示:

其中,SELECTOR字段指向TSS描述符,SELECTOR字段中的RPL是不被使用的,同时,当使用任务门时,TSS描述符中的DPL失效,优先级保护规则为:选中任务门所用的选择符RPL和CPL都必须小于等于任务门的DPL。
一个TSS只有唯一的TSS描述符与其对应,却可以有多个任务门同时指向对应的TSS。TSS描述符和任务门形成了多任务管理的两层架构:


2. 任务的切换
2.1 切换流程
  • 检查当前任务是否有权切换到目标任务:TSS描述符或者是调用门的DPL必须小于等于CPL和调用门选择符的RPL
  • 检查目标TSS描述符的PRESENT字段是否为1,LIMIT字段是否合法,否则产生异常。异常将在切换前的任务上下文中。
  • 保存当前任务的执行现场:保存寄存器EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI、ES、CS、SS、DS、FS、GS、EFLAGS到TSS。把当前指令(造成任务切换的指令)的下一条指令地址保存到TSS。
  • 在TR寄存器中载入目标任务的TSS描述符,并设置其Busy bit。
  • 从新任务的TSS中恢复现场,并继续执行

在上述过程中要完成的保护检查一览:
序号检查内容异常类型
1Incoming TSS descriptor is presentNP
2Incoming TSS descriptor is marked not-busy GP
3Limit of incoming TSS is greater than or equal to 103TS
4LDT selector of incoming task is validTS
5LDT of incoming task is presentTS
6CS selector is validTS
7Code segment is presentNP
8Code segment DPL matches TS Code segment CS RPLTS
9Stack segment is validGP
10Stack segment is presentSF
11Stack segment DPL = CPLSF
12Stack-selector RPL = CPLGP
13DS, ES, FS, GS selectors are validGP
14DS, ES, FS, GS segments are readableGP
15DS, ES, FS, GS segments are presentNP
16DS, ES, FS, GS segment DPL ≥ CPL (unless these are conforming segments)GP

其中,异常类型的含义为:
  • NP = Segment-not-present exception
  • GP = General protection fault
  • TS = Invalid TSS
  • SF = Stack fault


2.2 任务返回链
TSS的back-link字段和EFLAGS寄存器的NT(Nested Task)标志位共同提供了i386的任务返回链机制。当由任务A切换至任务B的时候,处理器会在任务B的TSS中设置back-link字段,指向任务A的TSS选择符,同时设置任务B的EFLAGS寄存器中的NT位=1。当任务B释放控制流的时候,处理器首先检查EFLAGS的NT位是否为1,若为1则读取任务B TSS中的back-link字段自动返回。在系统运行的过程中返回链的长度可以无限增长,TSS描述符的Busy位保护了在返回链中没有环。同时,在多处理器环境下,Busy位还可以保护一个任务不被多个处理器同时执行。下表总结了Busy位,NT位和Back-link字段的具体行为逻辑:
0
5
分享到:
评论

相关推荐

    Reversing:逆向工程揭密

    所有的翻译和校对工作历时半年多,在此,我要感谢为本书的出版付出辛勤汗水的电子工业出版社博文视点的工作人员,特别要感谢本书的策划编辑朱沭红老师和责任编辑顾慧芳老师,她们的严谨认真工作使该译本可读性更高,...

    Tcl_TK编程权威指南pdf

    更多有关变量的知识 更多有关数学表达式的内容 注释 有关替换与分组的总结 要点 参考 第2章 开始使用 source命令 unix上的tcl脚本程序 .windows 95的开始菜单 macintosh与resedit console命令 命令行...

    数据库SQL-SERVER数据库技术--超市进销存管理系统.doc

    课程设计报告 题目: 超市进销存管理系统 院(系): 软件学院 专业班级: 软件工程班 学 号: 学生姓名: 指导教师: 翟宝峰 教师职称: 副教授 起止时间: 2014.12.15-2014.12.26 课程设计任务及评语 院(系):...

    安装 SUSE Linux Enterprise Server --服务器版

    Server 来执行此任务。 PXE 或 bootp SUSE Linux Enterprise Server 也可以从硬盘来进行引导。 为此,请将内核 (linux) 和安装系统 (initrd) 从第一张 硬盘 CD 或 DVD 上的 /boot/loader 目录中复制到硬盘,并 向...

    Linux下C语言编程入门教程详细说明

    本文是Linux 下C 语言编程入门教程。主要介绍了Linux 的发展与特点、...Linux 充分利用了X86CPU 的任务切换机制,实现了真正多任务、多用户环境,允许多个用户同时执行不同的程序,并且可以给紧急任务以较高的优先级。

    PWM控制LED亮度-单片机课程设计.doc

    11 4.1 硬件调试 11 4.2 软件调试 12 4.3 软硬件调试 12 5总结 14 参考文献 15 1 项目概述和要求 1.1 单片机基础知识 单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机 系统集成到一个...

    自己动手写操作系统(含源代码).part2

    对于想阅读 Linux源代码的操作系统爱好者,本书可以提供阅读前所必要的知识储备,而这些知识储备不但在本书中有完整的涉及,而且在很多 Linux书籍中是没有提到的。 特别要提到的是,对于想通过阅读 Andrew S. ...

    自己动手写操作系统(含源代码).part1

    对于想阅读 Linux源代码的操作系统爱好者,本书可以提供阅读前所必要的知识储备,而这些知识储备不但在本书中有完整的涉及,而且在很多 Linux书籍中是没有提到的。 特别要提到的是,对于想通过阅读 Andrew S. ...

    CATIAV培训教程.pptx

    培训大纲 一 CATIA基础知识 0.5天 草图绘制(SKETCHER) 0.5天 零件设计 1、 实体设计(PART DESIGN) 1.5天 2、 曲面设计(GENERATIVE SHAPE DESIGN) 1.5天 四 装配设计(ASSEMBLY DESIGN) 1天 五 工程图设计...

    活动1--选购计算机-教学设计.doc

    初中信息技术七年级上册(上海科技教育出版社)第二单元活动1 "课题"选购计算机"教者 " "年级 "七年级 "课时 "2课时 " "教学"知识目标 "1、主机构成 " "目标" "2、品牌机和组装机 " " "能力目标 "1、能说出主机构成...

    PWM控制LED亮度-单片机课程设计(1).doc

    关键词:AT89C51、PWM、LED 目 录 1 项目概述和要求 1 1.1 单片机基础知识 1 1.2 单片机的发展趋势 2 1.3 项目设计任务与设计思路 3 2 系统设计 5 2.1系统电路原理图 5 2.2元件清单 5 2.2.1 AT89C51芯片 5 2.2.2 ...

    Windows内核安全与驱动开发光盘源码

    2.6.2 函数的多线程安全性 30 2.6.3 代码的中断级 32 2.6.4 WDK中出现的特殊代码 32 第3章 字符串与链表 35 3.1 字符串操作 35 3.1.1 使用字符串结构 35 3.1.2 字符串的初始化 36 3.1.3 字符串的拷贝 37 ...

    Windows内核安全驱动开发(随书光盘)

    2.6.2 函数的多线程安全性 30 2.6.3 代码的中断级 32 2.6.4 WDK中出现的特殊代码 32 第3章 字符串与链表 35 3.1 字符串操作 35 3.1.1 使用字符串结构 35 3.1.2 字符串的初始化 36 3.1.3 字符串的拷贝 37 ...

    java面试题以及技巧

    │ │ 经验总结.txt │ │ 资料目录.txt │ │ 题目.txt │ │ │ ├─HTML Pages │ │ │ Desktop_.ini │ │ │ Low Level Security in Java.htm │ │ │ SCJP 1_4 认证的初级教程.htm │ │ │ 新建 文本文档....

    java面试题目与技巧1

    │ │ 经验总结.txt │ │ 资料目录.txt │ │ 题目.txt │ │ │ ├─HTML Pages │ │ │ Desktop_.ini │ │ │ Low Level Security in Java.htm │ │ │ SCJP 1_4 认证的初级教程.htm │ │ │ 新建 文本文档....

    java面试题及技巧4

    │ │ 经验总结.txt │ │ 资料目录.txt │ │ 题目.txt │ │ │ ├─HTML Pages │ │ │ Desktop_.ini │ │ │ Low Level Security in Java.htm │ │ │ SCJP 1_4 认证的初级教程.htm │ │ │ 新建 文本文档....

    java面试题及技巧3

    │ │ 经验总结.txt │ │ 资料目录.txt │ │ 题目.txt │ │ │ ├─HTML Pages │ │ │ Desktop_.ini │ │ │ Low Level Security in Java.htm │ │ │ SCJP 1_4 认证的初级教程.htm │ │ │ 新建 文本文档....

    java面试题以及技巧6

    │ │ 经验总结.txt │ │ 资料目录.txt │ │ 题目.txt │ │ │ ├─HTML Pages │ │ │ Desktop_.ini │ │ │ Low Level Security in Java.htm │ │ │ SCJP 1_4 认证的初级教程.htm │ │ │ 新建 文本文档....

Global site tag (gtag.js) - Google Analytics