内核栈的使用
来源:互联网 发布:java app开发教程 编辑:程序博客网 时间:2024/06/06 00:44
d
作者:刘洪涛,华清远见嵌入式培训中心讲师。
今天和一个朋友聊天,朋友说在编写驱动时遇到一个怪异的问题。他在内核中使用了一个深度函数调用(多层嵌套的函数),但没有实现预定的效果,但如果把嵌套去掉,函数就没问题了。当时我也没有多想,就回答可能是编译器的问题。回来后头脑中又浮现出这个问题,突然想到内核栈,觉得这个问题的原因应该出在内核栈上。下面简要介绍下内核的知识。
用户空间运行的程序可以从用户空间的栈上分配大量的空间来存放变量或数组、大的结构体。之所以可以这么做,是因为用户空间栈本身比较大,而且还能动态增长。进程的内核栈即不大也不能动态增长;它在32位机上的内核栈为8KB,而64位机是16KB。
每个进程都有自己的内核栈。进程在内核执行期间的每个调用链必须放在自己的内核栈上。中断处理程序也使用配它们打断的进程堆栈。这就意味着,在最恶劣的情况下,8KB的内核栈可能会被多个函数的嵌套调用链和几个中断程序来共享。呵呵,显然深度的嵌套会导致溢出了。
节省内核栈的方法有:减少局部变量、大型数组和结构体、嵌套调用链。
- 内核栈的使用
- 内核栈的使用
- 内核栈的使用
- 内核栈的使用
- 内核栈的使用
- 内核栈的使用
- 【内核】: 内核定时器的使用
- 内核定时器的使用
- 内核定时器的使用
- 内核线程的使用
- 内核定时器的使用
- 内核定时器的使用
- 内核定时器的使用
- 【内核】:定时器的使用
- 内核定时器的使用
- 内核定时器的使用
- 内核定时器的使用
- 内核定时器的使用
- unix系统vi中常用的命令
- ARM linux系统调用的实现原理
- MFC 日期格式
- 认识网卡
- 数据字典(SQL2005)
- 内核栈的使用
- GridView控件的隐藏列
- 深入浅出JSON
- zImage内核镜像解压过程详解
- Struts原理与实践(4)
- SharedMemory
- 用spy++查看消息,通过发送消息控制程序
- eclipse+pydev 安装和配置 【IBM】
- 常用WebServices返回数据的4种方法比较