Comunicação entre Processos Memória Compartilhada
|
|
|
- Maria Clara Mangueira Bernardes
- 8 Há anos
- Visualizações:
Transcrição
1 Comunicação entre Processos Memória Compartilhada 3/23/17 1
2 Métodos de comunicação entre processos Memória compartilhada Sinais Pipes Troca de mensagens
3 Memória Compartilhada
4 Memória compartilhada Permite a comunicação entre processos apenas lendo e/ou escrevendo em uma região de memória Forma mais rápida de comunicação entre processos Não necessita chamadas ao sistema (system call) para comunicação Ausência de suporte por parte do kernel em sincronização É a solução para que processos pai e filho acessem a mesma posição de memória.
5 Modelo Um processo aloca a memória A memória é alocada em múltiplos do tamanho da página do sistema (tipicamente 4kB) Outros processos se conectam (attach) a esta memória Processos podem se comunicar escrevendo e lendo dessa memória Ao término Todos os processos de desconectam (detach) da memória Um processo libera a memória alocada
6 Alocação da memória Alocar espaço em memória utilizando shmget() Definido em <sys/shm.h> int shmget(key_t key, size_t size, int shmflg); Onde: key: chave de identificação da memória ou IPC_PRIVATE para gerar um identificador novo size: quantidade MÍNIMA de memória a ser alocada shmflg: modo de criação normalmente 0 (zero) mais detalhes no próximo slide Retorna: Um identificador (IPC ID) da área alocada em caso de sucesso -1 em caso de erro
7 Flags de modo de criação <sys/ipc.h> IPC_CREAT : Create entry if key does not exist. IPC_EXCL : Fail if key exists. IPC_NOWAIT : Error if request must wait. <sys/stat.h> S_IRWXU : Read, write, execute/search by owner. S_IRUSR : Read permission, owner. S_IWUSR : Write permission, owner. S_IXUSR : Execute/search permission, owner. S_IRWXG : Read, write, execute/search by group. S_IRGRP : Read permission, group. S_IWGRP : Write permission, group. S_IXGRP : Execute/search permission, group. S_IRWXO : Read, write, execute/search by others. S_IROTH : Read permission, others. S_IWOTH : Write permission, others. S_IXOTH : Execute/search permission, others.
8 Anexar memória compartilhada (attach) Usar shmat() para anexar o segmento já criado com shmget() Definido em <sys/shm.h> void *shmat(int shmid, const void *shmaddr, int shmflg); Onde: shmid: identificador da área já alocada shmaddr: endereço de referência para a alocação da página normalmente 0 (zero) ou NULL (nulo) shmflg: modo como o endereço da página deve ser anexado normalmente 0 (zero) Retorna: O endereço da página em caso de sucesso -1 em caso de falha
9 Desanexar memória compartilhada (detach) Desanexa o segmento anexado por shmat() Definido em <sys/shm.h> int shmdt(const void *shmaddr); Onde: shmaddr : endereço do segmento obtido por shmat() Retorna: 0 (zero) no caso de sucesso -1 em caso de falha
10 Controle da memória compartilhada Informações sobre o segmento anexado com shmctl() Definido em <sys/shm.h> int shmctl(int shmid, int cmd, struct shmid_ds *buf); Onde: shmid: identificador da área já alocada cmd: comando, que pode ser: IPC_STAT: preenche a estrutura shmid_ds IPC_SET: modifica os atributos shm_perm.uid, shm_perm.gid, shm_perm.mode de acordo com a estrutura shmid_ds IPC_RMID: remove a memória compartilhada identificada por shmid buf: ponteiro para a estrutura shmid_ds definida em <sys/shm.h> Retorna: 0 em caso de sucesso -1 em caso de falha
11 Estrutura shmid_ds e ipc_perm <sys/shm.h> A estrutura shmid_ds possui, pelo menos, estes campos: struct ipc_perm shm_perm : Operation permission structure. size_t shm_segsz : Size of segment in bytes. pid_t shm_lpid : Process ID of last shared memory operation. pid_t shm_cpid : Process ID of creator. shmatt_t shm_nattch : Number of current attaches. time_t shm_atime : Time of last shmat (). time_t shm_dtime : Time of last shmdt (). time_t shm_ctime Time of last change by shmctl (). <sys/ipc.h> A estrutura ipc_perm tem, pelo menos, estes campos: uid_t uid : Owner's user ID. gid_t gid : Owner's group ID. uid_t cuid : Creator's user ID. gid_t cgid : Creator's group ID. mode_t mode : Read/write permission.
12 Exemplo: O seguinte programa cria uma área de memória compartilhada, representando um número inteiro O programa cria um processo filho Ambos incrementam a memória compartilhada e apresentam o resultado do incremento O filho incrementa em 5 unidades, enquanto o pai em 10
13 #include <sys/ipc.h> #include <sys/shm.h> #include <sys/stat.h> #include <unistd.h> #include <sys/wait.h> int main (int argc, char *argv[]) { int segmento, *p, id, pid, status; // aloca a memória compartilhada segmento = shmget (IPC_PRIVATE, sizeof (int), IPC_CREAT IPC_EXCL S_IRUSR S_IWUSR); // associa a memória compartilhada ao processo p = (int *) shmat (segmento, 0, 0); // comparar o retorno com -1 *p = 8752; if ((id = fork()) < 0) { puts ("Erro na criação do novo processo"); exit (-2); } else if (id == 0) { *p += 5; printf ("Processo filho = %d\n", *p); } else { pid = wait (&status); *p += 10; printf ("Processo pai = %d\n", *p); } // libera a memória compartilhada do processo shmdt (p); // libera a memória compartilhada shmctl (segmento, IPC_RMID, 0); } return 0;
14 Perguntas?
15 1) Soma de matrizes Faça um programa para somar matrizes de acordo com o seguinte algoritmo O primeiro processo irá criar duas matrizes preenchidas e uma terceira vazia em 3 áreas de memória compartilhada. Para cada linha da matriz solução, o seu programa deverá gerar um processo para o seu cálculo. OBS: implemente as matrizes como vetores de tamanho (linha x coluna) e aloque a shared memory para os vetores correspondentes, pois acessar os elementos (i,j) é complexo.
16 2) Mensagem do Dia Faça um programa que: Leia uma mensagem do dia Crie uma memória compartilhada com a chave 8752 Salve a mensagem na memória Faça um outro programa que utilize a mesma chave (8752) e exiba a mensagem do dia para o usuário
17 3) Busca paralela em vetor Faça um programa paralelo para localizar uma chave em um vetor. Crie uma memória compartilhada com dados numéricos inteiros e desordenados e a divida pelo número de processos Cada processo deve procurar o dado na sua área de memória e informar a posição onde o dado foi localizado.
Comunicação entre Processos Memória Compartilhada
Comunicação entre Processos Memória Compartilhada 8/30/18 1 Métodos de comunicação entre processos Memória compartilhada Sinais Pipes Troca de mensagens Memória Compartilhada Memória compartilhada Permite
Memória compartilhada
Memória compartilhada Luiz Affonso Guedes 1 Ivanovitch Silva 1 [email protected] [email protected] 1 Universidade Federal do Rio Grande do Norte 15 de outubro de 2009 Memória compartilhada DCA0109 - Prática
Exercícios Avaliativos Memória Compartilhada
1ª Avaliação Faculdades Integradas de Caratinga Sistemas Distribuídos Jacson RC Silva Exercícios Avaliativos Memória Compartilhada Uma posição de memória compartilhada é identificada por uma chave. Essa
Comunicação Inter-Processo em Unix. Pipes FIFO (Named Pipes) Pipes
Comunicação Inter-Processo em Unix Pipes FIFO (Named Pipes) 1 Pipes 2 1! Comunicação entre pai e filho Ao chamar um fork(), processos pai e filho deixam de compartilhar memória Como fazer então para que
Memória partilhada em Unix SysV
Memória partilhada em Unix SysV A forma mais geral de comunicação entre processos é através de memória partilhada. segmento de memoria partilhada Processo A Processo B p q Criação de um segmento de memória
tutorial. man fork man pthread_create man pthread_join man wait man sleep
Abaixo, você encontrá dicas para lhe ajudar a fazer o 1º trabalho de SOI, que está descrito na página do curso. Lembrando que essas dicas visam apenas o auxilio nas partes mais problemáticas do trabalho
Comunicação entre Processos
Comunicação entre Processos Pipes Redirecionamento de entrada e saída 4/19/18 1 O Pipe: Características (1) Canal de comunicação entre processos parentes, usando a politica First-In-First-Out (FIFO) Tipicamente,
MAC422/5753 Sistemas Operacionais
MAC422/5753 Sistemas Operacionais Prof. Marcel P. Jackowski Aula #8 Sincronização: Semáforos, Barreiras e Monitores Jantar dos Filósofos Cinco filósofos que somente comem e pensam Cada um deles precisa
Comunicação entre Processos Named Pipes (FIFO)
Comunicação entre Processos Named Pipes (FIFO) 5/17/18 1 Named pipe (FIFO) FIFO permite que dois processos quaisquer se comuniquem É um tipo especial de arquivo visível no sistema de arquivos Na troca
Anexo 1 Processos UNIX Anexo 2 Pipes UNIX Anexo 3 IPC UNIX ANEXOS
Anexo 1 Processos UNIX Anexo 2 Pipes UNIX Anexo 3 IPC UNIX ANEXOS ANEXO 1 PROCESSOS NO UNIX Processos são o coração do sistema UNIX. A grande maioria é gerada a partir da chamada de sistema fork. Quando
BCC202 - Estrutura de Dados I
BCC202 - Estrutura de Dados I Aula 02: Alocação Dinâmica de Memória Reinaldo Fortes Universidade Federal de Ouro Preto, UFOP Departamento de Ciência da Computação, DECOM Website: www.decom.ufop.br/reifortes
Exercícios. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal
Exercícios 1) Crie uma função que recebe os coeficientes de uma função do 2o. grau e retorna as raízes sem usar vetor. 2) Faça um programa que acha o maior e o menor inteiro dentro de um vetor de 10 inteiros,
Alocação Dinâmica em C
Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Alocação Dinâmica em C Profa Rosana Braga Adaptado de material preparado pela profa Silvana Maria Affonso de Lara
http://www.csl.mtu.edu/cs4411/www/notes/process/fork/create.html
http://www.csl.mtu.edu/cs4411/www/notes/process/fork/create.html FORK() SYSTEM CALL * UTILIZADO PARA CRIAR SUBPROCESSO * PROCESSO QUE CRIA É PAI * PROCESSO CRIADO É O FILHO * APÓS A CRIAÇÃO AMBOS OS PROCESSO
Ponteiros. Introdução e Alocação Dinâmica
Ponteiros Introdução e Alocação Dinâmica Conceito Um PONTEIRO ou APONTADOR é uma variável usada para armazenar um endereço de memória. Normalmente, o endereço armazenado em um PONTEIRO é a posição de uma
Comunicação entre processos 2ª parte (IPC InterProcess Communication)
SISTEMAS OERATIVOS 12 Comunicação entre processos 2ª parte (IC Interrocess Communication) Notas: 1. Deve ser criada a biblioteca libnet.a (referente ao código do livro [2] da bibliografia) antes de testar
I/O de baixo-nível em ficheiros
7 I/O de baixo-nível em ficheiros Sumário: Introdução Funções de entrada/saída de baixo-nível Referência bibliográfica: W. Stevens. Advanced Programming in the UNIX Environment. Addison-Wesley, 1992 (cap.3,
Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal
Exercício Crie uma função que recebe o número de dias até um determinado evento e calcula e retorna o equivalente em meses, semanas e dias, sem usar vetor ou o conceito de vetor. Considerar que todos os
7. Memória partilhada e sincronização em UNIX
7. Memória partilhada e sincronização em UNIX 7.1. Memória partilhada Os sistemas Unix derivados do Unix System V, e outros compatíveis (quase todos), definem serviços que permitem partilhar entre vários
LABORATÓRIO SISTEMAS OPERACIONAIS
FACULDADE: CENTRO UNIVERSITÁRIO DE BRASÍLIA UniCEUB CURSO: CIÊNCIA DA COMPUTAÇÃO DISCIPLINA: SISTEMAS OPERACIONAIS CARGA HORÁRIA: 75 H. A. ANO/SEMESTRE: 2016/02 PROFESSOR: EDUARDO FERREIRA DOS SANTOS HORÁRIOS:
Introdução à Ciência da Computação I. Alocação Dinâmica. Prof. Claudio Fabiano Motta Toledo
Introdução à Ciência da Computação I Alocação Dinâmica Prof. Claudio Fabiano Motta Toledo Sumário Funções para alocação de memória Ponteiros para ponteiros 8/12/16 2 Funções para alocação de memória malloc(),
Curso de Programação C em Ambientes Linux Aula 05
Curso de Programação C em Ambientes Linux Aula 05 Centro de Engenharias da Mobilidade - UFSC Professores Gian Berkenbrock e Giovani Gracioli http://www.lisha.ufsc.br/c+language+course+resources Conteúdo
Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória
Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Alocação Dinâmica de Memória Alocação Estática x Dinâmica C: dois tipos de alocação de memória: Estática e Dinâmica Na alocação estática, o espaço
Criação de Processos Fork( ) Exec( )
Criação de Processos Fork( ) Exec( ) 8/23/18 1 Chamadas de Sistema: Process Management 2 Chamada fork( ) / exec( ) 3 Esboço de uma shell while (TRUE) { /* repeat forever */ type_prompt( ); /* display prompt
Ponteiros - Parte I. Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória
Ponteiros - Parte I Ponteiros, Ponteiros e Vetores, Algoritmo Bubble Sort, Alocação Dinâmica de Memória Ponteiros Um ponteiro é uma variável que contém um endereço de memória. Esse endereço é normalmente
Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica
Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: ponteiros e alocação dinâmica Prof. Renato Pimentel 1 Ponteiros 2 Prof. Renato Pimentel 1 Ponteiros: introdução Toda a informação
ALOCAÇÃO DINÂMICA DE MEMORIA Lista 10. A linguagem C/C++ possui recursos para alocação dinâmica de memoria.
ALOCAÇÃO DINÂMICA DE MEMORIA Lista 10 A linguagem C/C++ possui recursos para alocação dinâmica de memoria. As funções que trabalham com alocação de memoria se encontram na biblioteca void *calloc(int
Algoritmos e Estruturas de dados
Algoritmos e Estruturas de dados Listas Encadeadas Prof. Dr. Fábio Rodrigues de la Rocha (Listas Encadeadas) 1 / 21 Definição: Anteriormente estudamos listas encadeadas que foram implementadas como vetores
Introdução a Programação. Ponteiros e Vetores, Alocação Dinâmica
Introdução a Programação Ponteiros e Vetores, Alocação Dinâmica Tópicos da Aula Hoje aprenderemos que existe uma forte relação entre ponteiros e vetores Associação entre ponteiros e vetores Ponteiros constantes
1 Exercícios com ponteiros
Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Oitava Aula Prática - 29 de outubro de 2010 O objetivo desta aula prática é exercitar ponteiros e funções. 1 Exercícios com ponteiros
Comunicação entre pai e filho
Comunicação entre pai e filho Ao chamar um fork(), processos pai e filho deixam de compartilhar memória Como fazer então para que o resultado de um processo possa ser recebido pelo outro? Exemplos: Processo
Trabalhando com Processos e Threads em Ambiente LINUX
Objetivo Universidade Federal do ABC Disciplina: BC 1518 Sistemas Operacionais (SO) Prática: Processo/Threads Atividade 3 Trabalhando com Processos e Threads em Ambiente LINUX 1.Trabalhar com comandos
Matrizes Esparsas. Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista
Matrizes Esparsas SCC0202 - Algoritmos e Estruturas de Dados I Prof. Fernando V. Paulovich *Baseado no material do Prof. Gustavo Batista http://www.icmc.usp.br/~paulovic [email protected] Instituto
Alocação de Memória. Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR)
Alocação de Memória Linguagem de Programação Estruturada 1 Alocação dinâmica e ponteiros Lucas Ferrari de Oliveira Professor Adjunto Universidade Federal do Paraná (UFPR) Sumario Introdução Alocação Estática
Pthreads API. Criação de Threads: usando Pthreads
Pthreads API The POSIX 1003.1-2001 standard defines an application programming interface (API) for writing multithreaded applications. This interface is known more commonly as pthreads. 6.1 Criação de
DAS5102 Fundamentos da Estrutura da Informação
Ponteiros e Funções Funções ou sub-rotinas são parcelas de código que podem ser invocadas a partir do programa principal ou até mesmo por outras sub-rotinas. Elas têm como objetivo a execução de uma tarefa
1/34 GESTÃO DINÂMICA DE MEMÓRIA
1/34 GESTÃO DINÂMICA DE MEMÓRIA Memória Estática 2/34 Memória Estática Exemplo #include main() { int V[300], N; do{ printf ( N =? ); scanf ( %d, &N); while ((N < 0) (N > 300); for (i = 0; i
Aula 06 Introdução à Programação Matrizes
Aula 06 Introdução à Programação Matrizes Prof. Gustavo Callou [email protected] [email protected] Roteiro Matrizes Unidimensionais (Vetor) Bidimensionais String Exercícios Gustavo Callou DEINFO/UFRPE
ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória
ALGORITMOS E ESRUTRA DE DADOS I Ponteiros Passagem por Valor e Referência Alocação de Memória 2 Agenda Ponteiros Conceitos gerais O que é Ponteiro? Declaração de Ponteiros Operadores para Ponteiros Exemplos
INF 1007 Programação II
INF 1007 Programação II Aula 08 Vetor de Ponteiros Edirlei Soares de Lima Vetor de Cadeia de Caracteres Um vetor de cadeia de caracteres pode ser alocado de duas formas: Alocação
Alocação Dinâmica de Memória
Alocação Dinâmica de Memória Luiz Chaimowicz, Raquel O. Prates, Pedro O.S. Vaz de Melo Algoritmos e Estruturas de Dados II DCC UFMG Alocação Estática x Dinâmica C: dois tipos de alocação de memória: Estática
TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO
TÉCNICAS DE LINGUAGEM DE PROGRAMAÇÃO Ponteiros Definição Variável: área de memória que armazena dados de um certo tipo. Na memória, toda variável possui um endereço. Um Ponteiro é uma variável especial
Linguagem C: Ponteiros - Alocação Dinâmica
Prof. Paulo R. S. L. Coelho [email protected] Faculdade de Computação Universidade Federal de Uberlândia GEQ007 Organização 1 Ponteiros Alocação Dinâmica de Memória 2 3 4 Organização Ponteiros Alocação
Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C
Estruturas de Dados Revisão de Ponteiros Prof. Ricardo J. G. B. Campello Sumário Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Operações Ponteiros e Arranjos
Ponteiros e Alocação de Memória
Algoritmos e Estrutura de Dados I Ponteiros e Alocação de Memória Prof. Paulo Henrique Pisani fevereiro/2019 Memória Podemos entender a memória como um grande vetor de bytes devidamente endereçados: 0x1051
Comunicação entre Processos
Comunicação entre Processos Canal de comunicação Arquitectura da comunicação Modelos de comunicação 8/28/2003 José Alves Marques 1 Necessidade da Comunicação A sincronização entre processos permitiu que
Métodos Computacionais. Vetores e Matrizes Dinâmicas
Métodos Computacionais Vetores e Matrizes Dinâmicas Vetores Um programa para o cálculo da média Média m n i= = 1 n x i Variância v n i= = 1 ( x i n m) 2 A forma mais simples de estruturar um conjunto de
A regra de acesso aos dados de uma fila é a seguinte: O primeiro elemento que entra (na fila) é o primeiro que sai (FIFO first in, first out).
Fila Algumas aplicações impõem regras de acesso às informações armazenados em estruturas de dados, restringindo como os dados são inseridos e removidos da estrutura. A fila, também conhecida como QUEUE,
Alocação Estática e Dinâmica. Prof. M.Sc. Mariella Berger
Alocação Estática e Dinâmica Prof. M.Sc. Mariella Berger http://www.inf.ufes.br/~mberger [email protected] [email protected] Alocação Estática Estratégia de alocação de memória na qual toda a
Computação I - C Prova /10/ Profs. Adriano Cruz e Valeria Bastos
Computação I - C Prova 2 2016-2 14/10/2016 - Profs. Adriano Cruz e Valeria Bastos Nome: DRE: Observação: Justifique todas as respostas dadas. Some nte serão aceitas respostas com justificativas. Questão
Módulo 5 Vetores e Alocação Dinâmica
Estruturas de Dados Módulo 5 Vetores e Alocação Dinâmica 1/9/2005 (c) Dept. Informática - PUC-Rio 1 Referências Waldemar Celes, Renato Cerqueira, José Lucas Rangel, Introdução a Estruturas de Dados, Editora
Modulo 12: alocação dinâmica de memória
PROGRAMAÇÃO DE COMPUTADORES V - TCC- 00.323 Modulo 12: alocação dinâmica de memória Aura - Erick [email protected], [email protected] Roteiro porque e como utilizar a alocação dinâmica funções: malloc (
REVISÃO DE C. Vanessa Braganholo Estruturas de Dados e Seus Algoritmos
REVISÃO DE C Vanessa Braganholo Estruturas de Dados e Seus Algoritmos REVISÃO DE C Ponteiros Alocação dinâmica de memória Recursão INSTITUTO DE COMPUTAÇÃO - UFF 2 PONTEIROS PONTEIROS C permite o armazenamento
PONTEIROS E LISTAS. Kalinka Regina Lucas Jaquie Castelo Branco
PONTEIROS E LISTAS Kalinka Regina Lucas Jaquie Castelo Branco [email protected] ALOCAÇÃO DINÂMICA DE MEMÓRIA Pode-se assumir que as variáveis declaradas na cláusula variável do pseudo-código do algoritmo
