驱动程序是操作系统的一部分吗?

fir*_*ant 15 operating-systems drivers

我很难理解操作系统中包含什么,不包含什么。设备驱动程序(例如打印机驱动程序或图形驱动程序)是操作系统的一部分吗?考虑操作系统的定义,我相信驱动程序是操作系统的一部分。

Cla*_*dio 13

是的,驱动程序是操作系统的一部分。它们以与操作系统内核相同的特权级别运行,并且要编写驱动程序,您必须对操作系统内部结构有很多了解。驱动程序的作用是提供硬件的抽象,以便应用程序可以通过 OS API(应用程序编程接口)使用它,而不必知道它的具体细节。在许多情况下,它还允许在许多应用程序之间同时共享同一块硬件。

误导用户认为驱动程序可能不是操作系统的一部分的是,许多供应商为他们与操作系统分开制作的硬件提供驱动程序。事实上,许多驱动程序都作为可加载模块出现,这些模块可以加载然后动态地参与操作系统。一旦不再使用它们,它们就可以与操作系统“断开连接”并继续正常运行。

可加载与否,驱动程序总是特定于它们应该提供给系统的设备,因此虽然它们有时是操作系统的“可选”部分,但它们在操作时确实参与其中。

  • @Luke - 显然你承认 *kernel* 是操作系统的一部分,如果不是整个操作系统。你见过操作系统或内核的**源代码**吗?除非您为 MS 工作或签署保密协议,否则我们永远不会看到 Windows 内核代码。但是 Linux 内核是开源的,所有(非专有)Linux 驱动程序都是内核源代码的一部分。Linux内核源代码*未*分为内核部分和驱动程序部分;源代码树包含核心和驱动程序模块。我希望 MS 以类似的方式处理他们的 Windows 源代码。 (3认同)

Law*_*ceC 5

术语“操作系统”可能意味着很多东西。

虽然在大多数操作系统下,内核是管理和“运行”一切的代码段,并仲裁对硬件的访问,但它通常不能自己做任何有趣的事情——它的工作是为应用程序提供一个框架来运行“在上面”如果它。许多人对操作系统的定义包括构成熟悉的标准化环境的实用程序、外壳程序和程序。

驱动程序依赖于内核,说它们“扩展”它可能是最正确的,就像插件一样。Linux 支持“可加载内核模块”的概念 - 所有设备驱动程序都可以是可加载内核模块。也可以构建一个内核,其中一个或多个这些模块是“内置的”而不是与内核分开的。所以你真的可以在 Linux 下构建一个“无模块”内核,除了你内置的模块之外,它不能支持任何硬件。

我不太熟悉 Windows 的本质,但我相信除了极少数“微型端口”驱动程序外,所有驱动程序都是在启动时加载的外部文件。如果您深入研究在 Windows 上创建服务,似乎驱动程序实际上只是 Windows 下特殊形式的服务。一些程序安装驱动程序以在低级别访问硬件,但不一定驱动设备,这些通常是设备管理器下的“非即插即用”驱动程序。因此,从概念上讲,驱动程序似乎与 Linux 下的可加载内核模块具有相同的功能。

为简单起见,我想说它们是操作系统的一部分,因为它们在没有操作系统的情况下确实无法使用,并且除非操作系统已启动,否则它们没有用,但在任何情况下绘制的线都是相当随意的。