Esta área comum aos processos é utilizada por cada um deles como pertencente à sua área de memória e é utilizada também como um modo eficiente de realizarmos troca de dados entre os
processos.
Como todos os processos podem alterar esta área de memória, certos cuidados devem ser tomados. Como por exemplo, não permitindo acesso simultâneo à esta área compartilhada através do uso de semáforos.
O compartilhamento de memória envolve a criação de um segmento de memória compartilhada, acoplamento e desacoplamento ao segmento de memória compartilhada e as operações de ler e escrever (acesso à memória compartilhada).
A criação do segmento é realizada através da chamada shmget(), que possui o seguinte protótipo:
int shmget(key_t key, size_t size, int shmflg);Nesta criação, define-se as permissões de acesso e o tamanho de bytes do segmento. O retorno desta função é um inteiro, responsável por identificar o segmento de memória compartilhado. Este identificador deve ser utilizado pelos processos que desejam ler ou escrever nesta memória compartilhada.
Antes de ler ou escrever, precisamos acoplar o processo ao segmento de memória compartilhada, através da função shmat(), passando o identificador do segmento como parâmetro. A função possui o seguinte protótipo:
void *shmat(int shmid, void *shmaddr, int shmflg);A função retorna um ponteiro, que é utilizado para desacoplar o processo do segmento compartilhado.
Para desacoplar o processo do segmento de memória compartilhada, utilizamos a função, passando como parâmetro o ponteiro de retorno de shmat. A função possui o seguinte protótipo:
int shmdt(void *shmaddr);
Para maiores informações e um exemplo de uso destas funções descritas acima, consulte as referências.
Referências:
http://www.ecst.csuchico.edu/~beej/guide/ipc/shmem.html
Nenhum comentário:
Postar um comentário