第十讲 Linux并发与竞争实验
一、并发与竞争简介
1.1什么是并发与竞争?
线程、中断、多核、抢占等。
1.2 保护的是什么东西?
保护的是数据。
二、并发与竞争解决方法
2.1 原子操作
原子变量与原子位
2.2 自旋锁
1、用于多核SMP。
2,使用自旋锁,要注意死锁现象的发生。
线程与线程,
线程与中断。
2.3 信号量
2.4 互斥体
三、编写试验驱动
*3.1 原子操作试验
3.2 自旋锁操作试验
3.3 信号量试验
3.4 互斥体试验
四、测试
第十一讲 Linux按键输入实验
一、按键输入原理
二、编写试验驱动
三、测试
第十二讲 Linux内核定时器实验
一、Linux内核定时器原理
1.1、内核时间管理
1、Cortex-M内核使用systick作为系统定时器。
2、硬件定时器、软件定时器,原理是依靠系统定时器来驱动。
3、linux内核频率可以配置,图形化界面配置。
4、重点,HZ表示系统节拍率,
jiffies,
1.2、节拍率高低的缺陷
1.3、jiffies
1.4、内核定时器
1、软件定时器不像硬件定时器一样,直接给周期值。设置期满以后的时间点。
2、定时处理函数。
3、内核定时器不是周期性的,一次定时时间到了以后就会关闭,除非重新打开。
二、编写试验驱动
1、定义一个定时器,结构体timer_list
2、应用ioctl函数-》unlocked_ioctl和compat_ioctl。
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long)
long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
ioctl的命令是自己定义的,但是要符合linux规则。构建命令:
#define _IO(type,nr) /没有参数的命令
#define _IOR(type,nr,size) //该命令是从驱动读取数据
#define _IOW(type,nr,size) //该命令是向驱动写入数据
#define _IOWR(type,nr,size) //双向数据传输
type是幻数,nr是序号,size是大小。
三、测试