【问题标题】:Can anyone explain what is Windows HAL and what is it used for?谁能解释什么是 Windows HAL 以及它的用途?
【发布时间】:2012-06-19 13:34:41
【问题描述】:

干杯...

我知道它代表硬件抽象层,但它到底是做什么的?它是为 VB 等高级语言设计的与硬件通信吗? IN/OUT 指令是调用 HAL 例程还是直接通过 I/O 管理器与硬件的设备驱动程序通信?

提前致谢

【问题讨论】:

  • 您是否浏览过任何 MSDN 链接,例如 this。如果是这样,你能告诉我们你不明白哪一部分吗? (此外,请保持您的问题简短,添加一些代码,如果可能的话以获得更好的回答。)
  • @dirkgently 感谢您的链接,但该链接基于 Windows CE,我不确定是否与 Windows 的桌面版本有相似之处。我没有任何代码可以发布,只是想了解更多关于 HAL 的工作原理。

标签: c device drivers hal


【解决方案1】:

HAL 旨在从操作系统中“抽象”出硬件细节(它是一个内核组件)。

它为内核提供了处理机器特定指令的例程(afaik 包括通过上下文切换处理诸如 AVX 状态保存之类的事情)以及中断等其他细节(Google 'Interrupts IDT'(无引号))

请注意,HAL 并不完全位于内核之下,因为内核在某些地方仍然直接与硬件通信,但是 HAL 的许多功能也依赖于内核(因此它们通常以匹配的 'sets 形式出现')

http://support.microsoft.com/kb/99588

【讨论】:

    【解决方案2】:

    我知道它代表硬件抽象层,但它究竟是做什么的?

    它本质上是 NT 内核的“不可移植”部分,作为单独的模块提供,以便 NT 可以移植到多个处理器架构。示例:中断路由。

    它是为像 VB 这样的高级语言设计的与硬件通信吗?

    没有。它旨在作为 NT 内核的支持例程。如果您在用户模式下编码(就像在 VB 等高级语言中一样),您无需知道它的存在。

    IN/OUT 指令是调用 HAL 例程还是直接通过 I/O 管理器与硬件的设备驱动程序通信?

    当您使用inout 指令时,这是直接与CPU 对话。这与您正在讨论的 NT 内核主题完全无关。那里没有 HAL。没有 NT I/O 管理器。这些指令是 x86 指令集提供的用于通过 I/O 地址与设备通信的内容。

    【讨论】:

    • 感谢所有非常有帮助的回复。
    【解决方案3】:

    HAL 就像一个隔离层,这意味着该层任一侧的事物都可以改变,并且(理论上)它不会对另一侧产生影响。

    这意味着各种不同类型的硬件可以在 HAL 之下,而通过 HAL 调用的软件并不关心。

    【讨论】:

      猜你喜欢
      • 2022-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      • 1970-01-01
      • 2016-12-05
      • 1970-01-01
      相关资源
      最近更新 更多