多任务处理和缓存
Multitasking and cache
多任务处理和缓存
假设我同时 运行 运行两个程序,一个播放 MP3 的媒体播放器和一个视频游戏。
让我们暂时假设系统的其他核心与其他程序一起取出我的问题是关于 CPU 缓存。
每次计算机必须将上下文更改为 运行 不同的程序时,它是否必须刷新 CPU 缓存?
这种情况多久发生一次?有人对这类问题有任何好的在线参考吗?我想了解更多关于操作系统的信息。
Every time the computer has to change contexts to run the different programs does it have to flush the CPU cache?
哪个缓存(在哪个CPU)?
一些缓存(例如 80x86 CPUs 中的 L2 缓存和 L3 缓存)是物理索引的,并且在上下文更改时不会刷新(因为当您查看物理 RAM 时,“上下文”没有影响和实际地址);但“最近最少使用的逐出”(及其变体)往往意味着在短时间内前一个程序的数据被逐出,以便在缓存中为当前程序使用的数据腾出空间。
某些缓存(例如 L1 指令缓存、跟踪缓存、“虚拟内存转换缓存”/TLB 等)可能会或可能不会被刷新。有时它们被标记为某种 ID 而未被刷新(因此当 ID #67 的程序为 运行 时,ID #45 的程序的内容被简单地忽略但可能由于“最近最少使用”而被驱逐).有时 OS 出于安全目的明确刷新(例如幽灵漏洞缓解)。
多任务处理和缓存 假设我同时 运行 运行两个程序,一个播放 MP3 的媒体播放器和一个视频游戏。 让我们暂时假设系统的其他核心与其他程序一起取出我的问题是关于 CPU 缓存。
每次计算机必须将上下文更改为 运行 不同的程序时,它是否必须刷新 CPU 缓存?
这种情况多久发生一次?有人对这类问题有任何好的在线参考吗?我想了解更多关于操作系统的信息。
Every time the computer has to change contexts to run the different programs does it have to flush the CPU cache?
哪个缓存(在哪个CPU)?
一些缓存(例如 80x86 CPUs 中的 L2 缓存和 L3 缓存)是物理索引的,并且在上下文更改时不会刷新(因为当您查看物理 RAM 时,“上下文”没有影响和实际地址);但“最近最少使用的逐出”(及其变体)往往意味着在短时间内前一个程序的数据被逐出,以便在缓存中为当前程序使用的数据腾出空间。
某些缓存(例如 L1 指令缓存、跟踪缓存、“虚拟内存转换缓存”/TLB 等)可能会或可能不会被刷新。有时它们被标记为某种 ID 而未被刷新(因此当 ID #67 的程序为 运行 时,ID #45 的程序的内容被简单地忽略但可能由于“最近最少使用”而被驱逐).有时 OS 出于安全目的明确刷新(例如幽灵漏洞缓解)。