当前位置: 首页 > news >正文

内核栈的使用

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

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

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

节省内核栈的方法有:减少局部变量、大型数组和结构体、嵌套调用链。

(作者:刘洪涛,华清远见嵌入式培训中心讲师)

相关文章:

  • IIS 7 ‘Handler XXX has a bad module XXX in its module list’
  • C# 使用 doggleReport 生成pdf报表
  • 在nand flash上实现JFFS2根文件文件系统
  • window API判断系统是否为闲置状态
  • 机器学习 -- 基本数学概念总结
  • 基于S3C2410的SD卡linux驱动工作原理(一)
  • R 学习 -- vector
  • 基于S3C2410的SD卡linux驱动工作原理(二)
  • R 学习 -- factor
  • linux设备模型中ktype的用法
  • R学习-- 数组和矩阵
  • spinlock与linux内核调度的关系
  • R学习 -- R中的five number
  • usb鼠标驱动注解及测试
  • R学习-- R中的绘图命令练习
  • 0基础学习移动端适配
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • CentOS 7 防火墙操作
  • isset在php5.6-和php7.0+的一些差异
  • leetcode46 Permutation 排列组合
  • springMvc学习笔记(2)
  • Unix命令
  • 分布式事物理论与实践
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 积累各种好的链接
  • #13 yum、编译安装与sed命令的使用
  • #define与typedef区别
  • $.ajax()参数及用法
  • (06)Hive——正则表达式
  • (39)STM32——FLASH闪存
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (TOJ2804)Even? Odd?
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (十六)一篇文章学会Java的常用API
  • (十七)Flask之大型项目目录结构示例【二扣蓝图】
  • (转)大型网站的系统架构
  • .Net Memory Profiler的使用举例
  • .NET 材料检测系统崩溃分析
  • .netcore如何运行环境安装到Linux服务器
  • .NET分布式缓存Memcached从入门到实战
  • .NET微信公众号开发-2.0创建自定义菜单
  • /bin/rm: 参数列表过长"的解决办法
  • /run/containerd/containerd.sock connect: connection refused
  • ??myeclipse+tomcat
  • [Angular 基础] - 自定义指令,深入学习 directive
  • [autojs]autojs开关按钮的简单使用
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)
  • [AutoSar]BSW_OS 02 Autosar OS_STACK
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [BZOJ1089][SCOI2003]严格n元树(递推+高精度)