目录
上一章节,我们介绍了如何编写一个最小的驱动,但我们运行的时候只有一个线程去访问,而Linux是一个多任务操作系统,肯定会存在多个任务共同操作同一段内存或者设备的情况,所以如何保证多个线程同时访问驱动接口时,运行都正确无误呢?
一、并发&竞争介绍
Linux多个任务甚至中断都能访问的资源叫做共享资源。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。
现在的Linux系统并发产生的原因很复杂,总结一下有下面几个主要原因:
1、多线程并发访问,Linux是多任务(线程)的系统,所以多线程访问是最基本的原因。
2、抢占式并发访问,从2.6版本内核开始,Linux内核支持抢占,也就是说调度程序可以在任意时刻抢占正在运行的线程,从而运行其他的线程。
3、中断程序并发访问,这个无需多说,学过STM32的同学应该知道,硬件中断的权利可是很大的。
4、SMP(多核)核间并发访问,现在ARM架构的多核SOC很常见,多核CPU存在核间并发访问。