A MMU acessa uma tabela que descreve como converter endereços virtuais em endereços físicos. (Não é necessário converter endereços físicos em endereços virtuais, e isso seria impossível em geral, já que o mesmo endereço físico pode ser acessado por meio de vários endereços virtuais ou pode ser desmapeado.) O layout dessa tabela depende da arquitetura da CPU, mas o princípio geral é sempre o mesmo: há um registro de CPU que contém o endereço físico de uma tabela, que contém os endereços físicos de outras tabelas, e assim por diante (para um total de 2 a 4 níveis em arquiteturas existentes) até um nível de tabelas que contém os endereços físicos onde os dados estão localizados. Em cada nível, qual elemento da tabela usar é determinado por alguns dos bits no endereço virtual.
A MMU não sabe sobre os processos do sistema operacional como tal. Quando a CPU muda para a execução de um processo diferente, ou seja, quando ocorre uma mudança de contexto , é o trabalho do contexto do sistema operacional comutando o código para atualizar as tabelas MMU conforme necessário. Na prática, acho que todos os sistemas Unix mantêm uma cópia das tabelas na memória para cada processo, e apenas atualizam o registro MMU para apontar para a tabela de nível superior para o processo atual.
Na verdade, existe uma parte da MMU que se preocupa com os processos do sistema operacional: o TLB . Pesquisar entradas na tabela MMU é bastante caro, pois envolve vários acessos à memória. O TLB é um cache dessas pesquisas. Em uma alternância de contexto, o sistema operacional deve invalidar o TLB (ou seja, remover todas as entradas de cache), pois o mapeamento será diferente para o novo processo. Muitas arquiteturas permitem que o SO coloque um indicador em cada entrada da tabela MMU para dizer “esta entrada pertence ao processo N”. Uma entrada TLB é então ignorada se o número do processo que ela contém não for o número do processo atual. Um registrador de CPU contém o número do processo atual e o código do comutador de contexto o atualiza. Esse mecanismo significa que o TLB pode conter informações sobre vários processos de uma só vez, o que melhora o desempenho ao alternar entre esses processos. Como geralmente há menos bits disponíveis para armazenar N do que o necessário para armazenar todos os IDs de processo do sistema operacional, N não é o ID do processo, mas um número gerado pelo SO para esse propósito e que muda com o tempo, se for usado.