gpt4 book ai didi

windows - Windows 是否提供对 HPET 的任何 API 访问?

转载 作者:行者123 更新时间:2023-12-03 11:08:11 27 4
gpt4 key购买 nike

我目前对使用 HPET 计时器获得微秒分辨率计时感到好奇。关于在线使用此设备的信息似乎很少。我确实找到了 Linux 提供 HPET 驱动程序的信息,并且有一个 example在演示用户模式 ​​API 和旧邮件列表的源代码中 thread这似乎表明有(曾经?)一个内核模式 API 也可以使用它,但除此之外的文档很少。

到目前为止,我一直无法找到任何类型的 Windows HPET 驱动程序的等效项。 Windows 是否提供用于在 x86 平台上访问和使用 HPET 的界面、用户模式或内核模式?谷歌在这里让我失望了,因为它似乎充斥着论坛帖子和文章,询问出于性能原因启用/禁用 HPET。

最佳答案

操作系统存在的大部分原因是抽象低级硬件细节,以便软件(例如应用程序)获得更新/更好的硬件的优势,而不是每次硬件更改时都会中断。

例如;你得到"file"(并且不必关心 SCSI 与 SATA 与 NVME;或 FAT 与 NTFS 与其他任何东西)和“套接字”(并且不必关心有线以太网与有线以太网)。 WIFI vs. infiniband vs. 其他任何东西)和“线程”(不必太关心字面上的 CPU)和“虚拟内存”(不必关心实际的物理 RAM)。

同理;每个操作系统都会提供某种高性能/高精度计时器 API。此 API 可能会或可能不会在内部使用 HPET(但您没有理由关心它是否使用,因为您不希望不断中断的损坏代码)。

对于现代 80x86 系统;高性能/高精度计时器 API 很可能会使用 CPU 的 TSC 和本地 APIC 计时器(因为它更好/更精确/开销更低)并且不会使用 HPET。对于极旧的 80x86 计算机,它可能会使用 PIT(仅仅是因为硬件中不存在更好的选项,包括 HPET)。对于其他架构(ARM、Sparc、PowerPC 等),相同的 API 将使用对该架构实际有意义的任何内容。

本质上;如果存在任何操作系统可以直接“非抽象”访问底层 HPET 设备;那么该操作系统是一个脆弱的困惑,未能完成其工作,应尽快放弃。

对于 Windows; API 分为 3 个部分:

a) 高精度时间戳(QueryPerformanceCounter()GetSystemTimePreciseAsFileTime())。请注意,出于安全原因,这些可能会被故意“削弱”(使时序侧信道攻击更难一些,因为 CPU 的 TSC 有点太好了)。

b) 高精度时间延迟(Sleep(),可等待的计时器对象 - 请参阅 https://learn.microsoft.com/en-us/windows/win32/sync/waitable-timer-objects ).

c) “足够高”的精确时间事件(SetTimer()WM_TIMER 消息 - 参见 https://learn.microsoft.com/en-us/windows/win32/winmsg/using-timers)。请注意,这里的精度不需要太高(例如纳秒级精度),因为消息传递延迟(例如,当您处理其他消息时,一条消息在队列中等待您接收它的时间有多长)会使“精度过高"无论如何都无法使用。

关于windows - Windows 是否提供对 HPET 的任何 API 访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66050631/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com