
linux内核
七月流星.
A naughty Engineer
展开
-
linux内核同步机制之读写信号量
读写信号量与信号量之间的关系类似于自旋锁与读写自旋锁。读写信号量可能会引起进程阻塞,但是它允许N个读执行单元同时访问共享资源,而最多只允许有一个写执行单元访问共享资源;因此,读写信号量是一种相对放宽条件的、粒度稍大于信号量的互斥机制。注意:信号量不允许任何操作之间有并发。理解:定义于#include<linux/rwsem.h> 实际上在arch/X86/incl...转载 2019-03-25 18:13:15 · 1272 阅读 · 1 评论 -
linux内核同步机制之互斥锁
用互斥量进行同步#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>#include <pthread.h>#include <semaphore.h>void *thread_function(void *a...原创 2019-03-25 18:04:06 · 313 阅读 · 0 评论 -
linux内核同步机制之完成量
定义在头文件linux/completion.h中;完成量(completion)是Linux系统提供的一种比信号量更好的同步机制,是对信号量的一种补充;它用于一个执行单元等待另一个执行单元完成某事;使用完成量等待时,调用进程是以独占睡眠方式进行等待的;不是忙等待;1).定义完成量:struct completion my_completion; //定义完成量my_completi...原创 2019-03-25 18:00:30 · 656 阅读 · 0 评论 -
linux内核同步机制之顺序锁
定义在头文件linux/seqlock.h中 顺序锁(seqlock)是对读写锁的一种优化,若使用顺序锁,读执行单元绝对不会被写执行单元所阻塞,也就是说,读执行单元可以在写执行单元对被顺序锁保护的共享资源进行写操作的同时仍然可以继续读,而不必等待写执行单元完成之后再去读,同样,写执行单元也不必等待所有的读执行单元读完之后才去进行写操作; 但是写执行单元与写执行单元之间...原创 2019-03-25 17:55:17 · 592 阅读 · 0 评论 -
linux内核同步机制之读写自旋锁
定义:读写自旋锁(rwlock)是一种比自旋锁粒度更小的自旋锁机制,它保留了“自旋”的概念。但是在写操作方面,只能最多有一个写进程,在读方面,同时可拥有多个执行单元,当然读和写也不能同时进行。一句话:防写不防读理解推荐:http://blog.sina.com.cn/s/blog_6d7fa49b01014q86.html操作:定义于#include<linu...原创 2019-03-25 17:42:13 · 299 阅读 · 0 评论 -
linux内核同步机制之RCU
定义: 把共享的数据结构复制一个副本,对副本进行修改,最后使用回调机制在适当的时候将指向原来数据的指针指向新的数据。对于被RCU保护的共享数据结构,读操作不需要获得任何锁就可以访问,但写操作在访问它时首先拷贝一个副本,然后对副本进行修改,最后在适当的时机把指向原来数据的指针重新指向新的被修改的数据。这个时机就是所有引用该数据的CPU都退出对共享数据的操作。...原创 2019-03-25 17:34:37 · 327 阅读 · 0 评论 -
linux内核同步机制之自旋锁
定义: 最多只能被一个可执行线程持有。如果一个执行线程试图获得一个被争用的自旋锁,那么该线程就会一直进行忙循环----旋转----等待锁重新可用。 自旋锁有“加锁”和“解锁”两种状态。“加锁”一直在寻求“解锁”,“解锁”马上会寻求“加锁”,并原地打转,所以加锁位置的代码进入临界区执行,直到解锁。注意: 1.占用临界区的时间必须短; 2.拥...原创 2019-03-25 17:06:54 · 346 阅读 · 0 评论 -
linux内核同步机制之原子操作
原子操作原子的操作指的就是在执行过程中不会被别的代码所中断的操作,也就是最小执行单位。在Linux中原子操作的方法有很多,有整型原子和位原子,他们在任何情况下操作都是原子的,这些原子操作的实现都是依赖CPU来实现的,因此这些函数都与CPU架构密切相关。整型原子我们arm架构的原子实现在kernel/arch/arm/include/asm/atomic.h1. 设置源自变量的值...原创 2019-03-25 16:16:53 · 725 阅读 · 0 评论 -
linux内核同步机制之中断屏蔽
定义: 在进入临界区之前屏蔽系统的中断。可保证正在执行的内核执行路径不被中断处理程序抢占,(linux的进程调度都依赖于中断)中断屏蔽相关函数:local_irq_disable(); //屏蔽所有中断...... //临界区代码local_irq_enable(); //开放所有中断注:使用该函数有时会出现问题,如果有些中断在屏蔽中断前就是关闭的,那么在开放...原创 2019-03-25 15:54:31 · 584 阅读 · 0 评论 -
linux内核同步机制之信号量
定义: 如果有一个任务试图获得已经被占用的信号量时,信号量会将其推进一个等待队列,使其睡眠,当持有信号量的进程将信号量释放以后,再唤醒该任务,并获得该信号量。头文件head.h代码:#ifndef __HEAD_H__#define __HEAD_H__#include <stdio.h>#include <stdlib.h>#incl...原创 2019-03-25 15:10:53 · 284 阅读 · 0 评论