Linux驱动的主要关注是如何通过软件与硬件进行交互
发布时间
阅读量:
阅读量
常规内存的优化措施,在其优化流程中表现得非常清晰可见,并且具有良好的效果。然而,在I/O操作方面实施这些优化措施可能会导致严重问题,并且容易受到边缘效应的影响。
side effect(译为边际效应或副作用):指当访问某个存储位置时可能会导致该位置的内容被修改。具体而言,在某些设备中执行读取操作会立即清除这些寄存器的状态信息;而对于I/O 寄存器的操作会产生副作用,则必须避免直接依赖CPU缓存机制以确保数据一致性
通过编译器调整和硬件重新排列导致的问题的解决措施,以及为了确保硬件操作按特定顺序执行而插入内存屏障
void rmb(void);
void smp_wmb(void);//针对SMP系统
在某些架构上,允许把赋值语句和内存屏障进行合并以提升效率
#define set_mb(var, value) do {var = value; mb();} while 0
int a, b;
a = 2;
b = 2;
内存屏障旨在阻止跨越其两端的指令进行跨越, 这可能导致先执行b=2再执行a=2。当在a=2与b=2指令之间插入一个内存屏障时,b操作将不会跨越到a操作之前。将变量a声明为volatile时,系统会在适当位置插入一个内存屏障;
全部评论 (0)
还没有任何评论哟~
