您现在的位置: 爱51代码网 >> 范文 >> 文章正文
每个进程都有一个内核栈吗

每个进程都有一个内核栈吗

那这个内核栈里存放着什么呢?
这个进程调用的函数分配的数据?
书上说内核栈的底部存放有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个字节可以使用。

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

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

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

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    随机找出24个不一样的字,在把一
    java怎么实现html转为pdf
    lotus数据列表文档个数如何实时统
    lotus代理中LS如何将字符串保存到
    在lotus BS系统里怎样方便实现统
    GIS用百度行政区域的经纬度直接画
    不小心卸载了.net 4 extend,vs2
    C#byte【】里的数转换成string时
    C#的session取不到值
    java如何判断一个字符串里的数字
    java怎么实现html转为pdf
    lotus数据列表文档个数如何实时统
    在lotus BS系统里怎样方便实现统
    undefined reference timer_crea
    linux文件/usr/lib破坏了,还原后
    Freebsd和Centos哪个做为服务
    E212: Can't open file 
    如何将现有linux系统备份并做
    所选的用户密钥未在远程主机
    所选的用户密钥未在远程主机
    openfire是用什么机制停止程
    multiple definition of 
    bash 脚本启动后台进程100%
    linux简单线程池中的互斥锁
    linux myeclipse hibernate 
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |