《嵌入式设备驱动技术》课程实验报告班级:学号: (需要填写)姓名: (需要填写)指导老师:成绩:实验五 Linux设备驱动中的并发控制一、目的与任务目的:了解 Linux 内核中的并发控制,及熟悉并发与竞态、中断屏蔽、原子操作、自旋锁、信号量、互斥体机制。任务:增加并发控制后的globalmem 模块的编程、编译与测试。二、内容、要求与安排方式1、实验内容与要求:1)原子操作;2)自旋锁;3)信号量、互斥体机制。2、实验安排方式:采用1 人 1 组,上机在 Linux 系统下进行编程实验。三、实验设备1、所用设备: PC机一台四、实验过程1)原子操作;所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位, 不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。原子操作需要硬件的支持, 因此是架构相关的, 其 API 和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为 C语言并不能实现这样的操作。原子操作主要用于实现资源计数, 很多引用计数 (refcnt)就是通过原子操作实现的。原子类型定义如下:volatile修饰字段告诉 gcc 不要对该类型的数据做优化处理, 对它的访问都是对内存的访问,而不是对寄存器的访问。原子操作 API 包括:0. 该函数对原子类型的变量进行原子读操作,它返回原子类型的变量v 的值。1. 该函数设置原子类型的变量v 的值为 i atomic_set(atomic_t * v, int i); 2. 该函数给原子类型的变量v 增加值 i 。void atomic_add(int i, atomic_t *v); 3. 该函数从原子类型的变量v 中减去 i 。atomic_sub(int i, atomic_t *v); 4. 该函数从原子类型的变量v 中减去 i ,并判断结果是否为0,如果为 0,返回真,否则返回假。int atomic_sub_and_test(int i, atomic_t *v); 5. 该函数对原子类型变量v 原子地增加 1。void atomic_inc(atomic_t *v); 6. 该函数对原子类型的变量v 原子地减 1 void atomic_dec(atomic_t *v); 7. 该函数对原子类型的变量v 原子地减 1,并判断结果是否为0,如果为 0,返回真,否则返回假。int atomic_dec_and_test(atomic_t *v); 8. 该函数对原子类型的变量v 原子地增加 1,并判断结果是否为0,如果为 0,返回真,否则返回假。int atomic_inc_and_test(atomic_t *v); 9. 该函数对原子类型...