在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 實(shí)時(shí)操作系統(tǒng)到Linux系統(tǒng)的應(yīng)用移植

            實(shí)時(shí)操作系統(tǒng)到Linux系統(tǒng)的應(yīng)用移植

            作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò) 收藏

            從一個(gè)操作系統(tǒng)到另一個(gè)操作系統(tǒng)應(yīng)用程序的移植即使在最好的情況下也經(jīng)常是一個(gè)艱巨的任務(wù)。把一個(gè)實(shí)時(shí)的嵌入式應(yīng)用程序移植到一個(gè)新的操作系統(tǒng)上可以說(shuō)是一項(xiàng)最困難的任務(wù)。

            本文引用地址:http://www.biyoush.com/article/201610/305784.htm

            為了幫助開(kāi)發(fā)人員計(jì)劃在不久的將來(lái)轉(zhuǎn)移到嵌入式Linux上,或者考慮將現(xiàn)有的應(yīng)用程序運(yùn)行在嵌入式Linux上這種投資的必要性,Jim 解釋了這一轉(zhuǎn)換的過(guò)程,評(píng)估了涉及到的困難和挑戰(zhàn),并且闡述了認(rèn)識(shí)這種轉(zhuǎn)換的益處。

            越來(lái)越多的公司正在轉(zhuǎn)向嵌入式Linux,把它作為他們下一代產(chǎn)品的操作系統(tǒng)。然而他們以前都是使用實(shí)時(shí)操作系統(tǒng)作為他們的嵌入式系統(tǒng)。事實(shí)上,VDC的報(bào)告顯示了嵌入式Linux可以占到32位和64位領(lǐng)域設(shè)計(jì)的三分之一,是其他所有嵌入式系統(tǒng)的兩倍。

            很明顯,關(guān)于從老式RTOS產(chǎn)品的應(yīng)用程序移植到Linux的可行性的問(wèn)題必須得到回答,由此這種移植才能夠被有效的用于工程管理。

            一個(gè)典型的基于RTOS的應(yīng)用程序依賴(lài)于很多因素,其中最重要的是編程/內(nèi)存模型、API、性能、特別是實(shí)時(shí)響應(yīng)的能力。另外一個(gè)重要的考慮是軟件開(kāi)發(fā)環(huán)境,但那是軟件環(huán)境文章值得討論的話(huà)題。

            編程模型

            幾乎所有使用的RTOS有一個(gè)簡(jiǎn)單的編程模型,它由多線(xiàn)程的執(zhí)行(通常稱(chēng)為任務(wù))構(gòu)成,包含在單一的地址空間中。舉例來(lái)說(shuō),一個(gè)c語(yǔ)言的程序有一個(gè)單一的主函數(shù),它創(chuàng)建所有其他的線(xiàn)程。每一個(gè)線(xiàn)程依次被定義為總程序中的一個(gè)c函數(shù)。典型的,不管是RTOS還是非保護(hù)內(nèi)存中的應(yīng)用程序,他們的物理地址和邏輯地址都是一樣的。可能會(huì)有一些超級(jí)用戶(hù)模式下的操作使用限制了在用戶(hù)模式下的應(yīng)用程序發(fā)出一些指令。基本上,所有的內(nèi)存對(duì)于應(yīng)用程序來(lái)說(shuō)是虛擬的。

            在過(guò)去,大多數(shù)嵌入式處理器沒(méi)有內(nèi)存管理單元,因此RTOS單地址空間模式是必須的。然而今天大多數(shù)的中高端處理器配備了MMU,因此如果需要的話(huà),MMU能夠管理內(nèi)存。

            該體系結(jié)構(gòu)的描述提出了一個(gè)移植RTOS代碼到Linux上的簡(jiǎn)單架構(gòu)。

            RTOS的全部應(yīng)用代碼移植到一個(gè)Linux單進(jìn)程

            RTOS的任務(wù)轉(zhuǎn)換成Linux線(xiàn)程

            RTOS的物理地址空間映射到Linux的虛擬地址空間

            諸如VME機(jī)架的多板或多處理器架構(gòu),移植到一個(gè)多進(jìn)程的Linux應(yīng)用。

            構(gòu)架上的考慮:進(jìn)程和線(xiàn)程的創(chuàng)建

            是否使用遵循API的VXWORKS和PSOS等RTOS仿真軟件包,開(kāi)發(fā)人員最終必須決定是否將線(xiàn)程或是進(jìn)程作為執(zhí)行RTOS的任務(wù)。在這點(diǎn)上,Linux內(nèi)核對(duì)待不管是線(xiàn)程還是進(jìn)程都是同等的,都是以調(diào)度為目的。然而不同的API創(chuàng)建和管理每個(gè)實(shí)體的類(lèi)型、性能、資源的成本和益處都是關(guān)聯(lián)的。

            通常來(lái)說(shuō),進(jìn)程比線(xiàn)程大一點(diǎn),因?yàn)樗麄儌魉椭嗟纳舷挛男畔?。一個(gè)Linux線(xiàn)程的上下文如同RTOS的一個(gè)任務(wù),主要由cpu寄存器、堆棧、當(dāng)前的程序指針以及一些內(nèi)核數(shù)據(jù)結(jié)構(gòu)的入口組成。一個(gè)進(jìn)程加上一個(gè)完整的虛擬地址空間。這樣,至少內(nèi)核必須創(chuàng)建和跟蹤進(jìn)程的頁(yè)轉(zhuǎn)換、所有代碼的類(lèi)型、上下文、數(shù)據(jù)等。對(duì)于重量級(jí)進(jìn)程上下文的主要影響有兩點(diǎn):創(chuàng)建的時(shí)間和相互的上下文切換時(shí)間。

            只要可能,RTOS的代碼都會(huì)爭(zhēng)取要輕量級(jí)的執(zhí)行。同樣的,當(dāng)很多RTOS提供了動(dòng)態(tài)的任務(wù)創(chuàng)建API,其他以靜態(tài)任務(wù)定義頁(yè)表為特色,所有RTOS的商家不鼓勵(lì)使用頻繁的任務(wù)創(chuàng)建以節(jié)省時(shí)間和空間。Linux進(jìn)程的創(chuàng)建不是故意那么麻煩;Linux進(jìn)程是重量級(jí)的,因?yàn)樗麄兲峁┝烁嗟谋Wo(hù)性和依賴(lài)性。

            這個(gè)熟悉地老式的架構(gòu),因?yàn)楹?jiǎn)單,所以非常容易遭受破壞。正在運(yùn)行的任務(wù)能夠覆蓋應(yīng)用程序的代碼和數(shù)據(jù),另外還會(huì)寫(xiě)入到外圍設(shè)備的寄存器、破壞內(nèi)核的數(shù)據(jù)結(jié)構(gòu)、覆蓋內(nèi)核代碼。任務(wù)的堆棧能夠很容易的溢出,并且一個(gè)接一個(gè)被覆蓋掉或者通過(guò)控制內(nèi)存來(lái)破壞堆的頂部、其他數(shù)據(jù)或者附近的代碼。

            更高的層次來(lái)說(shuō),這種非正式有組織的,高度非遮掩的架構(gòu)提出了對(duì)于代碼質(zhì)量的兩個(gè)主要挑戰(zhàn):自身的失敗機(jī)會(huì)以及和主要事件再次失敗的結(jié)合。

            當(dāng)個(gè)別任務(wù)或者其他軟件組件失敗了,它失敗的原因幾乎不可能被定位。甚至當(dāng)檢測(cè)到失敗并且嘗試恢復(fù)時(shí)候會(huì)以整個(gè)系統(tǒng)的失敗而結(jié)束。監(jiān)視代碼不能夠經(jīng)常安全地重啟任務(wù),RTOS不能夠恢復(fù)由失敗任務(wù)動(dòng)態(tài)定位的資源。結(jié)果就是復(fù)位通常是通過(guò)強(qiáng)制使用看門(mén)狗定時(shí)器來(lái)完成的,看門(mén)狗定時(shí)器重新啟動(dòng)整個(gè)系統(tǒng)或者軟件引起的系統(tǒng)錯(cuò)誤。

            通常當(dāng)一個(gè)程序跑飛了,它沒(méi)有任何征兆。一個(gè)錯(cuò)誤的任務(wù)能夠破壞在RTOS系統(tǒng)中任何地方的數(shù)據(jù)和代碼。幸運(yùn)的是,雖然這些破壞的影響瞬間產(chǎn)生,但是好像破壞的影響會(huì)在幾秒、幾小時(shí)、幾個(gè)月以后才會(huì)出現(xiàn)。

            當(dāng)異常的征兆出現(xiàn)了,去聯(lián)想預(yù)想不到的應(yīng)用程序行為是及其困難的,這些行為由于原始的原因或者是很微小的,或者是破壞性的。

            Linux編程模型的內(nèi)部編譯的可靠性

            Linux作為一個(gè)unix兼容的操作系統(tǒng)代表著一個(gè)更加強(qiáng)大的應(yīng)用和系統(tǒng)編程模型。應(yīng)用程序執(zhí)行在他們受保護(hù)的地址空間,因?yàn)樗鼈冎g的地址相互是不可見(jiàn)的,并且它們通過(guò)硬件的MMU來(lái)預(yù)防覆蓋掉他們自己的代碼,MMU出現(xiàn)在多數(shù)現(xiàn)代化的32位64位的處理器中。

            當(dāng)他們共享Linux內(nèi)核的虛擬地址空間時(shí),他們不能夠覆蓋內(nèi)核代碼或數(shù)據(jù)。既然進(jìn)程不能夠相互看到,他們就不能夠相互破壞數(shù)據(jù)或代碼

            API和實(shí)時(shí)庫(kù)

            在開(kāi)源標(biāo)準(zhǔn)以前,RTOS的制作者定義了他們自己的系統(tǒng)調(diào)用或API,這對(duì)于每個(gè)RTOS的制作者來(lái)說(shuō)都是獨(dú)一無(wú)二的。接口函數(shù)是為流行的編程語(yǔ)言而提供的,諸如c、c++,這使得API函數(shù)對(duì)于使用高級(jí)語(yǔ)言的程序員是合適的。

            在過(guò)去的十年中,盡管只有POSIX規(guī)范的一部分和嵌入式應(yīng)用程序相關(guān),大多數(shù)的RTOS制作者還是給標(biāo)準(zhǔn)的POSIX提供了兼容庫(kù)。很多客戶(hù)使用他們自己的API集使本地RTOS接口分層以獲得獨(dú)立性和便捷性,而不是想被鎖定成為一個(gè)私有的特殊版權(quán)的接口。

            開(kāi)發(fā)人員使用標(biāo)準(zhǔn)的API建立應(yīng)用程序來(lái)獲得兩個(gè)另外的目的:允許代碼被移植成像Linux那樣的標(biāo)準(zhǔn)操作系統(tǒng)以及允許以后同樣的代碼在這樣的一個(gè)環(huán)境下比使用私有的API更加容易移植。

            很多包括標(biāo)準(zhǔn)調(diào)用的商業(yè)RTOS以POSIX或者BSD來(lái)設(shè)定,但是那些API經(jīng)常只存在于windows下。特別是一個(gè)內(nèi)核私有的API是最常被使用的,就是這些API鎖定了項(xiàng)目到一個(gè)特殊的平臺(tái)或者解決方案。

            如果開(kāi)發(fā)人員正在移植標(biāo)準(zhǔn)的代碼或者考慮哪個(gè)API運(yùn)用到新的代碼中,那么理解在Linux和其他操作系統(tǒng)中使用的最普遍的標(biāo)準(zhǔn)是非常重要的。


            上一頁(yè) 1 2 下一頁(yè)

            關(guān)鍵詞:

            評(píng)論


            相關(guān)推薦

            技術(shù)專(zhuān)區(qū)

            關(guān)閉