Home
little Joy Personal
Cancel

内核-seqlock(顺序锁)

顺序锁(seqlock)也是一种特殊的锁机制,读取时不加锁,写入时加锁。 适用于读多写少的场景,并提供了一种高效的读取操作,而写入操作需要保证数据的一致性。 顺序锁在实现上,为了保证读取操作的值没有被更新,顺序锁引入了一个额外的变量,叫顺序号(顺序值/序号值/seq号)。 基本思想是在读取操作之前获取该顺序号,并在读取完成后检查顺序号是否发生变化。如果序列号没有发生变化,则读取操作是有效的...

内核-mutex(互斥锁)

实现原理 互斥锁类似于count值为1时的信号量。内核的实现也基本如此,但因为count固定为1,Linux为此重新定义了新的数据结构mutex, 专门指代互斥锁,并对原本的down和up操作作了优化和扩展。可以认为互斥锁和count为1的信号量没有本质区别,只是内核的一个特化用例。 和信号量的区别 互斥锁是二值的,只有锁定和非锁定两个状态,互斥锁适用于实现对临界区(Critical ...

misc杂项设备

背景 在 /dev/目录下的设备节点文件,每套驱动都需要申请一个主设备号Major,不管是动态申请的或是静态定义的,都需要消耗一个主设备号, 如果一个驱动不需要管理很多的从设备,就会显得有些浪费主设备号。 针对此问题,linux内核提供了一个杂项设备驱动的功能框架。杂项设备也属于字符设备,主要特点是共用同一个主设备号,且固定是10。 实际应用中,通常只有少数一两个从设备的杂项驱动可以使用...

内核-semaphore(信号量)

信号量(Semaphore)是一种用于进程同步和互斥的机制。它是一种计数器对象,用于管理并发访问共享资源。 相比自旋锁,信号量的一大特点是允许调用它的线程进入睡眠状态,即调用它的线程可能会出现进程的切换。 大致实现 信号量本身的定义不复杂,位于内核源吗/include/linux/semaphore.h中。 /* Please don't access any members of th...

内核-rwlock(读写自旋锁)

Linux内核中的读写(自旋)锁(rwlock)是一种用于线程同步的机制,用于在多线程环境中实现对共享资源的读写访问。它可以看作自旋锁(spinlock)的进阶版本,可以帮助实现更复杂的功能。 这里记录的是内核层的读写自旋锁的使用,不是应用层多线程中的读写锁。 介绍 读写(自旋)锁(rwlock)是一种高级锁机制,用于在多线程环境中实现对共享资源的读写访问。读写锁提供了更细粒度的锁定策...

平台总线及设备和驱动

在linux设备模型中,总线是联系设备和驱动的关键部分。对于那真实存在的物理总线,如I2C,SPI,USB,PCI等,的确符合linux的设备模型, 系统创建对应的总线驱动,之后对应的设备和驱动注册挂载在对应的物理总线驱动上。但是情况下,有很多设备并没有也不需要通过总线来访问。主要 是一些SOC自带的外设控制器等,还有其他一些简单的IO设备,特点就是不需要依赖特定总线。 针对实际情况和li...

内核-spinlock(自旋锁)

在Linux内核中,自旋锁(spinlock)是一种用于保护临界区(critical section)的同步机制,确保在多个执行上下文中的独占访问。 它是一种忙等待的锁,与传统的互斥锁(mutex)相比,自旋锁不会使线程进入睡眠状态, 而是通过不断自旋(循环检查锁状态)来等待临界区的释放,它会一直等待。 这里记录的是内核层的自旋锁的使用,不是应用层多线程中的自旋锁。 大致原理 自旋锁是...

关于local_irq_save(了解)

在内核中提供了一些宏定义,可以帮助禁用本地cpu的外部中断,对与解决并发引起的竞争问题有些帮助。 几个宏定义 local_irq_enable() local_irq_disable() local_irq_save(flags) local_irq_restore(flags) //example unsigned long flags; local_irq_save(flags...

内核-互斥与同步机制

竞争问题 在Linux系统中,程序的并发执行可能会导致共享资源竞争问题。共享资源是多个并发程序之间共同访问和使用的资源, 例如内存、文件、网络连接等,最常见的是应是内存变量了。当多个程序同时访问共享资源并试图进行修改时, 就可能导致竞争问题,导致不可预测的结果或执行错误。 常见的并发路径: 中断处理路径,中断上下文和进程上下文并发访问共享资源,这个在单核CPU上也能出现。 调度器抢占...

Linux设备模型

Linux中引入了设备驱动模型分层的概念,将设备驱动代码分成了两部分:设备与驱动。设备负责提供硬件资源, 驱动负责去使用这些设备提供的硬件资源。并由总线将它们联系起来。大致关系: 设备----总线---驱动 | | --------------- 几个基本概念 设备 (device) :物理设备,挂载在某总线上的,或是虚拟的总线如平台总线上。...