Memória Compartilhada
Memória Compartilhada
Memória Compartilhada
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Memória</strong> <strong>Compartilhada</strong><br />
UNIX System V<br />
Walter Fetter Lages<br />
w.fetter@ieee.org<br />
Universidade Federal do Rio Grande do Sul<br />
Escola de Engenharia<br />
Departamento de Engenharia Elétrica<br />
Programa de Pós-Graduação em Engenharia Elétrica<br />
ELE00002 Sistemas de Automação<br />
Copyright (c) Walter Fetter Lages – p.1
Introdução<br />
• Compartilhamento de uma região de memória por<br />
2 ou mais processos<br />
• Introduzida no UNIX System V<br />
• É a forma mais rápida de IPC<br />
• Evita a cópia de dados<br />
• Em geral é necessário ter-se mecanismos de<br />
sincronização<br />
Copyright (c) Walter Fetter Lages – p.2
Utilização<br />
• Um dos processos cria a memória compartilhada<br />
• Os processos anexam a memória compartilhada<br />
ao seu espaço de endereçamento<br />
• A memória compartilhada é utilizada<br />
normalmente<br />
• Os processos desanexam a memória<br />
compratilhada<br />
• A memória compartilhada é liberada<br />
Copyright (c) Walter Fetter Lages – p.3
Criação<br />
int shmget(key_t key,size_t size,<br />
int shmflg)<br />
• Retorna o identificador da memória<br />
compartilhada associada a key<br />
• key é uma chave única<br />
• IPC_PRIVATE garante a unicidade<br />
• shmflg bitwise or entre<br />
• IPC_CREAT cria um novo segmento<br />
• IPC_EXCL retorna erro se key já existe<br />
• modo de acesso: rwxrwxrwx<br />
• Os filhos herdam os segmentos<br />
Copyright (c) Walter Fetter Lages – p.4
Anexagem<br />
void *shmat(int shmid,<br />
const void *shmaddr,int shmflg)<br />
• Retorna um ponteiro para a memória<br />
compartilhada<br />
• shmaddr<br />
• Se 0, é alocado um novo segmento<br />
• Deve estar alinhado com as páginas<br />
• shmflg flags<br />
• SHM_RND força o alinhamento de shmaddr<br />
• SHM_RDONLY anexagem apenas para leitura<br />
Copyright (c) Walter Fetter Lages – p.5
Desanexagem<br />
int shmdt(const void *shmaddr)<br />
• Desanexa a memória compartilhada<br />
Copyright (c) Walter Fetter Lages – p.6
Remoção e Controle<br />
int shmctl(int shmid, int cmd,<br />
struct shmid_ds *buf)<br />
• cmd Comando<br />
• IPC_STAT copia informação de controle<br />
• IPC_SET altera as permissões na estrutura de<br />
controle<br />
• IPC_RMID remove o segmento<br />
• SHM_LOCK trava na memória física<br />
• SHM_UNLOCK destrava na memória física<br />
Copyright (c) Walter Fetter Lages – p.7
Referências<br />
[1] W. R. Stevens. Advanced Programming in the<br />
UNIX Environment. Addison-Wesley, Reading,<br />
MA, 1993.<br />
Copyright (c) Walter Fetter Lages – p.8