頻繁中斷狂轟亂炸,操作系統很難招架
6
本文引用地址:http://dyxdggzs.com/article/201812/396004.htm疾風(fēng)知勁草,板蕩識忠臣,考驗灑家能耐的時(shí)刻到了!
顯然,任務(wù)和信號這些概念必須保留下來(lái),皮之不存,毛將焉附?如果沒(méi)有了這些概念,所有基于信號進(jìn)行控制的代碼都要通通改寫(xiě)!且不說(shuō)時(shí)間是否來(lái)得及,單是忙活多日,一覺(jué)醒來(lái),卻發(fā)現繞回了原點(diǎn),灑家脆弱的心靈也頗有些難以承受。
不過(guò),沒(méi)有了ucos的框架,還要使用在其框架下的概念,就必須找出裸機形式下新的類(lèi)似框架!既然是照葫蘆畫(huà)瓢,我們首先要提取出這顆“葫蘆”的主要特征。
透過(guò)代碼的重重迷霧,灑家百般搜索,千般思量,最終認定,新瓢和老葫蘆的共同之處乃是:任務(wù)的數據結構和調度機制。
敲敲黑板,畫(huà)畫(huà)重點(diǎn)。任務(wù)是操作系統執行所有功能的載體,操作系統的作用無(wú)非是建立各個(gè)任務(wù)的數據結構,然后設計一個(gè)調度機制,讓系統資源在這些任務(wù)的執行體里面來(lái)回切換、輪轉而已。顯然,新的框架要解決兩個(gè)問(wèn)題,“任務(wù)”的數據結構、“任務(wù)調度”機制。
在ucos的機制中,每個(gè)任務(wù)都有自己的消息隊列,向該任務(wù)里發(fā)信號,就是把信號內容放到這個(gè)消息隊列里。Ucos的主要調度機制是每個(gè)時(shí)鐘滴答下檢查一下是否存在就緒態(tài)任務(wù),如果有,進(jìn)行任務(wù)上下文切換,跳轉到新任務(wù)體里執行即可。
既如此,我們完全可以設計一種“邏輯任務(wù)”,每個(gè)任務(wù)都有自己的消息隊列,任務(wù)執行體里面檢查自己的消息隊列里是否存在新的信號,有信號就執行,和ucos下的形式一模一樣。至于“任務(wù)調度”,中斷太頻繁,顯然不可能再照搬著(zhù)搞任務(wù)上下文的存儲和恢復那一套了,裸機形式下的整個(gè)系統只有一個(gè)上下文,所謂調度完全可以借鑒簡(jiǎn)單操作系統里面的按時(shí)間片調度,弄成循環(huán)執行的方式,依次執行每個(gè)任務(wù)即可。
如此一來(lái),所有控制任務(wù)的執行代碼都不需要進(jìn)行任何改動(dòng),穿梭在各個(gè)“邏輯任務(wù)”之間的信號依然是之前代碼里定義好的那些信號,最大程度上做到了程序的復用。
更難得的是,在裸機形式的系統里,建立了任務(wù)和消息的機制,模塊之間的低耦合強內聚特性得到了保留,為后續代碼的開(kāi)發(fā)和維護提供了大大的方便。
結語(yǔ)
去年桃花此門(mén)中,桃花人面相映紅,人面不知何處去,桃花依舊笑春風(fēng)。Ucos雖然不知跑到那里去了,但是大部分代碼的骨架還在,任務(wù)-消息-模塊的神韻猶在。我們唯一需要牢牢記住的只是:頻繁中斷狂轟亂炸,操作系統很難招架。
評論