linux 进程切换 堆栈 演示

linux 进程切换 堆栈 演示

ID:40805274

大小:350.00 KB

页数:10页

时间:2019-08-07

linux 进程切换 堆栈 演示_第1页
linux 进程切换 堆栈 演示_第2页
linux 进程切换 堆栈 演示_第3页
linux 进程切换 堆栈 演示_第4页
linux 进程切换 堆栈 演示_第5页
资源描述:

《linux 进程切换 堆栈 演示》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

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_An

2、ext_Aprev_A%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进程内核描述

3、符中:"movl%%esp,%[prev_sp]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_fla

4、g%eax%edx%ecx%ebx%esi%edi%esp%ebpprev_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->t

5、hread.sp%flagsA_flagstep5:把标号为1的指令地址保存到A进程描述符的ip域:"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内存空间寄存

6、器组Prev_A_ipnext_ip$1f%flagsA_flagstep6:将返回地址保存到堆栈,然后调用__switch_to()函数,__switch_to()函数完成硬件上下文切换。"pushl%[next_ip]t"/*restoreEIP*/根据esp的位置,压到了B的堆栈里面"jmp__switch_to"/*regparmcall*/ebp%ebp04812eflags-4……进程A的内核栈空间0x2080x2040x2000x1140x1100x10c0x1080x1040x100%esp0x20c进程B

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

8、pprev_Anext_AA_ebpEsp_A内存空间寄存器组Prev_A_ipnext_ipnext_ipTSS_A%flagsAflagnext_ipebpeflags%eip$1fstep7:__switch_to切换硬件上下文

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

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

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