在多节点并行的情况下,每个节点的信号量p,v函数的挂起与释放,并不能统一。
号称网络硬件三剑客的集线器(Hub)、交换机(Switch)与路由器(Router)一直都是网络界的活跃分子,但让很多初入网络之门的菜鸟恼火的是,它们三者不仅外观相似,而且经常呆在一起,要想分清谁是谁,感觉有点难!就让我们一起来看看它们之间有什么区别和联系吧! 三剑客的工作原理 一、集线器 1.什么是集线器 在认识集线器之前,必须先了解一下中继器。在我们接触到的网络中,最简单的就是两台电脑通过两块网卡构成“双机互连”,两块网卡之间一般是由非屏蔽双绞线来充当信号线的。由于双绞线在传输信号时信号功率会逐渐衰减,当信号衰减到一定程度时将造成信号失真,因此在保证信号质量的前提下,双绞线的最大传输距离为100米。当两台电脑之间的距离超过100米时,为了实现双机互连,人们便在这两台电脑之间安装一个“中继器”,它的作用就是将已经衰减得不完整的信号经过整理,重新产生出完整的信号再继续传送。中继器就是普通集线器的前身,集线器实际就是一种多端口的中继器。集线器一般有4、8、16、24、32等数量的RJ45接口,通过这些接口,集线器便能为相应数量的电脑完成“中继”功能。由于它在网络中处于一种“中心”位置,因此集线器也叫做“Hub”。 2.集线器的工作原理 集线器的工作原理很简单,以图2为例,图中是一个具备8个端口的集线器,共连接了8台电脑。集线器处于网络的“中心”,通过集线器对信号进行转发,8台电脑之间可以互连互通。具体通信过程是这样的:假如计算机1要将一条信息发送给计算机8,当计算机1的网卡将信息通过双绞线送到集线器上时,集线器并不会直接将信息送给计算机8,它会将信息进行“广播”--将信息同时发送给8个端口,当8个端口上的计算机接收到这条广播信息时,会对信息进行检查,如果发现该信息是发给自己的,则接收,否则不予理睬。由于该信息是计算机1发给计算机8的,因此最终计算机8会接收该信息,而其它7台电脑看完信息后,会因为信息不是自己的而不接收该信息。3.集线器的特点 1)共享带宽 集线器的带宽是指它通信时能够达到的最大速度。目前市面上用于中小型局域网的集线器主要有10Mbps、100Mbps和10/100Mbps自适应三种。 10Mb带宽的集线器的传输速度最大为10Mbps,即使与它连接的计算机使用的是100Mbps网卡,在传输数据时速度仍然只有10Mbps。10/100Mbps自适应集线器能够根据与端口相连的网卡速度自动调整带宽,当与10Mbps的网卡相连时,其带宽为10Mb;与100Mbps的网卡相连时,其带宽为100Mb,因此这种集线器也叫做“双速集线器”。 集线器是一种“共享”设备,集线器本身不能识别目的地址,当同一局域网内的A主机给B主机传输数据时,数据包在以集线器为架构的网络上是以广播方式传输的,由每一台终端通过验证数据包头的地址信息来确定是否接收。 由于集线器在一个时钟周期中只能传输一组信息,如果一台集线器连接的机器数目较多,并且多台机器经常需要同时通信时,将导致集线器的工作效率很差,如发生信息堵塞、碰撞等。 为什么会这样呢?打给比方,以图2为例,当计算机1正在通过集线器发信息给计算机8时,如果此时计算机2也想通过集线器将信息发给计算机7,当它试图与集线器联系时,却发现集线器正在忙计算机1的事情,于是计算机2便会“带”着数据站在集线器的面前等待,并时时要求集线器停下计算机1的活来帮自己干。如果计算机2成功地将集线器“抢”过来了(由于集线器是“共享”的,因此很容易抢到手),此时正处于传输状态的计算机1的数据便会停止,于是计算机1也会去“抢”集线器……可见,集线器上每个端口的真实速度除了与集线器的带宽有关外,与同时工作的设备数量也有关。比如说一个带宽为10Mb的集线器上连接了8台计算机,当这8台计算机同时工作时,则每台计算机真正所拥有的带宽是10/8=1.25Mb! 2ue5e5半双工 先说说全双工:两台设备在发送和接收数据时,通信双方都能在同一时刻进行发送或接收操作,这样的传送方式就是全双工。而处于半双工传送方式的设备,当其中一台设备在发送数据时,另一台只能接收,而不能同时将自己的数据发送出去。 由于集线器采取的是“广播”传输信息的方式,因此集线器传送数据时只能工作在半双工状态下,比如说计算机1与计算机8需要相互传送一些数据,当计算机1在发送数据时,计算机8只能接收计算机1发过来的数据,只有等计算机1停止发送并做好了接收准备,它才能将自己的信息发送给计算机1或其它计算机。二、交换机 1.什么是交换机 交换机也叫交换式集线器,它通过对信息进行重新生成,并经过内部处理后转发至指定端口,具备自动寻址能力和交换作用,由于交换机根据所传递信息包的目的地址,将每一信息包独立地从源端口送至目的端口,避免了和其他端口发生碰撞。广义的交换机就是一种在通信系统中完成信息交换功能的设备。 2.交换机的工作原理 在计算机网络系统中,交换机是针对共享工作模式的弱点而推出的。集线器是采用共享工作模式的代表,如果把集线器比作一个邮递员,那么这个邮递员是个不认识字的“傻瓜”--要他去送信,他不知道直接根据信件上的地址将信件送给收信人,只会拿着信分发给所有的人,然后让接收的人根据地址信息来判断是不是自己的!而交换机则是一个“聪明”的邮递员--交换机拥有一条高带宽的背部总线和内部交换矩阵。交换机的所有的端口都挂接在这条背部总线上,当控制电路收到数据包以后,处理端口会查找内存中的地址对照表以确定目的MAC(网卡的硬件地址)的NIC(网卡)挂接在哪个端口上,通过内部交换矩阵迅速将数据包传送到目的端口。目的MAC若不存在,交换机才广播到所有的端口,接收端口回应后交换机会“学习”新的地址,并把它添加入内部地址表中。 可见,交换机在收到某个网卡发过来的“信件”时,会根据上面的地址信息,以及自己掌握的“常住居民户口簿”快速将信件送到收信人的手中。万一收信人的地址不在“户口簿”上,交换机才会像集线器一样将信分发给所有的人,然后从中找到收信人。而找到收信人之后,交换机会立刻将这个人的信息登记到“户口簿”上,这样以后再为该客户服务时,就可以迅速将信件送达了。 3.交换机的性能特点 1)独享带宽 由于交换机能够智能化地根据地址信息将数据快速送到目的地,因此它不会像集线器那样在传输数据时“打扰”那些非收信人。这样一来,交换机在同一时刻可进行多个端口组之间的数据传输。并且每个端口都可视为是独立的网段,相互通信的双方独自享有全部的带宽,无须同其他设备竞争使用。比如说,当A主机向D主机发送数据时,B主机可同时向C主机发送数据,而且这两个传输都享有网络的全部带宽--假设此时它们使用的是10Mb的交换机,那么该交换机此时的总流通量就等于2×10Mb=20Mb。 2)全双工 当交换机上的两个端口在通信时,由于它们之间的通道是相对独立的,因此它们可以实现全双工通信。 三、集线器与交换机的区别 从两者的工作原理来看,交换机和集线器是有很大差别的。首先,从OSI体系结构来看,集线器属于OSI的第一层物理层设备,而交换机属于OSI的第二层数据链路层设备。 其次,从工作方式来看,集线器采用一种“广播”模式,因此很容易产生“广播风暴”,当网络规模较大时性能会受到很大的影响。而当交换机工作的时候,只有发出请求的端口和目的端口之间相互响应而不影响其他端口,因此交换机能够在一定程度上隔离冲突域和有效抑制“广播风暴”的产生。 另外,从带宽来看,集线器不管有多少个端口,所有端口都是共享一条带宽,在同一时刻只能有两个端口传送数据,其他端口只能等待,同时集线器只能工作在半双工模式下;而对于交换机而言,每个端口都有一条独占的带宽,当两个端口工作时并不影响其他端口的工作,同时交换机不但可以工作在半双工模式下而且可以工作在全双工模式下。 如果用最简单的语言叙述交换机与集线器的区别,那就应该是智能与非智能的区别。集线器说白了只是连接多个计算机的网络设备,它只能起到信号放大和传输的作用,不能对信号中的碎片进行处理,所以在传输过程中容易出错。而交换机则可以看作为是一种智能型的集线器,它除了拥有集线器的所有特性外,还具有自动寻址、交换、处理的功能。并且在数据传递过程中,发送端与接受端独立工作,不与其它端口发生关系,从而达到防止数据丢失和提高吞吐量的目的。 四、路由器 1.路由器的作用 通过集线器或交换机,我们可以将很多台电脑组成一个比较大的局域网(图3),但是当机器的数量达到一定数目时,问题也就来了:对于用集线器构成的局域网而言,由于采用“广播”工作模式,当网络规模较大时,信息在传输过程中出现碰撞、堵塞的情况越来越严重,即使是交换机,这种情况也同样存在。其次,这种局域网不安全,也不利于管理。为了解决这些问题,人们便将一个较大的网络划分为一个个小的子网、网段,或者直接将它们划分为多个VLAN(即虚拟局域网),在一个VLAN内,一台主机发出的信息只能发送到具有相同VLAN号的其他主机,其他VLAN的成员收不到这些信息或广播帧。采用VLAN划分网络后,可有效地抑制网络上的广播风暴,增加网络的安全性,使管理控制集中(图4)。既然是局域网,万一分别处于不同VLAN的主机需要互相通信时该怎么办呢?这时候就得通过路由器(Router,转发者)来帮忙了。路由器可以将处于不同子网、网段、VLAN的电脑连接起来,让它们自由通信。另外,我们都知道目前的网络有很多种结构类型,且不同网络所使用的协议、速度也不尽相同。当两个不同结构的网络需要互连时,也可以通过路由器来实现。路由器可以使两个相似或不同体系结构的局域网段连接到一起,以构成一个更大的局域网或一个广域网。 可见,路由器是一种连接多个网络或网段的网络设备,它能将不同网络、网段或VLAN之间的数据信息进行“翻译”,以使它们能够相互“读”懂对方的数据,从而构成一个更大的网络。2.路由器的工作原理 所谓路由就是指通过相互连接的网络把信息从源地点移动到目标地点的活动。那么路由器具体是如何进行“翻译”工作的呢?我们平时在学习、翻译英语时,肯定会准备一本英汉字典,通过它来实现英文与中文之间的互现转换。而对于路由器而言,它也有这种用于翻译的字典--路径表。路径表(Routing Table)保存着各种传输路径的相关数据,如子网的标志信息、网上路由器的个数和下一个路由器的名字等内容。路径表可以是由系统管理员固定设置好的,也可以由系统动态修改,可以由路由器自动调整,也可以由主机控制。 通过路由器可以让不同子网、网段进行互连,因此路由器与集线器、交换机不同,它一般安装在网络的“骨干”部位,而不像集线器、交换机那样工作在基层。比如说一个较大规模的企业局域网,基于管理、安全、性能的考虑,一般都会将整个网络划分为多个VLAN,如此一来,当VLAN与VLAN之间进行通讯时,就必须使用路由器。 对于该企业网而言,肯定还需要与互联网相连,对于企业而言,一般都是通过租用电信的DDN专线或者利用ADSL、Cable、ISDN等方式将企业网接入互联网,而此时由于网络体系及所用协议的不同,也需要路由器来完成企业网与互联网的互连工作。点击放大 一般来说,在路由过程中,信息至少会经过一个或多个中间节点。通常,人们会把路由和交换进行对比,这主要是因为在普通用户看来两者所实现的功能是完全一样的。其实,路由和交换之间的主要区别就是交换发生在OSI参考模型的第二层(数据链路层),而路由发生在第三层,即网络层。这一区别决定了路由和交换在移动信息的过程中需要使用不同的控制信息,所以两者实现各自功能的方式是不同的。路由器通过路由决定数据的转发。转发策略称为路由选择,这也是路由器名称的由来。 三剑客的外观比较 前面我们已经讲解了集线器、交换机、路由器的工作原理,但是对于很多初学者来说,有时也希望能够从外观上去区分它们。当然,集线器、交换机、路由器在外观上肯定有所区别,但这些往往只能作为参考信息,毕竟现在很多集线器、交换机与路由器产品在外观上看非常相似。而这里面最难区分的就是普通桌面型的集线器与交换机,而路由器相对比较容易识别。1.集线器与交换机的外观区别 1)集线器的外观 集线器的结构比较简单,因此集线器一般都比较小巧:接口面板上一般具备8个、16个、24个、32个等数量不等的RJ45接口。 由于单个集线器的最大接口数一般也就32个,如果要连接50台甚至100台主机的话该怎么办呢?集线器上的“Uplink”级联口就是为了解决这个问题而出现的--通过级联口,可以将多个集线器连接在一起,以便拓展集线器的接口数及连接距离,但最多只能级联4个集线器。 与接口对应的则是面板上标有数字的一排或两排指示灯,用来指示集线器的工作状态。其中“Power”是电源指示灯,标有数字的是“Link”(连接)与“Action”(活动)指示灯,当某个RJ45接口中有正确的信号接入时,该接口的“Link”灯呈常亮状态,当有信号传输时,则“Action”灯闪烁。现在集线器一般都将“Link”与“Action”指示灯合二为一,用一个指示灯来完成“Link”与“Action”的工作。点击放大 2)交换机的外观 根据应用范围不同交换机存在着多种多样的外观。例如一些用于骨干线路的交换机,往往采用的是“模块式”集成方式,用户可以通过购买、增加模块来增强交换机的功能,这类交换机一般应用在大型企业,其体积也很大。 而对于那些应用在小型局域网的桌面型交换机,其外观与普通的集线器非常相似,要想在外观上区分它们,除了铭牌上“HUB”与“Switch”标志的区别外,关键是指示灯:如今的交换机大多是10/100Mbps自适应交换机,因此其面板上一般有用来表示该端口是工作在10Mbps还是100Mbps的指示灯。另外,交换机既可以工作在全双工状态下,也可以工作在半双工状态下,因此其面板上一般还有一排“FDX/COL”或“FD/COL”指示灯。点击放大 其中“FDX”或“FD”是“Full Duplex”(全双工)的缩写,当交换机上的某个端口工作在全双工状态时,其对应的“FDX”指示灯会亮,否则该端口工作在半双工状态下;“COL”则是信息碰撞指示灯,当该端口中传输的数据出现碰撞时,则该灯会闪烁,碰撞越厉害,闪烁越厉害。 对于集线器而言,虽然有些10/100Mbps自适应的集线器也有用来指示是工作在10Mbps还是100Mbps的指示灯,但绝对没有“FDX/COL”指示灯。初学者可以通过这一点来区分集线器与交换机。 2.路由器的组成与外观 1)路由器的组成 路由器作为一种高级的网络设备,并不是每个人都可以接触到的,这是因为它的普及性不如集线器、交换机高。 集线器、交换机在工作时都是通过硬件直接实现信号的传输,而路由器则不同,事实上路由器是一台特殊的计算机,它有CPU、存储介质以及操作系统,只不过这些都与PC上的有点差别而已。总的说来,路由器也可分为硬件及软件两部分。软件部分主要是操作系统,普通PC的操作系统有Windows系列、Linux/Unix等,而路由器的操作系统就是IOS(Internetwork Operating System,互联网际操作系统)。 路由器的硬件主要有CPU、接口和存储介质等。路由器中的CPU和计算机中的CPU所要实现的功能都是一样的。一般来说,计算机的CPU处理能力比路由器强大,但是在一些高端路由器上也会用到频率高到300MHz的CPU。路由器中的接口是非常重要的,因为它是连接网络最直接的媒介,它的接口主要有以太网口、串口、FDDI、令牌环等。计算机中有内存和硬盘,路由器中也有,只不过它的名字不同而已;路由器中的存储介质主要有ROM(Read-Only Memory,只读储存设备)、Flash(闪存)、NVROM(非易失性随机存储器)、DRAM(动态随机存储器)等几种。 路由器正是通过其特殊的软件功能来完成路由工作的,由于这种专业的路由器价格昂贵,所以现在人们也会在一些对路由器要求不高的应用环境中利用普通的PC机来实现路由功能,比如说只要在一台PC机上安装Windows2000 Server,然后进行必要的配置,一台“路由器”就打造出来了。 2)路由器的外观 路由器主要运行在骨干网络上,因此外观也千姿百态,比如一些应用于因特网骨干线路的千兆级别的路由器,往往也是模块化设计,体型也很庞大。 而那些应用于中小型企业的路由器则相对比较小巧,这类外观看起来与集线器、交换机差不多的路由器,其最大的外观特点就是端口数量相对较少,但类型多样。 其实也很好理解,路由器主要是用来连接不同类型的网络,它位于网络的最高层,基于成本的考虑,其端口肯定比较少,但同时为了连接多种类型的网络,又必须具备多种类型的网络接口。三剑客的选购 集线器、交换机、路由器的工作原理、性能特点和价格都不同,因此在构建网络平台时,应该根据实际需要,科学地选择产品。当然,我们在这里讨论的选购主要是针对一些中小型网络而言的,对于校园网、大型企业网,由于涉及的面太多,一般都需要专业的网络工程师进行网络设计与产品选购。 一、不同用户需求推荐 1.普通家庭用户 一般一个家庭的电脑数量有限,而组网的目的一般是为了实现共享上网、玩网络游戏等。由于电脑数量少,对带宽的要求不高,因此选择一个端口数少于8个,10Mbps带宽的集线器比较合适,目前这类产品很多,价格也非常便宜,一般在80~100元之间。 集线器的特点是价格便宜,但由于采用“共享带宽”的工作模式,因此集线器只适合那些对价格敏感、网络规模不大且数据传输量不大的用户使用。 2.学生宿舍 对于学生宿舍而言,一般电脑数量比较多,再加上宿舍与宿舍之间比较近,组网非常方便。学生一般比较喜欢通过组网来实现共享上网、联网游戏、视频欣赏等,因此对带宽的要求相对较高,再加上学生作息时间都差不多,往往许多电脑会同时上网,所以最佳选择是使用交换机。交换机独享带宽的工作模式,能够满足学生对高带宽的要求,同时也可以避免许多机器同时通信所带来的网路堵塞问题。考虑到学生的经济承受能力不高,可以选择国内厂商出品的中低端10/100Mbps自适应桌面交换机,端口数要根据联网的电脑数目进行考虑,不过最好是选择16口的价廉物美的主流产品,目前这类中低端产品的价格大都在700元以下,对于学生来说也还可以承受。如果端口数不够的话,可以采取级联的方式解决。 当然,上面我们是针对一些对网络速度要求较高的学生宿舍而言的,如果联网的电脑不是很多(少于10台),并且只想共享上网或玩一些对网速要求不高的游戏的话,则也可以考虑使用10Mbps的集线器,但不推荐使用10/100Mbps自适应的集线器。如果要求高一点的话,可以到市场上找找那些迷你型的10Mbps交换机,这类产品一般端口数少,而且售价也很便宜,一般在200元左右。 3.中小型办公网络 对于中小型的办公网络而言,如果考虑性能、稳定性及以后的扩展性,最好选择10/100Mbps自适应交换机来构建局域网,如果是小型的办公网络,也可以考虑集线器。 如今办公室一般都需要共享上网,而目前使用最多的就是共享ADSL上网。对于中小型办公网络而言,由于一般不会配备专业的服务器,因此要共享上网的话,可以通过配置一台ADSL路由器来解决共享问题,这样可以省去一台代理服务器。目前这类ADSL路由器价格比较便宜,且可供选择的产品很多。二、集线器的选购标准 1.注意带宽标准 根据带宽的不同,目前市面上用于局域网(一般是指小型局域网)的HUB可分为10Mbps、100Mbps和10/100Mbps 自适应三种。选择哪种集线器主要取决于三个因素:a.上连设备带宽:如果上连设备支持IEEE802.3U,自然可购买100Mbps集线器,否则只有选择10Mbps的了;b.站点数:由于连在集线器上的所有电脑均争用同一个上行总线,处于同一冲突域内,所以如果电脑数目较多,最好选择带宽高的;c.应用需求。 2.是否满足扩展需求 根据端口数目的多少HUB一般分为8口、16口和24口几种。当一个集线器提供的端口不够时,一般有以下两种方法扩展: a.堆叠:堆叠是解决单个集线器端口不足时的一种方法,但是因为堆叠在一起的多个集线器还是工作在同一环境下,所以堆叠的层数也不能太多。市面上一些集线器以其堆叠层数比其他品牌的多而作为卖点,如果遇到这种情况,要辨证认识:一方面可堆叠层数越多,一般说明集线器的稳定性越高;另一方面,可堆叠层数越多,每个用户实际可享有的带宽则越小。 b.级联:级联是在网络中增加用户数的另一种方法,但是此项功能的使用一般是有条件的,即HUB必须提供可级联的端口,此端口上常标有“Uplink”或“MDI”字样,用此端口与其他的HUB进行级联。如果没有提供专门的端口,当要进行级联时,连接两个集线器的双绞线在制作时必须要进行错线。 3.是否支持网管功能 根据对HUB管理方式的不同可分为Damp Hub ue5e4亚集线器ue5e5和Intelligent Hub ue5e4智能集线器ue5e5两种。智能集线器改进了普通HUB的缺点,增加了网络交换功能,具有网络管理和自动检测网络端口速度的能力(类似于交换机)。而亚集线器只起到简单的信号放大和再生的作用,无法对网络性能进行优化。早期使用的共享式HUB一般为非智能型的,而现在流行的100Mbps HUB和10/100Mbps自适应HUB多为智能型的。 4.注意接口类型 选择HUB时,还要注意信号输入口的接口类型,与双绞线连接时需要具有RJ-45接口;如果与细缆相连,需要具有BNC接口;与粗缆相连需要有AUI接口;当局域网长距离连接时,还需要具有与光纤连接的光纤接口。早期的10Mbps HUB一般具有RJ-45、BNC和AUI三种接口。100Mbps HUB和10/100Mbps HUB一般只有RJ-45接口,有的也具有光纤接口。 5.注意品牌和价格 目前市面上的高档HUB市场主要还是由美国产品占据,如3COM、Intel等,它们在设计上比较独特,一般几个甚至是每个端口配置一个处理器,当然价格比较高。我国台湾的D-Link和Accton的产品占据了中低端市场上的主要份额,而大陆的一些公司如联想、实达也分别推出了自己的产品。中低档产品一般均采用单处理器技术,其外围电路的设计也大同小异。各个品牌在质量上差距已经不大。相对而言,大陆产品的价格要便宜很多。
vxworks信号量计数器值怎么获取
一.信号量的概念是实现任务互斥、同步操作的主要机制。VxWorks提供的信号量经过了高度优化,在所有任务间通信机制中,速度最快。二.信号量的分类Binary Semaphores(二进制):完成互斥、同步操作的最佳方式;速度最快,最常用。Mutual Exclusion Semaphores(互斥):一种特殊的二进制信号量,专门针对互斥操作进行了优化。Counting Semaphores(计数):类似于二进制信号量,可记录信号量释放的次数,可监视同一资源上的多个实例。三.Binary Semaphores(二进制信号量) Task经常会等待事件或需获取资源。查询(polling)在RealTime系统中原则上不允许,最好采用Pending,等待事件或资源。状态图:说明:1.为某个资源调用semBCreate()创建一个binary semaphore 并规定:SEM_Full (资源可用) SEM_Empty (资源不可用).2.资源不可用时Task调用semTake()进入Pending直到semaphore被Given相关函数:[c-sharp] view plaincopySEM_ID semBCreate ( int options, /* semaphore options */ SEM_B_STATE initialState /* initial semaphore state */ ) STATUS semTake ( SEM_ID semId, /* 需要获取的信号量ID */ int timeout /* 超时时间(tick)/no-wait/forever */ ) ISR(中断服务程序)不能调用semTake()操作![c-sharp] view plaincopySTATUS semGive ( SEM_ID semId /* 需要释放的信号量ID */ ) [c-sharp] view plaincopysemFlush() 应用方向:1.互斥操作:是指不同任务可以利用信号量互斥地访问临界资源。这种互斥的访问方式比中断禁止(interrupt disable) 与优先级锁定(preemptive locks)两种互斥方式具有更加精确的粒度。互斥操作时初始状态设为(SEM_FULL)可用。并在同一个Task中成对、顺序调用semTake()、semGive()。2.同步操作:是指一个任务可以利用信号量控制自己的执行进度,使自己同步于一组外部事件。同步操作时初始状态设为(SEM_EMPTY)不可用。在不同Task中分别单独调用semTake()、semGive()。四.Mutual Exclusion Semaphores(互斥信号量) 互斥信号量是一种特殊的二进制信号量,它是针对使用二进制信号量进行互斥操作时存在的一些问题设计的。互斥信号量主要增加了对优先级倒置、删除安全以及递归访问的处理。状态图:相关函数:[c-sharp] view plaincopySEM_ID semMCreate ( int options /* mutex semaphore options */ ) 区别:1.互斥信号量只能用于互斥操作。2.只能由已经获取了互斥信号量的任务去释放它。3.中断服务程序(ISR)不可以释放(semGive())互斥信号量。4.互斥信号量不支持semFlush()操作。应用方向:1.避免优先级倒置(Priority Inversion):在上图中,task2等待task1的资源,于是处于Pend状态,这时一个中等优先级的task进来,并抢占了task1的CPU,此时的表现是低优先级task在高优先级的task2前执行。这种现象就是先级倒置。使用semId = semMCreate(SEM_Q_PRIORITY | SEM_INVERSION_SAFE);就可以避免倒置。此时,task1的优先级提升与task2一样,至到task2执行完成。SEM_INVERSION_SAFE不能与SEM_Q_FIFO配对!2.Deletion Safety(安全删除)使用:semId = semMCreate(SEM_Q_FIFO | SEM_DELETE_SAFE);可以实现安全删除。其实质是:在Task对互斥信号量执行semTake()操作并成功占有该信号量之前,隐含执行了taskSafe()操作;在执行semGive()操作之后,隐含执行taskUnsafe()操作。如果一个任务task1试图删除一个已经被保护起来的任务task2,task1则将被阻塞起来,直到task2解除保护(释放掉具有删除保护的互斥信号量)才能完成删除工作。3.递归访问[c-sharp] view plaincopyInitFun() { sem_ID = semMCreate(…); } funB() { semTake(sem_ID, SEM_FOREVER); /*访问临界资源*/ semGive(sem_ID); } funA() { semTake(sem_ID, SEM_FOREVER); /*访问临界资源*/ funB(); //递归访问, 而不会死锁 semGive(sem_ID); } 五.Counting Semaphores(计数信号量)计数信号量与二进制信号量都可以用于任务之间的同步与互斥。其不同点在于,计数信号量可记录信号量释放的次数,可以用来监视某一资源的使用状况。