kernel学习tip

1,tasklet中不能使用使用让系统schedule的函数,如sleep等,因为tasklet 可能运行在ksoftirqd_CPUn内核线程,也有可能运行在中断上下文,如果运行在中断上下文中,tasklet是不能让系统schedule的。

2,中断处理程序中不能使用让kernelschedule的函数,如sleep等。

3,cat /proc/kallsyms 让地址不为0,则必须echo 0 > /proc/sys/kernel/kptr_restrict

4,addr2line通过地址查看所在的函数已经函数所在文件的路径

5,linux kernel三大内存分配器,分别是SLOB,SLAB,SLUB

6,void *kmalloc(size_t size, gfp_t flags)

  kmalloc 基于以下几种size的mem cache:32, 64, 128, 256, 512, 1,024, 2,048, 4,096,

  8,192, 16,384, 32,768, 65,536 和 131,072 bytes。其本质也是调用kmem_cache_alloc来分配

  object。所以kmalloc一次最大可分配的size为128KB。kmalloc分配速度很快,在分配时需注意gfp flag

  参数:在不interrupt上下文(ISR, softirq, tasklet)及不可睡眠上下文使用GFP_ATOMIC。

  内核还增加了内存清零的分配函数:kzalloc。

7,vmalloc分配的内存物理不一定连续,虚拟地址是连续的,kmalloc分配的内存物理连续,虚拟地址也是连续的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值