Linux内核设计与实现读书笔记(8)-内核同步方法【转】
|
原子整数操作 |
描述 |
|
ATOMIC_INIT(int i) |
在声明一个atomic_t变量时,将它初始化为i |
|
int atomic_read(atomic_t *v) |
原子地读取整数变量v |
|
void atomic_set(atomic_t *v, int i) |
原子地设置v值为i |
|
void atomic_add(int i, atomic_t *v) |
原子地给v加i |
|
void atomic_sub(int i, atomic_t *v) |
原子地从v减i |
|
void atomic_inc(atomic_t *v) |
原子地给v加1 |
|
void atomic_dec(atomic_t *v) |
原子地给v减1 |
|
int atomic_sub_and_test(int i, atomic_t *v) |
原子地从v减i,若结果等于0返回真,否则返回假 |
|
int atomic_add_negative(int i, atomic_t *v) |
原子地从v加i,若结果是负数返回真,否则返回假 |
|
int atomic_dec_and_test(atomic_t *v) |
原子地从v减1,若结果等于0返回真,否则返回假 |
|
int atomic_inc_and_test(atomic_t *v) |
原子地从v加1,若结果等于0返回真,否则返回假 |
|
原子位操作 |
描述 |
|
void set_bit(int nr, void *addr) |
原子地设置addr所指对象的第nr位 |
|
void clear_bit(int nr, void *addr) |
原子地清空addr所指对象的第nr位 |
|
void change_bit(int nr, void *addr) |
原子地翻转addr所指对象的第nr位 |
|
int test_and_set_bit(int nr, void *addr) |
原子地设置addr所指对象的第nr位,并返回原先的值 |
|
int test_and_clear_bit(int nr, void *addr) |
原子地清空addr所指对象的第nr位,并返回原先的值 |
|
int test_and_change_bit(int nr, void *addr) |
原子地翻转addr所指对象的第nr位,并返回原先的值 |
|
int test_bit(int nr, void *addr) |
原子地返回addr所指对象的第nr位 |
|
方法 |
描述 |
|
spin_lock( ) |
获取指定的自旋锁 |
|
spin_lock_irq( ) |
禁止本地中断并获取指定的锁 |
|
spin_lock_irqsave( ) |
保存本地中断的当前状态,禁止本地中断,并获取指定的锁 |
|
spin_unlock( ) |
释放指定的锁 |
|
spin_unlock_irq( ) |
释放指定的锁,并激活本地中断 |
|
spin_unlock_irqrestore( ) |
释放指定的锁,并让本地中断恢复到以前的状态 |
|
spin_lock_init( ) |
初始化指定的spinlock_t |
|
spin_trylock( ) |
试图获取指定的锁,如果未获取则返回非0 |
|
spin_is_locked( ) |
如果指定的锁当前正在被获取则返回非0,否则返回0 |
|
spin_lock_bh( ) |
禁止所有下半部的执行,并获取指定的锁 |
|
spin_unlock_bh( ) |
释放指定的锁,允许下半部的执行 |
|
方法 |
描述 |
|
read_lock( ) |
获取指定的读锁 |
|
read_lock_irq( ) |
禁止本地中断并获取指定的读锁 |
|
read_lock_irqsave( ) |
保存本地中断的当前状态,禁止本地中断并获取指定的读锁 |
|
read_unlock( ) |
释放指定的读锁 |
|
read_unlock_irq( ) |
释放指定的读锁,并激活本地中断 |
|
read_unlock_irqrestore( ) |
释放指定的读锁,并让本地中断恢复到以前的状态 |
|
write_lock( ) |
获取指定的写锁 |
|
write_lock_irq( ) |
禁止本地中断并获取指定的写锁 |
|
write_lock_irqsave( ) |
保存本地中断的当前状态,禁止本地中断并获取指定的写锁 |
|
write_unlock( ) |
释放指定的写锁 |
|
write_unlock_irq( ) |
释放指定的写锁,并激活本地中断 |
|
write_unlock_irqrestore( ) |
释放指定的写锁,并让本地中断恢复到以前的状态 |
|
write_trylock( ) |
试图获得指定的写锁;如果写锁不可用,返回非0值 |
|
rw_lock_init( ) |
初始化指定的rwlock_t |
|
rw_is_locked( ) |
如果指定的锁当前已被持有,该函数返回非0值,否则返回0 |
|
方法 |
描述 |
|
sema_init(struct semaphore *, int) |
以指定的计数值初始化动态创建的信号量 |
|
init_MUTEX(struct semaphore *) |
以计数值1初始化动态创建的信号量 |
|
init_MUTEX_LOCKED(struct semaphore *) |
以计数值0初始化动态创建的信号量(初始化为加锁状态) |
|
down_interruptible(struct semaphore *) |
试图获得指定的信号量,如果信号已被争用,则进入可中断睡眠状态 |
|
down(struct semaphore *) |
试图获得指定的信号量,如果信号已被争用,则进入不可中断睡眠状态 |
|
down_trylock(struct semaphore *) |
试图获得指定的信号量,如果信号已被争用,则立刻返回非0值 |
|
up(struct semaphore *) |
释放指定的信号量,如果睡眠队列不空,则唤醒其中的一个任务 |
|
方法 |
描述 |
|
init_completion(struct completion *) |
初始化指定的动态创建的完成变量 |
|
wait_for_completion(struct completion *) |
等待指定的完成变量接受信号 |
|
completion(struct completion *) |
发信号唤醒任何等待任务 |
|
方法 |
描述 |
|
Preempt_disable( ) |
禁止内核抢占 |
|
Preempt_enable( ) |
激活内核抢占并检查和执行被挂起的需要调度的任务 |
|
Preempt_enable_no_resched( ) |
激活内核抢占但不再进行调度 |
|
Preempt_count( ) |
返回抢占计数 |
|
方法 |
描述 |
|
rmb( ) |
阻止跨跃屏障的载入动作发生重排序 |
|
read_barrier_depends( ) |
阻止跨跃屏障的具有数据依赖关系的载入动作重排序 |
|
wmb( ) |
阻止跨跃屏障的存储动作发生重排序 |
|
mb( ) |
阻止跨跃屏障的载入和存储动作重新排序 |
|
smp_rmb( ) |
在SMP上提供rmb( )功能,在UP上提供barrier( )功能 |
|
smp_read_barrier_depends( ) |
在SMP上提供read_barrier_depends( )功能,在UP上提供barrier( )功能 |
|
smp_wmb( ) |
在SMP上提供wmb( )功能,在UP上提供barrier( )功能 |
|
smp_mb( ) |
在SMP上提供mb( )功能,在UP上提供barrier( )功能 |
|
barrier( ) |
组织编译器跨屏障对载入或存储操作进行优化 |
Linux内核设计与实现读书笔记(8)-内核同步方法【转】的更多相关文章
- Linux内核设计与实现 读书笔记 转
Linux内核设计与实现 读书笔记: http://www.cnblogs.com/wang_yb/tag/linux-kernel/ <深入理解LINUX内存管理> http://bl ...
- Linux内核设计与实现——读书笔记2:进程管理
1.进程: (1)处于执行期的程序,但不止是代码,还包括各种程序运行时所需的资源,实际上进程是正在执行的 程序的实时结果. (2)程序的本身并不是进程,进程是处于执行期的程序及其相关资源的总称. (3 ...
- 《Linux内核设计与实现》笔记-1-linux内核简单介绍
一.Linux内核相对于传统的UNIX内核的比較: (1):Linux支持动态内核模块. 虽然Linux内核也是总体式结构,但是同意在须要的时候动态哦卸除(rmmod xxx)和载入内核模块(insm ...
- Linux内核设计与实现 读书笔记
第三章 进程管理 1. fork系统调用从内核返回两次: 一次返回到子进程,一次返回到父进程 2. task_struct结构是用slab分配器分配的,2.6以前的是放在内核栈的栈底的:所有进程的ta ...
- Linux内核设计与实现——读书笔记1:内核简介
内核:有的时候被称管理者或者操作系统核心,通常内核负责响应中断的中断服务程序, 负责管理多个进程从而分享处理器时间的调度程序,负责管理进程地址空间德内存管理程序 和网络,进程间通信等系统服务程序共同组 ...
- Linux Shell脚本攻略 读书笔记
Linux Shell脚本攻略 读书笔记 这是一本小书,总共253页,但内容却很丰富,书中的示例小巧而实用,对我这样总是在shell门前徘徊的人来说真是如获至宝:最有价值的当属文本处理,对这块我单独整 ...
- 【2018.08.13 C与C++基础】C++语言的设计与演化读书笔记
先占坑 老实说看这本书的时候,有很多地方都很迷糊,但却说不清楚问题到底在哪里,只能和Effective C++联系起来,更深层次的东西就想不到了. 链接: https://blog.csdn.net/ ...
- 《Linux内核分析与设计实现》读书笔记一
第一章 Linux内核简介 1.1 Unix的历史 Unix的特点: Unix很简洁,仅仅提供几百个系统调用并且有一个非常明确的设计目的: 在Unix中,所有的东西都被当做文件对待. Unix的内核和 ...
- 初探内核之《Linux内核设计与实现》笔记上
内核简介 本篇简单介绍内核相关的基本概念. 主要内容: 单内核和微内核 内核版本号 1. 单内核和微内核 原理 优势 劣势 单内核 整个内核都在一个大内核地址空间上运行. 1. 简单.2. 高效 ...
随机推荐
- Lua工具类
1.打印table --一个用以打印table的函数 function print_r (t, name) print(pr(t,name)) end function pr (t, name, in ...
- C变量之间的转换
int main(){ //定义了三个变量分别是abc ab的值分别是5跟8 c没有赋值 把b的值给c 把a的值给b 把c的值给a 形成了一个ab值得转换: int a=5; int b=8; in ...
- Mysql字符串截取:Left()、Right()、Substring()、Substring_index()
在实际的项目开发中有时会有对数据库某字段截取部分的需求,这种场景有时直接通过数据库操作来实现比通过代码实现要更方便快捷些, mysql有很多字符串函数可以用来处理这些需求,如Mysql字符串截取总结: ...
- m个苹果放在n个盘子中有多少种结果
题目 m个苹果放在n个盘子中有多少种结果,前置条件: 允许存在空盘 重复的摆放结果忽略不计 根据题意,也就是有3种情况,的确完全重复的摆放方式是没多大意义的 思路 这题可以用枚举的描述方式进行尾递归求 ...
- java设计模式之责任链模式以及在java中作用
责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链上的哪一个 ...
- Failed loading D:\Program Files\phpStudy20161103\php\php-5.6.27-nts\ext\php_xdebug.dll
我用的是phpstudy 更新完composer php 切换composer的国内源的时候老是报找不到\php_xdebug.dll的错误, 原因是, 在php.ini 里面默写就是在Program ...
- MySQL初识3
随着对MySQL的熟识,今次总结一下MySQL数据库的删除.备份和还原操作 1.数据库的删除: a.删除数据库的命令:drop database dbname; b.删除数据库中的表: 单个表:dro ...
- io学习2-磁盘阵列RAID
磁盘阵列 RAID(Redundant ArrayOf Inexpensive Disks) 如果你是一位数据库管理员或者经常接触服务器,那对RAID应该很熟悉了,作为最廉价的存储解决方案,RAID早 ...
- [android]不解锁刷机
本人因为误操作进入andriod recovery模式,显示failed to boot 2,致手机无法恢复出厂值, 当时那叫一个郁闷.上论坛搜寻无数,唉让刷底包的无数(在此不解释),万恶的刷底包. ...
- 健康领域今年开始井喷了,养老地产和私人医生这两个领域目测成为下一轮BAT在健康领域布局的竞争方向
医疗行业做了六年多的时间,今年到了井喷的阶段,腾讯先是入股了丁香园,然后又一亿美金融资挂号网,春雨医生获得5000万美元的C轮融资,这是要上市的节奏.. 从互联网战略上,健康网和医疗网都是做资料刚开始 ...