首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows是否提供对HPET的API访问?

Windows是否提供对HPET的API访问?
EN

Stack Overflow用户
提问于 2021-02-05 01:19:25
回答 1查看 137关注 0票数 2

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

到目前为止,我还找不到任何与Windows HPET驱动程序等效的驱动程序。Windows是否提供了接口,内核模式的用户模式来访问和使用x86平台上的HPET?谷歌在这里让我失望了,因为它似乎充斥着论坛帖子和文章,询问出于性能原因启用/禁用HPET的问题。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-07 10:56:58

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

例如,你可以得到“文件”(不必关心SCSI、SATA、NVME;或者FAT、NTFS、其他任何东西)、“socket”(不必关心有线以太网、WIFI、infiniband、以及其他任何东西)、“线程”(不必太关心文字CPU)和“虚拟内存”(并且不必关心实际的物理RAM)。

同样,每个操作系统都会提供某种高性能/高精度的定时器API。此API可能在内部使用HPET,也可能不在内部使用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://docs.microsoft.com/en-us/windows/win32/sync/waitable-timer-objects )。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66050631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档