毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> linux >> 正文

每个进程都有一个内核栈存放着什么呢

更新时间:2015-4-26:  来源:毕业论文

那这个内核栈里存放着什么呢?
这个进程调用的函数分配的数据?
书上说内核栈的底部存放有thread_info这个结构体,然后又说这个栈是向下增长的,还给了个图,我不是很明白这点。
难道说在创建这个内核栈之后,会在栈底创建thread_info结构体,然后esp指向栈顶,并开始使用这个栈?

内核栈和thread_info结构用一个联合体来表示

union thread_union {
    struct thread_info thread_info;
    unsigned long stack[2048];    /* 对4K的栈数组下标是1024 */
};


说这个栈是向下增长的,意思就是栈是向低地址增长的。当进程陷入内核的时候,内核就是使用这个栈来存储局部变量。这个栈很小,x86平台一般只有8KB,因为底部还存放了一个thread_info{},因此只有 8192-sizeof(sturct thread_info)=8140个字节可以使用。

linux一但创建进程就会立刻分配8K,两个页框用来存放栈和thread_info.

请问是不是像我说的那样一开始是在栈底部放了thread_info结构体,然后从顶部开始使用?
是的没错。

那是不是有一种检查机制看看是否越界?
没有,在内核中如果内核栈溢出,后果自负,因此一般不会在内核态下使用大的局部变量。

感觉最后一个问题怪怪的。。无论是用户态还是内核态,局部变量都存在栈中,因此应该是B把。

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。