2015-07-12 55 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设备),因此它有资格称为设备驱动程序,而不是无法在内核模式下运行的用户应用程序。*** –

相关问题