免费注册 查看新帖 |

Chinaunix

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

[内存管理] 有关中断处理程序内访问内存的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-18 23:18 |只看该作者 |倒序浏览
最近在学习Linux内核

看到中断处理程序的相关内容
“中断处理程序从不执行可以导致缺页(因此意味着进程切换)的操作”

是不是说 如果系统支持交换分区 则中断处理程序内就不应该访问由
kmalloc()、vmalloc()等分配的内存空间 否则就有可能引发kernel panic

论坛徽章:
0
2 [报告]
发表于 2013-03-19 07:39 |只看该作者
回复一下吧

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
3 [报告]
发表于 2013-03-19 08:53 |只看该作者
回复 1# yevv


    中断处理本身是很少的代码,如果有大的内容,都是放在后半部分完成。它最多是记录下一些内容,放到了个队列里,所以,这个本来就不会有很多调用。
     至于你说的vmalloc,kmalloc这样的事情,本身是不会有缺页中断的。它们只是把内存分配而已。会产生缺页中断的是对于USER_MODE的处理。内核一般的调用,如果产生缺页中断,有两种可能性。
     1, 你的程序应该由用户程序来处理。
     2, 你的内核程序采用了不恰当的调用。
     

论坛徽章:
10
戌狗
日期:2013-10-17 09:43:0215-16赛季CBA联赛之广东
日期:2018-02-05 11:22:1215-16赛季CBA联赛之八一
日期:2016-07-04 12:26:1815-16赛季CBA联赛之青岛
日期:2016-06-08 11:15:4115-16赛季CBA联赛之辽宁
日期:2016-04-05 10:10:1415-16赛季CBA联赛之辽宁
日期:2016-03-11 11:11:48酉鸡
日期:2014-12-18 14:35:48狮子座
日期:2014-02-20 10:14:07寅虎
日期:2013-12-02 13:48:2915-16赛季CBA联赛之广夏
日期:2018-03-21 08:51:10
4 [报告]
发表于 2013-03-19 10:58 |只看该作者
这算是比较老的问题了,要写driver先学习kmalloc。lz看看书很快就有答案。

论坛徽章:
10
戌狗
日期:2013-10-17 09:43:0215-16赛季CBA联赛之广东
日期:2018-02-05 11:22:1215-16赛季CBA联赛之八一
日期:2016-07-04 12:26:1815-16赛季CBA联赛之青岛
日期:2016-06-08 11:15:4115-16赛季CBA联赛之辽宁
日期:2016-04-05 10:10:1415-16赛季CBA联赛之辽宁
日期:2016-03-11 11:11:48酉鸡
日期:2014-12-18 14:35:48狮子座
日期:2014-02-20 10:14:07寅虎
日期:2013-12-02 13:48:2915-16赛季CBA联赛之广夏
日期:2018-03-21 08:51:10
5 [报告]
发表于 2013-03-19 11:25 |只看该作者
GFP_ATOMIC表示进行不睡眠的高优先级分配,这是中断处理程序和其他不能睡眠的代码段的需要。反之应该使用GFP_KERNEL获取内存。
vmalloc相对kmalloc区别在于是否物理页连续,和性能差别。
多写点。

论坛徽章:
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
6 [报告]
发表于 2013-03-19 12:23 |只看该作者
回复 5# daniel_11
LS正解

   

论坛徽章:
0
7 [报告]
发表于 2013-03-19 20:21 |只看该作者
本帖最后由 yevv 于 2013-03-19 20:23 编辑

回复 5# daniel_11

daniel同学有点误解我的意思了 :)
我的意思是 比如我在模块中
int * ptmp = NULL;
my_module_init(){
    ...
    void * ptmp = kmalloc(BUF_SIZE, GFP_KERNEL);
    ...
}

my_irq_handler()
{
     for(i=0;i<BUF_SIZE;i++)
        *ptmp++ = 0;

}


1) ptmp所指向的内存区域 有没有可能交换到磁盘?
2) 如果有可能交换到磁盘,my_irq_handler()能否访问ptmp指向的内存区
   

论坛徽章:
0
8 [报告]
发表于 2013-03-19 20:32 |只看该作者
正在看《深入理解Liinux内核》 呵呵 看到第九章 "进程地址空间“的内容时 有了这个疑问 :)

daniel_11 发表于 2013-03-19 11:25
GFP_ATOMIC表示进行不睡眠的高优先级分配,这是中断处理程序和其他不能睡眠的代码段的需要。反之应该使用GF ...

论坛徽章:
0
9 [报告]
发表于 2013-03-19 22:15 |只看该作者
明白了 通过kmalloc分配的内存 是不能swap的 :)

论坛徽章:
10
戌狗
日期:2013-10-17 09:43:0215-16赛季CBA联赛之广东
日期:2018-02-05 11:22:1215-16赛季CBA联赛之八一
日期:2016-07-04 12:26:1815-16赛季CBA联赛之青岛
日期:2016-06-08 11:15:4115-16赛季CBA联赛之辽宁
日期:2016-04-05 10:10:1415-16赛季CBA联赛之辽宁
日期:2016-03-11 11:11:48酉鸡
日期:2014-12-18 14:35:48狮子座
日期:2014-02-20 10:14:07寅虎
日期:2013-12-02 13:48:2915-16赛季CBA联赛之广夏
日期:2018-03-21 08:51:10
10 [报告]
发表于 2013-03-19 22:21 |只看该作者
回复 9# yevv
呵呵,确实没理解lz的意思,不好意思哈。
我记得vmalloc,kmalloc的内存是不能交换出去的。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP