




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、2022-5-81第六講:第六講:VxWorks實(shí)時(shí)操作系統(tǒng)張小波老師張小波老師 2022-5-82n網(wǎng)絡(luò)產(chǎn)品實(shí)現(xiàn)方法的演進(jìn)n實(shí)時(shí)系統(tǒng)nVxWorks介紹nTornado開(kāi)發(fā)環(huán)境介紹nBSPn設(shè)備驅(qū)動(dòng)2022-5-83實(shí)現(xiàn)方法的演進(jìn)n基于PC 的架構(gòu) (80s-90s Early) 軟件實(shí)現(xiàn)n基于A(yíng)SIC+MPU的架構(gòu) (90s Middle) 軟件控制,硬件線(xiàn)速處理2022-5-84基于PC的架構(gòu)CPU存儲(chǔ)器存儲(chǔ)器網(wǎng)網(wǎng) 卡卡PCIMAC本地緩存網(wǎng)卡網(wǎng)卡PCIPCI顯卡顯卡EthernetEthernet 主主 板板OS (Linux)API應(yīng)用程序應(yīng)用程序硬件源代碼(C)MAC終端BIOS問(wèn)
2、題:1、接口速率問(wèn)題(up to 100M);2、處理容量問(wèn)題;3、安全性問(wèn)題;上層軟件上層軟件本地緩存2022-5-85工作組/園區(qū)路由器的基本結(jié)構(gòu)-Cisco 7200 router CPUHost-BdramsrampcmciaPci-BLine cardLine cardLine cardLine cardLine cardLine cardEpromduartPci-B2022-5-86路由器基本結(jié)構(gòu)交換開(kāi)關(guān)線(xiàn)卡線(xiàn)卡線(xiàn)卡線(xiàn)卡協(xié)議軟件網(wǎng)絡(luò)接口分類(lèi)整形過(guò)濾轉(zhuǎn)發(fā)報(bào)文緩沖和 調(diào)度物理鏈路交換開(kāi)關(guān)2022-5-87基于A(yíng)SIC+MPU的架構(gòu)(1)輸入處理輸出處理交換路由協(xié)議擁塞控制其它安全計(jì)費(fèi)
3、接納控制控制控制平面平面數(shù)據(jù)數(shù)據(jù)平面平面路由查找路由器層次結(jié)構(gòu)(硬件上層軟件)路由器層次結(jié)構(gòu)(硬件上層軟件)2022-5-88基于A(yíng)SIC+MPU的架構(gòu)(2)BSPMPU存儲(chǔ)器存儲(chǔ)器ASICL2 switch /L3 Forwarding CPU總線(xiàn)總線(xiàn)MACEthernetRTOS (Vxworks)API應(yīng)用程序應(yīng)用程序硬件MACEthernet串口E口存儲(chǔ)器Tornado開(kāi)發(fā)環(huán)境,C源代碼21問(wèn)題:1、速率與功能受限于Chip;2、ASIC,速率低;FPGA,周期長(zhǎng);4、可擴(kuò)展性差。2022-5-89控控制制平平面面信令消息 高高層層 建立呼叫和連接 /網(wǎng)絡(luò)層AAL 管管理理平平面面 維
4、護(hù)網(wǎng)絡(luò)、連接路由、執(zhí)行操作 /網(wǎng)絡(luò)層 CPCS+SSCS 信令實(shí)體間的連接 /鏈路層 SAR 分段重組 /鏈路層用用戶(hù)戶(hù)平平面面用戶(hù)信息 高高層層 類(lèi)似 OSI 高層的功能 /會(huì)話(huà)層 CPCS+SSCS 端到端無(wú)差錯(cuò)連接 /傳輸層 SAR 分段重組 /傳輸層 ATM 相當(dāng)于鏈路層下邊界 PHY 相當(dāng)于物理層注:AAL層對(duì)用戶(hù)信息相當(dāng)L4的下邊界,對(duì)控制信息相當(dāng)L2的下邊界ATM層次模型2022-5-810單板介紹交換板SDRAMFLASH MPC860SAR 串口HDLC A P CCRAMBRAM以太網(wǎng) A P CCRAMBRAMHDLC主備控制復(fù)位電路VCRAMPRAMVCRAMPRAM去
5、主控板U2U22022-5-811實(shí)時(shí)系統(tǒng)定義n對(duì)于給定一個(gè)時(shí)間約束量對(duì)于給定一個(gè)時(shí)間約束量 0 0,如果如果系統(tǒng)系統(tǒng)S S在在T1T1時(shí)刻接受到輸入,在時(shí)刻接受到輸入,在T2T2時(shí)刻時(shí)刻給出合理的輸出,且使給出合理的輸出,且使T2-T1T2-T1。則則稱(chēng)系統(tǒng)稱(chēng)系統(tǒng)S S滿(mǎn)足要求的時(shí)間滿(mǎn)足要求的時(shí)間的實(shí)時(shí)性,的實(shí)時(shí)性,通常稱(chēng)系統(tǒng)通常稱(chēng)系統(tǒng)S S為實(shí)時(shí)系統(tǒng)。為實(shí)時(shí)系統(tǒng)。n“正確、但遲后的結(jié)果也是錯(cuò)誤的正確、但遲后的結(jié)果也是錯(cuò)誤的”2022-5-812n時(shí)間約束是相對(duì)的n關(guān)鍵因素:系統(tǒng)對(duì)外部激勵(lì)的響應(yīng)時(shí)間 實(shí)時(shí)系統(tǒng)時(shí)間軟件工程科學(xué)計(jì)算事物診斷測(cè)試信號(hào)處理物理測(cè)量進(jìn)程仿真飛行器仿真遙測(cè)領(lǐng)域領(lǐng)域?qū)崟r(shí)系
6、統(tǒng)開(kāi)發(fā)財(cái)務(wù)處理醫(yī)療測(cè)試分析工業(yè)自動(dòng)化地震分析網(wǎng)絡(luò)控制飛行仿真導(dǎo)彈仿真應(yīng)用應(yīng)用 1s100ms 10ms1ms100s50s10s1s2022-5-813計(jì)算機(jī)系統(tǒng)的組成應(yīng)用軟件H/WOperating System抽象層間件中2022-5-814實(shí)時(shí)操作系統(tǒng)n實(shí)時(shí)操作系統(tǒng)允許應(yīng)用程序滿(mǎn)足嚴(yán)格的時(shí)間要求n多任務(wù)內(nèi)核n實(shí)時(shí)調(diào)度(基于優(yōu)先級(jí)的搶占)n任務(wù)間通信n互斥n其它功能作為庫(kù)由Kernel調(diào)度2022-5-815實(shí)時(shí)操作系統(tǒng)中的概念n多任務(wù)n調(diào)度n優(yōu)先權(quán)n時(shí)間片n通信和同步n資源共享n事件n互斥n信號(hào)量n郵箱2022-5-816多任務(wù)n 目的:優(yōu)化系統(tǒng)資源(CPU 時(shí)間、內(nèi)存、磁盤(pán)、驅(qū)動(dòng)器.)
7、的使用n多任務(wù) OSn允許多個(gè)任務(wù)并發(fā)和獨(dú)立地在系統(tǒng)上運(yùn)行n實(shí)現(xiàn)獨(dú)占和共享系統(tǒng)資源n根據(jù)所需的輸入/輸出資源,控制任務(wù)執(zhí)行n任務(wù)(Task)、Process、Agent、Threadn邏輯整體動(dòng)態(tài)(進(jìn)程)實(shí)體2022-5-817Task與Program的區(qū)別n程序 (program)n靜態(tài)實(shí)體,由一個(gè)或多個(gè)指令序列,管理一組數(shù)據(jù)(內(nèi)部或外部變量)n 任務(wù)(task)n動(dòng)態(tài)實(shí)體,運(yùn)行一個(gè)或多個(gè)程序,以實(shí)現(xiàn)處理器上指定的活動(dòng)2022-5-818任務(wù)的不同狀態(tài)運(yùn)行掛起阻塞刪除運(yùn)行處理器處理器分配分配休眠休眠其它任務(wù)其它任務(wù)搶先搶先喚醒喚醒等待資源只等待處理器2022-5-819調(diào) 度n調(diào)度器負(fù)責(zé)任務(wù)
8、的狀態(tài)管理和當(dāng)前任務(wù)的選擇n分發(fā)器選擇由調(diào)度器推舉的當(dāng)前的任務(wù)(有效的上下文切換)n處理器分配算法的判據(jù)選擇有:n任務(wù)優(yōu)先、其壽命、消耗的CPU時(shí)間、等等n用調(diào)度器動(dòng)態(tài)調(diào)整2022-5-820優(yōu)先權(quán)優(yōu)先權(quán)優(yōu)先權(quán)系統(tǒng)錯(cuò)誤處理硬件事件管理設(shè)備驅(qū)動(dòng)器 最短用戶(hù)任務(wù) 最長(zhǎng)注釋 唯一重要的優(yōu)先權(quán)是任務(wù) 之間的相對(duì)優(yōu)先權(quán)2022-5-821通信和同步n任務(wù)互操作,以便合作完成公共活動(dòng)n目的n管理任務(wù)間共享的系統(tǒng)資源,避免系統(tǒng)死鎖2022-5-822資源共享n資源可以是n軟件或硬件n局部(僅在一個(gè)任務(wù)內(nèi)使用)或公用n能共享的資源有最大的進(jìn)入能力2022-5-823互 斥n避免數(shù)據(jù)或者代碼不一致的機(jī)制n互斥n
9、當(dāng)幾個(gè)任務(wù)共享非重入資源(判據(jù))時(shí)發(fā)生互斥n信號(hào)量n信號(hào)量類(lèi)同于售票機(jī)2022-5-824郵 箱n郵箱是任務(wù)之間的交換區(qū)n2個(gè)隊(duì)列與郵箱有關(guān)n一個(gè)是消息隊(duì)列n一個(gè)是任務(wù)隊(duì)列(多個(gè)發(fā)送和接受)msg1msg2msg3sendreceive2022-5-825VxworksVxworks操作系統(tǒng)是一個(gè)操作系統(tǒng)是一個(gè)嵌入式實(shí)時(shí)操作系統(tǒng)(嵌入式實(shí)時(shí)操作系統(tǒng)(RTOSRTOS)。VxworksVxworks與其它實(shí)時(shí)與其它實(shí)時(shí)OSOS一樣,基于以下兩個(gè)重要機(jī)制:一樣,基于以下兩個(gè)重要機(jī)制: * * 多任務(wù)環(huán)境及任務(wù)間通信多任務(wù)環(huán)境及任務(wù)間通信 * * 硬件中斷處理硬件中斷處理VxworksVxworks
10、多任務(wù)內(nèi)核完成的功能是:多任務(wù)內(nèi)核完成的功能是:實(shí)時(shí)調(diào)度,任務(wù)間通信及互斥實(shí)時(shí)調(diào)度,任務(wù)間通信及互斥。其它功能則作為系統(tǒng)庫(kù)圍繞在內(nèi)核周?chē)?,它們可根?jù)需要進(jìn)行剪裁。其它功能則作為系統(tǒng)庫(kù)圍繞在內(nèi)核周?chē)?,它們可根?jù)需要進(jìn)行剪裁。VxworksVxworks與非實(shí)時(shí)系統(tǒng)的不同之處在于:與非實(shí)時(shí)系統(tǒng)的不同之處在于: VxworksVxworks的優(yōu)先搶占機(jī)制基于調(diào)度,的優(yōu)先搶占機(jī)制基于調(diào)度, VxworksVxworks對(duì)外部事件的反應(yīng)和處理快,對(duì)外部事件的反應(yīng)和處理快, VxworksVxworks容量小并且可配置(微內(nèi)核結(jié)構(gòu))容量小并且可配置(微內(nèi)核結(jié)構(gòu))VxWorks2022-5-826VxWor
11、ks組件n高性能實(shí)時(shí)內(nèi)核nPOSIX(1003.1b)兼容接口nI/O系統(tǒng)n本地文件系統(tǒng)nC/C+開(kāi)發(fā)支持n共享內(nèi)存n虛擬內(nèi)存n目標(biāo)機(jī)駐留工具2022-5-827VxWorks組件(續(xù))n工具庫(kù)n性能評(píng)估工具n目標(biāo)機(jī)代理n板支持包(BSP)nVxWorks仿真器和邏輯分析儀(WindView)n網(wǎng)絡(luò)組件2022-5-828內(nèi)核(Kernel)nVxWorks的內(nèi)核叫Windn包括n多任務(wù)搶占和優(yōu)先權(quán)調(diào)度多任務(wù)搶占和優(yōu)先權(quán)調(diào)度n任務(wù)間同步和通信n中斷處理nWatchDog定時(shí)器n內(nèi)存管理多任務(wù)內(nèi)核、任務(wù)機(jī)制、任務(wù)間通信和中斷處理機(jī)制是多任務(wù)內(nèi)核、任務(wù)機(jī)制、任務(wù)間通信和中斷處理機(jī)制是VxWorks
12、運(yùn)行運(yùn)行環(huán)境的核心。其中,多任務(wù)和任務(wù)間通信是現(xiàn)代實(shí)時(shí)操作系統(tǒng)的基石。環(huán)境的核心。其中,多任務(wù)和任務(wù)間通信是現(xiàn)代實(shí)時(shí)操作系統(tǒng)的基石。2022-5-829內(nèi)核多任務(wù)n任務(wù)控制塊(TCB)n任務(wù)狀態(tài)轉(zhuǎn)換n任務(wù)調(diào)度n任務(wù)控制n任務(wù)擴(kuò)展nPOSIX任務(wù)調(diào)度接口(略)n任務(wù)錯(cuò)誤狀態(tài):errnon任務(wù)異常處理(Exception Handle)n共享代碼和重入(Shared code and reentrancy)n系統(tǒng)任務(wù)(System Task)2022-5-830內(nèi)核任務(wù)控制塊(TCB)n保存任務(wù)的上下文,一個(gè)任務(wù)的上下文包括:n程序執(zhí)行指針nCPU寄存器和浮點(diǎn)寄存器n動(dòng)態(tài)變量和函數(shù)調(diào)用的堆棧n標(biāo)準(zhǔn)
13、輸入、輸出和錯(cuò)誤的I/O分配n延遲定時(shí)器n時(shí)間片定時(shí)器n內(nèi)核控制結(jié)構(gòu)n信號(hào)處理器n調(diào)試和性能監(jiān)視值2022-5-831內(nèi)核任務(wù)狀態(tài)轉(zhuǎn)換一切就緒,只差一切就緒,只差CPU 等待某種資源等待某種資源處于睡眠狀態(tài),延遲一段時(shí)間處于睡眠狀態(tài),延遲一段時(shí)間被中斷,用于調(diào)試被中斷,用于調(diào)試2022-5-832任務(wù)狀態(tài)隊(duì)列KernelTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBTCBCPU掛起隊(duì)列阻塞隊(duì)列睡眠隊(duì)列就緒隊(duì)列執(zhí)行內(nèi)核負(fù)責(zé)維護(hù)系統(tǒng)中內(nèi)核負(fù)責(zé)維護(hù)系統(tǒng)中所有任務(wù)的當(dāng)前狀態(tài)所有任務(wù)的當(dāng)前狀態(tài)。一個(gè)任務(wù)的狀態(tài)轉(zhuǎn)變是一個(gè)任務(wù)的狀態(tài)轉(zhuǎn)變是 應(yīng)用調(diào)用內(nèi)核調(diào)用的結(jié)果。應(yīng)用調(diào)
14、用內(nèi)核調(diào)用的結(jié)果。2022-5-833內(nèi)核 Wind 任務(wù)調(diào)度n優(yōu)先級(jí)搶占調(diào)度(缺?。﹏優(yōu)先級(jí)高的Task搶占CPUn0255,256個(gè)優(yōu)先級(jí),0級(jí)最高,255級(jí)最低n輪詢(xún)調(diào)度n優(yōu)先級(jí)相同時(shí),多個(gè)Task輪流占用CPUn搶占鎖定n獨(dú)占CPU,其它高優(yōu)先級(jí)的Task不能搶占CPU2022-5-834內(nèi)核 Wind Task調(diào)度基于優(yōu)先級(jí)的搶占調(diào)度基于優(yōu)先級(jí)的搶占調(diào)度基于優(yōu)先級(jí)的搶占調(diào)度基于優(yōu)先級(jí)的搶占調(diào)度與輪轉(zhuǎn)調(diào)度算法結(jié)合與輪轉(zhuǎn)調(diào)度算法結(jié)合2022-5-835內(nèi)核 任務(wù)控制函數(shù)ntaskSpawn():創(chuàng)建并激活一個(gè)task(定位)ntaskInit():初始化一個(gè)新taskntaskActiv
15、ate():激活一個(gè)taskTask ID:32bits,指向task控制塊的指針(ID 0指調(diào)用task)Task Name:代表task的ASCII字符串nTask選項(xiàng)n獲取Task信息nTask刪除和刪除保險(xiǎn)nTask控制:改變task的狀態(tài)低級(jí)操作參數(shù):所有從目標(biāo)機(jī)啟動(dòng)的任務(wù)以字母所有從目標(biāo)機(jī)啟動(dòng)的任務(wù)以字母 t開(kāi)頭,所有從主機(jī)啟動(dòng)的任務(wù)以字母開(kāi)頭,所有從主機(jī)啟動(dòng)的任務(wù)以字母 u開(kāi)頭開(kāi)頭2022-5-836內(nèi)核 任務(wù)擴(kuò)展函數(shù)n為擴(kuò)展與task相關(guān)的功能,Wind提供勾連(hook)功能,在task創(chuàng)建、切換、刪除時(shí),自動(dòng)喚起相關(guān)的勾連例程。n在TCB中有一個(gè)字段存放此擴(kuò)展ntaskCr
16、eateHookAdd()每個(gè)task創(chuàng)建時(shí)增加一個(gè)例程ntaskCreateHookDelete()ntaskSwitchHookAdd()ntaskSwitchHookDelete()ntaskDeleteHookAdd()ntaskDeleteHookDelete()2022-5-837內(nèi)核 任務(wù)錯(cuò)誤狀態(tài):errnonErrno是一個(gè)預(yù)定義的全局變量n多任務(wù)情況下,每個(gè)任務(wù)有自己的errno,作為task上下文的一部分,中斷服務(wù)程序(ISR)也有自己的errnon慣例:程序返回OK(0)表示成功,ERROR(-1)表示失敗;若返回指針,則NULL(0)表示失敗。n返回ERROR或NULL
17、時(shí),通常設(shè)置errno表示具體錯(cuò)誤代碼nErrno總表示最近的錯(cuò)誤狀態(tài),不會(huì)被清除n如果errno在錯(cuò)誤狀態(tài)符號(hào)表(statSymTbl)中有對(duì)應(yīng)字符串,則可以使用printErrno()顯示錯(cuò)誤內(nèi)容(不能用在ISR中)n盡量使用logMsg()來(lái)顯示錯(cuò)誤信息,因?yàn)樗趖ask和ISR下都能工作2022-5-838內(nèi)核 Errno分配nErrno編碼中使用前兩個(gè)字節(jié)表示產(chǎn)生錯(cuò)誤的模塊,后兩個(gè)字節(jié)表示每個(gè)錯(cuò)誤號(hào)nVxWorks系統(tǒng)的模塊號(hào)為1-500,0用于源代碼兼容n應(yīng)用程序的模塊號(hào)為大于500的正數(shù)和所有負(fù)數(shù)errno4bytes模塊號(hào)錯(cuò)誤狀態(tài)號(hào)2022-5-839內(nèi)核用戶(hù)自定義errnon
18、在用戶(hù)頭文件目錄下創(chuàng)建xxModNum.h,定義自己的模塊:#define M_lemLib (512 symbol table components error status table.n重新編譯VxWorksn如果要將錯(cuò)誤代碼加入WindShell,需要將新模塊的錯(cuò)誤字符串加入文件host/resource/tcl/errnoTbl.tcl或者$(HOME)/.wind/windsh.tcl中set M_lemLib expr 512 16set errnoTbl expr $M_lemLib | 1 S_lemLib_LEM_INIT_FAILset errnoTbl expr $ M
19、_lemLib | 2 S_lemLib_LEM_CLOSE_FAILset errnoTbl expr $ M_lemLib | 3 S_lemLib_MSG_TYPE_ERROR2022-5-841內(nèi)核 任務(wù)異常處理nVxWorks的異常處理包負(fù)責(zé)所有異常處理n缺省的異常處理是掛起此task,并保存異常點(diǎn)的task狀態(tài),其它task繼續(xù)運(yùn)行nTornado的開(kāi)發(fā)工具可以查看掛起task的狀態(tài)n也可以通過(guò)信號(hào)(signal)將某硬件或軟件的異常處理與自己的處理程序關(guān)聯(lián)2022-5-842內(nèi)核共享代碼和重入n被多個(gè)task調(diào)用的代碼叫共享代碼,共享代碼必須可重入n若代碼要修改全局/靜態(tài)變量,則
20、不可重入,否則會(huì)引起數(shù)據(jù)混亂n多數(shù)例程可重入,但如果例程foo() 還有一個(gè)對(duì)應(yīng)的foo_r()例程,則foo()是不可重入的nVxWorks使用以下可重入技術(shù):n動(dòng)態(tài)堆棧變量n全局變量和靜態(tài)變量由信號(hào)量守護(hù)n任務(wù)變量Taskone(void) MyFune( ); Tasktwo(void) MyFune( ); MyFune(void) 任務(wù)代碼共享2022-5-843內(nèi)核 VxWorks系統(tǒng)任務(wù)nRoot Task,tUsrRoot是內(nèi)核執(zhí)行的第一個(gè)task,它創(chuàng)建其它task,完成任務(wù)后被停止并刪除n日志Task,tLogTask記錄系統(tǒng)日志消息,而不必執(zhí)行I/On異常Task,tEx
21、cTask支持VxWorks的異常處理n網(wǎng)絡(luò)Task,tNetTask處理網(wǎng)絡(luò)的任務(wù)級(jí)別的功能n目標(biāo)機(jī)代理Task,tWdbTask處理debug請(qǐng)求nTask可選組件ntShell、tRlogind、tTelnetd、tPortmapd2022-5-844任務(wù)間通信Vxworks提供了一套豐富的任務(wù)間通信機(jī)制,包括:n共享數(shù)據(jù)結(jié)構(gòu)/內(nèi)存共享(Shared memory): 簡(jiǎn)單的數(shù)據(jù)共享方法n信號(hào)量(Semaphore) : 用于基本的互斥及同步n消息隊(duì)列(Message Queue)和管道(Pipes) : 用于同一CPU上任務(wù)間消息的傳遞n套接口(Socket)和遠(yuǎn)程程序調(diào)用(RPC):
22、 用于網(wǎng)絡(luò)上任務(wù)間的通信n信號(hào)(Signals) : 用于異常處理2022-5-845任務(wù)間通信共享數(shù)據(jù)結(jié)構(gòu)n共享數(shù)據(jù)結(jié)構(gòu)nVxWorks中所有task存在于一個(gè)線(xiàn)性的地址空間中,所以task之間共享數(shù)據(jù)結(jié)構(gòu)很容易n這些數(shù)據(jù)結(jié)構(gòu)可以是n全局變量n線(xiàn)形緩沖區(qū)n環(huán)形緩沖區(qū)n鏈表n指針2022-5-846任務(wù)間通信共享內(nèi)存Vxworks提供了三種共享內(nèi)存的對(duì)象(shared-memory objects)來(lái)實(shí)現(xiàn)在不同任務(wù)之間和不同CPU的任務(wù)間的高速同步和通信。n共享信號(hào)量共享信號(hào)量(shared semaphoresshared semaphores):): 有二進(jìn)制,記數(shù)型兩種,用于在不同CPU
23、上的任務(wù)間的同步,和對(duì)共享數(shù)據(jù)結(jié)構(gòu)的互斥訪(fǎng)問(wèn)n共享消息隊(duì)列(共享消息隊(duì)列(shared message queuesshared message queues):): 允許多個(gè)處理器上的任務(wù)交換消息n共享內(nèi)存分區(qū)(共享內(nèi)存分區(qū)(shared-memory partitionsshared-memory partitions):): 有系統(tǒng)類(lèi)型和用戶(hù)類(lèi)型可以用于為不同處理器上的任務(wù)分配公共數(shù)據(jù)空間2022-5-847任務(wù)間通信互斥n為避免內(nèi)存訪(fǎng)問(wèn)競(jìng)爭(zhēng),需要內(nèi)存訪(fǎng)問(wèn)互鎖n有許多方法可以實(shí)現(xiàn)資源的訪(fǎng)問(wèn)互斥:n禁止中斷、禁止搶占、信號(hào)量n禁止中斷(最強(qiáng)大,時(shí)間要盡量短)nint lock = intL
24、ock();n . . critical region that cannot be interrupted . nintUnlock (lock); n禁止搶占(可以被中斷)ntaskLock ();n . .critical region that cannot be interrupted . ntaskUnlock (); 2022-5-848任務(wù)間通信信號(hào)量n信號(hào)量(Semaphore)是解決互斥和任務(wù)同步的最主要手段n信號(hào)量提供比中斷禁止和搶占禁止更精細(xì)的互斥n信號(hào)量協(xié)調(diào)任務(wù)的執(zhí)行和外部事件,以實(shí)現(xiàn)任務(wù)同步nWind將信號(hào)量?jī)?yōu)化為三類(lèi),以解決不同類(lèi)型的問(wèn)題:n二進(jìn)制:最快,最通用的
25、信號(hào)量,用于同步和互斥n互斥:專(zhuān)門(mén)解決互斥問(wèn)題而優(yōu)化的二進(jìn)制信號(hào)量:優(yōu)先權(quán)繼承、刪除保護(hù)和遞歸n計(jì)數(shù):類(lèi)似二進(jìn)制,但記錄信號(hào)量發(fā)放的次數(shù),為守護(hù)資源的多個(gè)實(shí)例而優(yōu)化nPOSIX信號(hào)量(略)2022-5-849任務(wù)間通信消息隊(duì)列n任何task或者ISR都可以向消息隊(duì)列中放入消息,多個(gè)task可以向同一個(gè)消息隊(duì)列中發(fā)送消息或者從其中接收消息n兩個(gè)task之間的雙向通信,通常需要兩個(gè)消息隊(duì)列,每個(gè)方向一個(gè)n消息隊(duì)列中的消息個(gè)數(shù)和每個(gè)消息的長(zhǎng)度都是可變的nVxWorks支持兩種消息隊(duì)列庫(kù):nWind QueuenPOSIX Queuen超時(shí)n優(yōu)先級(jí)2022-5-850任務(wù)間通信管道(Pipes)n管道
26、是虛擬的I/O設(shè)備nTask使用標(biāo)準(zhǔn)的I/O例程操作管道nOpen, read, write, ioctln管道支持select函數(shù)2022-5-851任務(wù)間通信 Task網(wǎng)絡(luò)通信nSocketsn支持TCP/UDPn與BSD 4.4 UNIX兼容n遠(yuǎn)端過(guò)程調(diào)用(RPC)nRPC允許一個(gè)機(jī)器上的進(jìn)程調(diào)用同一個(gè)機(jī)器或者別的機(jī)器上運(yùn)行的過(guò)程nRPC內(nèi)部使用socket作為底層通信手段2022-5-852任務(wù)間通信信號(hào)(Signal)n信號(hào)可以異步地改變task的執(zhí)行流程n任何task或ISR都可以向某個(gè)task發(fā)送一個(gè)信號(hào)n收到信號(hào)的task立即掛起,下次被調(diào)度時(shí)運(yùn)行信號(hào)處理例程n信號(hào)處理例程使用
27、接收task的上下文和堆棧n信號(hào)處理例程應(yīng)當(dāng)作ISR來(lái)對(duì)待n即使接收task被阻塞,依然能夠喚醒信號(hào)處理例程n信號(hào)更適用于錯(cuò)誤或異常處理,而不是一般的Task通信nWind支持兩種信號(hào)接口:nUNIX BSD風(fēng)格、POSIX兼容2022-5-853POSIX兼容nPOSIX:the Portable Operation System InterfacenISO/IEEE制定的一組接口,以支持應(yīng)用程序在不同操作系統(tǒng)上的源代碼的移植,使用這些接口有助于將軟件從一個(gè)操作系統(tǒng)移植到另一個(gè)操作系統(tǒng)。n實(shí)時(shí)操作系統(tǒng)對(duì)應(yīng)的POSIX接口標(biāo)準(zhǔn)為1003.1b(原來(lái)的1003.4),VxWorks幾乎都支持,重
28、要包括:n異步I/On信號(hào)量n消息隊(duì)列n內(nèi)存管理n排隊(duì)信號(hào)n調(diào)度n時(shí)鐘和定時(shí)器2022-5-854POSIX接口nVxWorks Wind內(nèi)核包括: POSIX接口和專(zhuān)為VxWorks設(shè)計(jì)的接口,對(duì)應(yīng)兩種不同調(diào)度。nPOSIX調(diào)度基于進(jìn)程(不可直接訪(fǎng)問(wèn)內(nèi)存,父子關(guān)系)基于FIFO,優(yōu)先數(shù)越高,優(yōu)先級(jí)越高nWind調(diào)度基于任務(wù)(可直接訪(fǎng)問(wèn)內(nèi)存)基于優(yōu)先級(jí)的搶占式調(diào)度,優(yōu)先數(shù)越低,優(yōu)先級(jí)越高nPOSIX時(shí)鐘和定時(shí)器,支持多個(gè)虛擬時(shí)鐘nPOSIX內(nèi)存上鎖接口,支持分頁(yè)和交換技術(shù)2022-5-855中斷服務(wù)代碼(ISR)n為盡快響應(yīng)中斷請(qǐng)求,中斷服務(wù)例程在task上下文以外的特別的上下文中運(yùn)行,因而喚
29、醒ISR,不需要切換任務(wù)上下文n使用intConnect(),可以將C函數(shù)與任何中斷連接起來(lái)n有些結(jié)構(gòu)支持獨(dú)立的中斷堆棧,有些不支持,由BSP決定nISR的特別限制(沒(méi)有TCB):nISR不能調(diào)用可能使自己被阻塞的例程nISR不能分配和釋放內(nèi)存,或調(diào)用包含分配和釋放內(nèi)存的函數(shù)nISR不能通過(guò)I/O訪(fǎng)問(wèn)設(shè)備,因?yàn)榭赡茏枞鹡ISR使用logMsg()來(lái)向控制臺(tái)(console)打印消息nISR不能使用浮點(diǎn)協(xié)處理器nISR可以使用所有VxWorks的工具庫(kù),支持errno2022-5-856中斷服務(wù)代碼nISR出現(xiàn)異常時(shí)無(wú)法掛起,VxWorks將異常描述存放到低端內(nèi)存,然后重新啟動(dòng)系統(tǒng);VxWork
30、s boot ROM測(cè)試低端內(nèi)存,并將異常描述打印到控制臺(tái)上n可以為某些事件預(yù)留最高級(jí)別的中斷,實(shí)現(xiàn)0時(shí)延響應(yīng)nISR到Task的通信n共享內(nèi)存和環(huán)形緩沖區(qū)n信號(hào)量(ISR只能釋放信號(hào)量)n消息隊(duì)列(使用NO_WAIT參數(shù))n管道(只能write)n信號(hào)(ISR用信號(hào)通知Task)2022-5-857WatchDog定時(shí)器nVxWorks提供Watchdog Timer機(jī)制,允許任何C函數(shù)與一個(gè)特定的時(shí)間延遲相聯(lián)系。通常,作為系統(tǒng)中斷服務(wù)程序的一部分來(lái)維護(hù)。n利用Watchdog來(lái)處理任務(wù)時(shí)限vwdCreate() 分配并初始化一個(gè)watchdog定時(shí)器vwdDelete() 終止并刪除一個(gè)w
31、atchdog定時(shí)器vwdStart() 啟動(dòng)一個(gè)watchdog定時(shí)器vwdCancel() 取消一個(gè)正在計(jì)時(shí)的watchdog2022-5-858內(nèi) 容n網(wǎng)絡(luò)產(chǎn)品實(shí)現(xiàn)方法的演進(jìn)n實(shí)時(shí)系統(tǒng)nVxWorks介紹基本定義內(nèi)核(Wind)任務(wù)間通信POSIX、ISR、WatchdogI/O系統(tǒng)及其他nTornado開(kāi)發(fā)環(huán)境介紹nBSPn設(shè)備驅(qū)動(dòng)2022-5-859VxWorks的I/O系統(tǒng)nVxWorks的I/O系統(tǒng)為各種設(shè)備提供簡(jiǎn)單的、統(tǒng)一的、與設(shè)備無(wú)關(guān)的接口,包括:n面向字符的設(shè)備,如終端n隨機(jī)訪(fǎng)問(wèn)塊設(shè)備,如磁盤(pán)n虛擬設(shè)備,如task間的管道和socketn監(jiān)視和控制設(shè)備,如數(shù)字/模擬I/O設(shè)
32、備n訪(fǎng)問(wèn)遠(yuǎn)端設(shè)備的網(wǎng)絡(luò)設(shè)備nVxWorks為基本I/O和有緩沖區(qū)I/O提供標(biāo)準(zhǔn)C庫(kù)n基本I/O庫(kù)與UNIX兼容;有緩沖區(qū)I/O庫(kù)與ANSI C兼容nVxWorks的I/O系統(tǒng)設(shè)計(jì)使之比大多數(shù)I/O系統(tǒng)更快更靈活,這對(duì)實(shí)時(shí)系統(tǒng)很重要2022-5-860VxWorks的I/O系統(tǒng)2022-5-861文件、設(shè)備及驅(qū)動(dòng)n在VxWorks中,應(yīng)用程序通過(guò)打開(kāi)文件來(lái)訪(fǎng)問(wèn)I/O設(shè)備n文件指下面兩種事物之一:n未結(jié)構(gòu)化的“原始”設(shè)備,如串行通信通道或者任務(wù)間管道n位于一個(gè)結(jié)構(gòu)化的、隨機(jī)訪(fǎng)問(wèn)的、包含文件系統(tǒng)的設(shè)備上的邏輯文件nI/O設(shè)備有兩個(gè)級(jí)別:基本I/O和有緩沖區(qū)I/On文件名和缺省設(shè)備:n/usrNFS網(wǎng)
33、絡(luò)設(shè)備nHost:Non-NFS網(wǎng)絡(luò)設(shè)備nDev:dosFs文件系統(tǒng)設(shè)備2022-5-862基本I/On基本I/O在VxWorks中是最低級(jí)的I/O,其接口與標(biāo)準(zhǔn)C庫(kù)的I/O原語(yǔ)兼容ncreat() 創(chuàng)建一個(gè)文件nremove() 刪除一個(gè)文件nopen() 打開(kāi)一個(gè)文件(也可創(chuàng)建一個(gè)文件) nclose() 關(guān)閉一個(gè)文件nread() 讀一個(gè)已經(jīng)創(chuàng)建或打開(kāi)的文件nwrite() 寫(xiě)一個(gè)已經(jīng)創(chuàng)建或打開(kāi)的文件nftruncate () 將一個(gè)文件切割成指定大小nioctl() 對(duì)文件或設(shè)備執(zhí)行特定控制功能n在基本I/O級(jí)別,文件用文件描述字(fd)指示,它是一個(gè)整數(shù),在creat()或open(
34、)時(shí)返回nFd不用后應(yīng)及時(shí)關(guān)閉,以節(jié)約資源2022-5-863標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤n下面的文件描述字(fd)保留作特殊用途:n0 = 標(biāo)準(zhǔn)輸入 n1 = 標(biāo)準(zhǔn)輸出n2 = 標(biāo)準(zhǔn)錯(cuò)誤輸出n它們不會(huì)由create( )返回,但可以重定向到其它fdn系統(tǒng)缺省情況下將標(biāo)準(zhǔn)fd重定向到控制臺(tái),任務(wù)缺省情況下使用全局重定向的定義n它們可以被全局重定向:nioGlobalStdSet (stdFd, fileFd);n每個(gè)任務(wù)的重定向?qū)⒏采w全局定義nioTaskStdSet (0, stdFd, fileFd);2022-5-864ioctl( )n為了運(yùn)行某些不適合于其它基本I/O的I/O函數(shù),使
35、用ioctl( )設(shè)置或查詢(xún)一些屬性,譬如:n當(dāng)前設(shè)備可輸入多少字節(jié)n設(shè)置設(shè)備的特定選項(xiàng)n獲取某個(gè)文件系統(tǒng)的信息n。nIoctl( )的參數(shù)是fd、指示請(qǐng)求函數(shù)的代碼、和一個(gè)函數(shù)需要的參數(shù):nresult = ioctl (fd, function, arg); n將一個(gè)tty設(shè)備的數(shù)據(jù)波特率設(shè)為9600的例子:nstatus = ioctl (fd, FIOBAUDRATE, 9600); 2022-5-865等待在多個(gè)fd上的select( )n將任務(wù)掛起于多個(gè)文件描述字或者超時(shí)后返回n與Unix和Windows兼容nselectLib提供兩種支持n任務(wù)級(jí)別支持:任務(wù)等待多個(gè)設(shè)備激活n設(shè)備
36、驅(qū)動(dòng)支持:等待設(shè)備I/O的同時(shí)檢測(cè)掛起的任務(wù)2022-5-866有緩存的I/O:Stdion低級(jí)I/O調(diào)用會(huì)帶來(lái)一些開(kāi)銷(xiāo),為提高I/O訪(fǎng)問(wèn)的靈活性和效率VxWorks提供了有緩存的I/O機(jī)制nStdio的I/O函數(shù)提供透明的緩存機(jī)制,提高訪(fǎng)問(wèn)效率nFILE *fp;nfp = fopen (/usr/foo, r); n標(biāo)準(zhǔn)輸入、輸出、和出錯(cuò)nStdinnStdoutnStderr2022-5-867其它格式化I/On特殊情況: nprintf( ), sprintf( ), and sscanf( )屬于屬于fioLib,沒(méi)有緩存,沒(méi)有緩存n附加函數(shù): nprintErr( ) and fd
37、printf( )n消息日志n提供日志功能n避免當(dāng)前任務(wù)訪(fǎng)問(wèn)I/On可以重定向到其它I/O2022-5-868異步輸入輸出n異步輸入輸出(AIO):讓一般內(nèi)部處理和I/O操作同步進(jìn)行n提高任務(wù)的效率nAIO的例程(見(jiàn)參考手冊(cè))nAIO控制塊nAIO的使用2022-5-869本地文件系統(tǒng)nVxWorks包括多種使用塊設(shè)備(磁盤(pán))的本地文件系統(tǒng)nVxWorks的I/O結(jié)構(gòu)使VxWorks可以同時(shí)有多種文件系統(tǒng):nMS-DOS兼容文件系統(tǒng):dosFsn功能強(qiáng)大nRT-11兼容文件系統(tǒng):rt11Fsn無(wú)分層文件組織結(jié)構(gòu),文件連續(xù)n原始磁盤(pán)文件系統(tǒng):rawFsn整個(gè)磁盤(pán)作為一個(gè)文件nSCSI序列文件系統(tǒng)
38、:tapeFsn磁帶的一卷作為一個(gè)文件nCD-ROM文件系統(tǒng):cdromFsnISO 96602022-5-870虛擬內(nèi)存n虛擬內(nèi)存支持有內(nèi)存管理單元(MMU)的目標(biāo)板2022-5-871Tornado (1)Tornado提供了提供了Vxworks系統(tǒng)開(kāi)發(fā)的集成開(kāi)發(fā)環(huán)境系統(tǒng)開(kāi)發(fā)的集成開(kāi)發(fā)環(huán)境,其,其中中Tornado源代碼編輯器源代碼編輯器包括下列特性包括下列特性: :標(biāo)準(zhǔn)文本控制能力標(biāo)準(zhǔn)文本控制能力C和和C+ 語(yǔ)法元素用不同顏色語(yǔ)法元素用不同顏色調(diào)制集成:編輯窗口跟蹤代碼的執(zhí)行調(diào)制集成:編輯窗口跟蹤代碼的執(zhí)行 編譯集成:項(xiàng)目管理將編譯警告和編譯錯(cuò)誤編譯集成:項(xiàng)目管理將編譯警告和編譯錯(cuò)誤 直
39、接和編輯窗口中的相應(yīng)代碼對(duì)應(yīng)起直接和編輯窗口中的相應(yīng)代碼對(duì)應(yīng)起來(lái)。來(lái)。2022-5-872Tornado (2)nTornado集成開(kāi)發(fā)環(huán)境由以下幾個(gè)部分組成:WindSHCrossWindBrowserWindCodigEditorTargetServer應(yīng)用程序VxWorksTargetAgent目標(biāo)系統(tǒng)Tornado開(kāi)發(fā)環(huán)境(PC)2022-5-873Vxworks/Tornado開(kāi)發(fā)方式目標(biāo)CPU: Vxworks 在其上運(yùn)行 的一個(gè)單板計(jì)算機(jī);Tornado PC主機(jī):有一根串行線(xiàn)與目標(biāo)機(jī)相連(初始化時(shí)主機(jī)作為終 端用),Vxworks核二進(jìn)制文件駐留在其盤(pán)上,核 的下載及運(yùn)行Tor
40、nado 工具通過(guò)以太網(wǎng)口進(jìn)行。VxWorks目標(biāo)板Tornado主機(jī)RS232EthernetAGENTSERVER2022-5-874C+ 開(kāi)發(fā)支持nTornado自帶GNU C+編譯器nTornado包括最新版本的iostream庫(kù)和標(biāo)準(zhǔn)模板庫(kù)的SGI實(shí)現(xiàn)nTornado的交互開(kāi)發(fā)工具如Debugger、Shell等都支持C+nTornado還提供Wind Foundation Classes:nVxWorks Wrapper Class library nTools.h+ library from Rogue Wave 2022-5-875目標(biāo)機(jī)駐留工具n除了駐留在主機(jī)中的工具外,部分
41、工具駐留在目標(biāo)機(jī)中:nTarget-resident shellnSymbal tablenModule loader/unloader2022-5-876工具庫(kù)n中斷處理支持:支持硬件中斷和軟件中斷nWatchDog定時(shí)器n消息日志:記錄出錯(cuò)或狀態(tài)消息n內(nèi)存分配:可管理多個(gè)獨(dú)立的內(nèi)存池n字符串格式化和掃描:printf(), scanf()等n線(xiàn)形和環(huán)形緩沖區(qū)處理:可同時(shí)訪(fǎng)問(wèn)FIFO而不用互鎖n鏈表操作:lstLib包含創(chuàng)建和處理雙向鏈表的全集nASNI C庫(kù)2022-5-877性能評(píng)估n執(zhí)行計(jì)時(shí)器(Execution Timer):測(cè)量程序運(yùn)行時(shí)間nSpy工具:提供每個(gè)task使用CPU的
42、信息n占用CPU的時(shí)間n中斷占用的時(shí)間n空閑時(shí)間nWindView提供更強(qiáng)大的監(jiān)視功能2022-5-878VxWorks仿真器(VxSim)nVxWorks仿真器是一個(gè)模仿VxWorks目標(biāo)機(jī)的程序,作為原型和測(cè)試環(huán)境n可以在一個(gè)主機(jī)上運(yùn)行多個(gè)仿真器n不涉及到硬件驅(qū)動(dòng)2022-5-879Tornado開(kāi)發(fā)環(huán)境2022-5-880Tonado開(kāi)發(fā)環(huán)境(續(xù))2022-5-881Tornado開(kāi)發(fā)環(huán)境(續(xù))2022-5-882VxWorks操作系統(tǒng)組成SCSI ControllerSerial ControllerClock TimerEthernet ControllerHardwareSCSI
43、DriverBSPNetwork DriverHardware-Dependent SoftwareI/O SystemsWind KernelVxWorks LibrariesTCP/IPHardware-Independent SoftwareFile systemTool-Applications抽象層固件2022-5-883板支持包(BSP)n為各種目標(biāo)板的硬件功能提供了統(tǒng)一的軟件接口n它們包括:n硬件初始化n中斷處理和產(chǎn)生n硬件時(shí)鐘和定時(shí)器管理n內(nèi)存映射和分配nBSP還包括boot Rom和其它啟動(dòng)機(jī)制nsysLib和sysALib庫(kù)是VxWorks可移植的核心2022-5-884
44、CPU 上電復(fù)位 基本配置初始化 ROM 拷貝到 RAM 并跳到 RAM 入口 硬件初始化 包括通信口 初始化 Vxworks 核 啟動(dòng) Vxworks 核 重新執(zhí)行目標(biāo)機(jī) 的硬件初始化 執(zhí)行用戶(hù)程序 Vxworks操作系統(tǒng)將一切與硬件有關(guān)操作系統(tǒng)將一切與硬件有關(guān)的功能模塊都放在的功能模塊都放在BSP庫(kù)中。該庫(kù)中。該BSP庫(kù)是硬庫(kù)是硬件與軟件的接口,處理硬件的初始化、中件與軟件的接口,處理硬件的初始化、中斷處理與產(chǎn)生、硬件時(shí)鐘與定時(shí)管理、局?jǐn)嗵幚砼c產(chǎn)生、硬件時(shí)鐘與定時(shí)管理、局部和總線(xiàn)內(nèi)存空間的映射、內(nèi)存大小定義,部和總線(xiàn)內(nèi)存空間的映射、內(nèi)存大小定義,等等等等。能夠自行啟動(dòng)目標(biāo)機(jī)、初始化目標(biāo)。能
45、夠自行啟動(dòng)目標(biāo)機(jī)、初始化目標(biāo)機(jī)、能夠與機(jī)、能夠與host通信以下載通信以下載Vxworks核、把核、把控制權(quán)交給控制權(quán)交給Vxworks核來(lái)調(diào)用用戶(hù)應(yīng)用程核來(lái)調(diào)用用戶(hù)應(yīng)用程序等功能。序等功能。板支持包(BSP)2022-5-885VxWorks中的設(shè)備nttyDrv Terminal driver nptyDrv Pseudo-terminal drivernpipeDrv Pipe drivernmemDrv Pseudo memory device drivernnfsDrv NFS client drivernnetDrv Network driver for remote file a
46、ccessnramDrv RAM driver for creating a RAM disknscsiLib SCSI interface library n- Other hardware-specific drivers2022-5-886VxWorks與主機(jī)系統(tǒng)的I/O差別n設(shè)備配置:在VxWorks中設(shè)備驅(qū)動(dòng)可以動(dòng)態(tài)安裝和卸載n文件描述字:在Windows和Unix中,fd是進(jìn)程中唯一的;在VxWorks中fd是全局唯一的,標(biāo)準(zhǔn)輸入輸出例外(0,1,2)nI/O控制:Unix和VxWorks中傳給ioctl( )的參數(shù)可能不同n驅(qū)動(dòng)例程:Unix下設(shè)備驅(qū)動(dòng)運(yùn)行于系統(tǒng)模式下,不可搶占;
47、VxWorks下的設(shè)備驅(qū)動(dòng)運(yùn)行于線(xiàn)程模式下,可搶占。2022-5-887內(nèi)部結(jié)構(gòu)n多數(shù)系統(tǒng)的設(shè)備驅(qū)動(dòng)只提供少數(shù)低級(jí)I/O例程,如輸入、輸出等;大部分工作由I/O系統(tǒng)完成。n驅(qū)動(dòng)易實(shí)現(xiàn)n設(shè)備動(dòng)作盡可能類(lèi)似n驅(qū)動(dòng)編寫(xiě)人員很難完成I/O系統(tǒng)未提供的協(xié)議nVxWorks中I/O系統(tǒng)用于將用戶(hù)請(qǐng)求交給適當(dāng)?shù)脑O(shè)備驅(qū)動(dòng),每個(gè)驅(qū)動(dòng)根據(jù)自己的情況處理用戶(hù)的I/O請(qǐng)求。nVxWorks提供高級(jí)例程庫(kù)用于設(shè)備驅(qū)動(dòng)的編寫(xiě)n為標(biāo)準(zhǔn)設(shè)備寫(xiě)驅(qū)動(dòng)很容易,編碼量小n可以根據(jù)情況用非標(biāo)準(zhǔn)方式實(shí)現(xiàn)用戶(hù)請(qǐng)求2022-5-888設(shè)備驅(qū)動(dòng)程序n驅(qū)動(dòng)初始化例程xxDrv( )n安裝驅(qū)動(dòng)、分配數(shù)據(jù)結(jié)構(gòu)、連接中斷服務(wù)例程、初始化硬件n設(shè)備創(chuàng)建
48、xxDevCreate( )n給驅(qū)動(dòng)增加一個(gè)設(shè)備,參數(shù)包括緩沖區(qū)大小、設(shè)備地址等n為設(shè)備初始化數(shù)據(jù)結(jié)構(gòu)、信號(hào)量和硬件等n基本I/O功能nxxOpen()nxxRead()nxxWrite()nxxIoctl()n中斷服務(wù)例程xxInterrupt( )2022-5-889驅(qū)動(dòng)安裝nI/O系統(tǒng)維護(hù)一個(gè)驅(qū)動(dòng)表,將用戶(hù)的I/O請(qǐng)求轉(zhuǎn)換為適當(dāng)?shù)尿?qū)動(dòng)程序n使用iosDrvInstall()動(dòng)態(tài)安裝驅(qū)動(dòng),參數(shù)為新驅(qū)動(dòng)的7個(gè)I/O例程的地址,iosDrvInstall()將地址放入驅(qū)動(dòng)表的空閑條目,返回此條目的索引,稱(chēng)為驅(qū)動(dòng)號(hào)。n文件系統(tǒng)在驅(qū)動(dòng)表中有自己的條目,它們?cè)谖募到y(tǒng)庫(kù)初始化時(shí)創(chuàng)建。2022-5-8
49、90驅(qū)動(dòng)安裝舉例2022-5-891設(shè) 備n一些驅(qū)動(dòng)可以為某種設(shè)備的多個(gè)實(shí)例服務(wù)n在VxWorks中,數(shù)據(jù)結(jié)構(gòu)設(shè)備頭(DEV_HDR)定義設(shè)備n設(shè)備名n設(shè)備的驅(qū)動(dòng)的編號(hào)(Index)nDEV_HDR保存在駐留內(nèi)存的設(shè)備列表(device_list)中nDEV_HDR是設(shè)備描述字(device descriptor)的開(kāi)始部分,后者包括特定設(shè)備的數(shù)據(jù):n設(shè)備地址n緩沖區(qū)n信號(hào)量n設(shè)備描述字只要以DEV_HDR開(kāi)頭便可,可包含任何與設(shè)備相關(guān)的信息2022-5-892設(shè)備列表和增加設(shè)備n調(diào)用iosDevAdd()動(dòng)態(tài)增加非塊設(shè)備,參數(shù)為新設(shè)備的描述字的地址、設(shè)備名和驅(qū)動(dòng)編號(hào)n驅(qū)動(dòng)程序只需要填寫(xiě)描述字
50、中與設(shè)備相關(guān)信息,不需要填寫(xiě)設(shè)備頭;iosDevAdd()在設(shè)備頭中填入設(shè)備名稱(chēng)和驅(qū)動(dòng)編號(hào),然后加入設(shè)備列表n增加塊設(shè)備需要調(diào)用與此塊設(shè)備文件系統(tǒng)相關(guān)的設(shè)備初始化例程,這個(gè)例程將自動(dòng)調(diào)用iosDevAdd()2022-5-893增加設(shè)備的例子2022-5-894文件描述字n可以同時(shí)對(duì)一個(gè)設(shè)備打開(kāi)多個(gè)fdn一個(gè)設(shè)備的驅(qū)動(dòng)維護(hù)I/O系統(tǒng)設(shè)備信息和與fd相關(guān)的信息(如文件偏移量)n也可以對(duì)一個(gè)非塊設(shè)備打開(kāi)多個(gè)fd,如tty,這些fd沒(méi)有附加信息,所以對(duì)它們的寫(xiě)操作效果相同2022-5-895Fd表n文件用open()或creat()打開(kāi),I/O系統(tǒng)在設(shè)備列表中搜索與文件名最匹配的設(shè)備,找到后用設(shè)備頭中的驅(qū)動(dòng)編
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度環(huán)保科技公司員工工資待遇及環(huán)保業(yè)績(jī)提成合同
- 2025年度高速公路服務(wù)區(qū)停車(chē)場(chǎng)停車(chē)服務(wù)協(xié)議
- 模具開(kāi)發(fā)、生產(chǎn)及國(guó)際市場(chǎng)拓展合作協(xié)議(2025年度)
- 2025年度汽車(chē)過(guò)戶(hù)交易全程免責(zé)承諾書(shū)
- 二零二五年度食品飲料區(qū)域代理加盟協(xié)議范本
- 二零二五年度影視制作與影視衍生品開(kāi)發(fā)合同
- 2025年度租賃協(xié)議原告代理詞:租賃合同履行過(guò)程中的爭(zhēng)議處理
- 二零二五年度租賃房屋租賃保證金管理協(xié)議
- 2025年度環(huán)保糾紛民事調(diào)解協(xié)議書(shū)編制指南
- 二零二五年度知識(shí)產(chǎn)權(quán)法律風(fēng)險(xiǎn)防控與保密協(xié)議
- 審計(jì)部組織架構(gòu)及崗位設(shè)置
- 地下室車(chē)庫(kù)綜合管線(xiàn)施工布置
- 深圳市軌道交通線(xiàn)網(wǎng)規(guī)劃(2016_2035)(草案)
- 采購(gòu)訂單模板
- 四十二式太極劍劍譜
- 巴馬格紡絲控制系統(tǒng)軟件說(shuō)明書(shū)(共46頁(yè))
- 完整解讀2021年《建設(shè)工程抗震管理?xiàng)l例》PPT教學(xué)講座課件
- 肺結(jié)核患者管理ppt課件
- 新版小學(xué)英語(yǔ)PEP四年級(jí)下冊(cè)教材分析(課堂PPT)
- 煤矸石綜合利用項(xiàng)目可行性研究報(bào)告寫(xiě)作范文
- [浙江]10米深基坑鉆孔灌注樁加內(nèi)支撐支護(hù)施工方案(附圖豐富)_secret
評(píng)論
0/150
提交評(píng)論