Linux中自旋锁是什么?

Linux中自旋锁是什么?,第1张

自旋锁(Spin Lock)是一种典型的对临界资源进行互斥访问的手段,其名称来源于它的工作方式。为了获得一个自旋锁,在某CPU上运行的代码需先执行一个原子 *** 作,该 *** 作测试并设置(Test-AndSet)某个内存变量。由于它是原子 *** 作,所以在该 *** 作完成之前其他执行单元不可能访问这个内存变量。如果测试结果表明锁已经空闲,则程序获得这个自旋锁并继续执行;如果测试结果表明锁仍被占用,程序将在一个小的循环内重复这个“测试并设置” *** 作,即进行所谓的“自旋”,通俗地说就是“在原地打转”。当自旋锁的持有者通过重置该变量释放这个自旋锁后,某个等待的“测试并设置” *** 作向其调用者报告锁已释放。理解自旋锁最简单的方法是把它作为一个变量看待,该变量把一个临界区标记为“我当前在运行,请稍等一会”或者标记为“我当前不在运行,可以被使用。如果A执行单元首先进入例程,它将持有自旋锁;当B执行单元试图进入同一个例程时,将获知自旋锁已被持有,需等到A执行单元释放后才能进入。在ARM体系结构下,自旋锁的实现借用了ldrex指令、strex指令、ARM处理器内存屏障指令dmb和dsb、wfe指令和sev指令,这类似于代码清单7.1的逻辑。可以说既要保证排他性,也要处理好内存屏障。自旋锁主要针对SMP或单CPU但内核可抢占的情况,对于单CPU和内核不支持抢占的系统,自旋锁退化为空 *** 作。在单CPU和内核可抢占的系统中,自旋锁持有期间中内核的抢占将被禁止。由于内核可抢占的单CPU系统的行为实际上很类似于SMP系统,因此,在这样的单CPU系统中使用自旋锁仍十分必要。另外,在多核SMP的情况下,任何一个核拿到了自旋锁,该核上的抢占调度也暂时禁止了,但是没有禁止另外一个核的抢占调度。尽管用了自旋锁可以保证临界区不受别的CPU和本CPU内的抢占进程打扰,但是得到锁的代码路径在执行临界区的时候,还可能受到中断和底半部的影响。为了防止这种影响,就需要用到自旋锁的衍生。

ARM就当作一款超强的单片机,可以单机跑程序,也可加 *** 作系统。如果要加 *** 作系统,我们说 *** 作系统之一就可以选用linux,当然,还有别的可选,比如WinCE,uC/OS等等。

当然看你要干什么了,内核一般不用深入研究。C语言一定要会,基于linux下的C,说白了就是换个环境编程。不管写驱动还是应用都要会C,linux要掌握一些基本的命令。如 ls cat cd .. cp ……环境要熟悉。

ARM是一个芯片设计公司,与Intel 和 AMD类似,由于嵌入式系统的CPU在能耗上有很高的要求,所以在嵌入式领域ARM占有的份额要明显高于Intel与AMD的PC的CPU,也就是熟知的X86体系CPU。这也是为什么人们说起嵌入式就想起ARM芯片的原因。ARM公司只做设计,而真正产芯片是由三星及德州电器这样的公司完成的,ARM只收费。

Linux是 *** 作系统内核,单Linux内核还不能在一定程度上称为 *** 作系统,当Linux与GNU结合, *** 作系统才完整了。现在Linux内核由Linux基金会负责研发。为什么Linux和嵌入式和ARM联系紧密,原因是Linux是开放的,这样就会有大量的资源可以使用,由于嵌入式系统不同于PC,许多硬件都是多变的,在这样的情况下,开放的Linux提供很大便利。

另外Linux本身也是一个绝佳的开发环境,它的开始就是天才程序员和黑客的功劳,由于兼容UNIX,所以一大批高水准的程序员都在它下工作,这与Windows是不同的,Windows更像娱乐的系统,拿Windows做开发实在是让人郁闷。举个例子,Windows的系统调用API有成千上万个,而且更新迅速,程序员只有跟着学,别无他法,可学会时又淘汰,所以Windows程序员很苦,但Linux或类UNIX系统的系统调用仅百十来个,你的技术够硬的话可以熟练使用,可以将大部分精力放在干真正的工作上去,所以Linux是一个完美的开发环境。

正因为如此,当ARM开始独步嵌入式时,Linux就成为标准的开发者使用的开发环境,而如今嵌入式发展这么多微软还没有一个支持ARM体系的 *** 作系统,所以微软在嵌入式上先天不足。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7412742.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-05
下一篇 2023-04-05

发表评论

登录后才能评论

评论列表(0条)

保存