• linux设备驱动开发详解--读书笔记


    linux下c编程特点

    • typeof 取变量类型
    • GNU c对比ANSI c做了很多扩展,例如动态数组

    第7章 Linux设备驱动中的并发控制

    造成竟态的原因

    • 多核
    • 进程和中断形成的多路径(linux2.6以后,禁止了中断嵌套)
    • 编译乱序
    • 执行乱序

    解决竟态的办法

    • 中断屏蔽:只能屏蔽本核的
    • 原子操作:依赖cpu指令
    • 自旋锁:自旋锁 + 中断屏蔽可以完全解决竟态问题(中断程序中调用自旋锁,进程/线程中调用关中断+自旋锁)
    • 互斥锁:互斥锁允许临界区阻塞,而自旋锁不可以

    第8章 Linux设备驱动中的阻塞与非阻塞I/O

    等待队列

    等待队列一般用于同步访问设备时,当不满足读写时,将进程挂入设备的等待队列,当可以读写时,将通过调用wakeup来唤醒进程。
    globalfifo实现

    注意:使用mutex互斥的地方,获取到lock的一方发现设备不可访问时,再schedule前需释放lock,在被唤醒后重新获取Lock

    第10章 中断与时钟

    中断分为上下半部,下半部机制有tasklet, 工作队列、软中断和线程化irq

    • tasklet:运行在中断上下文,基于软中断实现
    • 工作队列:运行在进程上下文
    • 软中断:包括TIMER_SOFTIRQ, NEXT_TX/RX_SOFTIRQ, SCSI_SOFTIRQ, TASKLET_SOFTIRQ

    第11章 内存与I/O访问

    内核内存管理

    • 伙伴算法解决页外碎片,管理2^n个物理页
    • slab从buddy算法拿到2^n个物理页后,进行二次管理,类似于用户态的ptmalloc这一类管理

    原理有点像free queue,在free queue上做了进一步封装

    • 内存池
    • 大页内存:减少缺页中断
  • 相关阅读:
    java.io.file
    连线小游戏
    发票类型区分的正则表达式(仅区分普票专票)
    mybatis: No enum constant org.apache.ibatis.type.JdbcType."VARCHAR"
    bootstrap inputfile 使用-上传,回显
    微积分极限中一例
    oracle 查看表结构语句
    redis无法连接
    项目配置shiro原缓存注解失效
    bug 找不到或无法加载主类main.java.*
  • 原文地址:https://www.cnblogs.com/holidays/p/linux-driver-dev-note1.html
Copyright © 2020-2023  润新知