注意:
终于来到了一些艰难的话题,不要在这种时候放弃啊。要成为高手的话,要成为能做点什么的人,就不要总是在这种时候放弃探索,永远只是懂得皮毛,你高兴如此吗?
什么是原语?
primitive or atomic action
是由若干多机器指令构成的完成某种特定功能的一段程序,具有不可分割性.即原语的执行必须是连续的,在执行过程中不允许被中断。
原子操作——操作系统和CPU操作系统的原子操作,和原语类似,但是要注意,原子操作和CPU的架构有关。要不CPU体系结构本身支持简单的原子操作(inc指令),要不在外围提供了锁内存总线功能(我不是很清楚,但是有人使用了“性能昂贵”这个词来形容,这个功能是主板提供的,有它固有的工作频率,也许是说,CPU将花上时间等待设定锁和解除锁的操作,而且想必不是锁住一个变量,而是按照固定大小,这也会降低系统性能),可以在操作期间,防止对数据的访问发生。如果是没有以上的两种功能,例如RISC CPU的ARM,就通过禁止中断来避免上下文切换。
(这里很可能奇怪,ARM的add指令不也可以实现inc的功能吗?注意:inc不仅可以对寄存器操作,也可以对内存操作,而ARM中,你需要从内存中ldr变量,再增加变量,然后str到内存这三条指令,所以不是原子操作)。
在UP(单处理器)中,只要是不会被上下文切换的操作:单指令和禁止中断都是原子操作。而在SMP(对称多处理器),由于线程可以物理上同时进行,所以防止上下文切换的技术不足以构成原子性,只有通过内存锁来实现。
PS:atomic_t的类型通过一个下午的寻找,最后还是没找到它的头文件,原因是:Fedora把它从用户空间移除了。
阅读(691) | 评论(0) | 转发(0) |