I was trying to understand the difference between a task_struct's mm and active_mm fields, and came across a 20-year old email from Linus Torvalds which references the notion of "anonymous processes":
- we have "real address spaces" and "anonymous address spaces". The difference is that an anonymous address space doesn't care about the user-level page tables at all, so when we do a context switch into an anonymous address space we just leave the previous address space active. [...] - "tsk->mm" points to the "real address space". For an **anonymous process**, tsk->mm will be NULL, for the logical reason that an **anonymous process** really doesn't _have_ a real address space at all. - however, we obviously need to keep track of which address space we "stole" for such an anonymous user. For that, we have "tsk->active_mm", which shows what the currently active address space is. The rule is that for a process with a real address space (ie tsk->mm is non-NULL) the active_mm obviously always has to be the same as the real one. For a **anonymous process**, tsk->mm == NULL, and tsk->active_mm is the "borrowed" mm while the **anonymous process** is running. When the **anonymous process** gets scheduled away, the borrowed address space is returned and cleared.