Advertisement

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)

还没有任何评论哟~