《嵌入式设备驱动技术》课程实验报告班级:学号: (需要填写)姓名: (需要填写)指导老师:成绩:实验五 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 的值
该函数设置原子类型的变量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);