前言

  • 任务切换可以分为协同和抢占
  • 协同就是任务自己主动交出控制权,抢占就是利用中断,强制从任务手中获得控制权

N位

  • 任务门和调用门类似,任务门描述符可以放置在GDT,LDT中
  • 当发生中断的时候,中断号x8+中断描述符表基地址,当CPU辨别这是一个任务门的时候就执行任务切换
  • 除此之外,还可以通过 call 任务门或者call TSS选择子进行任务切换
  • 矛盾在于用iret返回的时候,怎么鉴别是从中断返回还是从任务返回
  • 在EFLAGS里面有一个N位,当该位是1时,表明当前任务属于嵌套在其他任务之中,那么就属于从任务返回
  • 当中断或者Call 发生执行任务切换会发生任务嵌套,将当前任务的所有状态进行保存,不改变N位和B位,将下一个任务TSS的任务链接域指向上一个任务,并且将B位和N位置为1
  • 当用Jump的时候并不会,将当前B位置0,不改变N位。然后加载下一个任务的TSS进TR,并将其B位置1,不改变N位
  • 任务切换不允许重入
  • A切换到A无法进行状态保存
  • ABC任务嵌套,C再去嵌套A,就会导致死循环
  • 通过中断发生的任务切换,不检验特权级
  • 数据访问的特权级检查规则适用于jmp和call指令,当前任务的cpl和新任务段选择子的RPL必须在数值上小于或者等于目标TSS或者任务门的DPL。异常,中断和iret指令引起的任务切换忽略目标任务门或者TSS描述符DPL。对于以int n 指令产生的中断,要检查DPL
  • 通过B位来检验。

IOPL

  • 在处理器的标志寄存器EFLAGS中,位13,位12是IOPL,也就是输入/输出特权级,它代表着当前任务的I/O特权级别
  • 如果当前特权级CPL高于,或者和任务的I/O特权级IOPL相同时,所有I/O操作都是允许的
  • 处理器不限制0特权级程序的I/O访问,总是允许的

x86汇编之任务切换相关推荐

  1. 寄存器理解 及 X86汇编入门

    本文整理自多材料源,感谢原址分享,请查看末尾Url I, 汇编语言分类: 汇编语言和CPU息息相关,但是不能把汇编语言完全等同于CPU的机器指令.不同架构的CPU指令并不相同,如x86,powerpc ...

  2. 【操作系统学习笔记(一)】对x86汇编知识做了粗略补充,以及尽力读懂代码片段

    学习参考:B站哈工大李治军老师的网课 前置知识:计组,和x86有亿点点区别的RISC-V指令集. 其他章节笔记: (一)操作系统的启动 (二)系统调用 (三)操作系统历史 (四)多进程管理图像 (五) ...

  3. 二进制分析实战:x86汇编快速入门

    因为汇编语言是二进制文件中机器指令的标准表示形式,许多二进制分析都基于反汇编,所以读者必须熟悉x86汇编语言的基础知识,才能从本书中获得最大收获.本附录将为你介绍汇编语言的基础知识. 本附录的目的不是 ...

  4. 在VS2015中编写x86汇编

     参考教程: 作者:上下求索 VS2015,C嵌套汇编 & C,汇编相互调用 http://ylqhust.github.io/blog/2016/04/17/vs-clanguage-asm ...

  5. 【Android 逆向】x86 汇编 ( align | db | dw | dd | nop | 伪指令 )

    文章目录 一.align 字节对齐指令 二.db / dw / dd 指令 三.nop 指令 总结 一.align 字节对齐指令 align 字节对齐 ; 默认情况下是 161616 字节对齐 ; 该 ...

  6. x86汇编指令集大全

    一.数据传输指令 1. 通用数据传送指令 MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX ...

  7. 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)

    From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...

  8. 【汇编优化】之X86汇编优化

    入门序  本文主要讲解x86汇编的内容,涉及的东西比较多,篇幅比较有限,但部分详尽的内容给出了具体的参考网址:本文主要讲了x86_32.windows64以及Linux64下纯汇编的编写. 英文版:h ...

  9. X86汇编常见的寄存器

    X86汇编常见的寄存器 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES.CS.SS.DS.FS和GS) ...

  10. 编译原理—x86汇编指令

    eax, ebx, ecx, edx, esi, edi, ebp, esp寄存器 eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄 ...

最新文章

  1. linux 压缩文件夹格式,Linux下常见文件格式的压缩、解压小结
  2. Exchange如何将邮件转发给外部邮件地址
  3. Helloj2ee WPF书评系列——缘起
  4. java入门经典 贴吧_学完Java经典入门 后就想编游戏了
  5. zend framework mysql_Zend Framework连接Mysql数据库实例分析
  6. 摘抄《天龙八部》诗词回目
  7. CVPR 2021 最佳论文奖项出炉,何恺明等获最佳论文提名 !
  8. 时间加密算法_物联网安全:可计算加密算法
  9. 5. PHP APC APCu 安装使用
  10. c#进度条刻度_自定义滑动刻度进度条
  11. STM32F030C8T6 STM32F307VCT6 STM32F107VCT6结构图( block diagram)位置是在数据手册中
  12. Markdown文档编写规则:标题
  13. 【Python爬虫历程】使用Cookie来模拟登陆
  14. 华为OJ——将真分数分解为埃及分数
  15. 多线程面试题汇总(一)
  16. OMV安装可道云kodexplorer网盘
  17. Matlab给图片加网格
  18. DevOps落地实践及案例分享
  19. movie_recommendation_spark1
  20. 【逗老师带你学IT】PRTG安装教程-部署简单功能强大的监控软件

热门文章

  1. CSDN,我!王睿,回来了!!!
  2. 创建虚拟文件系统设备文件节点_使用proc_create实例分析
  3. rk3399_android7.1关于secureboot操作说明
  4. python中使用Opencv进行人脸检测
  5. getElementById和querySelector方法的区别
  6. Xcode 工程文件打开不出来, cannot be opened because the project file cannot be parsed.
  7. HCIE-Security Day35:IPSec-NAT-T
  8. smart-link原理
  9. H3C和cisco单臂路由和三层交换机实现VLAN之间的互通
  10. 杭电计算机2010年笔试真题详解