VxWorks信号量是提供任务间通信、同步和互斥的最优选择,提供任务间最快速的通信。也是提供任务间同步和互斥的主要手段。VxWorks提供3种信号量来解决不同的问题。
二进制信号量:最快的最常用的信号量,可用于同步或互斥。
互斥信号量:为了解决内在的互斥问题如优先级继承、删除安全和递归等情况而最优化的特殊的二进制信号量。
计数信号量:类似于二进制信号量,但是随信号量释放的次数改变而改变。
二进制信号量
二进制信号量能够满足任务间的互斥和同步,需要的系统开销最小,因此也称快速信号量。二进制信号量可以看成一个标志,对应资源是可用还是不可用。当一个任务调用semTake ()请求一个信号量时,如果此时信号量可用,信号量会被清零,并且任务立即继续执行;如果信号量不可用,任务会被阻塞来等待信号量。
当一个任务调用semGive ()释放一个二进制信号量时。如果信号量已经可用,释放信号量不会产生任何影响;如果信号量不可用并且没有任务等待使用该信号量,信号量只是被简单地置为可用;如果信号量不可用并且有一个或多个任务等待该信号量,最高优先级的任务被解阻塞,信号量仍为不可用。
互斥
当两个以上的任务共享使用同一块内存缓冲区或同一个I/O设备之类的资源时,可能会发生竞争状态。
二进制信号量可以通过对共享资源上锁,实现高效的互斥访问,不象禁止中断或禁止抢占,二进制信号量将互斥仅仅限于对与之联系的资源的访问,并且比禁止中断和禁止抢占提供更精确的互斥粒度。使用时创建用于保护资源的二进制信号量,初始时信号量可用。
当任务需要访问这个资源时,首先取得这个信号量,所有其它想要访问这个资源的任务将被阻塞。当任务完成了对该资源的访问时,释放该信号量,允许其他任务使用该资源。因此所有对一个需要互斥访问资源的操作由semTake ()和semGive ()对一起来实现。
semTake(semMutex,WAIT FOREVER)
临界区,某一时刻仅被一个任务访问
semGive (semMutex)
同步
信号量另一种通常的用法是用于任务间的同步机制。在这种情况下,信号量代表一个任务所等待的条件或事件。最初,信号量是不可用的。一个任务或中断处理程序释放该信号量来通知这个事件的发生。等待该信号量的任务将被阻塞直到事件发生、该信号量可用。一旦被解阻塞,任务就执行恰当的事件处理程序。信号量在任务同步中的应用对于将中断服务程序从冗长的事件处理中解放出来以缩短中断响应时间是很有用的。
互斥信号量
互斥信号量是一种特殊的二进制信号量,用于解决具有内在的互斥问题:优先级继承、删除安全和对资源的递归访问等情况。
对于一般的操作系统,一般互斥信号量就是二值信号靓量,但VxWoks中有非同寻常的意义。另外一个典型就是,Linux内核也单独设立了互斥信号量。
互斥信号量与二进制不同点在于:
①定义一个互斥信号量时,其已经初始化完毕为可用,它仅用于互斥;
②仅能由取(semTake ())它的任务释放,即由同一个任务申请然后使用完毕后释放;
③因为semTake和semGive是成对出现的,因此不能在ISR 中释放(semGive ())。
优先级继承
优先级倒置发生在一个高优先级的任务被迫等待一段不确定时间,等待一个低优先级任务完成。VxWorks允许使用优先级继承算法,在互斥信号量中使用选项SEM-INVERSION-SAFE ,将使能优先级继承算法,优先级继承协议确保拥有资源的任务以阻塞在该资源上的所有任务中优先级最高的任务的优先级执行,直到它释放所拥有的所有信号量,然后该任务返回到正常状态。因此这个“继承的高优先级”任务受到不会被任何中间优先级任务抢占的保护。
删除安全
另一个互斥问题涉及到任务删除。在一个受信号量保护的临界区,经常需要保护在临界区执行的任务不会被意外地删除。删除一个在临界区执行的任务可能引起意想不到的后果,造成保护资源的信号量不可用,可能导致资源处于破坏状态,也就导致了其他要访问该资源的所有任务无法得到满足。
原语taskSafe()和taskUnsafe ()提供了防止任务被意外删除的一种方法。同时互斥信号量提供了选项SEM-DELETE-SAFE ,使用这个选项,每次调用semTake ( )时隐含地使能了taskSafe(),当每次调用semGive ()时隐含地使能了taskUnsafe ()这种方式,任务得到信号量时得到不会被删除的保护。
递归资源访问
互斥信号量能够被递归地获得。这意味着信号量能够被一个拥有该信号量的任务在该信号量最终被释放之前多次获取。递归对于满足一些子程序即要求能够相互调用但是也要求互斥访问一个资源非常有用。这种情形是可能的,因为系统需要跟踪哪一个任务当前拥有信号量。
计数器信号量
计数器信号量是实现任务同步和互斥的另一种手段,在具体实现上有点差异。计数器信号量除了像二进制信号量那样工作外,还保持对信号量释放次数的跟踪。与二进制信号量不同的时,计数型信号量每次释放,计数器加一;每次获取,计数器减一,当信号量减到0 时,试图获取该信号量的任务被阻塞。
正如二进制信号量,当计数信号量释放时,如果有任务阻塞在该信号量阻塞队列上,那么任务解除阻塞;但是如果信号量释放时,没有任务阻塞在该信号量阻塞队列上,那么计数器加一。
结 论
通过对嵌入式操作系统VxWorks的多任务之间的通信机制的分析可以看出,信号量在实现多任务间的通信、同步和互斥中发挥着重要的作用。因此,深入理解和正确使用VxWorks的信号量,可以提高实时系统中多任务间通信的效率
SEM是Search Engine Marketing的缩写,中文意思是搜索引擎营销。SEM是一种新的网络营销形式。SEM所做的就是以最小的投入在搜索引擎中获最大的访问量并产生商业价值。一、SEM的重心之一,就是关键词的选择,而SEM选词最重要的原则就是要精准。这里说的精准,不仅仅是像SEO选词那样,只要选的词与网站业务有关,然后有一定搜索量,就OK。因为对于SEM来说,最终目的是要让用户掏银子,特别是竞价排名这块,点击一次就要付一次钱。所以SEM选词的精准要比SEO更深入和具体,简单的说,在SEO选词标准的基础上还要再增加两个条件:
1、搜索该词的人,有明确的消费需求与实力。
2、搜索该词的人,容易被转化成我们的用户。
二、SEM中引导页的设计
其实他们选的词中,一小部分词也是比较精准的。但是转换率也非常差,这是为什么呢?答案就是在引导页上下的功夫不足。首先和大家解释一下什么是引导页,引导页就是用户搜索一个词后,点击进去所看到的页面(也叫落地页)。在SEM中,将用户吸引到页面中,只是完成了第一步。而能不能让用户产生消费,则要看引导页能不能打动用户。这就好像传统营销方式中的会议营销,把用户拉到会场,只是第一步。具体能让多少用户签单,则要看讲师的功力了。一个成功的引导页,应该围绕用户行为及特点设计,至少应该符合四个要求:
1、能够给用户足够的信任感。
2、提供的内容是对用户有帮助的。
3、能够解答用户心中潜在的问题。
4、能够促使用户留下信息或与我们取得联系。
三、SEM中的数据监测与优化
实际上,该公司的网络推广工作,也不是一点效果没有。因为通过网络推广,每个月都会有报名的学员,只是效果不理想,并且成交量在不断下降。但是效果从何而来,他们说不清楚,只是大概猜测在门户发布的新闻稿起了作用。至于为什么成交量下降,就更说不明白了。
其实对于SEM来说,数据的监测与优化工作,才是最重要的一步。没有科学而完善的监测体系,那就好像盲人摸象,或者是闭着眼睛上战场。而像流量统计系统,也只能算做初级的数据监测。SEM工作想做好,还需要建立更细致、更科学的数据监测体系才行。比如说竞价排名这块,我们就要对关键词的点击数、总消费数、注册数、单笔订单额、订单数、订单转化率、注册CPA、ROI等数据进行监测。引导页这块,除了进行常规的流量监测外,还需要增加对咨询量与转换率方面的监测。
一旦这套体系建立起来,那就很容易发现问题和解决问题。比如说如果某关键词效果不理想,我们很容易就能从数据中分析出是因为词选的不靠谱,还是创意写的不吸引人,或者是引导页上下的功夫不足。
而且在有了数据的基础上,我们才可以进一步的进行渠道优化,使我们的推广工作达到事半功倍的效果。比如说对于竞价排名来说,我们就可以通过改进广告创意的方式,来监测不同创意之间的效果变化,继而找到最佳的创意组合。也可以通过改进引导页设计的方式,观察不同引导页之间的差异,找到最符合用户需求和心理的引导页设计等。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)