• 函數(shù)驅(qū)動(dòng)程序:與設(shè)備直接通信的驅(qū)動(dòng)程序稱為 函數(shù)驅(qū)動(dòng)程序篩選器驅(qū)動(dòng)程序:執(zhí)行輔助處理的驅(qū)動(dòng)程序稱為 篩選器驅(qū)動(dòng)程序
  • 某些篩選器驅(qū)動(dòng)程序會(huì)觀察并記錄有關(guān) I/O 請求的信息,但不主動(dòng)參與其中。 例如,某些篩選器驅(qū)動(dòng)程序充當(dāng)驗(yàn)證程序,以確保堆棧中的其他驅(qū)動(dòng)程序正確處理 I/O 請求。
  • 我們可以將驅(qū)動(dòng)程序的定義細(xì)化為觀察或參與操作系統(tǒng)與設(shè)備之間的通信的任何軟件組件。

    軟件驅(qū)動(dòng)程序

    我們的擴(kuò)展定義相當(dāng)準(zhǔn)確,但仍不完整,因?yàn)槟承?qū)動(dòng)程序根本不與任何硬件設(shè)備相關(guān)聯(lián)。

    例如,如果需要編寫訪問核心操作系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的工具,可以將該工具拆分為兩個(gè)組件。 第一個(gè)組件在用戶模式下運(yùn)行且提供用戶界面。 第二個(gè)組件在內(nèi)核模式下運(yùn)行,并訪問核心操作系統(tǒng)數(shù)據(jù)。 在用戶模式下運(yùn)行的組件稱為應(yīng)用程序,在內(nèi)核模式下運(yùn)行的組件稱為“軟件驅(qū)動(dòng)程序” 。 軟件驅(qū)動(dòng)程序不與硬件設(shè)備關(guān)聯(lián)。

    此圖說明了與內(nèi)核模式軟件驅(qū)動(dòng)程序通信的用戶模式應(yīng)用程序。

    描述應(yīng)用程序與軟件驅(qū)動(dòng)程序之間的關(guān)系的關(guān)系圖。軟件驅(qū)動(dòng)程序始終在內(nèi)核模式下運(yùn)行。 它們主要用于訪問僅在內(nèi)核模式下可用的受保護(hù)數(shù)據(jù)。 但是,并非所有設(shè)備驅(qū)動(dòng)程序都需要訪問內(nèi)核模式數(shù)據(jù)和資源,因此某些設(shè)備驅(qū)動(dòng)程序在用戶模式下運(yùn)行。

    總線驅(qū)動(dòng)程序

    另一種類型的驅(qū)動(dòng)程序是 總線驅(qū)動(dòng)程序。 若要了解總線驅(qū)動(dòng)程序,需要了解設(shè)備節(jié)點(diǎn)和設(shè)備樹。

    有關(guān)函數(shù)驅(qū)動(dòng)程序的詳細(xì)信息

    到目前為止,我們的解釋過于簡化 函數(shù)驅(qū)動(dòng)程序的定義。 我們指出,設(shè)備的函數(shù)驅(qū)動(dòng)程序是堆棧中直接與設(shè)備通信的一個(gè)驅(qū)動(dòng)程序。 對于直接連接到外圍組件互連 (PCI) 總線的設(shè)備來說,這是正確的。 PCI 設(shè)備的函數(shù)驅(qū)動(dòng)程序會(huì)獲取映射到設(shè)備上的端口和內(nèi)存資源的地址。 函數(shù)驅(qū)動(dòng)程序通過寫入這些地址直接與設(shè)備通信。

    但是,在許多情況下,設(shè)備無法直接連接到 PCI 總線。 相反,設(shè)備會(huì)連接到連接到 PCI 總線的主機(jī)總線適配器。 例如,USB toaster 連接到主機(jī)總線適配器(稱為 USB 主控制器),該適配器連接到 PCI 總線。 USB toaster 具有函數(shù)驅(qū)動(dòng)程序,USB 主控制器也具有函數(shù)驅(qū)動(dòng)程序。 toaster 的函數(shù)驅(qū)動(dòng)程序通過向 USB 主控制器的函數(shù)驅(qū)動(dòng)程序發(fā)送請求來與 toaster 間接通信。 然后,USB 主控制器的函數(shù)驅(qū)動(dòng)程序與 USB 主控制器硬件直接通信,該硬件與 toaster 通信。

    演示 USB 烤箱驅(qū)動(dòng)程序、USB 主機(jī)控制器驅(qū)動(dòng)程序和 PCI 總線之間交互的關(guān)系圖。## 參考資料

    什么是驅(qū)動(dòng)程序?

    一站搜索、試用、比較全球API!
    冪簡集成已收錄 6161種API!
    試用API,一次比較多個(gè)渠道