0
点赞
收藏
分享

微信扫一扫

linux内核数据结构--bitmap

夏天的枫_ 2022-03-11 阅读 147
数据结构

bitmap可以理解成一个位数组,即数组每个元素是一个bit, 内核提供了各种接口以方便操作

bitmap定义

#define DECLARE_BITMAP(name,bits) \
	unsigned long name[BITS_TO_LONGS(bits)]

使用之前需要先调用这个宏定义一个bitmap,实际上就是一个unsigned long类型的数组,数组长度是根椐bits, 以及long类型所占字节数计算出来的。

bitmap操作函数

 bitmap_zero(dst, nbits)             
 bitmap_fill(dst, nbits)                  
 bitmap_copy(dst, src, nbits)                
 bitmap_and(dst, src1, src2, nbits)       
 bitmap_or(dst, src1, src2, nbits)           
 bitmap_xor(dst, src1, src2, nbits)    
 bitmap_set(dst, pos, nbits)             
 bitmap_clear(dst, pos, nbits)       

内核中对位操作的两组函数也可以用于bitmap.

1.原子操作

 set_bit(bit, addr)              
 clear_bit(bit, addr)                
 change_bit(bit, addr)        
 test_and_set_bit(bit, addr)
 test_and_clear_bit(bit, addr)
 test_and_change_bit(bit, addr)
 test_bit(bit, addr)

2.非原子操作

 __set_bit(bit, addr)              
 __clear_bit(bit, addr)                
 __change_bit(bit, addr)        
 __test_and_set_bit(bit, addr)
 __test_and_clear_bit(bit, addr)
 __test_and_change_bit(bit, addr)
举报

相关推荐

0 条评论