免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2078 | 回复: 7
打印 上一主题 下一主题

[内核模块] 内核模块上的栈空间 [复制链接]

论坛徽章:
1
丑牛
日期:2013-10-23 14:49:51
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-04 11:36 |只看该作者 |倒序浏览
内核模块上的栈空间,大小限制是多少呢?
比如在内核模块中,声明大容量数组,栈空间允许最大的地址空间是多少?
大侠指示下

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
2 [报告]
发表于 2013-12-04 14:16 |只看该作者
回复 1# Agimsn
内核模块上的栈空间,大小限制是多少呢?
比如在内核模块中,声明大容量数组,栈空间允许最大的地址空间是多少?



union thread_union {
        struct thread_info thread_info;
        unsigned long stack[THREAD_SIZE/sizeof(long)];
};

THREAD_SIZE default 2 pages size. So max stacksize = (8K - sizeof(struct thread_info))

   

论坛徽章:
1
丑牛
日期:2013-10-23 14:49:51
3 [报告]
发表于 2013-12-04 15:01 |只看该作者
多谢,版主 回复 2# 瀚海书香


   

论坛徽章:
0
4 [报告]
发表于 2014-03-25 16:47 |只看该作者
瀚海书香 发表于 2013-12-04 14:16
回复 1# Agimsn


有一个疑问:kernel module是运行在task上下文吗?
即:shell下run insmod以后,对应的module代码是在insmod这个task的kernel态?

谢谢!

论坛徽章:
0
5 [报告]
发表于 2014-03-26 13:09 |只看该作者
回复 4# studying_linux
不是,你insmod后,执行完init函数后,这个进程就退出了。insmod无非就是一个动态加载的过程.


   

论坛徽章:
0
6 [报告]
发表于 2014-03-26 13:30 |只看该作者
xs3c 发表于 2014-03-26 13:09
回复 4# studying_linux
不是,你insmod后,执行完init函数后,这个进程就退出了。insmod无非就是一个动态 ...

谢谢回复~!
意思是说:在init函数里执行的代码,是在insmod这个task的所在的kernel上下文,对应的栈是insmod这个task的kernel栈。
对吧?

论坛徽章:
0
7 [报告]
发表于 2014-03-26 13:44 |只看该作者
studying_linux 发表于 2014-03-26 13:30
谢谢回复~!
意思是说:意思是说:在init函数里执行的代码,是在insmod这个task的所在的kernel上下文,对应的栈是insmod这个task的kernel栈。
对吧?


意思是说,module的对应的kernel栈,是当前任何一个进程的kernel栈,例如module响应中断,中断一个用户进程,那么这个module就是用的这个用户进程的kernel栈。当然我这儿举例中断是假设kernel并没有单独的irq stack哈。或者另一情况,你这个module创建了一个device node,那么用户程序操作的这个device node的时候,open read write时候陷入内核态的时候,就是你这个用户程序的kernel 栈。

论坛徽章:
0
8 [报告]
发表于 2014-03-26 14:08 |只看该作者
xs3c 发表于 2014-03-26 13:44
意思是说,module的对应的kernel栈,是当前任何一个进程的kernel栈,例如module响应中断,中断一个用户 ...



其实我的问题是init里执行的函数是不是在insmod这个task的kernel栈,呵呵。 我觉得应该是,想跟大家再确认一下。
当然,如果init里create了其他的device node,或者hook了函数到中断响应ISR,那么对应的挂载代码被运行时确实是在当时被打断的task的kernel栈(不开kernel中断栈的前提下)。

您的解释也很清楚,非常感谢~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP