`
longxj
  • 浏览: 101850 次
  • 性别: Icon_minigender_1
  • 来自: 南京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

spin_lock详解

 
阅读更多

spin_lock macro详解列在这里,是因为当进行轮询操作时,在实现上,也是有很多技巧值得学习的:
1.调用preempt_disable()disable kernel preemption
2.使用原子指令尝试获得spin lock,代码大致如下:
movb $0,%al
xchab %al, slp->slock
3.如果前面的操作获得的是正值,则说明拿到了锁,终止;否则调用preempt_enable()开启kernel preemption
4.set break_lock field告诉其它进程,有进程正在等待这个锁
5.执行下面的循环:
while(spin_is_locked(slp)&&slp->break_lock)
cpu_relax();//相当于pause指令
(这里是很精彩的,这里之所以没有直接到第6步,而是当锁被释放后,才跳到第一步去(虽然这样会使得锁可能不能被当前进程获得,但是对于系统的性能来说是有一定的提高的),是因为这样可以提高系统
的执行效率)
6.跳到第一步去
2009/01/31 六

分享到:
评论

相关推荐

    Linux,rcu_lock

    spin_lock(&thing_lock); t->contents = some_value; old = global_thing; global_thing = t; spin_unlock(&thing_lock); synchronize_rcu(); kfree(old); } ``` 在这个例子中,写者首先创建一个新的数据...

    Linux RCU机制详解

    ### Linux RCU机制详解 #### 一、前言 RCU(Read-Copy-Update)是一种用于并发控制的机制,在Linux内核中被广泛应用。它主要用于处理读多写少的场景,通过允许读操作无锁地进行,从而极大提高了系统的性能。RCU...

    linux 内核死锁检测

    ### Linux内核死锁检测——Lockdep详解 #### 一、Lockdep简介 **Lockdep** 是 Linux 内核提供的一项重要功能,用于协助开发者发现并解决死锁问题。死锁通常指的是两个或多个进程(在 Linux 内核中通常指的是任务)...

    Linux内核中的同步和互斥分析报告

    ### Linux内核中的同步与互斥机制详解 #### 一、引言 在多任务操作系统中,进程间的同步和互斥是确保系统稳定性和数据一致性的重要手段。Linux内核提供了多种机制来支持进程间的同步与互斥,其中两种常用的方法是...

    usb 枚举过程分析

    spin_lock_irq(&hub_event_lock); if (list_empty(&hub_event_list)) { spin_unlock_irq(&hub_event_lock); break; } tmp = hub_event_list.next; list_del_init(tmp); hub = list_entry(tmp, struct usb_...

    android电源管理

    ### Android电源管理详解 #### 一、概述 Android操作系统因其高度的灵活性与广泛的应用场景而备受青睐,特别是在移动设备领域。随着技术的进步和用户需求的增长,电源管理成为了Android开发中的一个重要方面。良好...

    原子操作、信号量、读写信号量和自旋锁的API

    ### 原子操作、信号量、读写信号量和自旋锁的API详解 #### 一、引言 在现代操作系统中,特别是在多处理器环境下,确保数据的一致性和完整性至关重要。为此,Linux内核提供了多种同步机制来保护共享资源免受并发...

    LINUX内核中的GCC特性

    ### LINUX内核中的GCC特性详解 #### 一、引言 GNU Compiler Collection (GCC) 是一个广泛使用的开源编译器套件,它不仅支持多种编程语言,还提供了丰富的特性和扩展来增强C语言的能力。对于Linux内核而言,GCC扮演...

    基于zynq平台linux外设驱动分析-内核部分

    - 软中断处理中,调用初始化时注册的poll函数,该函数同样需要考虑多核抢占问题,并通过spin_lock自旋锁保护整个接收过程。 - 由于软中断处理及消息队列处理需要一定时间,NAPI方式可能存在一定程度的数据接收延迟...

    Linux内核IDR机制

    .lock = __SPIN_LOCK_UNLOCKED(name.lock), \ } #define DEFINE_IDR(name) \ struct idr name = IDR_INIT(name) static DEFINE_IDR(i2c_adapter_idr); ``` 这里通过宏定义的方式实现了IDR的初始化,并且定义了一...

    linux 设备驱动中的并发控制

    `spin_lock()` 和 `spin_unlock()` 函数用于操作自旋锁。 3. 原子操作(Atomic Operations):原子操作在多处理器系统中特别有用,它们保证操作不会被中断,从而避免数据不一致。例如,原子增加(`atomic_inc()`)...

    字符设备驱动综合实例

    6. **内存管理**:驱动程序需要合理地管理内存,避免内存泄漏,同时确保在多线程环境下的数据同步,这可能涉及到kmalloc、kfree、spin_lock、spin_unlock等内核API。 7. **缓冲区管理**:为了提高效率,驱动程序...

    linux中断处理之IRQ中断

    ### Linux IRQ中断处理详解 #### 一、引言 在Linux内核中,中断处理机制是操作系统能够响应外部事件的核心部分之一。对于嵌入式系统和服务器应用来说,高效的中断处理至关重要。本文将深入探讨Linux内核中的IRQ...

    详解Linux内核进程调度函数schedule()的触发和执行时机

    ### Linux内核进程调度函数schedule()的触发与执行时机详解 #### 一、引言 在深入探讨Linux内核中的进程调度机制之前,我们需要明确一点:Linux作为一个多任务操作系统,其核心之一便是如何高效地管理和调度系统中...

    Linux内核通知(广播)机制.pdf

    spin_lock_init(&(name)->lock); \ (name)->head = NULL; \ } while (0) ``` - **阻塞型通知链表初始化**: ```c #define BLOCKING_INIT_NOTIFIER_HEAD(name) do { \ rwsem_init(&(name)->rwsem); \ (name)-...

    javascript表单处理具体实现代码(表单、链接、按钮).docx

    ### JavaScript表单处理技术详解 #### 一、概述 在Web开发中,JavaScript常被用于增强用户交互体验,其中表单处理是极为重要的一环。本文档将详细介绍如何使用JavaScript来处理网页中的表单元素,包括但不限于表单...

    linux驱动头文件位置及作用

    - **功能**:定义了自旋锁的接口,如`spin_lock`和`spin_unlock`,用于保护临界区代码。 17. **`<linux/sched.h>`** - **位置**:`linux-2.6.29/include/linux` - **功能**:包含了进程调度相关的定义,如`TASK_...

    阿里巴巴2016校园招聘研发工程师笔试题(1).pdf

    在给出的选项中,`pthread_spin_lock`是一种自旋锁,当锁被占用时,尝试获取锁的线程会一直忙等待,直到锁变为可用,它不涉及用户态到内核态的上下文切换。而`pthread_mutex`、信号量、`pthread_rwlock`、管道和消息...

Global site tag (gtag.js) - Google Analytics