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中的同步问题(Linux驱动1)

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

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

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

Linux内核驱动模块编程指南

  • 2008年09月20日 11:58
  • 50KB
  • 下载

Linux内核驱动开发之KGDB原理介绍及kgdboe方式配置

接博文《Linux内核驱动开发之KGDB单步调试内核(kgdboc方式)》。上篇博文中,仅简单介绍使用串口的Kgbd的流程(kgdboc方式),本文将重点介绍KGDB调试Linux内核的原理。内核版本...
  • gqb666
  • gqb666
  • 2013年06月20日 23:49
  • 6370

Linux内核驱动模块编程指南

  • 2012年03月25日 13:56
  • 549KB
  • 下载

《Linux内核驱动模块编程指南》

  • 2012年06月30日 13:16
  • 11.83MB
  • 下载

在Ubuntu上为Android系统编写Linux内核驱动程序

在智能手机时代,每个品牌的手机都有自己的个性特点。正是依靠这种与众不同的个性来吸引用户,营造品牌凝聚力和用户忠城度,典型的代表非iphone莫属了。据统计,截止2011年5月,AppStore的应用软...

linux内核驱动笔记-尚观

  • 2012年12月02日 10:35
  • 2.25MB
  • 下载

Linux内核驱动模块编程指南.pdf

  • 2010年01月16日 13:31
  • 396KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux内核驱动同步、异步、并发
举报原因:
原因补充:

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