Linux 2.6的switch_to函数的分析
2011-10-29 21:56
537 查看
好久没有更新博客了,这几天再追一个MM(性格很好,兵兵很喜欢,吼吼。),今天看了一下linux中的进程调度,下面把今天看的记录下一下。
其实最需要记录的是switch_to这个函数,这个函数主要是汇编组成。里面有一个最大的卖点就是如下:
"movl $1f,%[prev_ip]\n\t" /* save EIP */ \
"pushl %[next_ip]\n\t" /* restore EIP */ \
"jmp __switch_to\n" /* regparm call */ \
"1:\t" \
"popl %%ebp\n\t" /* restore EBP */ \
"popfl\n" /* restore flags */ \
这会把1f压入到prev->eip寄存器里面,等调用完__switch_to的时候就会调用ret指令,就会找当前内核栈ip也就是next->eip。也就是在返回的时候,返回的是之前next进程被切换的时候存入的到他的eip里面的1f,这个时候,就完完全全的到了next进程之前保存的空间里来了。这样就完成了进程切换。以后在调用prev进程(也就是现在prev是第二个参数),走完__switch_to之后,就会取出现在这里存在prev->eip中的1f了。这就是这个代码的玄机,其他的。。。好像看看大概都还好理解。
本文出自 “难得糊涂” 博客,请务必保留此出处http://hehedeng.blog.51cto.com/888740/701184
其实最需要记录的是switch_to这个函数,这个函数主要是汇编组成。里面有一个最大的卖点就是如下:
"movl $1f,%[prev_ip]\n\t" /* save EIP */ \
"pushl %[next_ip]\n\t" /* restore EIP */ \
"jmp __switch_to\n" /* regparm call */ \
"1:\t" \
"popl %%ebp\n\t" /* restore EBP */ \
"popfl\n" /* restore flags */ \
这会把1f压入到prev->eip寄存器里面,等调用完__switch_to的时候就会调用ret指令,就会找当前内核栈ip也就是next->eip。也就是在返回的时候,返回的是之前next进程被切换的时候存入的到他的eip里面的1f,这个时候,就完完全全的到了next进程之前保存的空间里来了。这样就完成了进程切换。以后在调用prev进程(也就是现在prev是第二个参数),走完__switch_to之后,就会取出现在这里存在prev->eip中的1f了。这就是这个代码的玄机,其他的。。。好像看看大概都还好理解。
本文出自 “难得糊涂” 博客,请务必保留此出处http://hehedeng.blog.51cto.com/888740/701184
相关文章推荐
- Linux-0.11内核源码分析系列:内存管理try_to_share()与share_page()函数分析
- Linux2.6进程调度分析(3)-与调度有关的函数分析
- Linux进程(之)进程切换函数switch_to()解析
- Linux-0.11内核源码分析系列:内存管理try_to_share()与share_page()函数分析
- Linux内核(1)——copy_to_user和copy_from_user两个函数的分析[转]
- Linux switch_to()深入分析
- ratio_to_report分析函数求占比
- Linux下tcp协议socket的recv函数返回时机分析(粘包)
- Linux中的内存分配和释放之__alloc_boot函数分析
- 怎样使用gprof和oprofile来分析 linux程序的性能(每个函数的调用次数与耗时)
- linux下的schedule()函数详解,以及进程的调度,current_thread_info,switch_to宏等笔记
- Linux中select()函数简易分析
- Linux 2.6 Alarm信号中断遇上函数阻塞
- Linux2.6内核进程创建过程分析
- linux中select()函数分析
- linux2.6 makefiles.txt学习及实例分析
- Linux2.6进程调度分析(2)-调度算法
- linux2.6 CFS调度算法分析
- Linux 2.6 调度系统分析
- wifi.c中函数分析: :::int wifi_connect_to_supplicant()