x86汇编之任务切换
前言
- 任务切换可以分为协同和抢占
- 协同就是任务自己主动交出控制权,抢占就是利用中断,强制从任务手中获得控制权
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汇编之任务切换相关推荐
- 寄存器理解 及 X86汇编入门
本文整理自多材料源,感谢原址分享,请查看末尾Url I, 汇编语言分类: 汇编语言和CPU息息相关,但是不能把汇编语言完全等同于CPU的机器指令.不同架构的CPU指令并不相同,如x86,powerpc ...
- 【操作系统学习笔记(一)】对x86汇编知识做了粗略补充,以及尽力读懂代码片段
学习参考:B站哈工大李治军老师的网课 前置知识:计组,和x86有亿点点区别的RISC-V指令集. 其他章节笔记: (一)操作系统的启动 (二)系统调用 (三)操作系统历史 (四)多进程管理图像 (五) ...
- 二进制分析实战:x86汇编快速入门
因为汇编语言是二进制文件中机器指令的标准表示形式,许多二进制分析都基于反汇编,所以读者必须熟悉x86汇编语言的基础知识,才能从本书中获得最大收获.本附录将为你介绍汇编语言的基础知识. 本附录的目的不是 ...
- 在VS2015中编写x86汇编
参考教程: 作者:上下求索 VS2015,C嵌套汇编 & C,汇编相互调用 http://ylqhust.github.io/blog/2016/04/17/vs-clanguage-asm ...
- 【Android 逆向】x86 汇编 ( align | db | dw | dd | nop | 伪指令 )
文章目录 一.align 字节对齐指令 二.db / dw / dd 指令 三.nop 指令 总结 一.align 字节对齐指令 align 字节对齐 ; 默认情况下是 161616 字节对齐 ; 该 ...
- x86汇编指令集大全
一.数据传输指令 1. 通用数据传送指令 MOV 传送字或字节. MOVSX 先符号扩展,再传送. MOVZX 先零扩展,再传送. PUSH 把字压入堆栈. POP 把字弹出堆栈. PUSHA 把AX ...
- 汇编中各寄存器的作用(16位CPU14个,32位CPU16个)和 x86汇编指令集大全(带注释)
From:https://www.cnblogs.com/zimmerk/articles/2520011.html From:https://blog.csdn.net/bjbz_cxy/artic ...
- 【汇编优化】之X86汇编优化
入门序 本文主要讲解x86汇编的内容,涉及的东西比较多,篇幅比较有限,但部分详尽的内容给出了具体的参考网址:本文主要讲了x86_32.windows64以及Linux64下纯汇编的编写. 英文版:h ...
- X86汇编常见的寄存器
X86汇编常见的寄存器 4个数据寄存器(EAX.EBX.ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES.CS.SS.DS.FS和GS) ...
- 编译原理—x86汇编指令
eax, ebx, ecx, edx, esi, edi, ebp, esp寄存器 eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄 ...
最新文章
- linux 压缩文件夹格式,Linux下常见文件格式的压缩、解压小结
- Exchange如何将邮件转发给外部邮件地址
- Helloj2ee WPF书评系列——缘起
- java入门经典 贴吧_学完Java经典入门 后就想编游戏了
- zend framework mysql_Zend Framework连接Mysql数据库实例分析
- 摘抄《天龙八部》诗词回目
- CVPR 2021 最佳论文奖项出炉,何恺明等获最佳论文提名 !
- 时间加密算法_物联网安全:可计算加密算法
- 5. PHP APC APCu 安装使用
- c#进度条刻度_自定义滑动刻度进度条
- STM32F030C8T6 STM32F307VCT6 STM32F107VCT6结构图( block diagram)位置是在数据手册中
- Markdown文档编写规则:标题
- 【Python爬虫历程】使用Cookie来模拟登陆
- 华为OJ——将真分数分解为埃及分数
- 多线程面试题汇总(一)
- OMV安装可道云kodexplorer网盘
- Matlab给图片加网格
- DevOps落地实践及案例分享
- movie_recommendation_spark1
- 【逗老师带你学IT】PRTG安装教程-部署简单功能强大的监控软件
热门文章
- CSDN,我!王睿,回来了!!!
- 创建虚拟文件系统设备文件节点_使用proc_create实例分析
- rk3399_android7.1关于secureboot操作说明
- python中使用Opencv进行人脸检测
- getElementById和querySelector方法的区别
- Xcode 工程文件打开不出来, cannot be opened because the project file cannot be parsed.
- HCIE-Security Day35:IPSec-NAT-T
- smart-link原理
- H3C和cisco单臂路由和三层交换机实现VLAN之间的互通
- 杭电计算机2010年笔试真题详解