linux内核驱动同步、异步、并发

原创 2016年06月12日 18:08:43


本博客内容会不定期更新

--------------------------------------------------------------------Miscellaneous------------------------------------------------

        所谓临界区(临界段)就是访问和操作共享数据的代码段,一行C语言可能含有多条汇编指令,原子操作就是将多行C语言的执行等效成一条需要更长时间的汇编指令,在这期间不会被任何外界中断。将这些指令集等效于不可分割的一部分。

自旋锁,在单处理器上,编译的时候,并不会加入自旋锁。它仅仅被当作做一个设置内核抢占机制是否被启用的开关。如果禁止内核抢占,那么在编译时自旋锁会被完全剔除出内核。自旋锁是不可递归的。linux内核实现的自旋锁是不可递归的,这点不同于自旋锁在于其他操作系统中的实现。所以如果你试图得到一个你正持有的锁,你必须自旋,等待你自己释放这个锁。但你处于自旋忙等嗲中,所以你永远没有机会释放锁,于是你自己被自己锁死。千万小心自旋锁。

自旋锁可以使用在中断处理程序中,在中断中不能使用信号量,可能会导致休眠。在中断处理程序中使用自旋锁,一定要在获取锁之前,首先禁止本地中断

------------------------------------------------------------------------Miscellaneous-----------------------------------------------

信号量

1、definition

struct semaphore sem;

2、initialization

void sema_init(struct semapjore *sem,int value);

讲信号量sem的值初始化为value;

3、获取信号量

void down(struct semaphore * sem);

该函数会可能导致进程休眠,在获取不到信号量的情况下会导致进程休眠,因此信号量不一起在中断上下文中使用。

int dowm_interruptible(struct semaphore *sem);

该函数功能与down()函数类似,不同之处为,因为down而进入休眠转态的进程不能被信号打断,但因为down_interruptible而进入睡眠状态的进程能被信号打断,信号也会导致该函数返回,这时候函数的返回值非0;

int down_trylock(struct semaphore *sem);

该函数尝试获得信号量sem,如果能立刻获得,它就获得该信号量并返回0,否则,返回非0值,它不会导致调用者睡眠,可以在中断上下文中使用。


在使用down_interruptible()获得信号时,对返回值一般会进行检查,如果非0,通常立即返回-ERESTARTSYS 如:

if(down_interruptible(&sem))

return -RESTARTSYS;


深入浅出:Linux设备驱动之异步通知和异步I/O

原文出处: 时光漫步LH    在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知应用程序进行访问。因此,使用无阻塞I/O的应用程序无需轮询设备是否可访问,而阻塞访问也可以被类...
  • yuzeze
  • yuzeze
  • 2016-06-29 15:07:03
  • 1305

Linux中的同步问题(Linux驱动1)

操作系统中存在竞态问题,就是同时访问共享资源(包括程序,数据),引起竞态的原因有:smp,抢占式内核,中断(硬中断,软中断等). 抢占式内核竞态问题的图示: 假如代码如下: write(reso...
  • mmhhj
  • mmhhj
  • 2017-03-12 11:29:53
  • 301

linux内核中异步通信机制--信号处理机制

什么是异步通信?很简单,一旦设备准备好,就主动通知应用程序,这种情况下应用程序就不需要查询设备状态,就像硬件上常提的“中断的概念”。比较准确的说法其实应该叫做“信号驱动的异步I/O”,信号是在软件层次...
  • chinazhangzhong123
  • chinazhangzhong123
  • 2016-06-11 13:02:29
  • 1295

linux的同步,异步,阻塞,非阻塞

linux中关于IO操作有
  • liuxingen
  • liuxingen
  • 2014-08-09 22:41:54
  • 2716

Linux下的同步与异步

http://blog.sina.com.cn/s/blog_5e0d222e0100kvqq.html 在总结进程通讯的问题时,我考虑再三。似乎逃离不了一个概念。同步与异步。因此,暂且先讨论一下进程...
  • bytxl
  • bytxl
  • 2014-04-02 09:07:41
  • 1127

Linux并发(异步信号)

Linux下的信号是诸多进程间通信(IPC)中唯一一种异步通信方式,这决定了信号的处理跟其他的IPC有本质差别。   拓展: 一般情况下,进程什么时候会收到信号、收到什么信号是无法事...
  • vincent040
  • vincent040
  • 2016-03-21 11:00:36
  • 1743

Linux异步I/O

Linux中最常用的输入/输出(I/O)模型是同步I/O。在这个模型中,当请求发出之后,应用程序就会阻塞,直到请求满足为止。这是很好的一种解决方案,因为调用应用程序在等待I/O请求完成时不需要占用任何...
  • skywalker_leo
  • skywalker_leo
  • 2015-09-05 11:06:43
  • 470

并发 并行 同步 异步 多线程的区别

1. 并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行。其中两种并发关系分别是同步和互斥 2. 互斥:进程间相互排斥的使用临界资源的...
  • cqkxboy168
  • cqkxboy168
  • 2013-06-04 22:18:37
  • 61705

Linux内核同步介绍及方法

网易云课堂学习把write系统调用加入到MenuOS里面我在试验过程中在MenuOS里加入了time、time-asm、write和write-asm命令。以time和time-asm为例, 步骤如...
  • miao_9
  • miao_9
  • 2016-11-06 18:50:56
  • 938

linux驱动的异步同步通知机制

转载:http://blog.csdn.net/z1106609486/article/details/51461058 在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知...
  • A8316124
  • A8316124
  • 2017-02-21 22:10:25
  • 480
收藏助手
不良信息举报
您举报文章:linux内核驱动同步、异步、并发
举报原因:
原因补充:

(最多只允许输入30个字)