计算机程序如何在汇编级别保持一致的速度?

计算机程序如何在汇编级别保持一致的速度?

据我所知,操作系统和计算机的一般运行方式是机器码调度程序转换成指令列表,然后由 CPU 执行。

由于每个进程所占用的时间是可变的,因此程序似乎应该以不一致的“速率”运行。然而,许多可能存在此问题的程序(如游戏、视频播放器和驱动程序)似乎运行得非常一致。当然,这种情况可能发生,在游戏中尤其明显,但我认为这种情况会更频繁地发生,并且持续时间更长。

避免这种情况的唯一方法似乎是告诉进程执行其代码所花费的时间单位,因为我还认为定期查询系统时钟会非常低效,并且必须非常频繁地发生。

操作系统会向进程提供这些信息吗?如果是,是否有一些标准如何

答案1

由于每个进程所花费的时间是可变的,因此程序似乎应该以不一致的“速率”运行。

确实如此。在现代操作系统中,每个程序/进程都分配有一段可用 CPU 时间。但大多数程序(尤其是服务/守护进程)所需的时间确实比分配的时间要少,因此其他程序/进程可以利用更多时间。

然而,许多可能出现此问题的程序(如游戏、视频播放器和驱动程序)似乎运行得非常一致。

你说得对:似乎这样。
但每个认真的玩家都知道后台进程/程序的恶化效果。一般规则是:后台进程越少,可用于(前台)游戏的 CPU 速度/容量就越大。因此,通常,在“游戏”情况下,大多数 CPU 处理时间片不会被其他进程使用;主要消费者是游戏。

避免这种情况的唯一方法是告诉进程某个时间单位中有多少时间用于执行其代码

你错了。抢占式多任务避免了进程之间相互合作的必要性。你假设发生的事情被称为协作式多任务处理哪个“在现代大型系统中很少使用”

两者都是不同的方法,以下是定义的相关部分抢占式多任务

在计算领域,抢占是暂时中断计算机系统正在执行的任务的行为,不需要其合作,并打算稍后恢复该任务。

这是您错误地认为无效的概念:

[...] 因为我也认为定期查询系统时钟会非常低效,而且必须非常频繁地进行。

抢占式多任务就是:
打断每一个在给定时间内由定时器中断并将执行移交给调度器(然后选择下一个要执行的进程)。

抢占式多任务被大多数现代操作系统使用,例如 Windows、Linux 和 MacOS。

关于多任务处理方法的深入信息可以在 OSDev 上找到

相关内容