X86栈切换,任务切换
栈切换:
从TSS中选取目标DPL栈,读出段选择子和ESP;
–>使用选择子读取栈描述符,检查特权级,类型等;
–>临时保存旧栈(当前栈)SS, ESP;(1)
–>新栈选择子, ESP代入SS, ESP, 切换新栈;
–>将(1)保存的旧栈SS, ESP压入新栈(保护现场);
–>根据调用门描述符 ‘参数个数’,从旧栈中读出压入新栈;
–>压入CS, EIP(保存现场);
–>从调用门描述符中读出段选择子+偏移–>CS:IP, 开始调用;
任务切换:
1.中断切换:
中断发生–>中断号*8(描述符8B)访问中断向量表;
–>为任务门进行任务切换,否则普通中断处理;
–>取出任务门描述符–>从描述符中取出新任务TSS选择子;
–>用选择子访问GDT取得新任务TSS描述符;
–>将当前任务状态存到TR->TSS中;
–>访问新TSS,从中恢复:通用Reg,EFLAGS,段Reg,EIP,ESP,LDTR等;
–>TR指向新TSS(切换完成);
–>开始执行新任务(一旦新任务开始,CPU固件置TSS中B为’1’,忙);
2.CALL,JUMP切换:
操作数是TSS选择子/任务门, 首先根据选择子访问GDT,指令中32位偏移忽略,全部从TSS中获得;
3.注意点:
CALL和中断发起的切换时嵌套的,旧任务:TSS’B’置’1’,EFLAGS’NT’不变,新任务:TSS’B’置’1’,EFLAGS ‘NT’置’1’,TSS任务链域填旧TSS选择子;
JMP发起的切换不会形成嵌套,旧TSS’B’置’0(非忙),EFLAG’NT’不变,新任务TSS’B’置1,EFLAGS’NT’保持从TSS加载时的状态;
返回过程:
1.同级特权级:栈中弹出调用者代码段选择子和之灵指针;
2.特权级变化的远返回,只能返回到低特权级;
3.全部过程:
检查栈中CS,根据RPL决定返回时是否需要改变特权级;
–>针对代码段描述符和选择子RPL进行特权级检查;
–>若远返回带参数,ESP+参->调用者SS,ESP(被调用者栈);
–>若返回要改变特权级,SS、ESP压栈,切回调用者栈;
–>若远返回带参数,ESP+参 平衡栈 (调用者栈);
–>若返回要改变特权级,检查DS,ES,FS,GS找到对应描述符,要是有任意DPL<调用者CPL(当前CPL),CPU将0传给该Reg;
X86栈切换,任务切换相关推荐
- 计算机输入法不能切换用户登录,输入法不能正常切换,输入法切换不出来 - 输入法切换不了,输入法不能切换怎么办? - 安全专题...
输入法不见了,输入法切换不了,输入法不能切换到底是怎么回事? 近日,金山安全专家频繁收到网民关于输入法不能正常切换,输入法切换不出来等问题求助.许多网友以为是自己的设置问题才会出现输入法不能正常切换现 ...
- 用js实现点击切换+自动切换的轮播图
用js实现点击切换+自动切换的轮播图 之前博主写过一篇用css实现轮播图的文章,可以看到用css实现的轮播图也能实现我们所需要的功能.那么这些功能用js该如何实现呢?我们一起来看下吧! (ps:博主在 ...
- [UE5]在多个固定摄像机视角间切换,切换多个摄像机,显示不同摄像机所看内容
[UE5]在多个固定摄像机视角间切换,切换多个摄像机,显示不同摄像机所看内容 1.写在前面 01.作者碎碎念 02.结果 演示截图 演示视频 视频教程 源码链接 03.实现思路 实现思路 04.同步的 ...
- usb切换器计算机无法识别,迈拓维矩电脑切换器切换不了了是怎么回事
公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:迈拓维矩电脑切换器切换不了了是怎么回事 问题详情:切换器换了2个了.都是这样.谁能告诉什么情况啊?急啊回答:我的也不能切换,换了一个 ...
- 【MAPBOX基础功能】05、底图切换 - mapbox切换高德、天地图、bingmap等底图
前言 官网指引,生成accesstoken,下载相关依赖请翻阅[https://blog.csdn.net/weixin_44402694/article/details/125414381?spm= ...
- Python爬虫之selenium对标签页切换、切换frame标签、cookie处理、执行js代码、开启无界面、以及使用代理ip和替换user-agent等方法
一.selenium对标签页切换.切换frame标签.cookie处理.执行js代码.开启无界面.以及使用代理ip和替换user-agent等方法 (一).selenium标签页的切换 当seleni ...
- x86 的 TSS 任务切换机制
转自:http://blog.chinaunix.net/uid-587665-id-2732907.html [0]写在前面 segment descriptors 构建保护模式下的最基本.最根本的 ...
- Linux 目录栈及目录切换
使用 cd - (中杠)会切换到上一次的目录 cd 命令会改变目录栈 1.dirs 1)功能 显示当前目录栈中的所有记录(不带参数的dirs命令显示当前目录栈中的记录) 2)语法 (1)格式:dirs ...
- node版本切换,X86和64位切换,新建依赖包和依赖
gnvm node-version 查看当前node版本32位/64位 gnvm ls 显示可以切换的node版本和x86 gnvm use 8.12.0 切换版本 gnvm install 8.12 ...
- Fragment 使用 replace 的方式实现切换 以及切换的时候Fragment 生命周期
这个主要代码在activity里面 如下 public class ReplaceActivity extends AppCompatActivity implements View.OnClickL ...
最新文章
- java两个线程循环打印_java循环打印 多线程
- (视频+图文)机器学习入门系列-第6章 机器学习库Scikit-learn
- 按下enter键禁止页面刷新
- 这五部关于海洋的纪录片,每一帧都犹如壁纸!
- maven的Windows环境下安装配置
- 在一个由 'L' , 'R' 和 'X' 三个字符组成的字符串(例如RXXLRXRXL)中进行移动操作。一次移动操作指用一个LX替换一个XL,或者用一个XR替换一个RX。现给定起始...
- Python 远程桌面协议RDPY简介
- Kotlin中变量不同于Java: var 对val(KAD 02)
- 通过允许指定IP访问apahce虚拟主机加强服务器安全
- 如何用CSC.exe来编译Visual C#的代码文件
- 删除可恶的7654.com,7654导航篡改首页恢复,如何解决浏览器被7654劫持
- 转:: 刺鸟:用python来开发webgame服务端(4)
- 跨维度的打击,是可以直接秒杀的
- Markdown 语法手册全
- 日本关西信息中心:LPWAN技术ZETA、LoRaWAN、SIGFOX测评分析
- html360全景图原理,html360°全景展示 示例
- evc小项目:Gps功分器测试
- 对软件测试团队“核心价值”的思考(来自 李云)
- 开源技术可以解决贸易战?Richard Stallman 给微软的十条公开建议等;开源之道每周评论(2019 10 08))...
- 无限位小写金额转换大写金额(修订版)