调用操作系统的开销

时间:2011-10-25 07:51:12

标签: api assembly operating-system getpixel

多次调用操作系统的开销是多少?

例如,Microsoft有一个名为“Getpixel”的API你必须提供x,y坐标,它将返回一个颜色值。然后,Setpixel必须向操作系统发出数百万个请求。

这样做的开销究竟是多少?

2 个答案:

答案 0 :(得分:2)

对于你给出GetPixel的例子,它很慢,因为它使用内核模式驱动程序来完成实际的工作,并且在该驱动程序中它执行了许多验证和锁定,以查看您传递的设备上下文是否实际一个DC,并确保它不会在函数的某个地方被更改,然后它将一个区域的副本复制到内存中的新位图中,并从中读取所需的像素,然后取消分配位图。

所以你有一个内核模式切换,锁定,验证和内存分配,复制和释放,然后另一个模式切换回用户平台,所有这些都需要时间,找到一种方法在你的程序中做GetPixel功能将节省你有数万个时钟周期。

但是另一个API调用可能只需要几次内存读取和写入,因此它在很大程度上取决于您对操作系统的调用。

答案 1 :(得分:1)

没有普遍的答案。取决于电话-e.g.涉及I / O的调用将比那些没有调用的调用慢 - 取决于操作系统如何实现系统调用 - 例如。中断?跳? - 并取决于架构-e.g.架构是否实现了系统调用指令?它是通过正常跳跃来做的吗? - 。