Io 驱动程序和用户应用程序之间的主要区别是什么?

Io 驱动程序和用户应用程序之间的主要区别是什么?,io,operating-system,kernel,driver,usermode,Io,Operating System,Kernel,Driver,Usermode,我知道用户应用程序只能在用户模式下运行,这是为了系统安全。相反,大多数驱动程序在内核模式下运行,以访问I/O设备。然而,一些驱动程序在用户模式下运行,但允许访问I/O设备。所以我有一个问题。驱动程序和用户应用程序之间的主要区别是什么?不能像某些驱动程序那样允许用户应用程序访问I/O设备吗 谢谢。首先:- 应用程序以用户模式运行,核心操作系统组件 在内核模式下运行。许多驱动程序在内核模式下运行,但有些驱动程序 在用户模式下运行 启动用户模式应用程序时,Windows(/any OS)会为 应用程序

我知道用户应用程序只能在用户模式下运行,这是为了系统安全。相反,大多数驱动程序在内核模式下运行,以访问I/O设备。然而,一些驱动程序在用户模式下运行,但允许访问I/O设备。所以我有一个问题。驱动程序和用户应用程序之间的主要区别是什么?不能像某些驱动程序那样允许用户应用程序访问I/O设备吗

谢谢。

首先:-

应用程序以用户模式运行,核心操作系统组件 在内核模式下运行。许多驱动程序在内核模式下运行,但有些驱动程序 在用户模式下运行

启动用户模式应用程序时,Windows(/any OS)会为 应用程序。该进程为应用程序提供了一个私有 虚拟地址空间和专用句柄表。因为 应用程序的虚拟地址空间是专用的,一个应用程序不能 更改属于其他应用程序的数据

除了私有之外,用户模式的虚拟地址空间 应用有限。在用户模式下运行的处理器无法访问 为操作系统保留的虚拟地址。限制 用户模式应用程序的虚拟地址空间阻止 应用程序不会改变、可能损坏关键操作系统 系统数据

在内核模式下运行的所有代码共享一个虚拟地址 空间这意味着内核模式驱动程序不会与其他驱动程序隔离 驱动程序和操作系统本身。如果是内核模式驱动程序 意外写入错误的虚拟地址,即属于 操作系统或其他驱动程序可能会受损

而且

软件驱动程序

有些驱动程序根本不与任何硬件设备关联。对于 例如,假设您需要编写一个能够访问core的工具 操作系统数据结构,只能通过代码访问 在内核模式下运行。您可以通过将工具拆分为两部分来完成此操作 组件。第一个组件以用户模式运行,并显示 用户界面。第二个组件以内核模式运行,并具有 访问核心操作系统数据。在中运行的组件 用户模式称为应用程序,而在中运行的组件 内核模式称为软件驱动程序。软件驱动程序不是 与硬件设备相关联

此外,软件驱动程序()始终在内核模式下运行。主要原因 编写软件驱动程序的目的是访问受保护的数据 仅在内核模式下可用。但设备驱动程序并不总是如此 需要访问内核模式数据和资源。所以一些设备驱动程序 在用户模式下运行


驱动程序和用户应用程序之间的主要区别是什么

区别与潜艇和船舶之间的区别相同。驱动程序依赖于硬件且特定于操作系统。它们通常提供任何必要的异步时间相关硬件接口所需的中断处理。因此,几乎它们都在用户模式下运行。然而,如第二段所述,为了防止应用程序损坏关键操作系统数据,用户应用程序必须在用户空间中运行

此外,并非所有驱动程序都直接与设备通信。对于给定的I/O请求(如从设备读取数据),通常有多个驱动程序参与请求,这些驱动程序在堆栈中分层。堆栈中直接与设备通信的一个驱动程序称为函数驱动程序;执行辅助处理的驱动程序称为过滤器驱动程序

不能允许用户应用程序访问某些类型的I/O设备吗 司机怎么办

应用程序调用由操作系统实现的函数,操作系统调用由驱动程序实现的函数。驱动程序知道如何与设备硬件通信以获取数据。驱动程序从设备获取数据后,将数据返回到操作系统,操作系统将数据返回到应用程序

应用程序通过设备驱动程序(而不是操作系统)提供的API/接口连接到IO设备。操作系统处理大多数硬件/软件交互。硬件供应商编写“插件/模块/驱动程序”,允许操作系统控制其特定硬件。因此,使用操作系统提供的接口,您可以编写应用程序来访问IO设备

因此,如果没有驱动程序的帮助,您无法让用户应用程序直接访问硬件,因为访问设备的都是层次结构下的驱动程序,因为设备驱动程序是用可以与硬件通信的低级语言编写的,而用户应用程序是用高级语言编写的


另外,为了更好地了解各种操作系统中的驱动程序地址空间

是,操作系统调用在驱动程序中实现的函数。但我的意思是,有人编写了这个驱动程序(可以直接与I/O设备连接),然后将它添加到操作系统中。那么,该驱动程序的编写者难道不能编写一个用户应用程序,它可能直接连接到I/O设备并损坏系统吗?@GrigorApoyan——一个用户应用程序不能直接访问硬件,除非它有权限这样做。用户应用程序被迫在用户空间中运行(以防止关键数据损坏)。如果设备驱动程序编写器创建了一个允许低级访问的应用程序,那么它必须在内核空间中运行才能访问硬件(在您的情况下是IO设备),因此它有资格被称为设备驱动程序,而不是永远不能在内核模式下运行的用户应用程序。