paulo1205
(usa Ubuntu)
Enviado em 01/03/2017 - 23:46h
Em sistemas modernos, todos os endereços que um programa enxerga são relativos ao próprio programa, quase nunca correspondentes aos endereços reais da memória física onde os dados estão guardados. Existe uma “camada” no processador, controlada pelo sistema operacional, que faz o mapeamento entre a memória que o programa enxerga e a memória física real. Você pode até ter dois programas distintos que executam ao mesmo tempo, e ponteiros em cada um deles que têm endereços coincidentes, mas com dados diferentes, pois cada processo tem um mapeamento distinto feito pelo processador.
Entretanto, a maioria dos sistemas oferece mecanismos para compartilhamento de memória, que é útil em algumas aplicações distintas mas que eventualmente precisem compartilhar informações. Para usar tal recurso, um programa precisa solicitar ao SO a criação de um espaço a ser compartilhado, e o sistema devolve ao programa um ponteiro para a região criada. As outras aplicações que quiserem acesso à mesma área pedem tal acesso ao SO, usando uma chave de acesso que identifica a área a ser acedida.
Além disso, existem também mecanismos para que um processo solicite ao SO acesso a partes da memória privativa de outros processos. Geralmente isso é usado em situações como a de um
debugger ou aplicações de
patches em programas que não podem parar. Alguns programas que fazem
cheat de jogos usam esses mesmos mecanismos.