Linguagem de Programação I

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

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 em Ambiente LINUX. Estudo e testes com a biblioteca pthreads

Sistemas Distribuídos Aula 3

Sistemas Operacionais I

Exclusão Mútua (mutex)

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)

Trabalhando com Processos e Threads em Ambiente LINUX

Eventos. Rotinas Assíncronas

OO Engenharia Eletrônica

Introdução aos Sistemas Operacionais. Threads

Processos. Processo (1) Processo (2) Processo (3) Conceitos Básicos

Processos. Conceitos Básicos

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

Sistemas Operacionais. Processos e Threads

Programação de Sistemas

Arquitetura de Sistemas Operativos

Sistemas Operacionais. Prof. Pedro Luís Antonelli Anhanguera Educacional

Capitulo 6 Threads. Conceito dum Processos

Programação concorrente usando threads POSIX e Java

Programando com Threads em C

Sistemas Operacionais

Fundamentos de Sistemas Operacionais

Redes de Computadores. INF201 - Fundamentos de Sistemas Operacionais - 2º Período

Estruturas de Sistemas Operacionais

LABORATÓRIO SISTEMAS OPERACIONAIS

SSC0640 Sistemas Operacionais I

Processos e Threads. Ciclo 2 AT3. Prof. Hermes Senger

Sistemas Operacionais I Parte VI Threads

Capítulo 5: Escalonamento da CPU. Operating System Concepts 8th Edition

Técnicas Avançadas de Programação

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO SISTEMAS OPERACIONAIS I SEM/12 PROVA I. Tempo de Prova: 100 minutos / Escore Máximo: 300 pontos

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

Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória

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

Sistemas de Informação. Sistemas Operacionais

Processo. Gerência de Processos. Um programa em execução. Centro de Informática/UFPE :: Infraestrutura de Software

Processo. Gerência de Processos. Um programa em execução. Centro de Informática/UFPE :: Infraestrutura de Software

Threads. Sistemas Operacionais. Charles Tim Batista Garrocho. Instituto Federal de São Paulo IFSP Campus Campos do Jordão. charles.garrocho.

Capítulo 2. Multiprogramação. Conteúdo. Objetivo. Recordando. Recordando. DCA-108 Sistemas Operacionais

SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios

Unix: Processos e o Kernel. Sistemas Operacionais

1 System Calls no Linux

Estrutura dos Sistemas Operacionais. Sérgio Portari Júnior

Transcrição:

Linguagem de Programação I Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br

Exemplo: Explorar Templates e Exceções Incrementar com o uso de STL 2

Crie uma função verificarpalindromo() que recebe um vetor como parâmetro. Ela deve retornar true se ele contém um palíndromo e false caso contrário. Exemplo: Um vetor contendo 1, 2, 3, 2, 1 é um palíndromo. E um vetor contendo 1, 4, 3, 2, 1 não é um palíndromo. Crie uma mapa que associa o nome de uma pessoa a um objeto do tipo Pessoa. A classe Pessoa deve ser feita usando templates, armazenando uma variável de tipo arbitrário. Crie um programa que leia entradas e armazene utilizando a classe map. Caso o usuário tente cadastrar uma chave duplicada, uma exceção deve ser lançada. Exercícios 3

Processo - Um conjunto de recursos necessários para a execução duma programa. um espaço de endereçamento (virtual address space) que contêm o texto do programa e os seus dados uma tabela de descritores de arquivos abertos informação sobre processos filhos código para tratar sinais (signal handlers) informação sobre o próprio etc. Processo x thread 4

Uma linha ou contexto de execução, chamada Thread Uma thread tem um programa counter (pc) que guarde informação sobre a próxima instrução a executar Registadores valores das variáveis atuais Stack contem a história de execução com um frame para cada procedimento chamado mas não terminado Processo x thread 5

O processo filho é uma cópia exata do processo que chama a rotina fork(), sendo a única diferença um identificador de processo (pid) diferente Programa principal FORK Spawned processes FORK pid = fork() if (pid == 0) código executado pelo filho else código executado pelo pai if (pid == 0) exit (0); else wait (0); //esperar pelo filho.. JOIN pai JOIN Criação de processos filho e pai do FORK JOIN JOIN JOIN Inter Process Communication Pipes, Shared Memory, Signal etc.

conceito realidade context switch

Os dois conceitos necessários para a execução dum programa, conjunto de recursos e contexto de execução podem ser separados: Processos são usados para agrupar recursos. Threads são as entidades escalonadas para execução no CPU. O modelo de threads 8

Processos versus Threads Heavyweight Process: programas completamente separados com suas próprias variáveis, pilha e alocação de memória IP stack Código Heap Rotinas de interrupção Arquivos Threads: lightweight processes rotinas compartilham o mesmo espaço de memória e variáveis globais stack stack IP IP Código Heap Rotinas de interrupçã Arquivos

Per Thread Items Per Process Items Program Counter Address Space Stack Global Variables Register Set Open Files Child Threads Child Processes State (ready,blocked Timers..) Signals Semaphores Accounting Information Processos versus Threads

conceito Thread pronto para executar address space 0 common runtim x Text program R0 Thread Em execução codigo biblioteca Environ $USER=A1 dados realidade context switch Rn PC x SP y registers CPU high y stack stack memoria

A criação e terminação duma thread nova é em geral mais rápida do que a criação e terminação dum processo novo. A comutação de contexto entre duas threads é mais rápido do que entre dois processos. A comunicação entre threads é mais rápida do que a comunicação entre processos - porque as threads compartilham tudo: espaço de endereçamento, variáveis globais etc. Multi-programação usando o modelo de threads é mais simples e mais portável do que multiprogramação usando múltiplos processos. Threads x processos 12

Existem duas abordagens principais para a implementação de threads. Kernel-level Threads -- System Calls. User-Level Threads -- Thread Libraries. Existem vantagens e desvantagens em ambos os casos. Implementação 13

Vantagens O kernel pode simultaneamente escalonar várias threads do mesmo processo em vários processadores (reais ou virtuais) As rotinas do próprio kernel podem aproveitar threads. Desvantagens: A troca entre threads implica ações do kernel e isto tem um custo que pode ser significativo. Kernel threads 14

Vantagens A troca de Threads não envolve o kernel Não há o custo adicional de execução do kernel O OS não precisa de oferecer apoio para threads portanto é mais simples. Escalonamento pode ser especifico para uma aplicação Uma biblioteca pode oferecer vários métodos de escalonamento portanto uma aplicação poderá escolher o algoritmo melhor para ele. ULTs podem executar em qualquer SO As bibliotecas de código são portáveis Desvantagens Muitas das chamadas ao sistema são bloqueantes e o kernel bloqueia processos neste caso todos as threads dum processo podem ser bloqueados. O kernel vai atribuir o processo a apenas um CPU portanto duas threads dentro do mesmo processo não podem executar simultaneamente numa arquitetura com múltiplas processadores User level threads 15

POSIX 1003.1-2001 pthreads API para gerenciamento de threads >more /usr/include/pthread.h > man pthread_create Threads co-existem num mesmo processo, compartilhando vários recursos, mas são escalonadas separadamente pelo sistema operacional Somente o mínimo necessário de recursos é replicado entre duas threads Pthreads 16

Sem Threads Com Threads Visão geral

Interface portável do sistema operacional, POSIX, IEEE Programa principal pthread_create( &thread1, NULL, proc1, &arg); thread1 proc1(&arg); { Código da thread return(&status); } pthread_join( thread1, NULL ou *status); Pthreads

PThread API Prefix pthread_ pthread_attr_ pthread_mutex_ pthread_mutexattr_ pthread_cond_ pthread_cond_attr pthread_key_ Funcionality Threads themselves and miscellaneous subroutines Thread attributes objects Mutexes Mutex attributes objects Condition variables Condition attributes objects Thread-specific data keys

Usar #include pthread.h Compilar com a opção pthread gcc pthread ex_pthread.c o ex_pthread Como programar

int pthread_create(pthread_t * thread, const pthread_attr_t * attr, void * (*start_routine)(void *), void *arg); Criando uma thread

#include <stdio.h> #include <stdlib.h> #include <pthread.h> void *print_message_function( void *ptr ); main() { pthread_t thread1, thread2; char *message1 = "Thread 1, *message2 = "Thread 2"; int iret1, iret2; iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1); iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2); pthread_join( thread1, NULL); pthread_join( thread2, NULL); printf("thread 1 returns: %d\n",iret1); printf("thread 2 returns: %d\n",iret2); exit(0); } void *print_message_function( void *ptr ) { char *message; message = (char *) ptr; printf("%s \n", message); } pthread_create

Além da alternativa de simplesmente encerrar a função, é possível também void pthread_exit(void *retval); Encerrando uma thread

A rotina pthread_join() espera pelo término de uma thread específica for (i = 0; i < n; i++) pthread_create(&thread[i], NULL, (void *) slave, (void *) &arg);...thread mestre for (i = 0; i < n; i++) pthread_join(thread[i], NULL); Pthread Join

Pode ser que uma thread não precisa saber do término de uma outra por ela criada, então não executará a operação de união. Neste caso diz-se que o thread criado é detached (desunido da thread pai progenitor) Programa principal pthread_create(); Thread pthread_create(); Thread Término Término pthread_exit pthread_create(); Thread Término Detached Threads (desunidas)

Quando dois ou mais threads podem simultaneamente alterar às mesmas variaveis globais poderá ser necessário sincronizar o acesso a este variavel para evitar problemas. Código nestas condição diz-se uma seção critica Por exemplo, quando dois ou mais threads podem simultaneamente incrementar uma variável x /* codigo Seção Critica */ x = x +1 ; Uma seção crítica pode ser protegida utilizandose pthread_mutex_lock() e pthread_mutex_unlock() Pthreads 26

/* Note scope of variable and mutex are the same */ pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; int counter=0; /* Function C */ void functionc() { pthread_mutex_lock( &mutex1 ); counter++ pthread_mutex_unlock( &mutex1 ); } Mutex

Condição de corrida Não assuma uma ordem específica para a execução das threads Um código pode funcionar muito bem em determinados momentos e gerar sérios problemas em outros Thread safe code Use bibliotecas que possuam chamadas thread safe Várias chamadas à mesma função devem ser permitidas Deadlock Fontes de problemas

Exercício usando pthreads Pthreads 29

Notas de aula Claudio Esperança e Paulo Cavalcanti (UFRJ) Notas de aula Allan Lima (citi/ufpe) Referências 30

Marcação 2ª. Prova e trabalho 31

STL Programação Orientada a Eventos Programação concorrente (Threads) (3ª. Prova) Próximas aulas 32

Linguagem de Programação I Carlos Eduardo Batista Centro de Informática - UFPB bidu@ci.ufpb.br