2015-07-12 1132 views
2

我知道用戶應用程序只能在用戶模式下運行,這是爲了系統安全。相反,大多數驅動程序以內核模式運行,以訪問I/O設備。儘管如此,有些驅動程序仍以用戶模式運行,但可以訪問I/O設備。所以我有以下問題。驅動程序和用戶應用程序的主要區別是什麼?用戶應用程序不能像某些驅動程序那樣被允許訪問I/O設備嗎?驅動程序和用戶應用程序的主要區別是什麼?

謝謝。

回答

2

首先,some preview from this link: -

應用程序運行在用戶模式和核心操作系統組件 在內核模式下運行。許多驅動程序以內核模式運行,但某些驅動程序 以用戶模式運行。

當您啓動用戶模式應用程序時,Windows(/任何操作系統)會爲該應用程序創建一個進程 。該過程爲應用程序提供私有的 虛擬地址空間和私有句柄表。因爲 應用程序的虛擬地址空間是私有的,所以一個應用程序不能更改屬於另一個應用程序的數據。

除了是私有的,用戶模式 應用程序的虛擬地址空間也是有限的。在用戶模式下運行的處理器不能訪問爲操作系統保留的虛擬地址 。限制 用戶模式應用程序的虛擬地址空間可防止應用程序改變系統數據並可能損壞關鍵操作系統數據。

在內核模式下運行的所有代碼共享一個虛擬地址 空間。這意味着內核模式驅動程序與其他 驅動程序和操作系統本身沒有隔離。如果內核模式驅動程序 意外地寫入錯誤的虛擬地址,則屬於操作系統或其他驅動程序的數據可能會受到影響。

此外,from this link

軟件驅動程序

有些司機不與任何硬件設備都有關。例如,對於 示例,假設您需要編寫一個可訪問操作系統數據結構的核心工具 ,該工具只能通過在內核模式下運行的代碼 訪問。您可以將該工具分成兩個組件,即 。第一個組件以用戶模式運行,並顯示用戶界面 。第二個組件以內核模式運行,並具有訪問核心操作系統數據的權限。在 用戶模式下運行的組件稱爲應用程序,並且在 內核模式下運行的組件稱爲軟件驅動程序。與硬件設備關聯的軟件驅動程序不是 。

此外,軟件驅動程序()始終以內核模式運行。 用於編寫軟件驅動程序的主要原因是獲得對受保護數據的訪問權限, 僅在內核模式下可用。但設備驅動程序並不總是需要訪問內核模式數據和資源。所以一些設備驅動程序 以用戶模式運行。


驅動程序和用戶應用程序之間的主要區別是什麼?

與海洋船和船之間的差異是相同的。驅動程序取決於硬件和操作系統。它們通常提供任何必要的異步時間相關硬件接口所需的中斷處理。因此,差不多所有人都在用戶模式下運行。然而,正如第二段所述,爲了防止應用程序破壞關鍵OS數據,用戶應用程序必然會在用戶空間中運行。

此外,並非所有驅動程序都直接與設備通信。對於給定的I/O請求(如從設備讀取數據),通常會有多個驅動程序分層堆棧,並參與請求。直接與設備通信的堆棧中的一個驅動程序稱爲功能驅動程序;執行輔助處理的驅動程序稱爲過濾器驅動程序。

不允許用戶訪問I/O設備,如 驅動程序所做的那樣?

應用程序調用操作系統實現的函數,操作系統調用驅動程序實現的函數。驅動程序知道如何與設備硬件通信以獲取數據。驅動程序從設備獲取數據後,會將數據返回給操作系統,然後將其返回給應用程序。

應用程序通過設備驅動程序(而不是OS)提供的API /接口連接到IO設備。操作系統處理大多數硬件/軟件交互。硬件供應商編寫「插件/模塊/驅動程序」,允許操作系統控制其特定的硬件。因此,使用OS提供的接口,您可以編寫應用程序以訪問IO設備。

因此,如果沒有驅動程序的幫助,用戶應用程序無法直接訪問硬件,因爲設備驅動程序是用低級語言編寫的,而硬件,而用戶應用程序是用高級語言編寫的。

此外,check this answer更多關於各種操作系統中的驅動程序地址空間的想法。

+0

是的操作系統調用驅動程序中實現的功能。但是我的意思是有人寫了那個驅動程序(可以直接與I/O設備連接),然後它被添加到操作系統中。那麼驅動程序的作者不能寫一個用戶應用程序,它可以直接連接到I/O設備並損壞系統? – user1289

+0

@ GrigorApoyan - 用戶應用程序不能直接訪問硬件,除非它有權這樣做。用戶應用程序被迫在用戶空間運行(以防止關鍵數據損壞)。 ***如果設備驅動程序寫入程序創建允許低級別訪問的應用程序,那麼它必須在內核空間中運行以訪問硬件(在您的情況下爲IO設備),因此它有資格稱爲設備驅動程序,而不是無法在內核模式下運行的用戶應用程序。*** –

相關問題