Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

Curso de Sistemas da Informação 
 Disciplina Sistemas Operacionais 
 Profa. Semíramis Assis 
 2023.1 
 
ROTEIRO PRÁTICO 01 
Threads e Memória Compartilhada 
 
1 - Instalar as bibliotecas para pthreads no linux -> gerenciador 
de bibliotecas; 
 
2 - Atualizar as bibliotecas padrões de desenvolvimento no 
Linux com o comando 
sudo apt install --reinstall libc6-dev 
 
3 – Criar um arquivo de nome criarThread.c contendo o código: 
 
#include <pthread.h> 
#include <stdio.h> 
#include <unistd.h> 
 
pthread_t t1; 
pthread_t t2; 
 
 
void codigo_tarefa_1(void){ 
 for (int ns=0; ns< 10; ns++){ 
 sleep(1); 
 printf("Tarefa 1: passaram %d segundos\n",ns); 
 } 
} 
 
 Curso de Sistemas da Informação 
 Disciplina Sistemas Operacionais 
 Profa. Semíramis Assis 
 2023.1 
 
void codigo_tarefa_2(void){ 
 for (int ns=0; ns< 15; ns++){ 
 sleep(1); 
 printf("Tarefa 2: passaram %d segundos\n",ns); 
 } 
} 
 
void main(){ 
 
 printf("Inicio\n"); 
 pthread_create(&t1, NULL, (void *) codigo_tarefa_1, NULL); 
 pthread_create(&t2, NULL, (void *) codigo_tarefa_2, NULL); 
 
 pthread_join(t1, NULL); 
 pthread_join(t2, NULL); 
 
 printf("Fim \n"); 
} 
 
4 - Compilar o arquivo criado com o comando 
gcc criarThread.c -o teste -lpthread 
 
5 - Executar o arquivo 
./teste 
 
6 - Alterar o arquivo criarThread.c para receber parâmetros: 
 Curso de Sistemas da Informação 
 Disciplina Sistemas Operacionais 
 Profa. Semíramis Assis 
 2023.1 
 
#include <pthread.h> 
#include <stdio.h> 
#include <unistd.h> 
 
pthread_t t1; 
pthread_t t2; 
 
struct param_t { 
 int tempo; 
 char *nome; 
}; 
 
 
void codigo_tarefa_1(struct param_t *pparam){ 
 for (int ns=0; ns< pparam->tempo; ns++){ 
 sleep(1); 
 printf("%s: passaram %d segundos\n",pparam->nome, ns); 
 } 
} 
 
void codigo_tarefa_2(struct param_t *pparam){ 
 for (int ns=0; ns< pparam->tempo; ns++){ 
 sleep(1); 
 printf("%s: passaram %d segundos\n",pparam->nome, ns); 
 } 
} 
 
void main(){ 
 Curso de Sistemas da Informação 
 Disciplina Sistemas Operacionais 
 Profa. Semíramis Assis 
 2023.1 
 
 
 struct param_t p1,p2; 
 
 p1.tempo = 5; 
 p1.nome = "TAREFA 1"; 
 
 p2.tempo = 10; 
 p2.nome = "TAREFA 2"; 
 
 printf("Inicio\n"); 
 pthread_create(&t1, NULL, (void *) codigo_tarefa_1, (void *) &p1); 
 pthread_create(&t2, NULL, (void *) codigo_tarefa_1, (void *) &p2 
); 
 
 pthread_join(t1, NULL); 
 pthread_join(t2, NULL); 
 
 printf("Fim \n"); 
} 
 
7 - Alterar para executar uma mesma função nas duas threads. 
 
 Curso de Sistemas da Informação 
 Disciplina Sistemas Operacionais 
 Profa. Semíramis Assis 
 2023.1 
 
MEMÓRIA COMPARTILHADA 
 
1 - Executar o teste de memória compartilhada e criação de 
segmento. Criar o arquivo memoriaCompartilhada.c com o 
código: 
 
#include <stdio.h> 
#include <sys/shm.h> 
#include <sys/stat.h> 
 
int main(){ 
 
 int segment_id; 
 char* shared_memory; 
 struct shmid_ds shmbuffer; 
 int segment_size; 
 const int shared_segment_size = 0x6400; 
 
 /* Aloca um segmento de memoria compartilhada */ 
 segment_id = shmget (IPC_PRIVATE, shared_segment_size, 
IPC_CREAT | IPC_EXCL | S_IRUSR | S_IWUSR); 
 
 /*Anexa o segmento de memoria compartilhada */ 
 shared_memory = (char*) shmat (segment_id, 0,0); 
 printf("memoria compartilhada anexada ao endereco %p\n", 
shared_memory); 
 
 Curso de Sistemas da Informação 
 Disciplina Sistemas Operacionais 
 Profa. Semíramis Assis 
 2023.1 
 
 /*Determina o tamanho do segmento*/ 
 shmctl(segment_id, IPC_STAT, &shmbuffer); 
 segment_size = shmbuffer.shm_segsz; 
 printf("tamanho do segmento : %d\n", segment_size); 
 
 /*Escreve um texto no segmento de memoria compartilhada */ 
 sprintf(shared_memory, "Ola mundo!"); 
 /*Desanexa o segmento de memoria compartilhada */ 
 shmdt(shared_memory); 
 
 /*Reanexa o segmento de memoria compartilhada em um 
endereco diferente*/ 
 shared_memory = (char*) shmat (segment_id, 
(void*)0x5000000,0); 
 printf("memoria compartilhada anexada ao novo endereco %p\n", 
shared_memory); 
 
 
 /*Imprimindo o texto da memoria compartilhada*/ 
 printf("%s\n", shared_memory); 
 /*Desanexa o segmento de memoria compartilhada*/ 
 shmdt(shared_memory); 
 
 /*Libera o segmento de memoria compartilhada*/ 
 shmctl(segment_id, IPC_RMID, 0); 
 
 return 0; 
 Curso de Sistemas da Informação 
 Disciplina Sistemas Operacionais 
 Profa. Semíramis Assis 
 2023.1 
 
} 
 
2 - Seguir tutorial 
https://www.tutorialspoint.com/inter_process_communication/int
er_process_communication_shared_memory.htm# 
 
EXERCÍCIO – VALOR 1,0 PONTO 
 
Criar um programa que solicite o nome do usuário e armazene 
em um segmento de memória compartilhada. Criar um código 
para fazer a leitura destes segmentos. 
Antes de iniciar, o usuário deverá informar a quantidade de 
nomes que serão solicitados, sendo necessário que seu 
algoritmo crie segmentos diferentes para cada nome inserido. 
Após esta primeira etapa, criar um código para leitura de 
nomes, sendo uma versão alterada do código inicial, para criar 
threads que façam a contagem da quantidade de caracteres de 
cada nome informado, apresentando uma contagem regressiva 
de acordo com o número de caracteres de cada nome 
armazenado (ex: Joao - 4 caracteres - 4 - 3 - 2 - 1; Maria - 5 
caracteres - 5 - 4 - 3 - 2 -1).

Mais conteúdos dessa disciplina