<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 高效輕型線程助力提高Linux實(shí)時(shí)性能

          高效輕型線程助力提高Linux實(shí)時(shí)性能

          作者: 時(shí)間:2012-09-07 來源:網(wǎng)絡(luò) 收藏

          本文引用地址:http://www.ex-cimer.com/article/148447.htm

          采用PTHREADS的

            Pthreads是由IEEE規(guī)劃的可移植操作系統(tǒng)接口(POSIX)創(chuàng)建的,目的是為了解決Unix中存在的高、多問題,之后被用在最早的版本中,用于為企業(yè)實(shí)施可移植Unix,目前用于嵌入式應(yīng)用中。

            創(chuàng)建pthreads模型是為了解決原始Unix Fork/Join模型創(chuàng)建Unix子進(jìn)程時(shí)出現(xiàn)的問題。由于該模型涉及到創(chuàng)建(還可能涉及刪除)整個(gè)受內(nèi)存保護(hù)的環(huán)境及執(zhí)行模式,因此Unix進(jìn)程模型非常龐大。需要在Unix下采用適用于多的較模型,因此pthreads應(yīng)運(yùn)而生。

            但Unix(也包括)模型是專為將內(nèi)核與用戶空間應(yīng)用完全分離而設(shè)計(jì)的,其優(yōu)勢(shì)之一在于提供的保護(hù)、安全性和可靠性遠(yuǎn)勝于其他實(shí)施方案(包括過去10幾年間使用的RTOS)。實(shí)質(zhì)上,這意味著Linux用戶空間中的每個(gè)pthread都會(huì)由Linux內(nèi)核線程表示,因此,全部或大部分Linux系統(tǒng)調(diào)用(特別是設(shè)備驅(qū)動(dòng)器)均可通過用戶空間進(jìn)行訪問。但是,由于OEM制造的產(chǎn)品并不具備GPL,因此用戶空間中實(shí)際存儲(chǔ)了所有嵌入式Linux應(yīng)用。因此,在每種情況下,使用pthreads都涉及到調(diào)用Linux內(nèi)核,從而為本可以在本地實(shí)施的應(yīng)用帶來了額外的系統(tǒng)開銷。

            但請(qǐng)您稍稍考慮一下。采用上文提到的Linux擴(kuò)展怎么樣?是的,PREEMPT_RT可以解決Linux內(nèi)核中存在的許多關(guān)于響應(yīng)性的問題,但不能真正解決多線程問題。實(shí)施用戶空間 Linux可解決設(shè)備驅(qū)動(dòng)器/中斷問題,但并不能真正解決多線程問題。Linux容器可解決部分問題,但實(shí)時(shí)容器只是一種基于標(biāo)準(zhǔn)Linux的用戶空間Linux可視化技術(shù),并不能真正解決根本的多線程問題。

            線程(LWT)--復(fù)雜Linux應(yīng)用的真正解決方案

            之前針對(duì)Linux提出了多種線程模型的建議,但沒有一種模型能夠真正解決問題。原因何在?因?yàn)榇蠖鄶?shù)模型的功能都不是很強(qiáng)大。涉及復(fù)雜多線程應(yīng)用的下一代Linux解決方案真正需要的是適用于用戶空間Linux應(yīng)用的全新Linux模型。下文概括介紹了這種名為L(zhǎng)inux輕型線程(LWT)的解決方案。將高、低系統(tǒng)開銷、多線程調(diào)度器植入Linux用戶空間,來代替單獨(dú)的pthread.原因何在?

            ●Pthread系統(tǒng)開銷

            ●進(jìn)程和pthreads是Linux了解的唯一調(diào)度實(shí)體。

            ●LWT pthread只是一個(gè)Linux編碼執(zhí)行背景,可用于永久運(yùn)行pthread.由于用戶空間調(diào)度器始終保持控制,因此pthread絕不會(huì)被掛起,省電模式除外。這種情況不在本文的討論范圍。

            該用戶空間調(diào)度器的運(yùn)行和操作方式與某些傳統(tǒng)RTOS高性能、低延遲實(shí)施完全相同,但不會(huì)涉及到Linux內(nèi)核。

            實(shí)施過程利用新用戶空間Linux實(shí)施過程來直接訪問硬件。同樣也不涉及Linux內(nèi)核。

            上述LWT解決方案可在任何Linux實(shí)時(shí)應(yīng)用中實(shí)現(xiàn)動(dòng)態(tài)性能的提升。Enea已設(shè)計(jì)出上述LWT的一些原型,事實(shí)證明,與Linux pthreads在調(diào)度器系統(tǒng)開銷、特別是上下文切換和線程間消息發(fā)送/通信延遲方面的性能相比,LWT性能可10倍。

            但是除了調(diào)度性能和線程間通信功能之外,LWT解決方案還應(yīng)帶來什么?LWT概念除了在性能方面勝過Linux pthreads之外,還有更多優(yōu)勢(shì)。解決方案穩(wěn)健性的概念如何?與歷史悠久的RTOS實(shí)時(shí)解決方案一樣,LWT也需要具有以下額外Linux特性:

            ●決定性調(diào)度

            ●調(diào)度系統(tǒng)開銷低--上下文切換成本低

            ●線程間信號(hào)系統(tǒng)開銷低

            ●線程創(chuàng)建成本低

            多核設(shè)備中Linux輕型線程模型的結(jié)構(gòu)圖

            LWT實(shí)施方案的結(jié)構(gòu)圖如下。涉及整個(gè)共享內(nèi)存空間的Linux進(jìn)程可能跨多核設(shè)備的多個(gè)內(nèi)核。為了達(dá)到最率,LWT模型需要將Linux進(jìn)程中的單個(gè)pthread鎖定至某一個(gè)內(nèi)核,但并不特別要求這樣做。LWT鎖定至pthread之后,便可遷移到Linux SMP需要的任何內(nèi)核中。

          圖1:多核設(shè)備中Linux輕型線程模型的結(jié)構(gòu)圖

          圖1:多核設(shè)備中Linux輕型線程模型的結(jié)構(gòu)圖

            結(jié)論

            輕型線程(LWT)將成為下一個(gè)Linux實(shí)時(shí)性能和行為問題。需要強(qiáng)調(diào)的是,并非所有實(shí)時(shí)應(yīng)用都需要使用功能強(qiáng)大的類似LWT的解決方案。但是一些實(shí)時(shí)應(yīng)用,尤其是電信/網(wǎng)絡(luò)中的應(yīng)用以及無線接入網(wǎng)、移動(dòng)基礎(chǔ)設(shè)施核心/邊緣中的那些需要使用某些復(fù)雜網(wǎng)絡(luò)協(xié)議的應(yīng)用、或任何具有類似實(shí)時(shí)需求的其他系統(tǒng)均可受益于Linux輕型線程--下一代 Linux 實(shí)時(shí)擴(kuò)展。同時(shí),實(shí)時(shí)嵌入式Linux的整個(gè)發(fā)展過程證明了Linux的運(yùn)行效果與傳統(tǒng)RTOS解決方案一樣優(yōu)異。Linux已取得了一些進(jìn)展,但是作者認(rèn)為,最重要的電信/網(wǎng)絡(luò)應(yīng)用中使用的Linux尚未達(dá)到預(yù)期的要求。但也許通過Linux輕型線程,我們可以更接近這一目標(biāo)??偟膩碚f,Linux實(shí)時(shí)嵌入式行業(yè)的一個(gè)側(cè)重點(diǎn)是研發(fā)出可用于要求最高的實(shí)時(shí)應(yīng)用的解決方案。下圖中描述了該目標(biāo):

          圖2:輕型線程和Linux概念--Linux和RTOS最重要的概念

          圖2:輕型線程和Linux概念--Linux和RTOS最重要的概念

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();