日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

應(yīng)用程序、內(nèi)核、驅(qū)動(dòng)的關(guān)系

 own360 2013-09-10

應(yīng)用程序與庫(kù)函數(shù)、內(nèi)核、驅(qū)動(dòng)之間的關(guān)系

應(yīng)用程序、庫(kù)、內(nèi)核、驅(qū)動(dòng)程序的關(guān)系:應(yīng)用程序調(diào)用應(yīng)用程序函數(shù)庫(kù)完成功能、應(yīng)用程序以文件形式訪問各種資源、應(yīng)用程序函數(shù)庫(kù)、部分函數(shù)直接完成功能、部分函數(shù)通過系統(tǒng)調(diào)用。

 由內(nèi)核完成內(nèi)核處理系統(tǒng)調(diào)用。


 調(diào)用設(shè)備驅(qū)動(dòng)程序,設(shè)備驅(qū)動(dòng)直接與硬件通信。

  它們之間的關(guān)系如下圖所示


設(shè)備類型:

常見的設(shè)備有三類:字符設(shè)備、塊設(shè)備、網(wǎng)絡(luò)設(shè)備。

字符設(shè)備:對(duì)字符設(shè)備發(fā)出讀/寫請(qǐng)求時(shí),實(shí)際的硬件I/O操作一般緊接著發(fā)生。

塊設(shè)備:塊設(shè)備與之相反,它利用系統(tǒng)內(nèi)存作為緩沖區(qū)。

網(wǎng)絡(luò)設(shè)備:網(wǎng)絡(luò)設(shè)備是一類特殊的設(shè)備,它不像字符設(shè)備或塊設(shè)備那樣通過對(duì)應(yīng)的設(shè)備文件節(jié)點(diǎn)訪問,也不能直接通過readwrite進(jìn)行數(shù)據(jù)訪問請(qǐng)求。

       

設(shè)備號(hào)

硬件設(shè)備以主設(shè)備號(hào)和從設(shè)備號(hào)區(qū)分。在設(shè)備管理中,除了設(shè)備類型外,內(nèi)核還需要對(duì)被稱為主從設(shè)備號(hào)的參數(shù),才能唯一標(biāo)識(shí)一個(gè)設(shè)備。主設(shè)備號(hào)相同的設(shè)備使用相同的驅(qū)動(dòng)程序,從設(shè)備號(hào)用于區(qū)分具體設(shè)備的實(shí)例。在/dev目錄下使用ll命令(ls -l)可以查看各個(gè)設(shè)備的設(shè)備類型、主從設(shè)備號(hào)等。cat /proc/devices可以查看系統(tǒng)中所有設(shè)備對(duì)應(yīng)的主設(shè)備號(hào)。

 

設(shè)備文件

設(shè)備類型、主從設(shè)備號(hào)是內(nèi)核與設(shè)備驅(qū)動(dòng)程序通信時(shí)使用的,應(yīng)用程序使用設(shè)備文件節(jié)點(diǎn)訪問對(duì)應(yīng)設(shè)備。Linux 2.4引入了設(shè)備文件系統(tǒng)(devfs)所有的設(shè)備文件作為一個(gè)可以掛載的文件系統(tǒng),每個(gè)主從設(shè)備號(hào)確定的設(shè)備都對(duì)應(yīng)一個(gè)文件節(jié)點(diǎn)。每個(gè)設(shè)備文件都有其文件屬性(c代表字符設(shè)備或者b代表塊設(shè)備),都有2個(gè)設(shè)備號(hào):1、主設(shè)備號(hào),用于標(biāo)識(shí)驅(qū)動(dòng)程序;2、從設(shè)備號(hào):用于標(biāo)識(shí)同一驅(qū)動(dòng)程序的不同硬件。設(shè)備文件的主設(shè)備號(hào)必須與設(shè)備驅(qū)動(dòng)程序在登記時(shí)申請(qǐng)的主設(shè)備號(hào)一致。需要注意的是,系統(tǒng)調(diào)用是內(nèi)核與應(yīng)用程序之間的接口,設(shè)備驅(qū)動(dòng)程序是內(nèi)核與硬件之間的接口。

 

驅(qū)動(dòng)程序與應(yīng)用程序的區(qū)別

1、應(yīng)用程序以main開始,驅(qū)動(dòng)程序沒有main,它以一個(gè)模塊初始化函數(shù)作為入口。

2、應(yīng)用程序從頭到尾執(zhí)行一個(gè)任務(wù),驅(qū)動(dòng)程序完成初始化之后不再運(yùn)行,等待系統(tǒng)調(diào)用。

3、應(yīng)用程序可以使用GLIBC等標(biāo)準(zhǔn)C函數(shù)庫(kù),驅(qū)動(dòng)程序不能使用標(biāo)準(zhǔn)C庫(kù)。

 

用戶態(tài)與內(nèi)核態(tài)

系統(tǒng)運(yùn)行時(shí)一般情況下,分用戶態(tài)和內(nèi)核態(tài),這兩種運(yùn)行態(tài)下的數(shù)據(jù)互不可見的。驅(qū)動(dòng)程序是內(nèi)核的一部分,工作在內(nèi)核態(tài),應(yīng)用程序工作在用戶態(tài)。這樣就存在數(shù)據(jù)空間訪問的問題:無(wú)法通過指針直接將二者的數(shù)據(jù)地址進(jìn)行傳遞。問題的解決辦法是:系統(tǒng)提供一系列函數(shù)幫助完成數(shù)據(jù)空間轉(zhuǎn)換:例如,get_user 、put_user 、copy_from_user 、copy_to_user

等函數(shù)。

 

Linux驅(qū)動(dòng)程序功能

驅(qū)動(dòng)程序的一般功能是:對(duì)設(shè)備初始化和釋放、把數(shù)據(jù)從內(nèi)核傳送到硬件和從硬件讀取數(shù)據(jù)、讀取應(yīng)用程序傳送給設(shè)備文件的數(shù)據(jù)和回送應(yīng)用程序請(qǐng)求的數(shù)據(jù)、檢測(cè)和處理設(shè)備出現(xiàn)的錯(cuò)誤等。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多