linux 进程切换 堆栈 演示.ppt

上传人(卖家):hwpkd79526 文档编号:6158019 上传时间:2023-06-04 格式:PPT 页数:10 大小:350KB
下载 相关 举报
linux 进程切换 堆栈 演示.ppt_第1页
第1页 / 共10页
linux 进程切换 堆栈 演示.ppt_第2页
第2页 / 共10页
linux 进程切换 堆栈 演示.ppt_第3页
第3页 / 共10页
linux 进程切换 堆栈 演示.ppt_第4页
第4页 / 共10页
linux 进程切换 堆栈 演示.ppt_第5页
第5页 / 共10页
点击查看更多>>
资源描述

1、step1:复制两个变量到寄存器:复制两个变量到寄存器:prev a(prev)next d(next)即即:eax=prev_A 或或 eax=%p(%ebp_A)edx=next_A 或或 edx thread.sp=esp_A 在调用在调用switch_to时,时,prev是指向是指向A进程自己的进程描述符进程自己的进程描述符的。的。ebp%ebp 0 4 8 12 eflags-4 进程进程A的内核栈空间的内核栈空间0 x124 0 x120 0 x11c 0 x118 0 x114 0 x110 0 x10c0 x108 0 x104 0 x100%eax%edx%ecx%ebx%e

2、si%edi%esp%ebpprev_Anext_AA_ebp%espEsp_A内存空间内存空间寄存器组寄存器组next_ip%flagsA_flag%eax%edx%ecx%ebx%esi%edi%esp%ebpprev_Anext_AA_ebpEsp_A内存空间内存空间寄存器组寄存器组next_ipebp%ebp 0 4 8 12 eflags-4 进程进程A的内核栈空间的内核栈空间0 x2080 x204 0 x2000 x114 0 x110 0 x10c0 x108 0 x104 0 x100%esp0 x20c进程进程B的内核栈空间的内核栈空间step4:从从next(进程(进程B

3、)的描述符中取出之前从)的描述符中取出之前从B切换出去时切换出去时保存的保存的esp_B。movl%next_sp,%espnt/*restore ESP*/它可以表示成:它可以表示成:esp_B thread.sp%flagsA_flagstep5:把标号为把标号为1的指令地址保存到的指令地址保存到A进程描述符的进程描述符的ip域:域:movl$1f,%prev_ipnt /*save EIP */它可以表示成:它可以表示成:prev_A-thread.ip=%1f ebp%ebp 0 4 8 12 eflags-4 进程进程A的内核栈空间的内核栈空间0 x2080 x204 0 x2000

4、 x114 0 x110 0 x10c0 x108 0 x104 0 x100%esp0 x20c进程进程B的内核栈空间的内核栈空间%eax%edx%ecx%ebx%esi%edi%esp%ebpprev_Anext_AA_ebpEsp_A内存空间内存空间寄存器组寄存器组Prev_A_ipnext_ip$1f%flagsA_flagstep6:将返回地址保存到堆栈,然后调用_switch_to()函数,_switch_to()函数完成硬件上下文切换。pushl%next_ipnt /*restore EIP */根据esp的位置,压到了B的堆栈里面 jmp _switch_ton /*regp

5、arm call */ebp%ebp 0 4 8 12 eflags-4 进程进程A的内核栈空间的内核栈空间0 x2080 x204 0 x2000 x114 0 x110 0 x10c0 x108 0 x104 0 x100%esp0 x20c进程进程B的内核栈空间的内核栈空间%eax%edx%ecx%ebx%esi%edi%esp%ebpprev_Anext_AA_ebpEsp_A内存空间内存空间寄存器组寄存器组Prev_A_ipnext_ipnext_ip%flagsA_flagnext_ipebpeflagsstep7:_switch_to 切换硬件上下文件ebp%ebp 0 4 8

6、12 eflags-4 进程进程A的内核栈空间的内核栈空间0 x2080 x204 0 x2000 x114 0 x110 0 x10c0 x108 0 x104 0 x100%esp0 x20c进程进程B的内核栈空间的内核栈空间%eax%edx%ecx%ebx%esi%edi%esp%ebpprev_Anext_AA_ebpEsp_A内存空间内存空间寄存器组寄存器组Prev_A_ipnext_ipnext_ipTSS_A%flagsAflagnext_ipebpeflags%eip$1f step7:_switch_to 切换硬件上下文件ebp%ebp 0 4 8 12 eflags-4 进

7、程进程A的内核栈空间的内核栈空间0 x2080 x204 0 x2000 x114 0 x110 0 x10c0 x108 0 x104 0 x100%esp0 x20c进程进程B的内核栈空间的内核栈空间%eax%edx%ecx%ebx%esi%edi%esp%ebpprev_Bnext_BA_ebpEsp_A内存空间内存空间寄存器组寄存器组Prev_A_ipnext_ipnext_ipTSS_B%flagsA_flagebpeflagsStep9:_switch_to()返回后继续从1:标号后面开始执行,修改ebp到B的内核堆栈,恢复B的eflags:popl%ebpnt /*restore

8、 EBP */popfln /*restore flags*/ebp%ebp 0 4 8 12 eflags-4 ebp进程进程A的内核栈空间的内核栈空间0 x2080 x204 0 x2000 x114 0 x110 0 x10c0 x108 0 x104 0 x100%esp0 x20c进程进程B的内核栈空间的内核栈空间%eax%edx%ecx%ebx%esi%edi%esp%ebpprev_Bnext_BEsp_A内存空间内存空间寄存器组寄存器组Prev_A_ipnext_ipeflagsnext_ip%flagsB_flagB_ebpStep10:将eax写入last,以在B的堆栈中保存正确的prev信息。=a(last)即 last_B=%eaxebp%ebp 0 4 8 12 eflags-4 进程进程A的内核栈空间的内核栈空间0 x2080 x204 0 x2000 x114 0 x110 0 x10c0 x108 0 x104 0 x100%esp0 x20c进程进程B的内核栈空间的内核栈空间%eax%edx%ecx%ebx%esi%edi%esp%ebpnext_BEsp_A内存空间内存空间寄存器组寄存器组Prev_A_iplastnext_ipnext_ip%flagsB_flagB_ebp

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 项目策划与方案类
版权提示 | 免责声明

1,本文(linux 进程切换 堆栈 演示.ppt)为本站会员(hwpkd79526)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|