Memória compartilhada

Documentos relacionados
Comunicação entre Processos Memória Compartilhada

Memória partilhada em Unix SysV

Comunicação entre Processos Memória Compartilhada

Exercícios Avaliativos Memória Compartilhada

Manipulação de processos

tutorial. man fork man pthread_create man pthread_join man wait man sleep

MAC422/5753 Sistemas Operacionais

Curso de Programação C em Ambientes Linux Aula 05

Comunicação Inter-Processo em Unix. Pipes FIFO (Named Pipes) Pipes

1 Exercícios com ponteiros

Linguagem C Ficheiros Compilação Separada

O que é um apontador em C (type pointer in C)?

Computação 2. Aula 8. Profª. Fabiany Arquivos

Comunicação entre Processos

Computação I - C Prova /10/ Profs. Adriano Cruz e Valeria Bastos

Computação 2. Aula Profª. Fabiany Listas Duplamente Encadeadas

Métodos Computacionais. Tipos Estruturados

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

CAP. IX - MANIPULAÇÃO DE ARQUIVOS Generalidades sobre Arquivos. 9.2 Abertura e Fechamento de Arquivos. Operações com arquivos:

Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica

Aula 17: Ponteiros e Alocação Dinâmica em C

Aula 16: Manipulação de Arquivos em C

ALGORITMOS AULA 01. Baseado nas aulas do Prof. Jorgiano Vidal

PROGRAMAÇÃO DE MICROPROCESSADORES 2007 / 2008

Criação de Processos Fork( ) Exec( )

Caracteres e Cadeias de Caracteres

1 Exercícios com ponteiros

Comunicação entre processos 2ª parte (IPC InterProcess Communication)

Pthreads API. Criação de Threads: usando Pthreads

Capítulo 06: Arquivos

Analise o código abaixo:

Ponteiros e Tabelas. K&R: Capítulo 5

Aula 27: Estruturas heterogêneas e alocação dinâmica

Disciplina de Introdução à Ciência da Computação ICC 1 - Teoria

Sumário. Ficheiros. Ficheiros

Alocação Dinâmica em C

Computação L2. Linguagem C++ Observação: Material Baseado na Disciplina Computação Eletrônica.

ESTRUTURAS COMPOSTAS

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

PIP/CA - Programa Interdisciplinar de Pós-Graduação em Computação Aplicada da UNISINOS ALGORITMOS & ESTRUTURAS DE DADOS

Alocação Estática e Dinâmica. Prof. M.Sc. Mariella Berger

Sub-rotinas em C. Disciplina de Programação de Computadores I Universidade Federal de Ouro Preto

ESTRUTURAS COMPOSTAS VETOR

QUEBRA DE SENHAS MD5 UTILIZANDO MDCRACK E MPI

Transcrição:

Memória compartilhada Luiz Affonso Guedes 1 Ivanovitch Silva 1 affonso@dca.ufrn.br ivan@dca.ufrn.br 1 Universidade Federal do Rio Grande do Norte 15 de outubro de 2009 Memória compartilhada DCA0109 - Prática de programação concorrente 1 / 18

Sumário 1 Introdução 2 Criação Exemplo 01 3 Associação Exemplo 02 Exemplo 03 4 Desassociação Exemplo 04 5 Apagar Exemplo 05 6 Produtor consumidor Produtor Consumidor Análise Memória compartilhada DCA0109 - Prática de programação concorrente 2 / 18

Sumário 1 Introdução 2 Criação Exemplo 01 3 Associação Exemplo 02 Exemplo 03 4 Desassociação Exemplo 04 5 Apagar Exemplo 05 6 Produtor consumidor Produtor Consumidor Análise Memória compartilhada DCA0109 - Prática de programação concorrente 3 / 18

Memória Compartilhada Espaço/segmento de memória onde será compartilhado informações. Varios processos podem ler nesse espaço/segmento. Procedimentos básicos. Alocar e dar permissao em uma região de memória para ser compartilhada. Pegar o ponteiro, ler e escrever nessa região. Memória compartilhada DCA0109 - Prática de programação concorrente 3 / 18

Métodos básicos Função Descrição Retorno shmget Criar memória compartilhada Identificador shmat Associar memória compartilhada Ponteiro shmdt Desassociar memória compartilhada Flag shmclt Apagar memória compartilhada Flag Comandos auxiliares Comando ipcs ipcrm Descrição Mostrar recursos (sem,shm,msg). Destruir recursos. Eg.: ipcrm [sem shm msg] id. Memória compartilhada DCA0109 - Prática de programação concorrente 4 / 18

Sumário 1 Introdução 2 Criação Exemplo 01 3 Associação Exemplo 02 Exemplo 03 4 Desassociação Exemplo 04 5 Apagar Exemplo 05 6 Produtor consumidor Produtor Consumidor Análise Memória compartilhada DCA0109 - Prática de programação concorrente 5 / 18

Criando memória compartilhada Procedimentos básicos Função Param1 Param2 Param3 shmget key t key size t size int shmflg Parâmetros Nome key size shmflg Descrição Chave usada para criação* Tamanho do segmento em bytes Permissões. E.g: 0777 IPC CREAT Memória compartilhada DCA0109 - Prática de programação concorrente 5 / 18

Exemplo 01 Criação - Exemplo 01 Download 1 #include <s t d l i b. h> 2 #include <stdio. h> 3 #include <sys / ipc. h> //shmget 4 #include <sys /shm. h> //shmget 5 6 int main ( int argc, char argv [ ] ) { 7 // Identificador da memória compartilhada 8 int shmid = 0; 9 // Tamanho da memória compartilhada (bytes) 10 int shmsize = 1024; 11 // Criando a memória compartilhada 12 shmid = shmget ( ftok ( / home / ivanovitchm, 1 ), shmsize, 0666 IPC CREAT ) ; 13 // A memória foi criada corretamente 14 if ( shmid == 1) { 15 fprintf ( stderr, Processo de c r i a r a memória compartilhada falhou\n ) ; 16 e x i t ( EXIT FAILURE ) ; 17 } 18 printf ( Id da memória compartilhada é %d.\n... 19 D i g i t e \ i pcs m\ para v e r i f i c a r \n, shmid ) ; 20 return 0; 21 } Memória compartilhada DCA0109 - Prática de programação concorrente 6 / 18

Sumário 1 Introdução 2 Criação Exemplo 01 3 Associação Exemplo 02 Exemplo 03 4 Desassociação Exemplo 04 5 Apagar Exemplo 05 6 Produtor consumidor Produtor Consumidor Análise Memória compartilhada DCA0109 - Prática de programação concorrente 7 / 18

Associando a uma memória compartilhada Procedimentos básicos Função Param1 Param2 Param3 shmat int shmid const void *shmaddr int shmflg Parâmetros Nome Descrição shmid Identificador memória compartilhada criada shmaddr Endereço de aclopamento shmflg SHM RND,SHM RDONLY * * Em geral usa-se shmflg = 0. Memória compartilhada DCA0109 - Prática de programação concorrente 7 / 18

Exemplo 02 Associação - Exemplo 02 Download 1 // Executar: 2 //./nomeexecutavel shmidgeradonoexemplo01 3 4 #include <s t d l i b. h> 5 #include <stdio. h> 6 #include <s t r i n g. h> //strcpy 7 #include <sys / ipc. h> //shmget 8 #include <sys /shm. h> //shmget,shmat 9 #include <sys / types. h> //shmat 10 11 int main (int argc, char argv [ ] ) { 12 // Identificador da memória compartilhada 13 int shmid = atoi ( argv [ 1 ] ) ; 14 // Ponteiro para memória compartilhada 15 char memoriacompartilhada ; 16 // Associando a memória compartilhada 17 memoriacompartilhada = (char ) shmat ( shmid, 0, 0 ) ; 18 // A memória foi associada corretamente? 19 if ( memoriacompartilhada == (char ) 1){ 20 printf ( Não f o i possível associar a memória com o id %d\n, shmid ) ; 21 e x i t ( 1 ) ; 22 } 23 // Escrever na memória compartilhada 24 strcpy ( memoriacompartilhada, Estou escrevendo na memória compartilhada ) ; 25 return 0; 26 } Memória compartilhada DCA0109 - Prática de programação concorrente 8 / 18

Exemplo 03 Associação - Exemplo 03 Download 1 // Executar: 2 //./nomeexecutavel shmidgeradonoexemplo01 3 4 #include <s t d l i b. h> 5 #include <stdio. h> 6 #include <s t r i n g. h> //strcpy 7 #include <sys / ipc. h> //shmget 8 #include <sys /shm. h> //shmget,shmat 9 #include <sys / types. h> //shmat 10 11 int main (int argc, char argv [ ] ) { 12 // Identificador da memória compartilhada 13 int shmid = atoi ( argv [ 1 ] ) ; 14 // Ponteiro para memória compartilhada 15 char memoriacompartilhada ; 16 // Associando a memória compartilhada 17 memoriacompartilhada = (char ) shmat ( shmid, 0, 0 ) ; 18 // A memória foi associada corretamente? 19 if ( memoriacompartilhada == (char ) 1){ 20 printf ( Não f o i possível associar a memória com o id %d\n, shmid ) ; 21 e x i t ( 1 ) ; 22 } 23 // Lendo na memória compartilhada 24 printf ( Valor l i d o : %s \n, memoriacompartilhada ) ; 25 return 0; 26 } Memória compartilhada DCA0109 - Prática de programação concorrente 9 / 18

Sumário 1 Introdução 2 Criação Exemplo 01 3 Associação Exemplo 02 Exemplo 03 4 Desassociação Exemplo 04 5 Apagar Exemplo 05 6 Produtor consumidor Produtor Consumidor Análise Memória compartilhada DCA0109 - Prática de programação concorrente 10 / 18

Desassociação de uma memória compartilhada Procedimentos básicos Função shmdt Param1 void *shmaddr Parâmetros Nome shmaddr Descrição Endereço para desassociação Memória compartilhada DCA0109 - Prática de programação concorrente 10 / 18

Exemplo 04 Desassociação - Exemplo 04 Download 1 // Executar: 2 //./nomeexecutavel shmidgeradonoexemplo01 3 4 #include <s t d l i b. h> 5 #include <stdio. h> 6 #include <s t r i n g. h> //strcpy 7 #include <sys / ipc. h> //shmget 8 #include <sys /shm. h> //shmget,shmat 9 #include <sys / types. h> //shmat 10 11 int main (int argc, char argv [ ] ) { 12... 13 //Idêntico ao exemplo 3 14... 15 // Realizando a desassociação 16 if ( shmdt ( memoriacompartilhada ) == 1){ 17 printf ( Ocorreu f a l h a na desassociação\n ) ; 18 e x i t ( 1 ) ; 19 } 20 printf ( Programa desassociou da memória compartilhada cujo 21 Id é : %d \n, shmid ) ; 22 printf ( Executar o comando \ ipcs m\ e v e r i f i c a r que a 23 memória não f o i deletada\n ) ; 24 return 0; 25 } Memória compartilhada DCA0109 - Prática de programação concorrente 11 / 18

Sumário 1 Introdução 2 Criação Exemplo 01 3 Associação Exemplo 02 Exemplo 03 4 Desassociação Exemplo 04 5 Apagar Exemplo 05 6 Produtor consumidor Produtor Consumidor Análise Memória compartilhada DCA0109 - Prática de programação concorrente 12 / 18

Deletar uma memória compartilhada Procedimentos básicos Função Param1 Param2 Param3 shmclt int *shmid int cmd struct shmid ds *buf Parâmetros Nome shmid cmd buf Descrição Identificador memória compartilhada IPC RMID,IPC SET,IPC STAT Estrutura de informações Memória compartilhada DCA0109 - Prática de programação concorrente 12 / 18

Exemplo 05 Deletar - Exemplo 05 Download 1 // Executar: 2 //./nomeexecutavel shmidgeradonoexemplo01 3 4 #include <s t d l i b. h> 5 #include <stdio. h> 6 #include <s t r i n g. h> //strcpy 7 #include <sys / ipc. h> //shmget 8 #include <sys /shm. h> //shmget,shmat 9 #include <sys / types. h> //shmat 10 11 int main (int argc, char argv [ ] ) { 12... 13 //Idêntico ao exemplo 3 14... 15 // Apagar memória Compartilhada 16 if ( shmctl ( shmid, IPC RMID, NULL) == 1){ 17 printf ( Ocorreu f a l h a ao d e l e t a r a memória compartilhada\n ) ; 18 e x i t ( 1 ) ; 19 } 20 printf ( Programa apagou a memória compartilhada cujo 21 Id era : %d \n, shmid ) ; 22 printf ( Executar o comando \ ipcs m\ e v e r i f i c a r que a 23 memória f o i deletada\n ) ; 24 return 0; 25 } Memória compartilhada DCA0109 - Prática de programação concorrente 13 / 18

Sumário 1 Introdução 2 Criação Exemplo 01 3 Associação Exemplo 02 Exemplo 03 4 Desassociação Exemplo 04 5 Apagar Exemplo 05 6 Produtor consumidor Produtor Consumidor Análise Memória compartilhada DCA0109 - Prática de programação concorrente 14 / 18

Produtor - Consumidor Produtor Criação,associação e escrita na memória compartilhada A memória compartilhada é representada por um contador O acesso a memória compartilhada deve ser realizado por semáforos Consumidor Associação e leitura na memória compartilhada O acesso a memória compartilhada deve ser realizado por semáforos Um mesmo semáforo é utilizado pelo produtor e consumidor Memória compartilhada DCA0109 - Prática de programação concorrente 14 / 18

Produtor Código do produtor Download 1 int main ( int argc, char argv [ ] ) { 2 // Semaforo usado para sincronizar a região crítica 3 Semaforo semaforo ; 4 semaforo = new Semaforo (1234,1,IPC CREAT 0600); 5 // Identificador da memória compartilhada 6 int shmid = 0; 7 // Tamanho da memória compartilhada (bytes) 8 int shmsize = 8; 9 // Ponteiro para memória compartilhada 10 int memoriacompartilhada ; 11 // Criando a memória compartilhada 12 shmid = shmget ( ftok ( / home / ivanovitchm, 1 ), shmsize, 0666 IPC CREAT ) ; 13 // Associando-se a memória compartilhada 14 memoriacompartilhada = (int ) shmat ( shmid, 0, 0 ) ; 15 memoriacompartilhada = 0; 16 // A memória foi criada corretamente 17 if ( shmid == 1) { 18 fprintf ( stderr, Processo de c r i a r a memória compartilhada falhou\n ) ; 19 e x i t ( EXIT FAILURE ) ; 20 } 21 printf ( Produtor : i d da memória compartilhada é 22 %d.\n D i g i t e \ i pcs m\ para v e r i f i c a r \n, shmid ) ; 23... Memória compartilhada DCA0109 - Prática de programação concorrente 15 / 18

Produtor Código do produtor Download 1 2 while ( true){ 3 printf ( Produtor : vou e n t r a r na região c r í t i c a \n ) ; 4 semaforo >P ( ) ; 5 memoriacompartilhada += 1; 6 semaforo >V ( ) ; 7 printf ( Produtor : vou s a i r da região c r í t i c a \n ) ; 8 sleep ( 2 ) ; 9 } 10 delete semaforo ; 11 return 0; 12 } Memória compartilhada DCA0109 - Prática de programação concorrente 16 / 18

Consumidor Código do consumidor Download 1 int main ( int argc, char argv [ ] ) { 2 // Semaforo usado para sincronizar a região crítica 3 Semaforo semaforo ; 4 semaforo = new Semaforo (1234,1,IPC CREAT 0600); 5 // Identificador da memória compartilhada 6 int shmid = atoi ( argv [ 1 ] ) ; 7 // Ponteiro para memória compartilhada 8 int memoriacompartilhada ; 9 // Associando a memória compartilhada 10 memoriacompartilhada = (int ) shmat ( shmid, 0, 0 ) ; 11 // A memória foi associada corretamente? 12 if ( memoriacompartilhada == (int ) 1){ 13 printf ( Não f o i possível associar a memória com o id %d\n, shmid ) ; 14 e x i t ( 1 ) ; 15 } 16 while ( true){ 17 printf ( Consumidor : vou e n t r a r na região c r í t i c a \n ) ; 18 semaforo >P ( ) ; 19 printf ( Consumidor : valor l i d o : %d \n, memoriacompartilhada ) ; 20 semaforo >V ( ) ; 21 printf ( Consumidor : saiu da região c r í t i c a \n ) ; 22 sleep ( 1 ) ; 23 } 24 delete semaforo ; 25 return 0; 26 } Memória compartilhada DCA0109 - Prática de programação concorrente 17 / 18

Análise Análise do problema produtor - consumidor Abordagem A (terminais diferentes) Executar o programa produtor Executar o programa consumidor Analisar as mensagens Finalizar o programa produtor Analisar as mensagens Finalizar o programa consumidor Abordagem B (terminais diferentes) Executar o programa produtor Analisar as mensagens Finalizar o programa produtor Executar o programa consumidor Analisar as mensagens Finalizar o programa consumidor Memória compartilhada DCA0109 - Prática de programação concorrente 18 / 18