17.04.2013 Views

Memória Compartilhada

Memória Compartilhada

Memória Compartilhada

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!