1

题主这个问题其实暴露了:很多人并不理解“驱动程序”这个概念。

楼下答主的回答,也是不正确的。

首先上结论:CPU没有什么驱动程序一说。

1. 什么是驱动程序?

首先,驱动程序,仍然是一个程序,只不过它是用来“驱动”的。那么它究竟“驱动”的是什么呢?答案其实很简单,驱动程序其实驱动的就是外部设备——比如:键盘,鼠标,网卡,显卡,声卡,……

很多朋友看到这里,可能会问:貌似现在普通用户都没有和驱动程序打过交道,都是直接安装好操作系统就直接OK了,都没有单独安装过什么键盘驱动、鼠标驱动、网卡驱动、显卡驱动、声卡驱动啊?

这里其实暗含了一个问题:

2. 驱动程序与操作系统的关系是什么?

普通用户并不直接和驱动程序打交道,而是和操作系统打交道。你可以,把普通用户想象成住着大别墅的富豪一家人,把操作系统想象成一个事无巨细的大管家,富豪一家人享受着大管家提供的各项服务,而不需要亲自去操心这些服务是怎么实现的。

比方说,洗衣、熨烫等服务,有可能是专门的洗衣店来完成的,大管家只需要和洗衣店约定好一组接口:洗衣店的地址、联系方式、上门取/送衣服的流程等,那么大管家就可以确保这个服务可以让富豪一家子完美享受到了。在这个场景中,你可以把洗衣店想像成驱动程序,约定好的那组接口可以想象成操作系统与驱动程序交互的接口。

综上所述,操作系统就是用来向用户提供服务的平台,而驱动程序则是相关服务的实际提供者。两者之间通过约定好的接口规范来确保交互的正常运行。

3. 驱动程序与操作系统的交互接口规范是怎样的?

虽然从理论上说,操作系统与驱动程序之间的接口是两者协商的,但是因为通常操作系统的厂商的话语权更大,所以实际情况中,基本上是由操作系统来定义接口规范,驱动程序厂商来根据接口规范来进行开发、将对外部设备硬件的操作适配到这些接口规范中。

因为市面上主流的操作系统并不是一家公司开发的,所以不同的操作系统通常有不同的接口规范

比方说,在Windows平台上,驱动程序的架构和接口规范通常要遵循WDF(Windows Vista/Windows 7之后)、WDM(Windows NT/2000/XP之后)、VxD(Windows 95/98等)。而在Linux平台上,驱动程序的架构和接口规范基本上都是衍生与VFS(虚拟文件系统)。

此外,即使在同一操作系统平台上,不同类型的驱动程序,对应的接口规范也会不一样。

比方说,在Windows平台上,网络驱动程序,遵循的是NDIS规范;而显示驱动,遵循的有DirectX和OpenGL接口规范……

可能会有朋友要问了:前面你不是说Windows的驱动程序都遵循WDF/WDM/VxD这些接口规范吗?怎么这里又来了个NDIS?

简单来说,WDF/WDM/VxD这些是通用架构,而NDIS这些是根据具体的设备类型,在这个通用架构上做了优化、将一些通用操作的代码直接帮你编写好了,节省开发者的精力和时间。

4. 为什么说CPU没有驱动程序的概念?

前面已经说了,驱动设备是针对外部设备的,而CPU不是外部设备,所以不存在驱动程序的概念。

那么CPU是怎么运行的呢?如笔者在专栏《华为方舟编译器源代码》的第一章《CPU的本质是什么?》中所揭示的:CPU本质就是一堆“开关”,它是利用物理规律来实现“开”、“合”状态,从而来与二进制的1和0对应的。换言之,CPU的这堆“开关”通过“开”、“合”状态,就模拟了一堆二进制指令。

5. CPU与驱动程序的关系是什么?

正如前面所介绍的,与驱动程序直接打交道的是操作系统,CPU并不直接和驱动程序相关。

通常来讲,操作系统厂商,需要研究对应的CPU架构,来充分发挥对应CPU的性能和特性。

比方说,当年微软为了充分发挥386芯片的虚拟内存和多任务管理等能力,研发了Windows NT操作系统。

再比方说,线程调度等多任务协同工作,是操作系统利用CPU的中断机制和相关的“门”机制实现的。基于这些原理,加上DMA(直接存储访问)控制器的加持,就可以实现DMA的大规模数据传输,在这个场景中:

操作系统只需要告诉CPU:“有一大坨数据要通过DMA传输了,它们的位置是XXX,请求放行”,然后CPU回答操作系统:“朕准了!总线放行,搞完了记得通知朕,朕好收回总线权利”,接着操作系统告诉DMA控制器:“兄弟,可以开搞了!”DMA控制器就开始噼里啪啦和外部设备一起配合“搬砖”了……

最佳贡献者
2

我们现在使用的计算机系统由硬件和软件两部分组成。比如主板CPU内存,这些看得见摸得找的都属于硬件。我们看不见,摸不着的则被称为软件,他们执行一些逻辑操作,比如操作系统,应用软件,驱动程序。

所以驱动程序实质上也属于软件的范畴,只要是软件那些代码,最终都是由CPU这个硬件翻译并执行的。驱动程序的编写都支持相应的一套标准,而不能胡乱的编写,否则CPU无法识别。比如我们现在使用的计算机是基于X86的。我们使用的WINDOWS就属于操作系统,它的作用是管理计算机的硬件资源,操作系统通过驱动程序来使用一些设备,比如显卡鼠标键盘,打印机等,如果没有驱动程序,这些东西可以使用吗?

答案是当然可以使用,不过这就需要定制,专门的为一些平台去编写专门的驱动程序,那样的话,计算机就是各自为政,相互的不兼容,A公司的显卡不能用于b公司的电脑。我们现在执行的驱动程序都是经过很多年标准化以后的,所以你可以发现它可以在因特CPU的电脑使用,也可以在amdcpu在电脑上使用。

CPU作为一个可以看得见的硬件实体,驱动它的软件或者说指令集,其实是已经通过电路刻在了CPU内部,只要通电CPU就可以执行这样的指令,也就是说,CPU中的指令集或者叫驱动程序是固定的,当然,虽然是CPU中的是固定的,但实际执行的时候还会通过一个微码的映射,所以你会发现有时候CPU的漏洞也可以通过打补丁的形式来解决。

3

你这话问的,CPU驱动程序当然是CPU执行啊。所有的程序和指令都是CPU执行的。要说有区别,那只是有些程序是人工触发的,比如office;有些程序是自动执行的,比如操作系统。

4

操作系统

5

你非要说cpu的驱动程序,也有,它叫binary switching system...基于not,and,or规则组合加上transistor的threshold voltage导致的pn junction现象...从而实现各种逻辑门(比如nand gate)...从而实现adder,mux,decoder...从而驱动你的的mov,add,sub,jump...

最后,其实说这么多,cpu的驱动就一个字—— 电 ,你看到这,你肯定说:你这不是废话,嗯,但你敢说不是电在驱动cpu吗?

那你又会问了,为啥电子总想从n-type 跳到 p-type去呢?这又是谁执行的呢? 谁定义的呢?这个我还真不知道,我想应该是神吧,他老人家就觉得n该丢电子,p该拿电子吧... 就好比你问墒增是谁执行的,呵呵,我要知道我就不在地球混了,我去找智子玩了

6

为活命,你要饮水、吃五谷杂粮,馒头你不吃?

7

硬件的连接电路实现的。

8

CPU是有自身的指令系统的,比如做乘法的步骤。这个叫固件,写在CPU的自带内存中。

你的回答

单击“发布您的答案”,即表示您同意我们的服务条款