内核函数(宏)总结
来源:互联网 发布:赚零用钱的软件 编辑:程序博客网 时间:2024/05/16 08:35
从2.6.32 移植到 2.6.18内核 上碰到的一个问题
当我们判断某个 红黑树节点 或者 list_node 没有被 加到红黑树(或者list)上时,我们会用
RB_EMPTY_NODE
list_empty_careful
if(!RB_EMPTY_NODE) {...} 表示若该节点没有被加到红黑树,就如何处理。
但是在2.6.32内核中,该函数的语义变了。
if(RB_EMPTY_NODE) {...} 表示若该节点没有被加到红黑树,就如何处理。
1
preempt_count 获得当前进程上下文的spin_lock或者读写锁的数目。
默认编译选项出来的linux内核是非抢占式的,该模式下preempt_count一直为0,但是当你把内核编译成抢占式的话,该值会发生变化。
2
nr_free_pages 获得系统当前空闲页的数目。
3
用wait_on_bit 代替spin_lock。
在spin_lock中,schedule(或者sleep)都会发生很严重的问题, 所以可以尝试使用wait_on_bit。以前使用信号量来控制并发,但是信号量内部也是使用自旋锁实现的,所以现在使用 wait_on_bit这个函数。
它底层是用wait_queue_head_t实现的
:__wait_on_bit会让进程休眠吗? http://www.linuxforum.net/forum/showflat.php?Board=linuxK&Number=616702
4
wait_event(true)
将当前进程同步到某个事件
5 signal_pending( current )
检查当前进程是否有信号处理,返回不为0表示有信号需要处理
等待队列操作(wait queue) http://makel2004.blog.163.com/blog/static/413507720081153113241/
6 改变块设备的大小,并写入磁盘
set_capacity(asdp->gd, asdp->size);
i_size_write(bdev->bd_inode, dev_size);
mark_inode_dirty_sync(bdev->bd_inode);
7 test_bit返回值
test_bit(int nr, void* addr)
前提:一个数的第2位被置位
若nr使用常数的话,则test_bit返回1 (内部调用constant_test_bit)
若nr使用变量的话,则test_bit返回-1 (内部调用variable_test_bit)
8 schedule_timeout
使用它一般建议睡眠的时间为HZ/50。 其它值可能有问题。
使用方法见内核。 一般是先把current置为TASK_INTERRUPTIBLE(或者TASK_UNINTERRUPTIBLE)
- 内核函数(宏)总结
- 内核中各种出错函数的总结
- 内核中各种出错函数的总结
- s3c6410 GPIO内核自带函数总结
- geckofx内核(火狐内核)总结
- Linux内核学习总结(附录linux协议栈函数调用图)
- Linux内核学习总结(附录linux协议栈函数调用图)
- 内核链表中list_entry()函数
- Linux内核与驱动开发学习总结:内核初始化宏__init(十二)
- 内核中针对proc文件系统的编程函数总结
- 内核中针对proc文件系统的编程函数总结
- 嵌入式 内核中针对proc文件系统的编程函数总结
- 内核中针对proc文件系统的编程函数总结
- 内核升级总结(ubuntu dapper )
- 内核同步 (来自chinaunix总结)
- (一)内核定时器总结_zzhere2007
- Linux内核启动过程总结(图文)
- Linux内核的学习总结(一)
- 正确利用php向MySQL datetime类型中插入数据
- 应用Visual Studio 2010 辅助敏捷测试 (二)
- 应用Visual Studio 2010 辅助敏捷测试 (三)
- SQL Server 的通用分页显示存储过程(三种比较)
- 推荐一个不错的免费svn服务器unfuddle
- 内核函数(宏)总结
- 栈——用C++模板实现
- PHP生成.cab安装包
- 开通博客了!!
- 队列——用C++模板实现
- PHP文件包含(include)致命漏洞
- C语言函数realloc
- 链表——用C++模板实现
- linux高级IO——记录锁