我知道用户应用程序只能在用户模式下运行,这是为了系统安全。相反,大多数驱动程序在内核模式下运行,以访问I / O设备。然而,某些驱动程序在用户模式下运行,但允许访问I / O设备。所以我有以下问题。驱动程序和用户应用程序之间的主要区别是什么?是否允许用户应用程序访问I / O设备,如某些驱动程序那样?
感谢。
答案 0 :(得分:3)
首先,some preview from this link: -
应用程序在用户模式和核心操作系统组件中运行 在内核模式下运行。许多驱动程序以内核模式运行,但有些驱动程序 以用户模式运行。
启动用户模式应用程序时, Windows(/任何操作系统)会为其创建进程 应用程序。该过程为应用程序提供私有 虚拟地址空间和私有句柄表。因为一个 应用程序的虚拟地址空间是私有的,一个应用程序不能 更改属于另一个应用程序的数据。
除了是私有的,用户模式的虚拟地址空间 申请有限。以用户模式运行的处理器无法访问 为操作系统保留的虚拟地址。限制 用户模式应用程序的虚拟地址空间阻止了 应用程序可以改变并可能损害关键操作 系统数据。
在内核模式下运行的所有代码共享一个虚拟地址 空间。这意味着内核模式驱动程序不会与其他驱动程序隔离 驱动程序和操作系统本身。如果是内核模式驱动程序 意外地写入错误的虚拟地址,属于的数据 操作系统或其他驱动程序可能会受到损害。
软件驱动程序
某些驱动程序根本不与任何硬件设备相关联。对于 例如,假设您需要编写一个可以访问核心的工具 操作系统数据结构,只能通过代码访问 在内核模式下运行。您可以通过将工具拆分为两个来实现 组件。第一个组件以用户模式运行并显示 用户界面。第二个组件在内核模式下运行并具有 访问核心操作系统数据。运行的组件 用户模式称为应用程序,以及运行的组件 内核模式称为软件驱动程序。软件驱动程序不是 与硬件设备相关联。
此外,软件驱动程序()始终以内核模式运行。主要原因 用于编写软件驱动程序是为了访问受保护的数据 仅在内核模式下可用。但设备驱动程序并不总是如此 需要访问内核模式数据和资源。一些设备驱动程序 以用户模式运行。
驱动程序和用户应用程序之间的主要区别是什么?
与海底和船舶之间的差异相同。驱动程序取决于硬件和操作系统。它们通常提供任何必要的异步时间相关硬件接口所需的中断处理。因此, 几乎 所有这些都在用户模式下运行。然而,如第二段所述,为防止应用程序损坏关键操作系统数据,用户应用程序必然会在用户空间中运行。
此外,并非所有驱动程序都直接与设备通信。对于给定的I / O请求(如从设备读取数据),通常有多个驱动程序(分层堆叠)参与请求。堆栈中与设备直接通信的一个驱动程序称为功能驱动程序;执行辅助处理的驱动程序称为过滤器驱动程序。
不允许用户应用程序访问某些I / O设备 司机呢?
应用程序调用操作系统实现的功能,操作系统调用驱动程序实现的功能。驱动程序知道如何与设备硬件通信以获取数据。在驱动程序从设备获取数据后,它会将数据返回给操作系统,然后操作系统将数据返回给应用程序。
应用程序通过设备驱动程序(而不是操作系统)提供的API /接口连接到IO设备。操作系统处理大多数硬件/软件交互。硬件供应商编写"插件/模块/驱动程序"它允许操作系统控制他们的特定硬件。因此,使用操作系统提供的接口,您可以编写应用程序来访问IO设备。
因此,您无法在没有驱动程序帮助的情况下直接访问硬件的用户应用程序,因为它是层次结构下面的所有驱动程序来访问设备,因为设备驱动程序是用低级语言编写的可以与硬件通信,而用户应用程序是用高级语言编写的。
此外,check this answer可以更好地了解各种操作系统中的驱动程序地址空间。