《電子技術應用》
您所在的位置:首頁 > 可編程邏輯 > 設計應用 > 基于新信號量策略的實時提升技術
基于新信號量策略的實時提升技術
來源:微型機與應用2012年第8期
王 波,崔 喆
(中科院成都計算機應用研究所,四川 成都610041)
摘要: 介紹操作系統內核對實時性能的影響,結合NT技術,分析信號量機制下線程等待隊列的排隊策略,提出一種新排隊策略,并在NT內核中實現該策略,最后對比幾種策略的實驗數據。
Abstract:
Key words :

摘  要: 介紹操作系統內核對實時性能的影響,結合NT技術,分析信號量機制下線程等待隊列的排隊策略,提出一種新排隊策略,并在NT內核中實現該策略,最后對比幾種策略的實驗數據。
關鍵詞: 實時操作系統;信號量;FIFO;LIFO;Priority;NT內核

1 操作系統對實時性能的影響
    操作系統從誕生發展到現代經歷了批處理系統、分時系統和實時系統等演進過程,具有多樣化特征,派生出不同分支。其中,實時性是操作系統的重要特性,它要求在規定的時間窗口內邏輯正確地完成規定的任務,具有及時性、交互性、多路性、獨立性等特點[1]。操作系統的實時性主要取決于I/O管理中的異步方式、內存管理中的頁中斷機制、線程管理中的內核代碼是否可搶占、資源管理中的信號量策略以及中斷延遲和時鐘精度等硬件支撐結構[2]。由于多線程系統中線程對公共資源的爭奪,資源的有效管理成為提升系統實時性能的重要因素,而信號量是管理公共資源的經典方式,所以,信號量設計是影響系統實時性的基礎設計。本文重點論述信號量策略對實時性能的影響,并以NT內核為研究對象和實現平臺,分析現有幾種信號量策略的優、缺點,提出了一種新策略,在保證系統通用性前提下提升了系統實時性。
2 信號量策略對實時性能的影響
    荷蘭科學家設計的信號量算法為線程使用共享資源提供了有效的同步和互斥機制,NT內核中,信號量(KSEMAPHORE)通過封裝DISPATCHER_HEADER結構實現計數器和等待隊列,其數據結構struct _KSEMA-PHORE{DISPATCHER_HEADER Header LONG Limit}在參考文獻[3]中有詳細描述,上述結構可簡略為:
    struct _KSEMAPHORE{LONG SignalState  //信號量
計數器變量
    LIST_ENTRY WaitList} //線程等待隊列鏈表
它的操作有創建(CreateSemaphore)、刪除(CloseHandle)、請求(WaitForSingleObject)和釋放(ReleaseSemaphore)信號量等。
    線程使用資源前需要請求保護該資源的信號量,若信號量計數器減1后小于0,內核阻塞線程并將其排在信號量的線程等待隊列中,同時啟動線程調度程序將計算資源交給等待運行的線程,執行請求操作的線程沒有陷入“忙等”,而是“讓權等待”。若擁有信號量的線程釋放資源使得計數器加1后還小于等于0,則喚醒線程等待隊列中的等待線程并送線程調度隊列。因此,在資源緊張情況下,請求和釋放信號量會涉及資源等待隊列和線程調度隊列兩個隊列。本文討論資源等待隊列,對于資源請求,采用什么策略將線程放入隊列;對于資源釋放,采用什么策略把線程從隊列中取出并放入調度隊列??紤]放入與取出線程時同時采用策略的復雜性,固定取出策略從隊列頭部取出線程,請求時采取策略將線程放入隊列,目前有以下三種策略[1]:
    (1)后進先出LIFO(Last In First Out),線程請求資源后,若信號量計數器小于0,將線程排在線程等待隊列的隊頭。該策略易于實現,線程等待隊列只需一個單鏈表即可,這種“后來先服務”的方式還可以利用CPU緩存TLB(Tanslation Lookaside Buffer)中存在的剛被掛起線程的頁表數據,不必更新緩存,提高了運行速度。但是,后進先出方式讓最先被掛起的線程鮮有被服務,若獲得資源的線程高頻率請求資源,會導致最先請求資源的線程由于長時間處在隊尾得不到服務導致“餓死”(Starva-
tion),使得一些線程頻繁調度,而一些線程很少被調度。
    (2)先進先出FIFO(First In First Out),線程請求資源后,若信號量計數器小于0,將線程排在線程等待隊列的隊尾。該策略克服了線程的“餓死”現象,對資源有請求的線程都能公平地占有資源,請求隊列調度均衡化,從策略角度來看,所有線程都整齊劃一無差別。這種先來先服務的方式沒有考慮線程的其他因素,例如,對時間緊要程度的要求不同,有實時線程和一般線程之分,如果對實時線程和一般線程都采用先進先出方式,那么實時線程的實時性將大幅降低,特別在等待隊列中已有很多線程的情況下,實時線程只有等待前面所有線程釋放信號量后才能得到調度,造成不必要的延時。信號量的數據結構和操作也要復雜一些,需要一個隊尾指針。
    (3)基于優先級隊列Priority,線程請求資源后,若信號量計數器小于0,則將線程根據其優先級排在線程等待隊列的相應位置。該策略克服了先進先出的均衡化調度缺點,使優先級高的線程始終處在隊列的隊首,搶占優先級低的線程;線程可根據時間特性來確定它的優先級并排隊,提高了線程的實時性。然而這種方式也有其不足,優先級低的線程始終得不到調度,同樣會導致“餓死”。如果系統中有大量線程爭搶稀有資源,排隊過程還會引入隊列的搜索時間。
    這就需要一種策略,對于具有很強時效性的實時線程使用優先級排隊,對于一般線程按照先進先出排隊。由于實時線程很少,配合哈希(Hash)表分類實時線程(如圖1虛直線上部分所示)基本不會引入搜索時間。
3 基于Priority和FIFO結合的信號量策略
    針對優先級隊列過分強調高優先級線程的缺點和先進先出隊列過分強調平均的缺點,本文提出基于優先級和先進先出隊列結合的排隊策略,同時兼顧實時線程的強實時要求和一般線程的公平要求。
    NT內核將用戶線程以一對一方式映射到內核中,并基于優先級調度內核線程,內核將優先級從低到高分為32級,0~15級為一般線程,16~31級為實時線程。本文將這種線程調度隊列的分級方式見之于信號量的等待隊列,如圖1虛直線上部分所示,把線程等待隊列構造成一個長度為17、類型為LIST_ENTRY的哈希(Hash)指針數組,數組1~16根據優先級排列同一級別的實時線程,數組0根據先進先出排列一般線程。線程請求資源后,若信號量計數器小于0,且線程優先級小于16,則將該線程按照先進先出策略排在線程等待隊列的隊尾;若線程優先級大于等于16,則按照優先級排列該線程。當線程釋放資源時,若信號量計數器小于0,內核應先從優先級隊列中搜索掛起線程,再從先進先出隊列中搜索掛起線程。

 

 

4 新信號量策略在NT內核中的實現及結果分析
    為了兼容操作系統上層軟件,本文僅修改“請求”函數的代碼而不改變現有信號量的數據結構,將圖1虛直線上部分描述的新信號量策略映射到虛直線下,把優先級隊列和先進先出隊列融合到一個隊列中,隊列的前半部分是優先級隊列,由指針FLINK指定,后半部分為先進先出隊列,由指針BLINK指定,這種復合型隊列同時具備優先級和先進先出隊列的優點,體現了“一個隊列兩種策略”。線程請求資源后,若信號量計數器小于0,且線程的優先級小于16,按照先進先出策略將線程排在BLINK指向的先進先出隊列隊尾;若線程的優先級大于等于16,則將線程按照優先級策略在FLINK指向的優先級隊列中搜索相應的位置,找到小于優先級隊列中的線程并放在該線程之后。當線程釋放資源時,若信號量計數器小于0,由于線程已經根據策略放入恰當的位置,內核只需要從KSEMAPHORE→WaitList→FLINK取出第一個線程送往線程調度隊列即可。為了最小化修改范圍,用下述代碼替換內核\base\ntos\ke\wait.c文件中KeWaitForSingleObject()函數的部分代碼以實現新策略:
  if (KeQueryPriorityThread(Thread) < 16)
    {InsertTailList(&Objectx->Header.WaitListHead,
&WaitBlock->WaitListEntry);}
  else {ListHead1 = &Objectx->Header.WaitListHead;
        WaitEntry1 = ListHead1->Flink;
        while(WaitEntry1 != ListHead1) {
        WaitBlock1 = CONTAINING_RECORD(WaitEntry1,
KWAIT_BLOCK, WaitListEntry);
        if(KeQueryPriorityThread(Thread) >
            KeQueryPriorityThread(WaitBlock1->Thread))
{break;}
        WaitEntry1 = WaitEntry1->Flink;}
        InsertTailList(WaitEntry1, &WaitBlock->
WaitListEntry);}
    根據C規范[4]設計一個應用程序測試內核修改后的性能指標,由于NT內核對于一個特定的進程只能有一個特定的優先級類,進程內的所有線程只能屬于該優先級,程序應該第一次進程化為實時類型的主控進程,生成信號量和掛在信號量上的實時線程,第二次進程化為一般類型的客戶進程,生成掛在信號量上的一般線程,主線程釋放實時線程和一般線程。應用程序中有4個參量:一般線程數NrTh、實時線程數RtTh;信號量Seph及資源爭奪時間RunT。實驗中,固定Seph=1,RunT=10 000 ms,改變NrTh和RtTh的值,分別在表1所列的內核上運行,結果如表1所示。
    從表1可以看出:1~12行的調度結果和前述分析的各種策略的優缺點一致,對于FIFO,無論不同優先級線程的比例是多少,它們被調度的次數幾乎完全相同。對于LIFO,從數據可以看出,兩個優先級為8、一個優先級為6和優先級為26、25、24的線程處在等待隊列的前端,而且幾乎每次都是這幾個線程被調度。對于Priority,無論是否有實時類線程,只要優先級高,被調度的次數就多。對于新策略(Priority and FIFO),有實時線程就按優先級調度,若只有一般線程就按照FIFO調度,既有FIFO的特性(比較第2行和第11行)也有Priority的特性(比較第1行和第4行),而其他策略則只具有一種特性。應用程序在其他操作系統測試結果見14~22行,比較可以看出,14~22行的數據與10~12行的數據幾乎完全一致,由此可以推斷Windows 7操作系統的信號量等待隊列也是先進先出策略。


    研究發現,提升系統實時性應該具備兩個條件[5]:(1)不同任務可統一,包括將中斷任務和線程任務按不同特征統一映射到一個優先級隊列中,內核根據這個優先級隊列統一調度任務,中斷線程化為上述兩種任務的統一提供了可能;(2)所有資源可搶占,計算資源可搶占可行且易實現,而內存資源和I/O資源可搶占需進一步研究,一個占有共享資源(如臨界區)的低優先級線程被一般優先級線程搶占計算資源,而該線程又被高優先級的線程搶占計算資源,高優先級的線程又因請求已被低優先級線程占有的資源而掛起,只有等待一般優先級線程放棄計算資源后由低優先級線程運行并釋放共享資源,才能使高優先級線程得以運行,雖然通過優先級繼承避免優先級反轉可以提高實時性,但若高優先級線程能像搶占計算資源那樣搶占線程的其他資源,實時性將大幅提升。
參考文獻
[1] 湯子瀛,哲鳳屏,湯小丹.計算機操作系統[M].西安:西安電子科技大學出版社,2001.
[2] 俸遠楨,閻慧娟,羅克露.計算機組成原理[M].北京:電子工業出版社,1996.
[3] SOLOMON D A,RUSSINOVICH M E.Microsoft Windows Internals Fourth Edition[M].DigitalCopy,Microsoft Press,2004.
[4] KERNIGHAN B W,RITCHIE D M.The C programming  language[M].DigitalCopy,Prentice-Hall,1988.
[5] 王波,崔喆.基于新DPC機制的實時提升技術[J].計算機應用研究,2011,28(Z):110-111.

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          久久精品1区| 午夜国产欧美理论在线播放| 欧美日韩另类字幕中文| 亚洲国产精品第一区二区三区| 久久精品人人爽| 狠狠色噜噜狠狠色综合久| 狠狠色丁香久久婷婷综合丁香| 亚洲午夜三级在线| 永久555www成人免费| 极品尤物一区二区三区| 欧美一级大片在线观看| 黄色成人免费网站| 国产伦精品一区二区三区高清版| 欧美福利网址| 久久噜噜噜精品国产亚洲综合| 国产伦精品一区二区三| 亚洲亚洲精品三区日韩精品在线视频| 欧美精品手机在线| 欧美成黄导航| 亚洲午夜国产成人av电影男同| 9人人澡人人爽人人精品| 国产日韩欧美精品在线| 国产日韩欧美在线看| 亚洲高清色综合| 国产精品视频大全| 黑丝一区二区三区| 欧美亚洲动漫精品| 亚洲免费视频网站| 精品成人国产在线观看男人呻吟| 日韩一级网站| 久久久天天操| 国产三级欧美三级| 欧美日韩精品在线视频| 亚洲国产免费| 国内久久精品| 欧美区国产区| 夜夜嗨一区二区三区| 久久成人精品一区二区三区| 欧美午夜三级| 亚洲日韩中文字幕在线播放| 欧美成人精品不卡视频在线观看| 亚洲一区在线观看视频| 亚洲图片自拍偷拍| 国产精品一区毛片| 国产亚洲综合精品| 亚洲欧美日韩一区二区三区在线| 国产精品欧美一区喷水| 亚洲自拍偷拍视频| 欧美日韩中文在线观看| 国产一区二区日韩精品| 国产精品成人观看视频国产奇米| 黄网站免费久久| 亚洲精品无人区| 一道本一区二区| 国产日韩在线一区二区三区| 亚洲国产另类 国产精品国产免费| 欧美激情一区二区在线| 亚洲视频在线一区| 欧美黑人一区二区三区| 欧美成人一区二区三区片免费| 久久夜色精品国产欧美乱| 欧美 亚欧 日韩视频在线| 亚洲午夜在线观看| 亚洲一区自拍| 亚洲精品美女在线观看| 国产综合在线看| 欲色影视综合吧| 欧美激情在线播放| 宅男精品导航| 欧美精品www在线观看| 欧美69视频| 宅男噜噜噜66一区二区66| 欧美另类69精品久久久久9999| 国产日韩欧美三区| 午夜在线一区二区| 久久久精品一区二区三区| 久久蜜臀精品av| 欧美视频日韩视频在线观看| 在线成人av.com| 欧美亚州一区二区三区| 欧美日本亚洲视频| 欧美电影打屁股sp| 亚洲天堂av在线免费| 女人色偷偷aa久久天堂| 欧美美女日韩| 国产精品久久网| 国产欧美日韩三区| 国产一区91| 国产精品高潮呻吟久久av黑人| 永久91嫩草亚洲精品人人| 亚洲精选国产| 国产精品户外野外| 葵司免费一区二区三区四区五区| 国产精品videossex久久发布| 国产麻豆午夜三级精品| 久久久久亚洲综合| 国产精品影音先锋| 欧美激情一区二区三区在线视频观看| 亚洲天天影视| 欧美1区3d| 欧美美女视频| 欧美一区二区免费观在线| 欧美成人伊人久久综合网| 欧美日韩性视频在线| 一区二区在线观看视频| 欧美日韩精品免费观看视频完整| 先锋a资源在线看亚洲| 国产欧美精品日韩区二区麻豆天美| 亚洲欧洲99久久| 免费精品99久久国产综合精品| 亚洲美女黄色片| 国产精品99久久久久久久久久久久| 欧美日韩在线观看一区二区三区| 国产欧美日韩综合精品二区| 久久精精品视频| 亚洲先锋成人| 欧美精品激情在线观看| 欧美视频1区| 亚洲日本欧美日韩高观看| 国产精品高潮呻吟| 久久综合久久美利坚合众国| 99精品欧美一区二区三区综合在线| 国内精品久久国产| 亚洲国产日韩欧美| 一区二区三区在线视频观看| 久久久亚洲国产天美传媒修理工| 免费看av成人| 国产日产欧美精品| 欧美三级免费| 欧美大片在线看免费观看| 久久久久一区| 久久久国产精彩视频美女艺术照福利| 久久这里只有精品视频首页| 久久久久久久波多野高潮日日| 国产精品色一区二区三区| 国产精品免费网站在线观看| 亚洲看片一区| 久久婷婷人人澡人人喊人人爽| 亚洲高清视频在线| 洋洋av久久久久久久一区| 亚洲国产视频一区| 国产亚洲欧洲一区高清在线观看| 亚洲国产精品视频| 激情五月婷婷综合| 国产精品美女一区二区在线观看| 国产精品视频专区| 久久久精品一区二区三区| 欧美国产综合一区二区| 欧美精品一线| 亚洲国产精彩中文乱码av在线播放| 亚洲精选一区| 国产精品久久久久久久久免费樱桃| 欧美在线视频网站| 国产日韩欧美一区| 一本色道久久加勒比88综合| 久久免费观看视频| 黄网动漫久久久| 欧美视频手机在线| 国产欧美日韩视频一区二区| 欧美在线视频免费| 久久午夜视频| 一本色道88久久加勒比精品| 国产亚洲视频在线观看| 国产精品乱码一区二区三区| 国产乱码精品一区二区三区av| 久久av资源网站| 国产精品女人网站| 亚洲国产高清aⅴ视频| 99视频一区二区三区| 国产日韩一区欧美| 国产在线日韩| 亚洲第一区在线观看| 欧美日韩综合不卡| 国产欧美日韩在线观看| 好看的av在线不卡观看| 欧美黄色免费网站| 欧美另类videos死尸| 亚洲电影在线观看| 国产精品进线69影院| 日韩视频―中文字幕| 欧美日韩福利在线观看| 亚洲午夜高清视频| 久久网站热最新地址| 久久艳片www.17c.com| 国产精品v亚洲精品v日韩精品| 国产喷白浆一区二区三区| 亚洲网站在线看| 欧美精品激情在线观看| 黄色欧美成人| 欧美日韩成人网| 久久综合精品国产一区二区三区| 麻豆精品国产91久久久久久| 亚洲香蕉网站| 欧美日韩综合精品| 欧美婷婷在线| 久久精品久久99精品久久| 欧美性猛交xxxx乱大交蜜桃| 一区二区三区日韩精品| 先锋资源久久| 狠狠色香婷婷久久亚洲精品| 欧美另类人妖| 国产亚洲毛片在线| 国产精品久久久对白| 欧美激情国产高清| 国产精品日韩专区| 欧美成va人片在线观看| 亚洲一区二区精品视频| 在线日韩电影| 亚洲第一搞黄网站| 欧美日韩精品免费| 一区二区三区成人| 久久久久久久综合色一本| 欧美一区二区黄| 欧美成人精品h版在线观看| 国产亚洲综合在线| 国模叶桐国产精品一区| 欧美成人精精品一区二区频| 亚洲国产精品一区二区久| 国产精品一区二区女厕厕| 开元免费观看欧美电视剧网站| 老司机67194精品线观看| 日韩一级黄色片| 免费欧美在线视频| 国产麻豆精品theporn| 久久精品一级爱片| 美女国内精品自产拍在线播放| 久久激情五月婷婷| 国产精品99久久久久久久女警| 99xxxx成人网| 欧美人成免费网站| 亚洲欧洲精品一区二区| 欧美一区二区三区四区在线观看地址| 小黄鸭视频精品导航| 国产精品久久一区主播| 欧美在线观看视频一区二区三区| 99re8这里有精品热视频免费| 欧美激情第三页| 国产精品青草久久久久福利99| 久久精品国产亚洲a| 在线 亚洲欧美在线综合一区| 久久国产精彩视频| 免费日韩成人| 国产日韩欧美一区二区| 久久精品一本久久99精品| 国产精品一级久久久| 久久蜜臀精品av| 亚洲三级免费| 亚洲国产三级| 日韩一区二区精品| 欧美性开放视频| 国产精品黄色在线观看| 亚洲裸体视频| 欧美一区二区黄| 国产精品99久久久久久宅男| 国产日韩精品一区观看| 噜噜噜噜噜久久久久久91| 黄色成人免费网站| 一本色道久久综合亚洲精品小说| 久久先锋资源| 久久婷婷成人综合色| 午夜精品在线看| 欧美精品日韩www.p站| 国产精品久久久久7777婷婷| 欧美黄色成人网| 国产精品国产三级国产专区53| 久久亚洲免费| 欧美国产日韩一二三区| 亚洲精品免费在线播放| 欧美日韩亚洲一区二区三区在线观看| 久久av老司机精品网站导航| 亚洲视频在线二区| 亚洲激情在线| 亚洲精品婷婷| 亚洲区中文字幕| 亚洲第一在线综合网站| 亚洲青涩在线| 国产亚洲欧美一区二区三区| 国内精品久久久久影院优| 亚洲国产另类精品专区| 国产精品色一区二区三区| 久久久久国色av免费观看性色| 欧美一区二区三区在线免费观看| 亚洲中午字幕| 欧美一级视频一区二区| 国产精品久久久久久妇女6080| 国产精品久久二区| 国产精品亚洲人在线观看| 在线国产精品一区| 99国产精品国产精品久久| 久久亚洲精品一区二区| 在线综合+亚洲+欧美中文字幕| 日韩香蕉视频| 欧美激情日韩| 中日韩午夜理伦电影免费| 好吊色欧美一区二区三区视频| 国产精品三上| 性欧美xxxx视频在线观看| 亚洲视频在线二区| 亚洲影视九九影院在线观看| 欧美在线视频日韩| 在线播放中文字幕一区| 亚洲成人在线免费| 久久久久久久激情视频| 亚洲大胆视频| 亚洲人成网站777色婷婷| 国产精品天天摸av网| 欧美日韩亚洲视频| 欧美日本视频在线| 欧美人与性动交a欧美精品| 国产日韩高清一区二区三区在线| 亚洲一区三区电影在线观看| 亚洲高清视频在线观看| 一区二区三区国产| 欧美男人的天堂| 久久久精品国产免大香伊| 欧美伊人久久久久久午夜久久久久| 久久精品99国产精品酒店日本| 国产欧美日本| 欧美一区二区在线观看| 亚洲国产一区视频| 9久re热视频在线精品| 欧美日韩一级大片网址| 欧美日韩国产在线一区| 国产欧美一区二区三区视频| 亚洲一区免费观看| 欧美一区在线视频| 在线看片欧美| 欧美日韩一区二区视频在线观看|