欢迎来到天天文库
浏览记录
ID:48427400
大小:300.50 KB
页数:10页
时间:2020-01-19
《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切换硬件上下文
此文档下载收益归作者所有