【linux内核驱动day05】
uboot设置自动启动:
在设置之前先保存之前的bootcmd_cp,再设置
设置完成后怎么打开:可以重启,也可以使用命令
软中断(softirq):
tasklet:是一种基于软中断的轻量级下半部机制(处理紧急任务)
workqueue:是一种把工作交给 内核线程(kworker) 来执行的机制。
-
tasklet = 小助手,快但不能休息。
-
workqueue = 工人 NPC,可以慢慢做,还能睡觉等资源。
- 中断上下文:和中断处理相关的代码 ----------> 中断服务程序 (中断顶半部)、软中断、tasklet
- 不能休眠、不能阻塞、不能做耗时操作
- 进程上下文:和进程操作相关的代码 -----------> open read write close、workqueue
- 可以休眠、可以阻塞、可以做耗时操作
简单中断交给中断顶半部, 复杂中断交给中断底半部
原子变量
概念:
原子变量是可以在一次不可分割的操作中完成读写的变量。
也就是说,对它的加减、赋值等操作不会被中断,从而保证线程安全。
关键特性:
-
操作是“原子的”(atomic)——不可被打断。
-
不需要加锁,性能高。
-
通常用于计数器、标志位、引用计数等简单同步场景。
互斥锁
概念:
互斥锁是一种确保同一时间只有一个线程能访问临界区的机制。
当一个线程获取锁后,其他线程必须等待它释放锁才能进入。
关键特性:
-
同一时刻只有一个持有者;
-
线程阻塞等待锁;
-
避免资源竞争;
-
适合长时间持有锁的情况。
信号量
概念:
信号量是一种计数型同步机制,用于控制可同时访问资源的线程数量。
信号量有一个“计数值”,每次获取(P操作)就减1,释放(V操作)就加1。
关键特性:
-
允许多个线程同时进入(计数型);
-
当计数为 0 时,新的线程会阻塞;
-
可用于线程同步或资源池控制。
自旋锁
概念:
自旋锁是一种忙等锁(busy-wait lock)。
当一个线程尝试获取锁而锁已被占用时,它不会阻塞睡眠,而是在循环中不断检查锁是否可用。
关键特性:
-
不发生上下文切换;
-
适合锁持有时间非常短的场景;
-
会消耗CPU时间(因为自旋);
-
常用于内核、驱动程序等性能敏感区。
-