init_MUTEX 与 sema_init 函数【转】】的更多相关文章

转自:http://blog.chinaunix.net/uid-7332782-id-3211627.html 在编译Linux设备驱动程序学习(1)-字符设备驱动程序中scull.c程序时,报错:/linux-2.6.35/mytest/scull/scull/scull.c: 在函数‘scull_init_module’中:/linux-2.6.35/mytest/scull/scull/scull.c:305:3: 错误:隐式声明函数‘init_MUTEX’搜索得到结果如下: 2.6.2…
2.6.25及以后的linux内核版本废除了init_MUTEX函数 新版本使用sema_init函数 平台:X86 32位内核:2.6.24定义: 引用 static inline void init_MUTEX (struct semaphore *sem) {         sema_init(sem, 1); } 说明:Init_MUTEX()函数初始化信号量为互斥量. 互斥量为信号量的特例,它可以防止数据被两个不同系统调用读写. sema_init (sem, 1) 定义为: 引用…
目录 . 内核锁机制 . 同步与互斥 . 锁定内存总线原子操作 . 信号量 . 自旋锁 . RCU机制 . PERCPU变量 . 内存和优化屏障 . 读者/写者锁 . 大内核锁 . 互斥量 1. 内核锁机制 内核可以不受限制地访问整个地址空间,在多处理器系统上(或类似地,在启用了内核抢占的单处理器上),这会引起一些问题,如果几个处理器同时处于核心态(即CPU正在执行内核区代码).则理论上它们可以同时访问同一个数据结构,这会造成竞态条件为了解决这个问题,内核使用了由锁组成的细粒度网络,来明确地保护…
本文转载自:http://blog.chinaunix.net/uid-25014876-id-67673.html linux设备驱动归纳总结(四):5.多处理器下的竞态和并发 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 这节将在上一节的基础上介绍支持多处理器和内核抢占的内核如何避免并发.除了内核抢占和中断外,由于多处理起的缘故,它可以做到多个程序同时执行.所以,进…
转自:http://blog.csdn.net/xiao229404041/article/details/7031776 Linux设备驱动之semaphore机制在Linux系统中,信号号是一种重要的加锁机制,特别在互斥型资源中,semaphore更能很好的工作.1: semaphore结构体定义在Linux2.6.35内核中,semaphore的实现机制与以前的版本一点不同,在其中去除了DECLARE_MUTEX_LOCKED这个初始化互斥宏定义,但是,又添加了一个特别重要的函数,down…
http://blog.csdn.net/bullbat/article/details/7376424 Linux内核同步控制方法有很多,信号量.锁.原子量.RCU等等,不同的实现方法应用于不同的环境来提高操作系统效率.首先,看看我们最熟悉的两种机制——信号量.锁. 一.信号量 首先还是看看内核中是怎么实现的,内核中用struct semaphore数据结构表示信号量(<linux/semphone.h>中): struct semaphore { spinlock_t      lock;…
竞态与并发 自旋锁 若一个进程要访问临界资源,测试锁空闲,则进程获得这个锁并继续执行:若测试结果表明锁扔被 占用,进程将在一个小的循环内重复“测试并设置”操作,进行所谓的“自旋”,等待自旋锁持有者释 放这个锁.自旋锁与互斥锁类似,但是互斥锁不能用在可能睡眠的代码中,而自旋锁可以用在可睡 眠的代码中,典型的应用是可以用在中断处理函数中.自旋锁的相关操作: 自旋锁 01.// 定义自旋锁 02.spinlock_t spin; 03. 04.// 初始化自旋锁 05.spin_lock_init(l…
综述 在上一篇介绍了linux驱动的调试方法,这一篇介绍一下在驱动编程中会遇到的并发和竟态以及如何处理并发和竞争. 首先什么是并发与竟态呢?并发(concurrency)指的是多个执行单元同时.并行被执行.而并发的执行单元对共享资源(硬件资源和软件上的全局.静态变量)的访问则容易导致竞态(race conditions).可能导致并发和竟态的情况有: SMP(Symmetric Multi-Processing),对称多处理结构.SMP是一种紧耦合.共享存储的系统模型,它的特点是多个CPU使用共…
原文网址:http://www.cnblogs.com/geneil/archive/2011/12/03/2274684.html 现代操作系统有三大特性:中断处理.多任务处理和多处理器.这些特性导致当多个进程.线程或者CPU同时访问一个资源时,可能发生错误,这些错误是操作系统运行所不允许的.在操作系统中,内核需要提供并发控制机制,对共享资源进行保护. 在操作系统中,并发是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序…
按照惯例,我是应该先写一些本章的收获的,不过太晚了. 在看完第三章之后开始编译,错误一堆,几乎崩溃,幸亏经过不断的百度,总算解决了问题,我发现 我遇到问题比较多,算是集中七个龙珠了吧,感谢先行的大神们. 1. CFLAGS was changed in "examples/scull/Makefile". Fix it to use EXTRA_CFLAGS.  Stop. 由于LDD3使用的是2.6.10内核,很多东西已经发生了变化,这里提示我们修改Makefile中的CFLAGS,…
linux 内核的几种锁介绍 http://wenku.baidu.com/link?url=RdvuOpN3RPiC5aY0fKi2Xqw2MyTnpZwZbE07JriN7raJ_L6Ss8Ru1f6C3Gaxl1klYrX8sWGjWV0FJigMFo96Umisnf8cdnccboyczsikpye 一. 以2.6.38以前的内核为例, 讲spinlock. mutex 以及 semaphore1. spinlock更原始,效率高,但讲究更多,不能随便用.2. 个人觉得初级阶段不要去深挖…
信号量:    是用于保护临界区的一种常用方法,它的使用和自旋锁类似.与自旋锁相同,只有得到信号量的进程才能执行 临界区的代码.但是与自旋锁不同的是,当获取不到信号量时,进程不会原地打转而是进入休眠等待 状态. #include <linux/semaphore.h> struct semaphore { raw_spinlock_t          lock; unsigned int            count; struct list_head        wait_list;…
Linux内核剖析 之 内核同步 主要内容 1.内核请求何时以交错(interleave)的方式执行以及交错程度如何. 2.内核所实现的基本同步机制. 3.通常情况下如何使用内核提供的同步机制. 内核如何为不同的请求服务 哪些服务? ====>>> 为了更好地理解内核是如何执行的,我们把内核看做必须满足两种请求的侍者:一种请求来自顾客,另一种请求来自数量有限的几个不同的老板.对于不同的请求,侍者采用如下的策略: 1.老板提出请求时,如果侍者空闲,则侍者开始为老板服务. 2.如果老板提出请…
linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, 驱动开发中设计到的硬件: * 数字电路知识 * ARM硬件知识 * 熟练使用万用表和示波器 * 看懂芯片手册和原理图 4, linux内核源代码目录结构: * arch/: arch子目录包括了所有和体系结构相关的核心代码.它的每一个子目录都代表一种支持的体系结构,例如i386就是关于intel c…
linux 设备驱动概述 目前,Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer):       主要利用C库函数和Linux API进行应用软件的编写: 从事这方面的开发工作,主要需要学习:符合linux posix标准的API函数及系统调用,linux的多任务编程技巧:多进程.多线程.进程间通信.多任务之间的同步互斥等,嵌入式数据库的学习,UI编程:QT.miniGUI等. (2)Linux固件工程师(Fir…
信号量 什么是信号量 信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有. 信号量的值为正的时候,说明它空闲.所测试的线程可以锁定而使用它.若为0,说明它被占用,测试的线程要进入睡眠队列中,等待被唤醒. 为了防止出现因多个程序同时访问一个共享资源而引发的一系列问题,我们需要一种方法,它可以通过生成并使用令牌来授权,在任一时刻只能有一个执行线程访问代码的临界区域. 临界区域是指执行数据更新的代码需要独占式地执行.而信号量就可以提供这样的一种访问机制,让一个临界区同一时…
并发和竞争发生在两类体系中: 对称多处理器(SMP)的多个CPU 内核可抢占的单CPU系统 访问共享资源的代码区域称为临界区(critical sections),临界区需要以某种互斥机制加以保护.在驱动程序中,当多个线程同时访问相同的资源(critical sections)时(驱动程序中的全局变量是一种典型的共享资源),可能会引发"竞态",因此我们必须对共享资源进行并发控制.Linux内核中解决并发控制的方法又中断屏蔽.原子操作.自旋锁.信号量.(后面为主要方式) 中断屏蔽: 使用…
  在目录的 Makefile 中关于 RTC_DRV_S3C 的编译脚本为: obj -$(CONFIG_RTC_DRV_S3C) += rtc-s3c.o 上述脚本意味着如果 RTC_DRV_S3C 配置选项被选择为"Y" 或"M",即 obj-$(CONFIG_RTC_ DRV_S3C)等同于 obj-y 或 obj-m 时,则编译 rtc-s3c.c,选" Y" 的情况直接会将生成的目标代码 直接连接到内核,为" M"…
转自:http://www.cnblogs.com/plinx/archive/2013/01/28/2873121.html 在linux内核中,主要的静态发生于以下几种情况: 1.对称多处理器(SMP)的多个CPU: 多个CPU共同使用系统总线,可访问共同点的外设和存储器. 2.单CPU内核进程与抢占它的进程: 一个进程的执行可被另一高优先级进程打断. 3.中断(硬中断.软中断.Tasklet,底半部)与进程之间: 中断可以打断正在执行的进程,若访问该进程正在访问的空间,将引发竞态. 上述并…
1.申请设备号 int register_chrdev_region(dev_t from, unsigned count, const char *name) 指定从设备号from开始,申请count个设备号,在/proc/devices中的名字为name.返回值:成功返回0,失败返回错误码. 2.动态的申请设备号 int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count, const char *name)…
1 [编写linux驱动程序] 1.1 一.编写驱动核心程序 1.2 二.配置Kconfig 1.3 三.配置Makefile 1.4 四.配置系统的autoconfig 1.5 五.编译 2 [编写hal模块] 2.1 一.新建xxx.h文件 2.2 二.新建xxx.c文件  2.2.1 1.包含相关头文件和定义相关结构 2.2.2 2.定义hello_device_open函数 2.2.3 3.定义自定义的api函数 2.3 三.在hello目录下新建Android.mk文件 2.4 四.编…
本文转载自:http://www.hovercool.com/en/%E6%B7%BB%E5%8A%A0%E9%A9%B1%E5%8A%A8%E6%A8%A1%E5%9D%97#a_.E5.9B.9B.E3.80.81.E9.85.8D.E7.BD.AE.E7.B3.BB.E7.BB.9F.E7.9A.84autoconfig 一.编写驱动核心程序 这里说的驱动核心程序是指运行在内核空间的,完全按linux驱动格式编写的,基本上与android没什么关系,一般包括xxx.h和xxx.c文件. 进…
用户态的信号量: System V 信号量 Posix 信号量 信号量是用于保护临界区的一种常用方法.它的使用和自旋锁类似.相同的是,只有得到信号量的进程才能执行临界区代码:不同的是,当获取不到信号量时,进程不会原地打转而是进入睡眠等待状态 定义 struct semaphore { spinlock_t lock; unsigned int count; struct list_head wait_list; }; 初始化 #define DECLARE_MUTEX(name) \ struc…
linux设备驱动归纳总结(四):5.多处理器下的竞态和并发 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 这节将在上一节的基础上介绍支持多处理器和内核抢占的内核如何避免并发.除了内核抢占和中断外,由于多处理起的缘故,它可以做到多个程序同时执行.所以,进程除了要防自己的处理器外,还要防别的处理器,这个就是这节要介绍的内容. xxxxxxxxxxxxxxxxxxxxxxx…
转自:http://blog.chinaunix.net/uid-24943863-id-3193530.html 并发导致竟态,从而导致对共享数据的非控制访问,产生非预期结果,我们要避免竟态的发生.遵循以下原则:1,尽量避免资源共享:2,显示地管理对共享资源的访问.管理技术通常为“锁定”或者“互斥”,保证任何时刻只有一个执行线程可操作共享资源.         几个重要的概念:1,原子操作,顾名思义,就是说该操作是原子性的(原子是保持物质物理新性质的最小单位),不可分割的,亦即操作要么处于不间…
一.自旋锁1.定义自旋锁:spinlock_t lock2.初始化自旋锁:spin_lock_init(lock)3.获得自旋锁:spin_lock(lock)4.释放自旋锁:spin_unlock(lock)5.自旋锁实例:/* 定义一个自旋锁spinlock_t lock;spin_lock_init(&lock);spin_lock (&lock) ; /* 获取自旋锁,保护临界区 */. . ./* 临界区*/spin_unlock (&lock) ; /* 解锁*/6.读…
'init_MUTEX' 在新版本系统上已被淘汰 改用sema_init(sem, 1);…
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) Return True if any element of the iterable is true. If the iterable is empty, return False 如果序列中任何一个元素为True,那么any返回True.该函数可以让我们少些一个for循环.有两点需要注意 (1)如…
javascript中最经典也最受非议的一句话就是:javascript中一切皆是对象.这篇重点要提到的,就是任何jser都不陌生的Object和Array. 有段时间曾经很诧异,到底两种数据类型用来存储数据有什么不同.于是,我打算探究探究. 一.掌握三种数据类型 首先,一个前提必须掌握的,就是必须理解javascript的数据类型分类,主要分为以下三种: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二…
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对于其他面向对象语言,在JavaScript中的函数是特殊的,函数即是对象.JavaScript可以把函数赋值给变量,或者作为参数传递给其他函数,甚至可以给它们设置属性等. JavaScript的函数可以嵌套在其他函数中定义,这样定义的函数就可以访问它们外层函数中的任何变量.这也就是所谓的"闭包&qu…