内核栈的使用

时间:2008-08-19

  今天和一个朋友聊天,朋友说在编写驱动时遇到一个怪异的问题。他在内核中使用了一个深度函数调用(多层嵌套的函数),但没有实现预定的效果,但如果把嵌套去掉,函数就没问题了。当时我也没有多想,就回答可能是编译器的问题。回来后头脑中又浮现出这个问题,突然想到内核栈,觉得这个问题的原因应该出在内核栈上。下面简要介绍下内核的知识。

  用户空间运行的程序可以从用户空间的栈上分配大量的空间来存放变量或数组、大的结构体。之所以可以这么做,是因为用户空间栈本身比较大,而且还能动态增长。进程的内核栈即不大也不能动态增长;它在32位机上的内核栈为8KB,而64位机是16KB。

  每个进程都有自己的内核栈。进程在内核执行期间的每个调用链必须放在自己的内核栈上。中断处理程序也使用配它们打断的进程堆栈。这就意味着,在恶劣的情况下,8KB的内核栈可能会被多个函数的嵌套调用链和几个中断程序来共享。呵呵,显然深度的嵌套会导致溢出了。

  节省内核栈的方法有:减少局部变量、大型数组和结构体、嵌套调用链。
  
  
欲知详情,请登录维库电子市场网(www.dzsc.com



  
上一篇:具有实时振动补偿的显示模块的设计
下一篇:铁电存储器及其在电表存储中的应用

免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

相关技术资料