Trabalhando com Processos e Threads em Ambiente LINUX

Documentos relacionados
Threads em Ambiente LINUX. Estudo e testes com a biblioteca pthreads

Sistemas Operacionais II

Ferramentas para Programação em Processadores Multi-Core

LABORATÓRIO SISTEMAS OPERACIONAIS

Sistemas Operacionais

LABORATÓRIO SISTEMAS DE TEMPO REAL

Na Aula Anterior... O Conceito de Threads

Pthreads. O que são threads? Mario João Junior. Uma thread é um fluxo de execução de instruções que pode ser escalonado pelo sistema operacional.

Threads. Agenda. Threads. Processo. Processo. Processo. Processo. (c) Volnys B. Bernal Versão de 22/3/2012

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

MÓDULO 02 PROCESSOS E THREADS PROCESSOS e THREADS

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 07: PROGRAMANDO COM THREADS EM LINGUAGEM C

Técnicas Avançadas de Programação

EEL770 Sistemas Operacionais

Introdução a Programação Concorrente. Aula 02. Prof. André Luis Meneses Silva

Linguagem de Programação I

Universidade Federal do ABC MCTA Sistemas Operacionais 2019.Q1

Processos. Programas e Processos. Aula 1 - Chamadas ao sistema. José Pedro Oliveira fork exit getpid, getppid wait, waitpid

Arquitetura de Computadores Sistemas Operacionais II

Eventos. Rotinas Assíncronas


Leandro Soares de Sousa (DSc.) Página: Aula 04 - desenvolvimento multithread

Processos Volnys B. Bernal Versão de 20/03/2015. Agenda. Processos. Programa x Processo. Programa x Processo. Programa.

Programação Sistemas

Threads. threads em Linux Taisy Weber

as alterações feitas por um thread num recurso partilhado (ex: fechar um ficheiro) serão "vistaa" pelos outros threads.

Processos. (c) 2005 Volnys B. Bernal Versão de 15/3/2006. Agenda. Processos. Introdução aos Processos. Introdução aos Processos

Exclusão Mútua (mutex)

Programação com Posix Threads

Programação de Sistemas Carris

Sistemas Operacionais

Introdução aos Sistemas Operacionais. Threads

PROCESSOS. Prof. Maicon A. Sartin

Comunicação entre Processos Memória Compartilhada

Sincronização e comunicação entre entidades de processamento. Mutex Volnys Bernal 1. Tópicos. Exclusão Mútua (mutex) Exclusão Mútua (Mutex)

Programação de Sistemas

Programação com Pthreads

Threads

Comunicação entre Processos Memória Compartilhada

! Os primeiros computadores permitiam a execução de apenas um programa de cada vez, com acesso completo aos recursos do sistema

Fluxos de Execução. Um programa seqüencial consiste de um único fluxo de execução, o qual realiza uma certa tarefa computacional.

Leandro Soares de Sousa (DSc.) Página: Parte II

Sistemas de Operação (2018/2019) Teste de Auto-Avaliação Prática

ESTRUTURA DE DADOS (TCC )

Threads

Programando com Threads em C

Manipulação de processos

Unidade 2. Processos Threads Concorrência em Java

OO Engenharia Eletrônica

Threads. Fluxos de Execução. Exemplos de Programas MT (1) Exemplos de Programas MT (2)

E.E.E.P. Dr. Solon Tavares Sistemas Operacionais Prof. Henrique Cordeiro. Programação Concorrente em Linux

SVCs para Controle de Processos no Unix

Programação de Sistemas Cafetaria

Sistemas Operacionais

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

SSC0640 Sistemas Operacionais I

Complementos de Programação. Engenharia Electrotécnica - Electrónica e Computadores. Ano Lectivo: 2005/2006. Ana Madureira. Gestão de Processos

Sistemas de Computação. Threads e Sincronização

Na Aula Anterior... Interrupções por software e hardware; Temporizadores; RTC; Temporizadores via software. Relação Processos Multiprogramação

Tratamento de Sinais

Sistemas Operacionais I

Introdução ao OpenMP

Programação concorrente usando threads POSIX e Java

Processos. Conceitos Básicos

POSIX Threads. Walter Fetter Lages.

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

Sistemas Operacionais I

Processos em Unix. Conteúdo: Definição de Processos em Unix Estrutura, tipo e escalonamento de processos em Unix Processos, Pai, Filho e Zumbi.

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

Linguagem de Programação I

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO

INE 5645 Programação Paralela e Distribuída

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Sistemas Operacionais Prof. Fabrício Sérgio de Paula

Sistemas Operacionais I

Segundo trabalho prático de implementação Sistema de reserva de assentos

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

TAREFAS IMPLEMENTAÇÃO DE TAREFAS AULA 06 Sistemas Operacionais Gil Eduardo de Andrade

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

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017. ALUNO Prof. Bosco

Aula 8 Comandos de Seleção

SOP - TADS Processos. Revisão Ultima aula

BC Sistemas Operacionais. Threads. Aula 04 3 Quadrimestre de Prof. Marcelo Z. do Nascimento.

Carlos Eduardo Batista Centro de Informática - UFPB

OO Engenharia Eletrônica

Aula 10: Funções (Parte III)

Trabalho 10: Simulação de Roteador IPv6

Processos. Conceitos Básicos

Sistemas de Computação

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

Programação de Sistemas Array Sistólico

Processos. Sistemas Operativos 2008 / Multiprogramação

Estruturas de Dados. Módulo 4 Funções. 9/8/2005 (c) Dept. Informática - PUC-Rio 1

SVCs para Controle de Processos no Unix (cont.) Sistemas Operacionais

SVCs para Controle de Processos no Unix

Sistemas Operacionais Aula 07: Scheduling da CPU. Ezequiel R. Zorzal

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

Threads Aula 04 2 Quadrimestre

Transcrição:

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 de manipulação de prioridade de processos; 2. Estudo e teste inicial com pthreads 1. Processos 1- O comando nice atribui um número de prioridade para um processo. Por padrão os processos de usuários são criados com prioridade 0 (zero). Utilize esse comando para inicializar o editor vim com o nível de prioridade 6? Descreva o comando utilizado: A prioridade atribuida é alta ou baixa? obs.: Utilize o comando ps -lax grep vim para verificar a prioridade atribuída ao processo. 2 - O comando renice altera a prioridade de um processo em execução. Utilize esse comando para alterar a prioridade do vim para 7? Descreva o comando utilizado: obs.: o comando ps -lax grep vi para determinar o número do processo. Maiores informações sobre sintaxe, parâmetros, condições de erro podem ser obtidas nas manpages. 3- Programa 1: #include <sys/types.h> #include <unistd.h> pid_t pid; printf("processo pai. PID = %d\n", getpid()); pid = fork(); printf("pid = %d\n",pid); if (pid!= 0) printf("processo pai. PID do filho = %d\n", pid); else printf("processo filho. PID = %d\n", getpid()); 1

Execute o programa. Descreva o que esta ocorrendo? Que comando devo utilizar para criar mais um processo nesse programa? 4. Programa 2: #include <sys/types.h> #include <unistd.h> #include <sys/wait.h> pid_t pid; printf("processo pai. PID = %d\n", getpid()); if ((pid = fork())!= 0) { printf("processo pai. PID do filho = %d\n", pid); wait(null); printf("meu filho morreu\n"); else { sleep(2); /* Filho demora um pouco para executar. */ printf("processo filho. PID = %d\n", getpid()); Implemente esse código Execute o programa. O que esta acontecendo? Qual a finalidade da função wait nesse programa? Se mudar essa instrução por wait4. Qual será o resultado? 2. Threads 5. Threads: Como vimos em aula teórica, um único processo podemos ter vários fluxos escalonáveis de execução, que compartilham uma mesma área de código e dados, mas cada qual tem de forma independente seu próprio contexto, pilha e program counter (PC). Nesse item, faremos uso da biblioteca conhecida como POSIX Threads ou popularmente pthreads. Todo programa em C que usa pthreads deve incluir o arquivo <pthread.h> no início. Para compilar os programas criados em linguagem C, digite: gcc -o nome_do_aplicativo nome_do_programa.c Se estiver trabalhando com thread inclua a opção -lpthread na compilação. 2

Para criarmos uma nova thread usamos a função pthread_create(*t,*a, rotina, arg), onde os argumentos são: t é um ponteiro para uma variável do tipo pthread_t que conterá o identificador da thread recém criada; a é um ponteiro para os atributos da thread. Os atributos são armazenados em uma variável do tipo pthread_attr_t. Um valor NULL indica o uso de valores default. Para detalhes veja pthread_attr_init. 2. rotina é o nome (ponteiro) para a rotina (função) que define o comportamento da thread. arg é um void * que é passado como argumento para a rotina. A nova thread é disparada imediatamente e termina no retorno da função ou pela chamada da função pthread_exit(*ret). Seu argumento, ret aponta uma variável que armazenará o valor de retorno, já que pthread_exit nunca retorna. pthread_exit é de certa forma o equivalente à função exit. Em princípio, uma thread criada desta forma está preparada para sincronização ao final. Este estado é chamado de joinable. Deve haver uma chamada a pthread_join para liberar totalmente os recursos alocados depois do término. Se não houver necessidade de sincronização, pode-se "desconectar" a thread com a função pthread_detach(id). Isto impede a sincronização por join no final da execução mas por outro lado libera os recursos imediatamente, impedindo que esta thread possa ser reconfigurada para um join. Para fazer a sincronização de término com uma thread, usa-se: pthread_join(pthread_t id, void **return); return apontará para o valor de retorno da thread e pode ser NULL. Neste caso o valor de retorno é descartado. Implemente agora o programa abaixo para avaliarmos o comportamento. Complete a função pthread_create. #include <pthread.h> void* f_thread(void *v) { printf("nova Thread.\n"); return NULL; pthread_t thr; 3

if (pthread_create(&thr, NULL, )) fprintf(stderr, "Erro na criação da thread. \n"); 6. Para avaliarmos seu comportamento com multithreading, implemente o programa abaixo. Uma vez executado faça a experiência de remover a linha de código error = pthread_join(tid,null); e avalie novamente comportamento do programa. Em seguida, repita o procedimento mas substitua o código supracitado por error = pthread_detach(tid,null). O que ocrre se modificarmos o valor da função sleep para 10. Utilieza a chamada time para capturar o tempo de execução. Por exemplo: $ time./thread. #include <pthread.h> int count = 0; void work(void) { pthread_t tid; tid = pthread_self(); printf("i am a worker thread %d - count = %d\n", (int) tid, count++); sleep(1); int error,i,n; pthread_t tid,mytid; printf("enter number of threads: "); scanf("%d",&n); mytid = pthread_self(); printf("thread %d is creating threads\n",(int) mytid); for (i=1;i<=n;i++) { error = pthread_create(&tid, NULL,(void *(*)(void *))work, NULL); printf("created thread %d\n",(int) tid); error = pthread_join(tid,null); printf("done forking and joining threads\n"); 4

5