由于我的主要语言是C ++,并且经常因其硬件功能而受到称赞,因此我决定更多地进入计算机体系结构。当我查看一些内容时,我偶然发现了设备驱动程序。所以,当然,我决定查一查。根据我的理解,设备驱动程序是一个处理特定硬件组件的计算机程序。我也知道内核是一个计算机程序,充当从软件到硬件的桥梁。出于某种原因,我的思想无法区分这两者。谈到Windows平台,有人可以向我解释不同之处并解释他们扮演的不同角色。提前谢谢。
答案 0 :(得分:5)
这些术语定义不明确。但是这里有一些关于这个问题的翻译...
请注意,当你安装Windows(或Linux,MacOS或其他)时,你不只是安装基本操作系统 - 它会相当无聊(至少对于那些不是一个非常好的程序员的人来说)。您还要安装一个用户界面,一个Shell(命令提示符),一个Web浏览器,一个Print-spooler来将内容发送到您的打印机,一堆"有用的"服务流程等。这些是"应用程序"在操作系统之上运行,但它们是大多数人称之为操作系统的重要组成部分" OS"。核心" OS内核"是几兆字节,但典型的操作系统安装是几十千兆字节。
"内核"操作系统是核心,没有操作系统就没有操作系统 - 至少,它处理加载应用程序,在任务之间切换,计时等等。要为特定的硬件制作小型操作系统,我们可以集成"设备驱动程序"对于串口和定时器,例如,直接在OS中 - 定时器可能是十几行代码,一个简单的串行驱动器将是100-200行。但它只能在与其设计的硬件100%兼容的硬件上运行。更改寄存器中一位的含义,它(可能)完全停止工作。
如果我们希望我们的操作系统能够运行一些具有一些可变硬件的东西 - 一台PC就是一个很好的例子,说明如何基本上改变系统中的每个组件,并最终获得相当一致的体验。现在我们要么编写适用于nVidia和AMD / ATI图形的代码(如果我们想要支持所有PC硬件,还需要英特尔和其他一些代码),并且这些代码中有许多不同型号的图形硬件。品牌。网卡(或内置网络),硬盘控制器,CD / DVD驱动器,USB控制器和USB设备等等。
在我们挖掘太深之前,我们需要解释"用户模式"和"内核模式" - 这些是"保护等级"在硬件中 - 用户模式是您运行应用程序时为Windows(以及Linux,QNX,Android,MacOS,iOS等)编写常规C或C ++应用程序时的模式。用户模式提供不同进程之间的安全[假设操作系统正常工作],以及您的"野指针"不会意外地导致您的整个硬盘格式化等等。
内核模式允许"免费访问所有内容",在某种意义上,如果您真的想要,硬件中没有任何内容可以阻止您的代码更改内存映射并读取机器中的任何内存。或者您的网络驱动程序将其数据包数据直接写入显示器,硬盘驱动程序将其数据直接写入Web浏览器历史记录缓冲区等。只有良好的编码和严格遵守海关和准则才能防止此
司机将"注册"本身与内核一起说,"我将处理这种硬件[例如nVidia显卡],所以请告诉我你是否有这种类型 - 或者如果它以后出现(热插拔设备) )&#34 ;.这是通过定义的接口完成的 - 通常根据硬件类型而变化,因此网络驱动程序和硬盘控制器具有不同的接口,当然图形卡的行为也不同于这两种接口。
实际上,通常有两个级别的驱动程序 - "内核驱动程序" (在linux"内核模块")和"服务"在用户模式下运行(所以不能直接访问所有硬件,但必须使用操作系统内核和驱动程序访问实际硬件[可能有一些"漏洞"由OS /内核提供)允许用户模式端访问它需要访问的特定硬件的驱动程序。这个模型用于使驱动程序更安全 - 所以大部分工作都是在用户模式下完成的[操作系统提供了一些安全措施糟糕的代码读/写它实际上不应该访问的东西(例如显示驱动程序写入硬盘缓存)]。驱动程序还有助于保持核心内核的简单性 - 类似于在模块中的模块和函数中编写其他代码的方式 - " main"代码不必知道特定模块的功能。
不同的操作系统对操作系统本身知道的程度以及分离出的数量有不同的模型。在一个极端,你有"微内核",它本质上只是一个任务管理器,一点点的时间保持,这就是它。如果你想阅读文件,你需要安装一个文件系统模块,它本身就是一个小任务"任务",如果你想使用网络,有一个"任务"为此安装,等等。另一方面,你有" monolithic"像Windows和Linux这样的内核,几乎所有东西都内置在内核中 - 至少内核具有打开文件,向网络发送数据包等功能 - 当然还有驱动程序来处理硬盘的实际接口磁盘控制器和网络控制器,但知道文件存在,可以打开,关闭,读取,写入等内核。
就像选择一个政治模式来经营一个国家一样,所有模特都有人说他们最喜欢的一个比其他人好。事实可能并不那么极端。
答案 1 :(得分:3)
如果缩小内核的类型,即。单片内核,微内核,混合内核,exokernel(更像是链接到内核库的应用程序)等,你会看到它们的不同。
例如,在纯单片内核中,设备驱动程序内置于内核中以形成单个实体,而对于更实用的混合内核(如Windows和Linux),驱动程序按需加载,如#34;插件"扩展内核功能。对于微内核,驱动程序在其自己的实体中被视为应用程序(或服务器)。
通常,驱动程序为特定的物理或逻辑设备提供详细的实现,而内核则为驱动程序提供一组接口,并在更高的抽象级别(HAL)中管理它们。
顺便说一句,内核比管理硬件资源做得更多。