LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 924|回复: 0

2.6.0内核do_exit函数的疑问。

[复制链接]
发表于 2003-11-23 10:53:21 | 显示全部楼层 |阅读模式
最近浏览linux-2.6.0-test9版内核,其中do_exit函数有一个地方我总觉得有问题,当然一定是我
没有理解编写者的意图,请大家帮我分析分析,问题如下:

NORET_TYPE void do_exit(long code)
{
.
.
.

if (tsk->exit_signal == -1 && tsk->ptrace == 0)
release_task(tsk); /* pay attention to this line! */

schedule();
BUG();
/* Avoid "noreturn function does return". */
for (;;) ;
}

上面的release_task函数会对当前进程的task_struct结构调用put_task_struct函数,
而在当前进程的引用数usage减为0时会而调用__put_task_struct函数来释放进程
的核心栈与tast_struct数据结构。而此时内核抢占并没有被禁止,也就是说刚才
释放的核心栈有可能在调用schedule之前被别的进程分配并使用,而等到再调度
刚才那个进程的时候,核心栈已经不可用了,但调用schedule函数本身就要使用
堆栈,那么这不就会出问题吗?请问内核版的高手们,我到底错在哪?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表