Windows内核--驱动程序和内核(1.6)

驱动程序和内核的关系?

        内核态驱动程序一般是和内核共同属于内核空间,驱动程序有能力访问内核大部分数据结构。内核根据需要,调用驱动程序执行相应的IO操作,如果驱动程序有异常,可以认为内核不稳定。一般情况下发生故障处理,典型的就是崩溃(dump)并重启, Windows的典型行为是蓝屏。

        驱动程序对于内核来说,就像是Chrome浏览器的"插件"。除了内核必须的驱动程序,其他驱动程序是可以动态加载的,按需加载,不需要可以卸载,比如网络驱动、音频驱动等等。

        当前主流的内核采用大内核的设计思想,优点是内核组件之间直接调用效率很高,缺点也很明显,内核组件和驱动程序都在特权模式,一旦发生问题系统就会崩溃。尤其驱动程序大部分是第三方厂商开发,代码质量直接影响系统稳定性。

        驱动程序又被称为内核的扩展。

驱动程序不一定对应物理设备

        驱动程序可以是虚拟设备,比如某某FakeDriver. 不同的内核一般会提供不同驱动程序模型,万变不离其宗,驱动程序一般是通过init或probe初始化,创建对应的驱动程序结构体,提供可能的节点供用户态操作。这个流程意味着,不一定对应真实的物理设备。

Windows默认安装哪些驱动程序

Win10默认驱动安装位置如下, 默认包含基本所有主流硬件设备驱动。

%windir%\System32\drivers

CPU和DRAM究竟有没有驱动程序?

        广义意义上,任何硬件都可能存在驱动程序。但,并非意味着所有硬件都有"极其明确"的驱动程序。

        比如DRAM, 它基本与CPU(或Dram控制器)直连,命令和数据直接通过硬件PATH, 在正常读写操作已经看不到所谓的驱动程序存在。但因为DRAM属于高频信号,一般需要做Calibration调整完成信号对齐,在内核启动之前,Bootloader会完成此过程,最终把预期的设定写进Dram控制器寄存器或Micro-P, 之后即可进行正确的读写操作。

        如果访问DRAM还需要之间经过驱动程序,那么驱动程序必须运行在非DRAM区间,而且这可能会影响性能。

in/out特权指令

        驱动程序可以使用这些特权指令完成输入输出。目前一般操作系统都会隐藏in/out接口到HAL中, 驱动程序不会直接操作in/out指令。

驱动程序验证器

        为了保证驱动程序更安全,Windows提供了一套驱动程序验证机制。驱动程序验证程序监视 Windows 内核模式驱动程序,目的是检测可能损坏系统的非法函数调用或操作。 驱动程序验证程序可以让 Windows 驱动程序受到各种压力和测试,以查找不当行为。参考: 驱动程序验证程序

内核一定需要文件系统?

        是的。没有文件系统,内核很难将磁盘文件展示给用户态,将出现用户不能简易操作任何文件的尴尬境地。虽然不用文件系统内核一样可以跑起来,这对用户没有太大的意义。

驱动程序格式

        驱动程序扩展名一般以.sys结尾, 它是标准的PE格式。和内核ntoskrnl.exe、用户态动态库ntdll.dll都属于PE格式。

驱动程序的加载

        驱动程序一般是可以动态加载,以满足系统需要和不需要的场景。

驱动程序和电源管理

        随着PNP即插即用和电源管理越来越重要,电源管理逐渐成为驱动程序必要的部分。这对于设备低功耗有很大帮助。

        

你可能感兴趣的:(小话Windows内核,windows,kernel,windows,kernel)