LAB 2 - Programa modelo para criar variável na memória compartilhada e verificar o seu funcionamento. #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; } Resultado: Conclusão: Realmente, a variável P foi inicializada com valor igual a 8752, o processo filho adicionou o valor 5 à variável exibindo o valor 8757 e o pai adicionou o valor 10 à variável exibindo o valor 8767, indicando que os processos incrementaram a mesma posição de memória. Exercícios para o lab: 1) Acesso à memória com ponteiro Faça um programa que inicialize uma variável com um valor e que inicialize um ponteiro para a variável inicializada. Duplique o processo via fork() e altere o valor da variável usando o ponteiro. Ocorreu Segmentation Fault? Explique. 2) Mensagem do dia Faça um programa que: a. Leia do teclado uma mensagem do dia b. Crie uma memória compartilhada com uma chave determinada (por exemplo: ID = 8752) c. Salve a mensagem na memória compartilhada Faça um outro programa que utilize a mesma chave (ID = 8752) e exiba a mensagem do dia para o usuário. 3) Soma de matrizes Faça um programa para somar matrizes de acordo com o seguinte algoritmo a. O primeiro processo irá criar duas matrizes inicializadas e uma terceira vazia em áreas da memória compartilhada. b. Para cada linha da matriz solução, o seu programa deverá gerar um processo para o seu cálculo (use uma matriz 3 x 3). c. O primeiro processo irá imprimir a matriz resultante. 4) Busca paralela em vetor Faça um programa paralelo para localizar uma chave em um vetor, por exemplo, com 100 posições. a. Crie uma memória compartilhada para armazenar o vetor, com dados desordenados, e a divida pelo número de processos (por exemplo: 10 processos) b. Cada processo deve procurar o dado na sua área de memória e informar a posição onde o dado foi localizado. Por exemplo, o primeiro processo procura o dado na posição 1 a 9, o segundo na 10 a 19, etc.