超聲波探傷系統(tǒng)驅(qū)動程序的作用
超聲波探傷系統(tǒng)驅(qū)動程序的分類
探傷系統(tǒng)將設(shè)備分為三種基本類型:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備,每個模塊一般為其中的某一類,但也可以構(gòu)造一個大的模塊并在其中實現(xiàn)不同類型的設(shè)備驅(qū)動。為了提高設(shè)備驅(qū)動的伸縮性和可擴展性,最好為每個新功能創(chuàng)建一個單獨的模塊。
1. 字符設(shè)備:字符設(shè)備像字節(jié)流一樣被訪問,在存取時一般沒有緩存,在對字符設(shè)備發(fā)出讀/寫請求時,硬件設(shè)備 I/O 一般會緊接著發(fā)生。字符設(shè)備文件和普通文件的區(qū)別在于,字符設(shè)備只能順序訪問,而普通文件可以隨機訪問。
2. 塊設(shè)備:塊設(shè)備主要用來容納文件系統(tǒng),例如磁盤。從應(yīng)用程序角度來看,塊設(shè)備和字符設(shè)備的訪問方式相同,可以進(jìn)行讀寫并允許一次傳遞任意多字節(jié)的數(shù)據(jù)。但是在內(nèi)核中,塊設(shè)備驅(qū)動程序和字符設(shè)備驅(qū)動程序具有完全不同的接口。塊設(shè)備在系統(tǒng)內(nèi)存中一般有緩沖區(qū),以提高訪問效率。
3. 網(wǎng)絡(luò)設(shè)備:網(wǎng)絡(luò)設(shè)備驅(qū)動程序主要是針對數(shù)據(jù)包的傳輸和接收而設(shè)計,它不需要了解各項事務(wù)如何映射到實際傳送的數(shù)據(jù)包,只負(fù)責(zé)處理數(shù)據(jù)包。內(nèi)核和網(wǎng)絡(luò)設(shè)備驅(qū)動程序之間的通信有專用的一套函數(shù),與內(nèi)核和字符設(shè)備以及塊設(shè)備驅(qū)動程序之間的通信方式完全不同。由于網(wǎng)絡(luò)設(shè)備接口不是面向流的,因此在文件系統(tǒng)中沒有相應(yīng)的節(jié)點,操作系統(tǒng)給網(wǎng)絡(luò)設(shè)備接口分配了唯一的名字。
設(shè)備驅(qū)動程序的概念
系統(tǒng)調(diào)用是操作系統(tǒng)內(nèi)核與應(yīng)用程序之間的接口,設(shè)備驅(qū)動程序則是操作系統(tǒng)內(nèi)核與系統(tǒng)硬件之間的接口。設(shè)備驅(qū)動程序為上層應(yīng)用程序屏蔽了硬件的實現(xiàn)細(xì)節(jié),這樣從應(yīng)用程序角度來看,硬件設(shè)備只是一個設(shè)備文件,應(yīng)用程序可以像操作普通文件一樣對硬件設(shè)備進(jìn)行操作。
設(shè)備驅(qū)動程序是操作系統(tǒng)的一部分,它主要完成以下功能:
1. 如果以模塊化方式動態(tài)加載,則在加載和卸載設(shè)備驅(qū)動時分別完成對設(shè)備的初始化和釋放;如果以靜態(tài)鏈接方式編譯進(jìn)內(nèi)核,則在系統(tǒng)啟動時會完成對設(shè)備的初始化;
2. 完成內(nèi)核與硬件之間的數(shù)據(jù)傳輸,從硬件讀取數(shù)據(jù)到內(nèi)核或者把數(shù)據(jù)從內(nèi)核寫到硬件;
3. 完成用戶空間和內(nèi)核之間的數(shù)據(jù)傳輸,從用戶空間復(fù)制數(shù)據(jù)到內(nèi)核或者把數(shù)據(jù)從內(nèi)核空間傳輸?shù)接脩艨臻g;