函数xswap由expand调用,xswap释放进程的数据段,该数据段包含进程的内核堆栈(PPDA)。因此,如果释放堆栈,xswap如何返回扩展?
// expand()(ken/slp.c)
expand(newsize)
{
// ...
a2 = malloc(coremap, newsize);
if (a2 == NULL) {
savu(u.u_ssav);
xswap(p, 1, n);
p->p_flag =| SSWAP;
swtch();
// no return
}
// ...
}