一、并发,并不是真正地同时执行,而是“宏观并行,微观串行”。由于并发的存在,可能会出现多个执行单元对共享资源的同时访问,从而很容易导致竞态,主要的竞态发生于如下几种情况:
1、在对称多处理器(SMP)中,多个CPU使用共同的系统总线,访问共同的外设于存储器,这是CPU与CPU之间的竞态;
2、Linux内核中,一个进程可能被另一高优先级的进程打断,抢占进程与被抢占进程可能访问共同资源,这是进程与进程之间的竞态;
3、中断打断正在执行的进程,中断处理程序与被中断的进程可能访问共同资源,这是中断与进程之间的竞态。
二、解决竞态问题的方法:
1、中断屏蔽:可以保证正在执行的内核执行路径不被高优先级进程或中断处理进程所抢占,可避免后两种竞态;
2、原子操作:执行过程不会被别的代码路径所中断的操作;
3、自旋锁:持有锁着方可访问临界资源,如果测试结果表明锁仍然被占用,程序将重复着测试操作,直至锁被其他进程释放,在此期间CPU什么也不做,属于非阻塞的,因此该锁机制适应于占用锁的时间极短的情况下。
(1)普通自旋锁:读与读,读与写,写与写——互斥
(2)读写自旋锁: 读与写,写与写——互斥
(3)顺序自旋锁: 写与写——互斥
4、信号量:使用方法与自旋锁类似,不同的是当获取不到信号量时,进程不会原地打转,而是进入休眠状态,等待着即将释放信号的进程唤醒它,属于阻塞的。信号量机制适应于占用锁的时间较长的情况。
三、自旋锁与信号量的重要API或宏
(1)自旋锁
1、定义自旋锁:spinlock_t lock;
2、初始化自旋锁:spin_lock_init(lock);
3、获取自旋锁: spin_lock(lock);
4、释放自旋锁:spin_unlock(lock);
(2)信号量
1、定义信号量:struct semaphore sem;
2、初始化信号量:void sema_init(struct semaphore *sem,int val);
3、获取信号量:void down(struct semaphore *sem);
4、释放信号量:void up(struct semaphore *sem);
分享到:
相关推荐
linux驱动设备开发详解--光盘 linux驱动设备开发详解--光盘
《Linux设备驱动开发详解-基于最新的Linux4.0内核》相关源码
《linux设备驱动程序》(第三版)的学习笔记,对于学习设备驱动的朋友十分有用
Linux设备驱动开发详解-基于最新的Linux4.0内核(第三版),包括很多Linux系统驱动的程序代码,应该大多数直接可以调试成功。
第7章 Linux设备驱动中的并发控制 139 第8章 Linux设备驱动中的阻塞与非阻塞I/O 161 第9章 Linux设备驱动中的异步通知与异步I/O 176 第10章 中断与时钟 193 第11章 内存与I/O访问 213 第12章 工程中...
linux设备驱动详解的全部源代码 宋宝华编著的那本,不要下错了!!
Linux内核驱动开发详解,基于kernel4.0,对驱动工程师很有帮助
Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解Acegi学习笔记--Acegi详解
linux设备驱动详解
嵌入式Linux设备驱动开发详解-光盘代码 书籍里面的光盘 实例代码: ----本书部分实例的源代码 工具: ----2410处理器的交叉编译工具 ----vivi ----busybox1.00 技术手册: ----本章实例中用到的器件手册 gcc...
Linux 设备驱动开发详解 linuxdriver_code_tool |-- 03 | `-- 2.6内核升级工具 | |-- device-mapper-1.00.19-2.i386.rpm | |-- lvm2-2.00.25-1.01.i386.rpm | |-- mkinitrd-4.2.0.3.tar.tar | |-- module-init-tools...
【批量下载】108-Linux设备驱动程序学习-170页,多本书籍
Linux设备驱动开发详解4.0内核(非扫描版).pdf 技术日新月异,产业斗转星移,滚滚红尘,消逝的事物太多,新事物的诞生也更迅猛。众多新生事物如灿烂烟 花,转瞬即逝。当我们仰望星空时,在浩如烟海的专业名词中寻找,...
《Linux设备驱动开发详解》是一本介绍Linux设备驱动开发理论、框架与实例的书,《Linux设备驱动开发详解》以Linux 2.6版本内核为蓝本,详细介绍自旋锁、信号量、完成量、中断顶/底半部、定时器、内存和I/O映射...
嵌入式linux设备驱动开发详解 嵌入式开发资料
Linux 设备驱动 第三版_En_.pdf Linux 设备驱动 第三版_Cn 文字 美 Jonathan Corbet 等_.pdf Linux 内核 深入理解 第三版 En Linux Kernel Understanding 3rd Edition_.pdf Linux 内核 深入理解 第三版 Cn 高清.pdf ...
Linux 设备驱动开发相关书籍 非常清楚
宋宝华视频讲解linux驱动开发,下载文件为百度网盘地址,输入密码获取视频
在系统学习Linux的过程中的,Linux设备驱动开发学习的笔记,笔记有两部分,这是下篇,主要学习内容是《Linux设备驱动开发详解》的7-9章。
linux设备驱动,linux驱动程序,linux驱动,linux,linux设备驱动程序最新版