《Android深度探索 卷1 HAL与驱动开发》笔记
karaskass
Linux/android驱动工程师
展开
-
《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(7)——读写信号量
读写信号量概述读写信号量和信号量的关系与读写自旋锁和自旋锁的关系类似。读信号量和写信号量是互斥的,但允许N个读执行单元同事访问共享资源(同事获取读信号量),而最多允许一个写进程获取写信号量。因此,读写信号量相对于信号量更宽松,对于读多写少的情况会明显提高程序的执行效率。读写信号量的使用方法(1) 定义和初始化读写信号量struct rw_semaphore rw_sem; /* 定义读写信...原创 2019-10-18 16:34:34 · 266 阅读 · 0 评论 -
《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(8)——信号量(Semaphore)
信号量(Semaphore)简单介绍信号量也是一种用来保护 临界区(共享数据) 的常用方法,它的使用方法和自旋锁类似。和自旋锁类似之处是,信号量使用时,只有得到信号量的进程才能够执行临界区代码。和自旋锁不同的地方是,在没有得到信号量的时候,进程不会像自旋锁那样原地旋转,而是进入休眠等待的状态。因此当信号量阻塞时小号的系统资源(主要是CPU资源)并不多,也不会出现死机的现象。信号量的使用方法...原创 2019-10-15 19:10:47 · 158 阅读 · 0 评论 -
《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(6)——读-复制-更新(RCU)机制API
RCU使用方法(1) 读锁定static inline void rcu_read_lock(void)static inline void rcu_read_lock_bh(void)(2) 读解锁static inline void rcu_read_unlock(void)static inline void rcu_read_unlock_bh(void)(3) 使用RC...原创 2019-10-13 16:32:16 · 225 阅读 · 0 评论 -
《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(1)——原子操作
为什么需要并发控制通常一个 Linux 驱动程序并不是为了给某个用户空间使用而编写的。调用到这个 Linux 驱动程序的用户有可能会有很多个,这就有可能出现多个用户程序同时对这个 Linux 驱动程序进行read、write、ioctl等操作。由于 Linux 驱动程序还会使用一些全局数据(即共享数据),如果同时对这些全局数据进行操作,就有可能会出现异常数据,这就使得 Linux 驱动必须具有能...原创 2019-10-07 18:50:42 · 310 阅读 · 0 评论 -
《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(2)——自旋锁
什么是自旋锁(Spin Lock)原创 2019-10-08 15:29:50 · 182 阅读 · 0 评论 -
《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(3)——读写自旋锁
为什么会引入读写自旋锁自旋锁并不在乎锁定的临界区是进行读操作还是写操作,因为它仅仅允许同一时间只有一个任务线程或进程获取自旋锁,所以即使有很多个任务线程或进程同时读取共享数据并不会影响到共享资源,临界区也会被锁住,这无疑是影响系统性能的。为了解决这个问题,在自旋锁的基础上衍生出了这样一个分支锁——读写自旋锁。读写自旋锁 可以将临界区的读、写操作区分开。如果开发人员认为临界区的代码只是读取了共享...原创 2019-10-08 18:51:58 · 157 阅读 · 0 评论 -
《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(4)——顺序锁
顺序锁和读写自旋锁的区别顺序锁 同样是自旋锁的一种衍生,顺序锁和读写自旋锁类似,但是顺序锁赋予了 写自旋锁 更高的权限。在 读写自旋锁 中,读自旋锁和写自旋锁的优先级是相同的,当有任务线程或进程获取了读自旋锁后,写自旋锁必须等待读自旋锁被释放后,才能被获取,反过来也一样。在 顺序锁 中,当任务线程或进程获取了读自旋锁后,不必等到读自旋锁被释放也可以获取写自旋锁,并在此过程中继续执行修改共享数...原创 2019-10-09 12:32:18 · 153 阅读 · 0 评论 -
《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(5)——读-复制-更新(RCU)机制原理
RCU的原理RCU(Read-Copy-Update,读-复制-更新)机制可以看做是读写自旋锁的扩展。在rwlock机制中读自旋锁和写自旋锁时互斥的,但是在RCU机制中读和写操作是可以并发执行的。在访问共享数据的时候,需要先获取锁,才能访问共享数据。这种原理很简单,其根本思想就是在访问共享资源时,需要先访问一个全局的变量,也就是锁,然后通过全局变量的状态来控制任务线程或进程对共享数据的访问。但...原创 2019-10-09 17:58:57 · 264 阅读 · 0 评论