|
发表于 2006-3-17 15:26:27
|
显示全部楼层
Post by xieweiyi
应该为每个进程保留栈,但是这个栈我觉得放在用户空间也是可以实现的,简单的说
现在的内核栈底为了节省空间,并没有存放整个task_struct而是放置了一个指针,
那么我们只要把一些必要的信息存放在内核空间,而运行时的堆栈放在用户空间,应该
也是可行的;
安全是一个不错的理由,我觉得这是关键;
如果用户栈和内核栈在一块,马上下面两个非常严重的问题会出现
1 本地线程,内核要保存额外的信息来判断切换线程后使用那个线程栈,与其如此
,还不如直接用内核栈,因为内核栈本来与本地线程就是1,1对应的。
2 内核抢占, 内核抢占要么放弃,要么就非常沉重,因为不论抢占是否需要执行,
内核都要切换页表,为了一句if切换整个地址空间太累了。 |
|