Linux每一个进程都有两个堆栈,一个是内核态堆栈,一个是用户态堆栈。
内核态堆栈:Linux在创建一个新的进程的时候(fork),会申请两页内存,用来做内核态的堆栈,同时将thread_info的信息存放在这个内核堆栈上面,所以内核态的堆栈的可用量就是8K-sizeof(thread_info)。
这样的好处是,在内核态通过堆栈指针sp就可以得到当前进程的thread_info结构,这个结构的第一个成员便是task_struct进程描述符结构。
用户态堆栈:既是存在用户线性区的地址上面。
当发生中断是,进程就会从当前进程的用户态堆栈切换到内核态堆栈,并将当前进程的信息保存到内核态堆栈上面,当进程返回到用户层是进程就从当前的内核堆栈中取出相应的现场信息,恢复当前用户态进程的执行。
参考
http://blog.sina.com.cn/s/blog_8ffd622b0100w78l.html
阅读(1319) | 评论(0) | 转发(0) |