第四期 第十讲 Linux并发与竞争实验 第十一讲 Linux按键输入实验 第十二讲 Linux内核定时器实验

文章详细介绍了Linux环境下的并发与竞争问题,包括原子操作、自旋锁、信号量和互斥体的使用,并提供了相关实验驱动的编写。此外,还探讨了Linux内核定时器的原理,如systick系统定时器、节拍率HZ以及内核定时器的非周期性特点,同时指导如何编写内核定时器的试验驱动并进行测试。
摘要由CSDN通过智能技术生成

第十讲 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是大小。

三、测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值