ARM的spinlock
OS homework 4
c
1 | /* |
prefetch: 该指令用于把将要使用到的数据从主存提前装入缓存中,以减少访问主存的指令执行时的延迟。arm64的prefetch用于手工执行预抓取,其是通过gcc内置的函数, 通过汇编实现的,主要用于提升性能。prefetch定义在incude/linux/prefetch.h中。prefetch用于读预取,prefetchw用于写预取。volatile:__asm__用来声明一个内联汇编表达式,__volatile__则是向GCC 声明不允许对该内联汇编优化。内嵌汇编语法如下:__asm__(汇编语句模板: 输出部分: 输入部分: 破坏描述部分)(破坏描述符用于通知编译器我们使用了哪些寄存器或内存)。参考:asm volatile内嵌汇编用法简述,也可见 [Arm instruction set reference guide](https://static.docs.arm.com/100076/0100/arm_instruction_set_ reference_guide_100076_0100_00_en.pdf)
smp_mb():即barrier(),在拿到锁之后和放掉锁之前添加barrier,是为了避免在拿到锁之前修改critical section里面的数据。也就是执行顺序必须是先拿锁 ,再执行critical section,最后放锁。

