linux驱动编程核心理论之并发控制
驱动编程核心理论之并发控制
并发,竟态的理解:也就是Linux的东西在时间和空间被同时使用导致的问题
Linux系统提供的解决方案:
中继屏蔽
原子操作
自旋锁
信号量
1,中断屏蔽
首先这个依赖于CPU,CPU一般提供屏蔽中断的打开中断的功能,中断屏蔽使得中断和进程之间的并发
不再发生,同时进程调试也依赖于中断,内核抢占的进程间并发也就可以避免
使用方法
local_irq_disable()//屏蔽中断
...
critical section()//临界区
...
local_irq_enable()//打开中断
这种方法只能解决单个CPU的问题
注意 : 长时间中断屏蔽很危险,比较适合和自旋锁联合使用
local_irq_save(flags) 禁止中断同时保存目前CPU的中断信息位
local_irq_restore(flags) 打开中断同时恢复中断信息位
底半部操作
local_bh_disable()
local_bh_enable()
2,原子操作
原子操作是指在执行过程中不会被的代码路径所中断的操作。待理解
分为两类,针对位的操作和整型变量的操作
针对整型变量的原子操作的相关函数
void atomic_set(atomic_t *v, int i);//设置原子变量的值为i
atomic_t v = ATOMIC_INIT(0);//定义原子变量v并初始化为0
atomic_read(atomic_t *v);//返回原子变量的值
void atomic_add(int i, atomic_t *v);//原子变量增加i
void atomic_sub(int i, atomic_t *v);//原子变量减少i
void atomic_inc(atomic_t *v);//原子变量自增加1
void atomic_dec(atomic_t *v);//原子变量自减少1
操作并测试函数
int atomic_inc_and_test(atomic_t *v);
int atomic_dec
相关文档:
摘要
Linux内核模块编程的资料有些纷繁复杂,有的过于简单,有的过于庞杂,我试图用笔记的形式想读者展示怎样来进程Linux模块编程,力图做到简明扼要,这篇文章也是作为本人备忘的资料,所以有些地方过于简略是难免的。本来这篇文章的目的就是让用户知其然,至于所以然还是请参考相应的资料,其实最好的资料莫过于Linux ......
1、安装包
下载网址:http://dev.mysql.com/downloads/mysql/
mysql-5.1.38.tar.gz(版本:5.1.38)
2、添加mysql用户与群
groupadd mysql
useradd -g mysql -s /sbin/nologin mysql
3、解压与编译
tar zxvf mysql-5.1.38.tar.gz
cd mysql-5.1.38/
./configure --prefix=/usr/local/mysql/ --enable-assembler --w ......
我们在Linux下安装系统软件的时候,经常遇到一些系统环境变量配置的问题。什么是环境变量?如何定制环境变量?我将在下面做一些介绍。
一、 什么是环境变量?
Linux是一个多用户的操作系统。多用户意味着每个用户登录系统后,都有自己专用的运行环境。而这个环境是由一组变量所定义, 这组变量被称为环境变量。用户 ......
Linux设备驱动中必须解决的一个问题是多个进程对共享资源的并发访问,并发访问会导致竞态,linux提供了多种解决竞态问题的方式,这些方式适合不同的应用场景。
Linux内核是多进程、多线程的操作系统,它提供了相当完整的内核同步方法。内核同步方法列表如下:
中断屏蔽
原子操作
自旋锁
读写自旋锁
顺序锁
......
宿主机:Windows XP Professinoal SP2
VMware:Red Hat Linux 9
网络:ADSL局域网512M
所用软件:
VMware-workstation-6.0.0-45731.exe
Red Hat Linux 9
安装过程:
1.安装VMware-workstation-6.0.0-45731.exe
2.开启VMware.安装Linux.
安装时可直接用硬盘iso文件.
VMware=>VM=>Settings=> ......