欧美在线专区-欧美在线伊人-欧美在线一区二区三区欧美-欧美在线一区二区三区-pornodoxxx中国妞-pornodoldoo欧美另类

position>home>Blogs

任務(wù)間通信和同步的三種范式

任務(wù)間通信和同步有三種廣泛的任務(wù)范式:

任務(wù)間通信和同步的三種范式

任務(wù)擁有的設(shè)施 ——RTOS賦予提供通信(輸入)設(shè)施的任務(wù)的屬性。我們將再看的間通例子是信號(hào)

內(nèi)核對(duì)象 ——由 RTOS 提供的信和工具,代表獨(dú)立的同步通信或同步工具。示例包括:事件標(biāo)志、范式郵箱、任務(wù)隊(duì)列/管道、間通信號(hào)量和互斥體。信和

消息傳遞 ——一種合理化的同步方案,其中 RTOS 允許創(chuàng)建消息對(duì)象,范式這些對(duì)象可以從一個(gè)任務(wù)發(fā)送到另一個(gè)任務(wù)或多個(gè)其他任務(wù)。任務(wù)這是間通內(nèi)核設(shè)計(jì)的基礎(chǔ),并導(dǎo)致將此類產(chǎn)品描述為“消息傳遞 RTOS”。信和

適合每種應(yīng)用的同步設(shè)施會(huì)有所不同。它們的范式功能也有一些重疊,一些關(guān)于可擴(kuò)展性的思考是值得的。例如,如果一個(gè)應(yīng)用程序需要多個(gè)隊(duì)列,但只需要一個(gè)郵箱,那么實(shí)現(xiàn)具有單項(xiàng)隊(duì)列的郵箱可能會(huì)更高效。這個(gè)對(duì)象會(huì)有點(diǎn)不理想,但所有郵箱處理代碼都不會(huì)包含在應(yīng)用程序中,因此,可伸縮性將減少 RTOS 內(nèi)存占用。

共享變量或內(nèi)存區(qū)域

任務(wù)間通信的一種簡(jiǎn)單方法是只擁有所有相關(guān)任務(wù)都可以訪問(wèn)的變量或內(nèi)存區(qū)域。雖然它非常原始,但這種方法可能適用于某些應(yīng)用程序。需要控制訪問(wèn)。如果變量只是一個(gè)字節(jié),那么對(duì)它的寫入或讀取可能是“原子”(即不可中斷)操作,但如果處理器允許對(duì)內(nèi)存字節(jié)進(jìn)行其他操作,則需要小心,因?yàn)樗鼈兛赡苁强芍袛嗟牟⑶铱赡軙?huì)導(dǎo)致時(shí)間問(wèn)題。實(shí)現(xiàn)鎖定/解鎖的一種方法是在短時(shí)間內(nèi)禁用中斷。

如果您正在使用內(nèi)存區(qū)域,當(dāng)然您仍然需要鎖定。使用第一個(gè)字節(jié)作為鎖定標(biāo)志是可能的,假設(shè)內(nèi)存體系結(jié)構(gòu)促進(jìn)對(duì)該字節(jié)的原子訪問(wèn)。一個(gè)任務(wù)將數(shù)據(jù)加載到內(nèi)存區(qū)域,設(shè)置標(biāo)志,然后等待它清除。另一個(gè)任務(wù)等待設(shè)置標(biāo)志,讀取數(shù)據(jù)并清除標(biāo)志。使用中斷禁用作為鎖定不太明智,因?yàn)橐苿?dòng)整個(gè)數(shù)據(jù)緩沖區(qū)可能需要時(shí)間。

這種類型的共享內(nèi)存使用方式類似于在多核系統(tǒng)中實(shí)現(xiàn)許多處理器間通信設(shè)施的方式。在某些情況下,硬件鎖和/或中斷被合并到處理器間共享存儲(chǔ)器接口中。

信號(hào)

信號(hào)可能是傳統(tǒng) RTOS 中提供的最簡(jiǎn)單的任務(wù)間通信工具。它們由一組位標(biāo)志組成——可能有 8、16 或 32 個(gè),具體取決于具體實(shí)現(xiàn)——與特定任務(wù)相關(guān)聯(lián)。

任何任務(wù)都可以使用 OR類型的操作設(shè)置一個(gè)信號(hào)標(biāo)志(或多個(gè)標(biāo)志)。只有擁有信號(hào)的任務(wù)才能讀取它們。讀取過(guò)程通常是破壞性的——即標(biāo)志也被清除。

在某些系統(tǒng)中,信號(hào)以更復(fù)雜的方式實(shí)現(xiàn),以便在設(shè)置任何信號(hào)標(biāo)志時(shí)自動(dòng)執(zhí)行由信號(hào)擁有任務(wù)指定的特殊功能。這消除了任務(wù)監(jiān)控標(biāo)志本身的必要性。這有點(diǎn)類似于中斷服務(wù)程序。

在以后的文章中將有更多關(guān)于信號(hào)的信息,其中描述了它們?cè)?Nucleus SE 中的實(shí)現(xiàn)。

事件標(biāo)志組

事件標(biāo)志組類似于信號(hào),因?yàn)樗鼈兪敲嫦蛭坏娜蝿?wù)間通信設(shè)施。它們可以類似地以 8、16 或 32 位的組來(lái)實(shí)現(xiàn)。它們與信號(hào)的不同之處在于它們是獨(dú)立的內(nèi)核對(duì)象;它們不“屬于”任何特定任務(wù)。

任何任務(wù)都可以使用 OR 和 AND 操作設(shè)置和清除事件標(biāo)志。同樣,任何任務(wù)都可以使用相同類型的操作詢問(wèn)事件標(biāo)志。在許多 RTOS 中,可以對(duì)事件標(biāo)志組合進(jìn)行阻塞 API調(diào)用;這意味著任務(wù)可能會(huì)暫停,直到設(shè)置了特定的事件標(biāo)志組合。當(dāng)詢問(wèn)事件標(biāo)志時(shí),還可能有一個(gè)“使用”選項(xiàng)可用,以便清除所有讀取標(biāo)志。

在以后的文章中提供有關(guān)事件標(biāo)志組的更多信息,其中描述了它們?cè)?Nucleus SE 中的實(shí)現(xiàn)。

信號(hào)

量 信號(hào)量是獨(dú)立的內(nèi)核對(duì)象,它提供了一種標(biāo)記機(jī)制,通常用于控制對(duì)資源的訪問(wèn)。大致有兩種類型:二進(jìn)制信號(hào)量(只有兩種狀態(tài))和計(jì)數(shù)信號(hào)量(具有任意數(shù)量的狀態(tài))。一些處理器支持便于輕松實(shí)現(xiàn)二進(jìn)制信號(hào)量的(原子)指令。二進(jìn)制信號(hào)量也可以被視為計(jì)數(shù)限制為 1 的計(jì)數(shù)信號(hào)量。

任何任務(wù)都可能嘗試獲取信號(hào)量以獲取對(duì)資源的訪問(wèn)權(quán)。如果當(dāng)前信號(hào)量值大于0,則獲取成功,信號(hào)量值遞減。在許多操作系統(tǒng)中,可以通過(guò)阻塞調(diào)用來(lái)獲取信號(hào)量;這意味著一個(gè)任務(wù)可能會(huì)被掛起,直到另一個(gè)任務(wù)釋放信號(hào)量。任何任務(wù)都可以釋放一個(gè)信號(hào)量,這會(huì)增加它的值。

在以后的文章中有更多關(guān)于信號(hào)量的信息,其中描述了它們?cè)?Nucleus SE 中的實(shí)現(xiàn)。

郵箱

郵箱是獨(dú)立的內(nèi)核對(duì)象,它為任務(wù)提供了一種傳輸消息的方法。消息大小取決于實(shí)現(xiàn),但通常是固定的。一到四個(gè)指針大小的項(xiàng)目是典型的消息大小。通常,指向一些更復(fù)雜數(shù)據(jù)的指針是通過(guò)郵箱發(fā)送的。一些內(nèi)核實(shí)現(xiàn)了郵箱,因此數(shù)據(jù)只存儲(chǔ)在一個(gè)常規(guī)變量中,內(nèi)核管理對(duì)它的訪問(wèn)。郵箱也可以稱為“交換”,盡管這個(gè)名字現(xiàn)在已經(jīng)不常見(jiàn)了。

任何任務(wù)都可以發(fā)送到郵箱,然后郵箱已滿。如果一個(gè)任務(wù)然后嘗試發(fā)送到一個(gè)完整的郵箱,它將收到一個(gè)錯(cuò)誤響應(yīng)。在許多 RTOS 中,可以進(jìn)行阻塞調(diào)用以發(fā)送到郵箱;這意味著一個(gè)任務(wù)可能會(huì)被掛起,直到郵箱被另一個(gè)任務(wù)讀取。任何任務(wù)都可以從郵箱中讀取,這會(huì)再次使其為空。如果任務(wù)嘗試從空郵箱讀取,它將收到錯(cuò)誤響應(yīng)。在許多 RTOS 中,可以進(jìn)行阻塞調(diào)用以讀取郵箱;這意味著一個(gè)任務(wù)可能會(huì)被掛起,直到郵箱被另一個(gè)任務(wù)填滿。

一些 RTOS 支持“廣播”功能。這使消息能夠發(fā)送到當(dāng)前在讀取特定郵箱時(shí)暫停的所有任務(wù)。

某些 RTOS 根本不支持郵箱。建議改為使用單條目隊(duì)列(見(jiàn)下文)。這在功能上是等效的,但會(huì)帶來(lái)額外的內(nèi)存和運(yùn)行時(shí)開(kāi)銷。

在以后的文章中會(huì)提供有關(guān)郵箱的更多信息,該文章描述了它們?cè)?Nucleus SE 中的實(shí)現(xiàn)。

隊(duì)列

隊(duì)列是獨(dú)立的內(nèi)核對(duì)象,它為任務(wù)提供了一種傳輸消息的方法。它們比郵箱更靈活、更復(fù)雜。消息大小取決于實(shí)現(xiàn),但通常是固定大小和面向字/指針的。

任何任務(wù)都可能發(fā)送到隊(duì)列,并且這可能會(huì)重復(fù)發(fā)生,直到隊(duì)列已滿,此后任何發(fā)送嘗試都將導(dǎo)致錯(cuò)誤。隊(duì)列的深度通常是用戶在創(chuàng)建或配置系統(tǒng)時(shí)指定的。在許多 RTOS 中,可以進(jìn)行阻塞調(diào)用以發(fā)送到隊(duì)列;這意味著,如果隊(duì)列已滿,一個(gè)任務(wù)可能會(huì)被掛起,直到隊(duì)列被另一個(gè)任務(wù)讀取。任何任務(wù)都可以從隊(duì)列中讀取。消息的讀取順序與發(fā)送順序相同——先進(jìn)先出 (FIFO)。如果一個(gè)任務(wù)試圖從一個(gè)空隊(duì)列中讀取,它將收到一個(gè)錯(cuò)誤響應(yīng)。在許多 RTOS 中,可以進(jìn)行阻塞調(diào)用以從隊(duì)列中讀?。贿@意味著,如果隊(duì)列為空,則任務(wù)可能會(huì)暫停,直到另一個(gè)任務(wù)將消息發(fā)送到隊(duì)列。

RTOS 可能會(huì)支持將消息發(fā)送到隊(duì)列前面的功能——這也稱為“干擾”。一些 RTOS 還支持“廣播”功能。這使消息能夠發(fā)送到在讀取隊(duì)列時(shí)暫停的所有任務(wù)。此外,RTOS 可以支持可變長(zhǎng)度消息的發(fā)送和讀?。贿@提供了更大的靈活性,但會(huì)帶來(lái)一些額外的開(kāi)銷。

許多 RTOS 支持另一種稱為“管道”的內(nèi)核對(duì)象類型。管道本質(zhì)上與隊(duì)列相同,但處理面向字節(jié)的數(shù)據(jù)。

隊(duì)列的內(nèi)部操作在這里不感興趣,但應(yīng)該理解它們?cè)趦?nèi)存和運(yùn)行時(shí)的開(kāi)銷比郵箱要多。這主要是因?yàn)樾枰S護(hù)兩個(gè)指針——指向隊(duì)列的頭部和尾部。

在以后的文章中有更多關(guān)于隊(duì)列和管道的信息,這些文章描述了它們?cè)?Nucleus SE 中的實(shí)現(xiàn)。

互斥

信號(hào)量互斥信號(hào)量——互斥量——是獨(dú)立的內(nèi)核對(duì)象,其行為方式與正常的二進(jìn)制信號(hào)量非常相似。它們稍微復(fù)雜一些,并包含臨時(shí)所有權(quán)的概念(資源的,對(duì)其的訪問(wèn)受到控制)。如果一個(gè)任務(wù)獲得了一個(gè)互斥鎖,那么只有同一個(gè)任務(wù)才能再次釋放它——互斥鎖(以及資源??)暫時(shí)歸任務(wù)所有。

并非所有 RTOS 都提供互斥鎖,但調(diào)整常規(guī)二進(jìn)制信號(hào)量非常簡(jiǎn)單。有必要編寫一個(gè)“互斥量獲取”函數(shù),該函數(shù)獲取信號(hào)量并記錄任務(wù)標(biāo)識(shí)符。然后一個(gè)互補(bǔ)的“互斥釋放”函數(shù)將檢查調(diào)用任務(wù)的標(biāo)識(shí)符,只有當(dāng)它與存儲(chǔ)的值匹配時(shí)才釋放信號(hào)量,否則它將返回錯(cuò)誤。

Colin Walls 在電子行業(yè)擁有超過(guò) 30 年的經(jīng)驗(yàn),主要致力于嵌入式軟件。Colin 經(jīng)常在會(huì)議和研討會(huì)上發(fā)表演講,并著有大量技術(shù)文章和兩本關(guān)于嵌入式軟件的書籍,他是 MentorEmbedded [Mentor Graphics Embedded Software Division] 的嵌入式軟件技術(shù)專家,常駐英國(guó)。

Popular articles

主站蜘蛛池模板: 阿娇囗交全套高清视频| 国产线路中文字幕| 女人扒开裤子让男人捅| 国产国产成人久久精品杨幂| 夫妇交换性三中文字幕| 国产精品久久久| 日韩在线视频一区二区三区| 男女之间差差差| 国产人伦视频在线观看| 天堂成人在线观看| 天天操比| 老师的胸又大又软真好吃| 女人扒开腿让男生猛桶动漫| 国产大片在线观看| yy6080理论午夜一级毛片| 免费三级黄| 日本护士恋夜视频免费列表| 亚洲天堂中文字幕| 在线看无码的免费网站| jealousvue熟睡入侵中| 一本久久a久久精品亚洲| 鲁啊鲁啊鲁在线视频播放| 四虎影院永久在线| 久久久久久久综合狠狠综合| 天天躁夜夜躁很很躁| 香港三级电影免费看| 久久浮力影院| 国产亚洲精品一品区99热| 精品久久久久久久久久中文字幕| 涩涩爱影院| 国产最新凸凹视频免费| 欧美视频亚洲视频| 96免费精品视频在线观看| 乱日视频| 成人韩免费网站| 污污免费在线观看| 无翼日本全彩漫画大全全彩| 天天看片天天射| 放荡的女老板bd中文在线观看| 女人张开腿给人桶免费视频| 伊人久久中文大香线蕉综合|