A tradução (conceitual)
// endereço virtual = (página, offset)
traduz(proc, vaddr):
pagina, off := vaddr / PAGE, vaddr % PAGE
if tlb[proc, pagina] existe:
frame := tlb[proc, pagina] // TLB hit (rápido)
else:
frame := pageTable[proc][pagina] // percorre a tabela
if frame == nil:
frame = pageFault(proc, pagina) // busca no disco
tlb[proc, pagina] = frame
return frame*PAGE + off
No mundo Go
// Você não vê page tables, mas sente os efeitos:
debug.SetMemoryLimit(512 << 20) // 512 MiB (GOMEMLIMIT)
// passou do limite do container? OOM killer mata o processo.
// working set > RAM? swap e thrashing: latência despenca.