处理器在实施任务切换时的操作——《x86汇编语言:从实模式到保护模式》读书笔记39

处理器可以通过以下四种方法实施任务切换:
1. call指令或者jmp指令的操作数是GDT内的某个TSS描述符的选择子;
2. call指令或者jmp指令的操作数是GDT或者LDT内某个任务门的选择子;
3. 一个异常或者中断发生时,中断号指向IDT内的某个任务门;
4. 在EFLAGS寄存器的NT位置位的情况下,当前任务执行了一个iret指令。

对于这四种方法,首先都可以得到一个TSS描述符的选择子:
对于1,指令的操作数直接就是TSS选择子;
对于2和3,任务门里包含了TSS选择子;
对于4,当前任务的TSS的任务链接域内就是TSS选择子。
这个TSS选择子就决定了要切换到哪个任务。

在任务切换时,处理器执行以下操作:
1. 取得新任务的TSS描述符的选择子(如上文所述)。
2. 检查是否允许从当前任务切换到新任务。
(1)数据访问的特权级检查规则适用于JMP和CALL指令,当前任务的CPL和新任务段选择子(TSS描述符的选择子或者任务门的选择子)的RPL必须在数值上<=目标TSS描述符或者任务门的DPL;
(2)异常、中断(int n指令发起的中断除外)和IRET指令引起的任务切换忽略目标任务门或者TSS描述符的DPL;
(3)对于int n指令发起的中断,要检查DPL,要求在数值上,CPL<=任务门描述符的DPL;
3. 检查新任务的TSS描述符是否已经标记为有效(P=1),并且界限也有效(>=103);
4. 检查新任务是否可用。对于以CALL,JMP,异常或者中断发起的任务切换,要求B=0;对于IRET发起的任务切换,要求B=1;
5. 检查当前任务和新任务的TSS,以及所有在任务切换时用到的段描述符已经安排到系统内存中;
6. 如果任务切换是由JMP或者IRET发起的,处理器清除当前任务的B标志;如果是由CALL指令、异常或者中断发起的,当前任务的B位保持原来的状态(=1);
7. 处理器建立EFLAGS寄存器的一个临时副本。如果任务切换由IRET指令发起,则清除副本中的NT标志;如果是由CALL、JMP、异常或者中断发起的,则保持副本中NT标志不变。
8. 保存当前任务的状态到它的TSS中:所有通用寄存器、段寄存器中的段选择子、刚才那个EFLAGS的副本,以及EIP;
9. 加载新任务的EFLAGS寄存器。如果任务切换是由CALL、异常或者中断发起的,处理器把EFLAGS的NT标志置位;如果是由IRET或JMP发起的,NT位不变。
10. 如果任务切换是由CALL、JMP、异常或者中断发起的,处理器将新任务TSS描述符中的B标志置位;如果由IRET发起,B保持原来的状态(=1);
11. 用新任务的TSS选择子和TSS描述符加载TR;
12. 新任务的TSS状态数据被加载到处理器:包括LDTR寄存器、CR3、EFLAGS、EIP、通用寄存器、段选择子;
13. 与段选择子相对应的描述符在验证后也被加载;
14. 开始执行新任务。

注意:任务切换时,新任务的特权级别是由其段寄存器CS的低2位决定的,该寄存器的内容取自新任务的TSS。

最后,再次给出那个表格,因为它太重要了。

处理器在实施任务切换时的操作——《x86汇编语言:从实模式到保护模式》读书笔记39相关推荐

  1. 任务切换——《x86汇编语言:从实模式到保护模式》读书笔记38

    任务切换--<x86汇编语言:从实模式到保护模式>读书笔记38 本文及后面的几篇博文是原书第15章的学习笔记. 本章依然使用第13章的主引导程序. 1. 协同式多任务与抢占式多任务 有两种 ...

  2. X86汇编语言从实模式到保护模式17:协同式任务切换

    目录 1. 多任务和任务切换概述 1.1 多任务系统 1.2 任务切换含义 1.2.1 切换任务上下文 1.2.2 上下文是什么 1.3 任务切换方式概述 1.3.1 协同式任务切换 1.3.2 抢占 ...

  3. ASM:《X86汇编语言-从实模式到保护模式》第10章:32位x86处理器的编程架构

    ★PART1:32位的x86处理器执行方式和架构 1. 寄存器的拓展(IA-32) 从80386开始,处理器内的寄存器从16位拓展到32位,命名其实就是在前面加上e(Extend)就好了,8个通用寄存 ...

  4. 任务切换的方法——《x86汇编语言:从实模式到保护模式》读书笔记37

    任务切换的方法--<x86汇编语言:从实模式到保护模式>读书笔记37 1. 中断门和陷阱门 在实模式下,内存最低端的1M是中断向量表,保存着256个中断处理过程的段地址和偏移.当中断发生时 ...

  5. [书]x86汇编语言:从实模式到保护模式 -- 第15章 任务切换

    # 执行结果 # TODO:字符串显示函数的滚屏部分应该是有bug. # file_02: c15_core.asm ; FILE: c13_core.asm ; DATE: 20200104 ; T ...

  6. x86汇编语言从实模式百度云_Intel x86 CPU 32位保护模式杂谈之任务切换 上

    目录: 什么是任务 任务由什么组成 任务门描述符是什么东东?有了TSS描述符为什么要有任务门描述符? 参考文献 什么是任务 任务(task)是处理器可以分配.执行.挂起的工作单位,笔者认为和我们操作系 ...

  7. 32位x86处理器编程导入——《x86汇编语言:从实模式到保护模式》读书笔记08

    在说正题之前,我们先看2个概念. 1.指令集架构(ISA) ISA 的全称是 instruction set architecture,中文就是指令集架构,是指对程序员实际"可见" ...

  8. X86汇编语言从实模式到保护模式11:指令格式及操作尺寸

    目录 1. 80286的16位保护模式 1.1 80286寄存器 1.2 80286段描述符 1.3 80286保护模式内存访问 2. 指令操作尺寸 2.1 指令操作尺寸的概念 2.2 16位处理器的 ...

  9. [书]x86汇编语言:从实模式到保护模式 -- 第17章 中断、任务切换、分页机制、平坦模型

    # 任务切换 内核任务.用户任务1.用户任务2,之前的轮询切换 利用RTC芯片的硬件中断来实现任务切换 计算机主板上有实时时钟芯片RTC,可以设置RTC芯片,使得它每次更新CMOS中的时间信息后,发出 ...

最新文章

  1. sql server 2008数据复制
  2. MySQL事务隔离级别详解
  3. java junit Assert断言用法示例: Assert.assertEquals(期望的结果,运算的结果)
  4. 2015年 第06届 蓝桥杯 Java B组 决赛真题详解及小结
  5. 我弥留之际 - 许立志 (珍藏)
  6. (JAVA)正则表达式
  7. Ubuntu下MySQL root密码忘记的解决方法
  8. 冒泡排序及其三种优化方案
  9. mac更新之后vmware fusion下vmware tools报错
  10. php对blob视频加密,blob 视频加密
  11. JAVA 疯狂讲义 学习笔记
  12. ets交易软件测试简历,ETS工具使用指南
  13. 面试常见的26个问题
  14. 获取apk运行占手机RAM大小
  15. 《天下少年英雄》隐私政策
  16. 笔记本w ndows未能启动,Windows未能启动原因可能是最近更改了硬件或软件解决方法...
  17. Android系统应用开发
  18. 阿里p9 Python工程师,进阶书籍推荐
  19. 程序员的自我修养-读后感
  20. 基本面量化与美林时钟模型

热门文章

  1. JavaScript学习笔记之数组(二)
  2. 分页原理+分页代码+分页类制作
  3. #include NOIP2009 Junior 细胞分裂 ——using namespace wxl;
  4. easyui中的datagrid的数据加载的问题
  5. WPF系列(一)第一个WPF应用程序!
  6. 推荐《求医不如求己》,实用
  7. MYsql:net start mysql 失败 发生系统错误5
  8. 时频分析:短时傅里叶变换应用
  9. 英伟达jetson TX1的caffe-ssd配置
  10. 科大星云诗社动态20210215