干杯...
我知道它代表硬件抽象层,但它到底是做什么的?它是为 VB 等高级语言设计的与硬件通信吗?IN/OUT 指令是调用 HAL 例程还是直接通过 I/O 管理器与硬件的设备驱动程序通信?
提前致谢
我知道它代表硬件抽象层,但它到底是做什么的?
它本质上是 NT 内核的“不可移植”部分,作为单独的模块提供,以便 NT 可以移植到多个处理器架构。示例:中断路由。
它是为 VB 等高级语言设计的与硬件通信吗?
不,它是作为 NT 内核的支持例程。如果您在用户模式下编码(就像在 VB 等高级语言中一样),您无需知道它的存在。
IN/OUT 指令是调用 HAL 例程还是直接通过 I/O 管理器与硬件的设备驱动程序通信?
当您使用in
andout
指令时,这是直接与 CPU 对话。这与您正在讨论的 NT 内核主题完全无关。那里没有 HAL。没有 NT I/O 管理器。这些指令是 x86 指令集提供的用于通过 I/O 地址与设备通信的指令。
HAL 旨在从操作系统中“抽象”出硬件的细节(它是一个内核组件)。
它为内核提供了处理机器特定指令的例程(afaik 包括通过上下文切换处理诸如 AVX 状态保存之类的事情)以及诸如中断之类的其他细节(Google 'Interrupts IDT'(无引号))
请注意,HAL 并不完全位于内核之下,因为内核在某些地方仍然直接与硬件通信,但是 HAL 的许多功能也依赖于内核(因此它们通常以匹配的“集合”出现)
HAL 就像一个隔离层,这意味着该层任一侧的事物都可以改变,并且(理论上)它不会对另一侧产生影响。
这意味着各种不同类型的硬件可以在 HAL 之下,而通过 HAL 调用的软件并不关心。