- 博客(6)
- 资源 (52)
- 收藏
- 关注
原创 香农采样定理及其证明
首先对采样最直观的理解就是,如果采样时间间隔过长那么采样得到的信号将不能重构出原信号。也就是说采样时间间隔越短越好,然而由于物理器件的性能,所以需要知道一个采样时间间隔的阈值。超过这个阈值原信号能够完全恢复,没有超过这个阈值则不能完全恢复。不过香农采样定理的定义肯定不是我说的这么粗糙,下面看一下香农采样定理的定义:从上面的定义来看,貌似有些混乱了。首先需要注意到采样定理的定
2014-12-21 10:01:09 31319 2
原创 Linux内核可加载模块基础(2)
file_operations结构体定义在linux/fs.h文件中,并且包含一系列函数指针这些函数指针最终都会由驱动程序实现的函数来进行填充(由于之前的驱动都只有两个函数,一个在加载时被调用,而另一个则在卸载的时候被调用)。文件操作体结构通用函数如下所示:struct file_operations { struct module *owner; loff_t(*llseek) (st
2014-12-21 08:36:47 630
原创 Linux内核可加载模块基础(1)
内核模块是一个在需要时能够被加载到内核内存空间代码片段,在合适的时候也可以从内核中移除。内核模块和.so的最大的差别是内核模块一定是被加载到内核空间中的,而so文件(共享对象文件)则可能被加载到用户空间。正因为内核模块的动态加载功能使得在不重启的情况下扩展系统的功能成为可能。用户可以通过lsmod命令来查看已经加载到内核中的模块信息,这个命令会获取/proc/modules文件中的信息(内核版
2014-12-20 18:55:05 768
原创 Linux RCU队列(3)树形RCU队列实现代码分析
经过之前的分析基本清楚了整个RCU的结构体,下面就通过分代码来解读RCU的实现。void synchronize_rcu(void){ if (!rcu_scheduler_active) return; wait_rcu_gp(call_rcu);}当rcu_scheduler_active变量将会在第一个任务创建之前由0转换为1.当这个变量等于0的时候,RCU可以假设当前
2014-12-02 00:13:52 2028
原创 Linux RCU队列(2)树形RCU队列实现
因为只用一个全局锁在多处理器系统中会造成很严重的锁竞争问题,一种有效的途径是将锁竞争关系变为一种层次关系(如图1)。图中四个rcu_node结构体都有自己的锁,因此处理器0和处理器1之间将会先竞争底层的锁然后在竞争高层的锁,其他处理器也一样。在grace period期间,只有获取了底层的锁的处理器才有机会获取高层的锁,也就是说只有每对处理器中的最后一个才能够记录相应的grace period转入
2014-12-02 00:02:39 1632
原创 Linux RCU队列(1)经典RCU队列实现
RCU全称Read Copy Update,这是一种对读写锁的优化。当所有对相关数据结构的操作时读者行为时,则通过最高层次的禁止线程调度就可以了,如果需要对这个队列进行写操作,那么可以先将原来的数值复制一份出来,然后对复制出来的数据进行处理,最后在适当的时机进行更新。而更新的适当时机则是所有的处理器上都进行了一次线程切换之后,因为只有这样才能保证整个所有的处理器上的读者都释放了相应的资源。 s
2014-12-01 23:55:58 1456
蜂鸣器驱动代码
2014-07-02
cap_cam+ffmpeg
2014-05-18
sipdroid开源项目
2015-07-02
graph_segment
2014-12-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人