RTLinuxPro處理器預(yù)留和中斷控制技術(shù)
發(fā)布時間:2007/8/24 0:00:00 訪問次數(shù):605
一些Linux實時操作系統(tǒng)制造商把中斷響應(yīng)時間和處理器預(yù)留作為得到實時Linux的主要方法。但其負面結(jié)果是功能環(huán)境縮小、服務(wù)功能簡單,沒有實時性的保證。本文分析了RTLinuxPro是如何簡易地為用戶產(chǎn)生處理器預(yù)留和中斷控制,以及如何提供一個完整的POSIX RTOS環(huán)境來支持它。
硬實時操作系統(tǒng)一直以來是一個功能單一、非集成化,不受重視的應(yīng)用領(lǐng)域。另一方面,Linux系統(tǒng)則代表了目前計算機技術(shù)當中良好的集成性和普適性。如果把這二者結(jié)合起來,那將得到一個功能完善的硬實時操作系統(tǒng),同時可以把具有web接入的用戶的網(wǎng)絡(luò)功能部分以一種快捷、安全和簡單的方式集成到系統(tǒng)當中。
圖1:RTLinux技術(shù)。
RTCore就是這樣一種能夠為RTLinuxPro和RTCoreBSD提供硬實時環(huán)境的例子。除了大量的Linux應(yīng)用接口外,RTCore還提供POSIX環(huán)境下硬實時的中斷句柄、線程、信號、互斥體(mutexes)、信號量(semaphores)、進程間通信等。
同類技術(shù)中,其它方法的重點是放在對中斷響應(yīng)時間的提高方面。其工作本身是有探索價值的,但取得的結(jié)果卻很有限,只是在一個特定LINUX版本和硬件體系結(jié)構(gòu)下使中斷響應(yīng)時間得到了改善,仍然沒有硬實時方面的保證。同時,采用這些方法的操作系統(tǒng)提供給編程者的服務(wù)也十分有限。盡管對于某些基礎(chǔ)應(yīng)用,如頻繁的采樣和對采樣信號的簡單快速響應(yīng)的場合,這些方法是有效的,但多數(shù)情況下,卻反映出現(xiàn)實中的應(yīng)用領(lǐng)域根本就不是那么地簡單。
特定CPU上的線程引導(dǎo)
先來看一個實時線程如何將自己裝入一個給定的CPU的例子。
----此處放L1----
這里沒有什么新的東西,一個新的線程產(chǎn)生,就像其他任何的POSIX應(yīng)用一樣。區(qū)別只是這一行——“pthread_attr_setcpu_np(&attr, 0);”。這句告訴RTCore當新的線程創(chuàng)建的時候,應(yīng)該把它放到CPU 0中,而且永遠不會從CPU中被清除掉。原因在于當一個線程/任務(wù)被允許從一個處理器轉(zhuǎn)移到另一個的時候,高速緩存(Cache)的影響會改變實時性能。如果知道了在什么樣的CPU上都有哪些線程,那么就可以把這種轉(zhuǎn)移的影響降低到最小,實時性能也會得到顯著提高,同時RTOS的調(diào)度負荷也降到了最低。
另外一個比較新的東西是“timespec_add_ns(&next,1000*1000);”,這句給timespec結(jié)構(gòu)體增加了一個毫秒,它是為了方便起見而提供的一個函數(shù)(POSIX并沒有定義這個函數(shù),所以用戶通常要手工規(guī)格化一些數(shù)據(jù))。如果用戶熟悉RTLinux,就不應(yīng)該對這個函數(shù)感到陌生,它已經(jīng)用了好幾年了。RTLinuxPro的用戶應(yīng)該注意到這個函數(shù):rtl_main_wait(),這是一個事件等待句柄,它允許程序暫時掛起直到從用戶或者系統(tǒng)接收到一個退出信號。(類似于GUI應(yīng)用中的事件等待進入函數(shù))。
上述已經(jīng)在一個特定的CPU上有了一個線程,并且可以保留該CPU不被普通OS所占用。本文中進行的所有測試都把Linux當作一個普通的OS。
預(yù)留處理器
這個小標題似乎有些模棱兩可。本文的題目隱含了處理器預(yù)留這個難題的重點,似乎需要深入而詳細地討論,但實際上,代碼里只要一行程序就可以了。下面是對前面程序的修改:
...
pthread_attr_setcpu_np(&attr, 0);
pthread_attr_setreserve_np(&attr, 1);
pthread_create(&thread, NULL, thread_code, 0);
...
“pthread_attr_setreserve_np(&attr,
1);”這句設(shè)置了線程的一個布爾屬性。當在特定處理器上產(chǎn)生了一個線程后,只要該線程存在,GPOS就被禁止在這個處理器上運行。
實際上也是如此的,一旦這條語句被執(zhí)行,GPOS就被禁止在處理器上面運行了,只能為創(chuàng)立的線程保留CPU(包括運行在CPU上的其它實時線程)。在有些情況下,允許所有的實時應(yīng)用程序直接保留在處理器的高速緩存中。由于處理器不用再去RAM中取代碼了,所以處理器的性能相對得到了提高。因為GPOS永遠不會在Cache中運行,從而不會把實時代碼擠出Cache,所以Cache永遠都被實時代碼占據(jù)。(Linux相當龐大,一旦運行起來就會占據(jù)很大的Cache空間)。
中斷控制
在上面的代碼中,為實時代碼保留CPU會對其上的GPOS中斷產(chǎn)生負面的影響。由于Linux不在其上運行了,不能接受中斷了,所以對于其他設(shè)備,如以太網(wǎng)設(shè)備這樣的硬件就只等通過另外一個CPU為Linux提供信號了。這樣就使得保留的處理器不處理任何除了產(chǎn)生實時線程以外的任何中斷。
現(xiàn)在處理器完全在實時線程的控制下了,我們再次把重點放在
一些Linux實時操作系統(tǒng)制造商把中斷響應(yīng)時間和處理器預(yù)留作為得到實時Linux的主要方法。但其負面結(jié)果是功能環(huán)境縮小、服務(wù)功能簡單,沒有實時性的保證。本文分析了RTLinuxPro是如何簡易地為用戶產(chǎn)生處理器預(yù)留和中斷控制,以及如何提供一個完整的POSIX RTOS環(huán)境來支持它。
硬實時操作系統(tǒng)一直以來是一個功能單一、非集成化,不受重視的應(yīng)用領(lǐng)域。另一方面,Linux系統(tǒng)則代表了目前計算機技術(shù)當中良好的集成性和普適性。如果把這二者結(jié)合起來,那將得到一個功能完善的硬實時操作系統(tǒng),同時可以把具有web接入的用戶的網(wǎng)絡(luò)功能部分以一種快捷、安全和簡單的方式集成到系統(tǒng)當中。
圖1:RTLinux技術(shù)。
RTCore就是這樣一種能夠為RTLinuxPro和RTCoreBSD提供硬實時環(huán)境的例子。除了大量的Linux應(yīng)用接口外,RTCore還提供POSIX環(huán)境下硬實時的中斷句柄、線程、信號、互斥體(mutexes)、信號量(semaphores)、進程間通信等。
同類技術(shù)中,其它方法的重點是放在對中斷響應(yīng)時間的提高方面。其工作本身是有探索價值的,但取得的結(jié)果卻很有限,只是在一個特定LINUX版本和硬件體系結(jié)構(gòu)下使中斷響應(yīng)時間得到了改善,仍然沒有硬實時方面的保證。同時,采用這些方法的操作系統(tǒng)提供給編程者的服務(wù)也十分有限。盡管對于某些基礎(chǔ)應(yīng)用,如頻繁的采樣和對采樣信號的簡單快速響應(yīng)的場合,這些方法是有效的,但多數(shù)情況下,卻反映出現(xiàn)實中的應(yīng)用領(lǐng)域根本就不是那么地簡單。
特定CPU上的線程引導(dǎo)
先來看一個實時線程如何將自己裝入一個給定的CPU的例子。
----此處放L1----
這里沒有什么新的東西,一個新的線程產(chǎn)生,就像其他任何的POSIX應(yīng)用一樣。區(qū)別只是這一行——“pthread_attr_setcpu_np(&attr, 0);”。這句告訴RTCore當新的線程創(chuàng)建的時候,應(yīng)該把它放到CPU 0中,而且永遠不會從CPU中被清除掉。原因在于當一個線程/任務(wù)被允許從一個處理器轉(zhuǎn)移到另一個的時候,高速緩存(Cache)的影響會改變實時性能。如果知道了在什么樣的CPU上都有哪些線程,那么就可以把這種轉(zhuǎn)移的影響降低到最小,實時性能也會得到顯著提高,同時RTOS的調(diào)度負荷也降到了最低。
另外一個比較新的東西是“timespec_add_ns(&next,1000*1000);”,這句給timespec結(jié)構(gòu)體增加了一個毫秒,它是為了方便起見而提供的一個函數(shù)(POSIX并沒有定義這個函數(shù),所以用戶通常要手工規(guī)格化一些數(shù)據(jù))。如果用戶熟悉RTLinux,就不應(yīng)該對這個函數(shù)感到陌生,它已經(jīng)用了好幾年了。RTLinuxPro的用戶應(yīng)該注意到這個函數(shù):rtl_main_wait(),這是一個事件等待句柄,它允許程序暫時掛起直到從用戶或者系統(tǒng)接收到一個退出信號。(類似于GUI應(yīng)用中的事件等待進入函數(shù))。
上述已經(jīng)在一個特定的CPU上有了一個線程,并且可以保留該CPU不被普通OS所占用。本文中進行的所有測試都把Linux當作一個普通的OS。
預(yù)留處理器
這個小標題似乎有些模棱兩可。本文的題目隱含了處理器預(yù)留這個難題的重點,似乎需要深入而詳細地討論,但實際上,代碼里只要一行程序就可以了。下面是對前面程序的修改:
...
pthread_attr_setcpu_np(&attr, 0);
pthread_attr_setreserve_np(&attr, 1);
pthread_create(&thread, NULL, thread_code, 0);
...
“pthread_attr_setreserve_np(&attr,
1);”這句設(shè)置了線程的一個布爾屬性。當在特定處理器上產(chǎn)生了一個線程后,只要該線程存在,GPOS就被禁止在這個處理器上運行。
實際上也是如此的,一旦這條語句被執(zhí)行,GPOS就被禁止在處理器上面運行了,只能為創(chuàng)立的線程保留CPU(包括運行在CPU上的其它實時線程)。在有些情況下,允許所有的實時應(yīng)用程序直接保留在處理器的高速緩存中。由于處理器不用再去RAM中取代碼了,所以處理器的性能相對得到了提高。因為GPOS永遠不會在Cache中運行,從而不會把實時代碼擠出Cache,所以Cache永遠都被實時代碼占據(jù)。(Linux相當龐大,一旦運行起來就會占據(jù)很大的Cache空間)。
中斷控制
在上面的代碼中,為實時代碼保留CPU會對其上的GPOS中斷產(chǎn)生負面的影響。由于Linux不在其上運行了,不能接受中斷了,所以對于其他設(shè)備,如以太網(wǎng)設(shè)備這樣的硬件就只等通過另外一個CPU為Linux提供信號了。這樣就使得保留的處理器不處理任何除了產(chǎn)生實時線程以外的任何中斷。
現(xiàn)在處理器完全在實時線程的控制下了,我們再次把重點放在
熱門點擊
- 電風扇遙控電路PT2128及其應(yīng)用
- ELK-04型SF6氣體絕緣金屬封閉開關(guān)設(shè)備
- 10KV開關(guān)站開關(guān)柜選型對城區(qū)供電的影響
- MIPS挺進中國,在上海設(shè)研發(fā)中心
- EEMBC進行OAmark測試,可配置處理器
- 瑞薩推出32位RSIC微控制器,最高工作頻率
- 直流無刷電機驅(qū)動芯片LB11820M的原理及
- 熱超聲倒裝鍵合機視覺定位系統(tǒng)的設(shè)與實現(xiàn)
- 洗衣機交流電機驅(qū)動智能功率模塊(SPM)FP
- Digital View顯示接口控制IC兼容
推薦技術(shù)資料
- 自制經(jīng)典的1875功放
- 平時我也經(jīng)常逛一些音響DIY論壇,發(fā)現(xiàn)有很多人喜歡LM... [詳細]
- EVL250WMG1L諧振轉(zhuǎn)換器應(yīng)用分析
- STGWA30IH160DF2
- 集成半橋 MOSFET 驅(qū)動器
- 全新AI操作系統(tǒng)One UI
- 全新空間音頻標準—Eclipsa Audio
- RISC-V MCU+接口技術(shù)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究