实时嵌入式系统中的一种互斥方法_实时嵌入式系统

多任系统当共享地空简单地用数据交换避免竞争要对存访问上锁以保证访问斥进行。

实现斥访问方法很多不处仅斥围和程。

这些方法包括禁止禁止抢占使用信量等对上锁

斥机制强有力方法禁止断这种上锁保证了对独占访问。

斥期即使外部事件产生而引发相应断系统也不会切换到相应断程序(R)也能保证任斥。

上锁期它可能造成系统对外部事件反应迟钝。

这对多数实系统而言系统实性也就得不到保证因而不适合作种通用斥方法

然而当涉及到任和断程序共享数据断上锁又是唯方法

但是任何情况下应该使断上锁尽量短这也是所有实系统基要。

从质上讲信量机制比禁止断或禁止抢占提供更精确斥粒但是使用优先级继承删除安全性和递归使用等问题并且当任要获取多信量更要避免系统死锁问题。

因般实嵌入式操作系统都会用户提供多种斥手段以适应不使用场合。

但对禁止抢占禁止调)这种方法而言有些系统支持如Vxrk等而有些系统必支持如等了达到禁止抢占这种效并且不受具体系统约束提出了种新禁止抢占方法——高优先级法。

禁止抢占基原理如任不与断子程序共享变量或数据结构可以使用禁止然允许任切换手段。

虽然任切换禁止了但断还是开着。

如这断了断子程序会这临界区立即执行。

子程序结束即使有更高优先级任已进入就绪态核还是返回到原先被断了任直到执行完给任切换开锁函数核再看看有没有优先级更高任被断子程序激活而进入就绪态如有则做任切换

种机制比断上锁要弱些。

3高优先级法3.高优先级法基原理实嵌入式系统各应用任依据实性重要性被赋予了不优先级核严格按照优先级高低调任高优先级任能抢占优先级任以满足实性要。

另外实嵌入式操作系统般都提供了动态更改任优先级系统调用。

我们可以将系统优先级(rr)预留下当某任要禁止抢占将该任优先级提升到高优先级(rrr)该任将其身优先级设回原优先级(rrr)前系统其它任不会抢占该任该任可以放心地完成临界区操作。

使用这种方法也可以选择基优先级片轮调。

轮调可以使优先级相处就绪态任公平地分享使用

按照优先级调原理考察我们高优先级法当任处高优先级即使片到期任也不会切换出因就绪队列里优先级高(rr)任只有不管它是否用完片其它低优先级任都无法抢占它。

3.高优先级法普通实现我们先分析下面种实际开发工作会遇到情况任有段临界区代码并且假设该临界区代码不包含因等待而不得不让出可能rrr();……代码();函数调用……代码rrr();而函数()如下定义(){……代码3rrr();……代码rrr();……代码5}当()执行完任优先级被设回了原先优先级代码将受不到保护!因我们要对函数rrr()和rrr()进行改造函数rrr()返回设置高优先级前任优先级函数rrr()却不定总是设置任原先优先级它设置是与配对rrr()返回优先级

这两函数都是成对使用不管嵌套使用了多少次都不会出错举例如下lrrrrr();……代码();函数调用……代码rrr(lrr);而函数()如下定义(){lrr;……代码3lrrrrr();……代码rrr(lrr);……代码5}这样函数()执行完任仍处高优先级状态代码仍受到保护合程序员图程序员不必担心会发生外。

但是这种方法效率有低下执行()已是高优先级状态了却还要再设置浪费了嵌套次数较多效率问题将更加严重。

另方面我们不能轻易将函数()斥手段因这要考虑其它没提供斥手段情况下调用()。

基上述原因我们引入种高效方法——嵌套计数法。

3.3高优先级嵌套计数实现先定义操作规则系统全局变量初始化0。

rrr(){(!)……()利用具体系统调用把当前任设成高优先级……()++;……(3)}rrr(){;……()(!)……(5)利用具体系统调用把当前任设成原先优先级……(6)}再分析下这种方法安全性。

是全局变量对它访问要防止竞争条件。

但巧妙是旦我们把任用操作系统原语调用设成高优先级对访问将是独占;任首次调用rrr()语句()处有竞争条件但次只能有任通()处原语成高优先级只要我们正确地配对使用这两函数当这任终退出高优先级状态必0并不影响其它任()处判断。

这种方法高效性也是明显嵌套使用里层仅仅进行嵌套计数计算并不用进行优先级设置。

0 次访问