• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Focus on ACE

            訂閱 ace-china
            電子郵件:
            瀏覽存于 groups.google.com 上的所有帖子

            C++博客 首頁 新隨筆 聯系 聚合 管理
              64 Posts :: 3 Stories :: 22 Comments :: 0 Trackbacks

            Priority Inversion 優先級反轉是嵌入式實時系統里面的一個經典的問題。簡單描述一下這個問題:有三個優先級不同的task,A,B,C; A的優先級最高,B次之,C最低。其中A和C有共享的臨界區。如果C已進入臨界區,那么A在進入進入臨界區之前,就會被阻塞。task B有可能打斷C而進入運行狀態,這樣C什么時候從臨界區退出,就是一個未知的時間。A只有C從臨界區退出后才能被調度,A被阻塞的時間也是未知的。這樣,低優先級的B先于高優先級的A被調度,優先級發生了逆轉。
            這個問題在一般的操作系統里面不是一個嚴重的問題,最多A被多阻塞了一段時間。但是,在實時系統里面,如果一個任務在規定的時間里面沒有被調度運行,系統就相當于失敗了,可能引發系統崩潰。
            解決這個問題有兩種手段:
            1:Priority inheritance(優先級繼承),如果一個高優先級的task被阻塞,與它共享臨界區的低優先級的task在進入臨界區后,優先級就會繼承高優先級task的優先級,保證它不會被其他優先級次高的任務打斷。從臨界區退出后,C的優先級恢復正常。
            2:A priority ceiling(最高優先級),給臨界區分配最高優先級,如果一個task進入臨界區,就把臨界區的優先級賦給它,已保證它不會被打斷。從臨界區退出后,task的優先級恢復正常。

            實時操作系統的一個特點就是,一個實時任務,會在規定的時間內得到響應,并且在規定的時間內完成任務。所以,一切不可預知的動作都是有害的。

            有興趣可以看看下面兩個鏈接:
            http://en.wikipedia.org/wiki/Priority_inversion

             

            Priority inversion

            From Wikipedia, the free encyclopedia

            Jump to: navigation, search

            In scheduling, priority inversion is the scenario where a low priority task holds a shared resource that is required by a high priority task. This causes the execution of the high priority task to be blocked until the low priority task has released the resource, effectively "inverting" the relative priorities of the two tasks. If some other medium priority task, one that does not depend on the shared resource, attempts to run in the interim, it will take precedence over both the low priority task and the high priority task.

            In some cases, priority inversion can occur without causing immediate harm—the delayed execution of the high priority task goes unnoticed, and eventually the low priority task releases the shared resource. However, there are also many situations in which priority inversion can cause serious problems. If the high priority task is left starved of the resources, it might lead to a system malfunction or the triggering of pre-defined corrective measures, such as a watch dog timer resetting the entire system. The trouble experienced by the Mars lander "Mars Pathfinder"[1][2] is a classic example of problems caused by priority inversion in realtime systems.

            Priority inversion can also reduce the perceived performance of the system. Low priority tasks usually have a low priority because it is not important for them to finish promptly (for example, they might be a batch job or another non-interactive activity). Similarly, a high priority task has a high priority because it is more likely to be subject to strict time constraints—it may be providing data to an interactive user, or acting subject to realtime response guarantees. Because priority inversion results in the execution of the low priority task blocking the high priority task, it can lead to reduced system responsiveness, or even the violation of response time guarantees.

            A similar problem called deadline interchange can occur within Earliest Deadline First Scheduling (EDF).

            Contents

            [hide]

            [edit] Solutions

            The existence of this problem has been known since the 1970s, but there is no fool-proof method to predict the situation. There are however many existing solutions, of which the most common ones are:

            Disabling all interrupts to protect critical sections
            When disabled interrupts are used to prevent priority inversion, there are only two priorities: preemptible, and interrupts disabled. With no third priority, inversion is impossible. Since there's only one piece of lock data (the interrupt-enable bit), misordering locking is impossible, and so deadlocks cannot occur. Since the critical regions always run to completion, hangs do not occur. Note that this only works if all interrupts are disabled. If only a particular hardware device's interrupt is disabled, priority inversion is reintroduced by the hardware's prioritization of interrupts. A simple variation, "single shared-flag locking" is used on some systems with multiple CPUs. This scheme provides a single flag in shared memory that is used by all CPUs to lock all inter-processor critical sections with a busy-wait. Interprocessor communications are expensive and slow on most multiple CPU systems. Therefore, most such systems are designed to minimize shared resources. As a result, this scheme actually works well on many practical systems. These methods are widely used in simple embedded systems, where they are prized for their reliability, simplicity and low resource use. These schemes also require clever programming to keep the critical sections very brief, under 100 microseconds in practical systems. Many software engineers consider them impractical in general-purpose computers.
            Arguably, these methods are similar to priority ceilings.
            A priority ceiling
            With priority ceilings, the shared mutex process (that runs the operating system code) has a characteristic (high) priority of its own, which is assigned to the task locking the mutex. This works well, provided the other high priority task(s) that try to access the mutex does not have a priority higher than the ceiling priority.
            Priority inheritance
            Under the policy of priority inheritance, whenever a high priority task has to wait for some resource shared with an executing low priority task, the low priority task is assigned the priority of the highest waiting priority task for the duration of its own use of the shared resource, thus keeping medium priority tasks from pre-empting the (originally) low priority task, and thereby effectively the waiting high priority task as well.

            [edit] See also

            [edit] Notes

            1. ^ What Really Happened on Mars by Glenn Reeves of the JPL Pathfinder team
            2. ^ Explanation of priority inversion problem experienced by Mars Pathfinder

            [edit] References

            • by Butler W. Lampson and David D. Redell, CACM 23(2):105-117 (Feb 1980) - One of the first (if not the) first papers to point out the priority inversion problem. Also suggested disabling interrupts and the priority ceiling protocol as solutions, noting that the former of these two cannot not tolerate page faults while in use.

            [edit] External links

            Retrieved from "

            狠狠色丁香久久婷婷综合蜜芽五月 | 一本久久a久久精品vr综合| 99热热久久这里只有精品68| 欧美综合天天夜夜久久| 久久久久久久女国产乱让韩| 久久久久久久综合日本亚洲| 人妻丰满?V无码久久不卡| 久久只有这里有精品4| 久久久久久一区国产精品| 99久久精品免费看国产免费| 久久久久久夜精品精品免费啦| 国产欧美一区二区久久| 四虎国产精品免费久久5151| 久久99毛片免费观看不卡| 久久精品国产亚洲77777| 久久精品国产一区| 亚洲国产成人久久精品99| 777午夜精品久久av蜜臀| 精品久久久久久久无码| 久久综合伊人77777| 亚洲日韩中文无码久久| 亚洲中文字幕久久精品无码APP| 久久久久久久99精品免费观看| 亚洲国产精品无码久久久不卡| 亚洲AV日韩AV天堂久久| 亚洲国产另类久久久精品黑人| 亚州日韩精品专区久久久| 91久久精品无码一区二区毛片| 久久久久人妻一区精品| 日日狠狠久久偷偷色综合免费| 国产精品国色综合久久| 久久精品国产清自在天天线| 久久精品国产亚洲欧美| www久久久天天com| 久久亚洲AV成人无码电影| 久久精品国产99国产精品导航| 久久99国产一区二区三区| 国产精品久久久久…| 大伊人青草狠狠久久| 色综合久久久久网| 久久九九有精品国产23百花影院|