I'm assuming that a CPU won't modify the address space of an application or thread that it is not currently running. This would imply that if the CPU is running the application/thread then it is the only CPU that is using TLB entries that apply to it's address space.Rob wrote:Why don't you need an IPI for an application with a single thread? Could that thread not be scheduled to run on a different CPU when its next slice comes up? Or is a thread always bound to a specific cpu?
There are situations where this isn't the case. The most obvious one is shared memory areas (i.e. shared between processes).
There are also some methods of handling swap space and memory mapped files that could require the IPI - specifically, swapping pages out and freeing pages from memory mapped files that haven't been modified (if the changes are made by CPU/s that aren't using the address space being modified).
Cheers,
Brendan