在线等解答:linux-0.11内核中的fork函数的问题
时间:2011-08-07
来源:互联网
我最近在看linux0.11内核源码,关于fork函数的具体实现一直不懂,重点问题是它是如何实现对不同的进程返回不同的值的。还有就是看那内核完全注释书上关于fork.c程序中的copy_process函数中
p->tss.eax=0
有一句注释是:这是当fork返回时,新进程返回0的原因所在
这如何理解。请大家详细解释下,谢谢
在线等解答,分数不够可以再加
p->tss.eax=0
有一句注释是:这是当fork返回时,新进程返回0的原因所在
这如何理解。请大家详细解释下,谢谢
在线等解答,分数不够可以再加
作者: fei2012 发布时间: 2011-08-07
个人理解,仅供参考。
在C程序中,默认是用EAX做返回值。
fork是由中断驱动的,
对于父进程来说,中断结束后,会返回到中断发生点继续执行,于是父进程获取的pid是子进程的ID号(因为fork最后会return 一个ID号,这个ID号保存在EAX寄存器中)。
对子进程来说,要切换到子进程,首先会发生任务切换,用子进程TSS中的值写入CPU各寄存器中,于是此时EAX寄存器的值便等于0了,而子进程也是从fork调用的返回处开始执行,它查看EAX寄存器的值,是0,于是它获取到的PID是0.
在C程序中,默认是用EAX做返回值。
fork是由中断驱动的,
对于父进程来说,中断结束后,会返回到中断发生点继续执行,于是父进程获取的pid是子进程的ID号(因为fork最后会return 一个ID号,这个ID号保存在EAX寄存器中)。
对子进程来说,要切换到子进程,首先会发生任务切换,用子进程TSS中的值写入CPU各寄存器中,于是此时EAX寄存器的值便等于0了,而子进程也是从fork调用的返回处开始执行,它查看EAX寄存器的值,是0,于是它获取到的PID是0.
作者: bicener 发布时间: 2011-08-07
刚刚看了下关于linux任务切换的一些知识,是这么说的:CPU执行任务切换时,会把其所有寄存器的状态保存到当前任务寄存器TR中的TSS段选择符所指的当前进程任务数据结构的tss结构中,然后把新的任务状态段选择符所指向的新任务数据结构的tss结构中寄存器信息恢复到CPU中,系统就正式开始运行新切换的任务了。这样跟你的解释也意思一样了,但我又有一个问题就是:我看了下switch_to的源码,
#define switch_to(n) {\
struct {long a,b;} __tmp; \
__asm__("cmpl %%ecx,_current\n\t" \
"je 1f\n\t" \
"movw %%dx,%1\n\t" \
"xchgl %%ecx,_current\n\t" \
"ljmp %0\n\t" \
"cmpl %%ecx,_last_task_used_math\n\t" \
"jne 1f\n\t" \
"clts\n" \
"1:" \
::"m" (*&__tmp.a),"m" (*&__tmp.b), \
"d" (_TSS(n)),"c" ((long) task[n])); \
}
其中也没有具体实现CPU是如何把当前CPU的寄存器信息保存到当前进程的任务数据结构的tss中的操作呀,同时也没有是如何把新任务的tss恢复到寄存器中,是不是这些都是由CPU执行ljmp %0指令完成的?
#define switch_to(n) {\
struct {long a,b;} __tmp; \
__asm__("cmpl %%ecx,_current\n\t" \
"je 1f\n\t" \
"movw %%dx,%1\n\t" \
"xchgl %%ecx,_current\n\t" \
"ljmp %0\n\t" \
"cmpl %%ecx,_last_task_used_math\n\t" \
"jne 1f\n\t" \
"clts\n" \
"1:" \
::"m" (*&__tmp.a),"m" (*&__tmp.b), \
"d" (_TSS(n)),"c" ((long) task[n])); \
}
其中也没有具体实现CPU是如何把当前CPU的寄存器信息保存到当前进程的任务数据结构的tss中的操作呀,同时也没有是如何把新任务的tss恢复到寄存器中,是不是这些都是由CPU执行ljmp %0指令完成的?
作者: fei2012 发布时间: 2011-08-07
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28