linux_进程切换过程堆栈的变化.ppt

linux_进程切换过程堆栈的变化.ppt

ID:48427400

大小:300.50 KB

页数:10页

时间:2020-01-19

linux_进程切换过程堆栈的变化.ppt_第1页
linux_进程切换过程堆栈的变化.ppt_第2页
linux_进程切换过程堆栈的变化.ppt_第3页
linux_进程切换过程堆栈的变化.ppt_第4页
linux_进程切换过程堆栈的变化.ppt_第5页
资源描述:

《linux_进程切换过程堆栈的变化.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、step1:复制两个变量到寄存器:[prev]"a"(prev)[next]"d"(next)即:eax<==prev_A或eax<==%p(%ebp_A)edx<==next_A或edx<==%n(%ebp_A)04812-4Address0x1240x1200x11c0x1180x1140x1100x10c0x1080x1040x100%eax%edx%ecx%ebx%esi%edi%esp%ebp进程A的内核栈空间prev_A内存空间寄存器组next_ip%ebp%esp%ebpA_ebpnext_Aprev_Anext_Anext_Aprev_A%

2、flagsA_flagstep2:保存进程A的ebp和eflagspushflpushl%ebp%ebp04812-4进程A的内核栈空间0x1240x1200x11c0x1180x1140x1100x10c0x1080x1040x100%eax%edx%ecx%ebx%esi%edi%esp%ebpprev_Anext_AA_ebp%esp内存空间寄存器组next_ip%ebpA_ebpA_flagA_ebp%flagsA_flag%flagsA_flagA_flagstep3:保存当前esp到A进程内核描述符中:"movl%%esp,%[prev_sp]

3、t"/*saveESP*/它可以表示成:prev_A->thread.sp<==esp_A在调用switch_to时,prev是指向A进程自己的进程描述符的。ebp%ebp04812eflags-4进程A的内核栈空间0x1240x1200x11c0x1180x1140x1100x10c0x1080x1040x100%eax%edx%ecx%ebx%esi%edi%esp%ebpprev_Anext_AA_ebp%espEsp_A内存空间寄存器组next_ip%flagsA_flag%eax%edx%ecx%ebx%esi%edi%esp%ebppre

4、v_Anext_AA_ebpEsp_A内存空间寄存器组next_ipebp%ebp04812eflags-4……进程A的内核栈空间0x2080x2040x2000x1140x1100x10c0x1080x1040x100%esp0x20c进程B的内核栈空间step4:从next(进程B)的描述符中取出之前从B切换出去时保存的esp_B。"movl%[next_sp],%%espt"/*restoreESP*/它可以表示成:esp_B<==next_A->thread.sp%flagsA_flagstep5:把标号为1的指令地址保存到A进程描述符的ip

5、域:"movl$1f,%[prev_ip]t"/*saveEIP*/它可以表示成:prev_A->thread.ip<==%1febp%ebp04812eflags-4……进程A的内核栈空间0x2080x2040x2000x1140x1100x10c0x1080x1040x100%esp0x20c进程B的内核栈空间%eax%edx%ecx%ebx%esi%edi%esp%ebpprev_Anext_AA_ebpEsp_A内存空间寄存器组Prev_A_ipnext_ip$1f%flagsA_flagstep6:将返回地址保存到堆栈,然后调用__swit

6、ch_to()函数,__switch_to()函数完成硬件上下文切换。"pushl%[next_ip]t"/*restoreEIP*/根据esp的位置,压到了B的堆栈里面"jmp__switch_to"/*regparmcall*/ebp%ebp04812eflags-4……进程A的内核栈空间0x2080x2040x2000x1140x1100x10c0x1080x1040x100%esp0x20c进程B的内核栈空间%eax%edx%ecx%ebx%esi%edi%esp%ebpprev_Anext_AA_ebpEsp_A内存空间寄存器组Prev

7、_A_ipnext_ipnext_ip%flagsA_flagnext_ipebpeflagsstep7:__switch_to切换硬件上下文件ebp%ebp04812eflags-4……进程A的内核栈空间0x2080x2040x2000x1140x1100x10c0x1080x1040x100%esp0x20c进程B的内核栈空间%eax%edx%ecx%ebx%esi%edi%esp%ebpprev_Anext_AA_ebpEsp_A内存空间寄存器组Prev_A_ipnext_ipnext_ipTSS_A%flagsAflagnext_ipebpefla

8、gs%eip$1fstep7:__switch_to切换硬件上下文

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。