Introdução aos Sistemas Operacionais. Threads

Documentos relacionados
Exclusão Mútua (mutex)

Ferramentas para Programação em Processadores Multi-Core

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)

Na Aula Anterior... O Conceito de Threads

Sistemas Operacionais

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.

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

LabSO Gerência de Processos. Retrospectiva da aula passada... Na aula passada... Na aula passada...

Sistemas Operacionais II

Arquitetura de Computadores Sistemas Operacionais II

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

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

Sistemas de Computação. Processos e escalonamento

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

Multiprocessamento. Escalonamento de Processos: Algoritmos. Escalonamento em POSIX. Escalonamento de Threads. Padrão de Execução dum Processo

Escalonamento (Exclusão Mútua)

Davidson Rodrigo Boccardo

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

Threads ou Processos Leves

Sistemas Operacionais

POSIX Threads. Walter Fetter Lages.

Programação concorrente usando threads POSIX e Java

Unix Processos. Geraldo Braz Junior

Capítulo 2 Processos e Threads

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

Sistemas Operacionais. Escalonamento de processos

Sistemas Operacionais

SISTEMAS OPERACIONAIS. 2ª. Lista de Exercícios

Sistemas Distribuídos Aula 3

Threads. threads em Linux Taisy Weber

Linguagem de Programação I

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

Sistemas Operativos: Escalonamento de Processos

Sistemas Operacionais. Universidade Federal de Minas Gerais. Aula 3. Escalonamento

Chapter 4: Threads. Operating System Concepts 8th Edition

Sistemas Operacionais Aula 7

Escalonamento de Processos Estratégias de Escalonamento de Processos

Sistemas Operacionais de Tempo Real. Sérgio Campos

Estratégias de Escalonamento de Processos

Sistemas Operacionais

Sistemas Operacionais

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

Sistemas Operacionais. Prof. André Y. Kusumoto

Sistemas Operacionais

Programação de Sistemas em Tempo Real

Sistemas Operacionais II

Sistemas Operacionais. Universidade Federal de Minas Gerais. Aula 2. Gerência de Processos

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais. Threads. Prof. Edwar Saliba Júnior Março de Unidade Threads

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

Sistemas Operativos: Implementação de Processos

AULA Nº 08 SISTEMAS OPERACIONAIS. Threads

Resumo: Sistemas Operacionais Abertos

Sincronização e Comunicação entre Processos. Sincronização e Comunicação Volnys Bernal 1. Agenda

OO Engenharia Eletrônica

Sistemas Operacionais

Sistemas Operacionais: Sincronização entre processos

Sistemas Operacionais I

Sistemas Operacionais II. Linux 2: Threads, Escalonamento, Gerenciamento de Memória e Sistemas de Arquivos

Memória Compartilhada

Sistemas Operacionais. Conceito de Processos

AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 12 - Threads e Concorrência em Java

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

Teste de Sistemas de Operação 30 de Maio de 2009

Trabalhando com Processos e Threads em Ambiente LINUX

ENADE 2011 SISTEMAS OPERACIONAIS

Lista de Exercícios de INF1019

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

LabSO Gerência de Processos. Processos. Porque eu preciso entender este assunto?

Sistemas Operacionais I

Conceito de Processo. Estados de Processos. Diagrama de Estados de Processos

Algoritmos de escalonamento

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

ASOP - Arquitecturas e Sistemas Operativos (2009/10) 2 a Parte do Exame (Sistemas Operativos/A) 5 de Julho de 2010

Infra-Estrutura de Software

Sincronização e Comunicação entre Processos. Adão de Melo Neto

SOP - TADS Threads. Revisão Ultima aula. Programa em execução Cada processo têm sua própria CPU

Retrospectiva da aula passada... Escalonamento. Na aula passada... Comunicação entre processos (-- O jantar dos filósofos --)

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

Processos Concorrentes

SISTEMAS OPERACIONAIS. 1ª. Lista de Exercícios

Sistemas Operacionais II

Programando com Threads em C

Características Linux - CentOS

SSC0640 Sistemas Operacionais I

Sistemas de Informação. Sistemas Operacionais

Ferramentas para Programação em Processadores Multi-Core

Infra-Estrutura de Software. Escalonamento

SISTEMAS OPERACIONAIS. TÁSSIO JOSÉ GONÇALVES GOMES

Sistemas Operacionais

Definição. ? Algoritmo de Escalonamento de CPU. ? Algoritmo do S.O. que determina qual o próximo processo a ocupar a CPU

Programação Concorrente com Thread Java. Luiz Affonso Guedes Sistemas Distribuidos

Introdução ao OpenMP

Thread. Thread. Sistemas Operacionais. Leonard B. Moreira. UNIVERSIDADE ESTÁCIO DE SÁ fevereiro, / 41

SOP - TADS Escalonamento de Processos

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

SISTEMAS EMBARCADOS. Programação Concorrente e CMSIS RTOS. Prof. André Schneider de Oliveira

Transcrição:

Introdução aos Sistemas Operacionais Threads Eleri Cardozo FEEC/Unicamp O que é uma Thread? Uma thread (linha de controle) é uma unidade de execução e de controle, alocação e compartilhamento de recursos interna ao processo. Processo Threads Contexto (threads) Contexto (processo)

Motivações para Threads Minimizar a troca de contexto causada por processos que bloqueiam. Facilitar a implementação de programas concorrentes: - Grau mais fino de concorrência. - Facilidade de comunicação e sincronização inter-threads. - Troca de contexto mais rápida que processos (e sem influênciar o processo de paginação). - Criação e finalização mais rápida que processos (idem). Modelos de Threads Modelos de threads ditam como as threads se relacionam com o núcleo do sistema operacional. Quando o núcleo do sistema operacional não provê suporte a threads, é possível implementar threads no espaço do usuário por meio de bibliotecas específicas (por exemplo, pth - GNU Portable Threads). Este cenário é raro na atualidade. Quando o núcleo do sistema operacional provê suporte a threads, é possível utilizar threads por meio de chamadas de sistema específicas (por exemplo, pthreads - POSIX Threads). Este cenário é o mais comum na atualidade.

Modelos de Threads Problemas com threads no espaço do usuário: Apenas uma thread executa por vez (não tira proveito de processadores multicore). Não é possível interromper a execução de uma thread (a biblioteca de threads não pode definir um manipulador de interrupção de relógio!) Todas as chamadas bloqueantes devem ser redefinidas pela biblioteca de threads (pth define apenas um subconjunto). Exemplo: POSIX Threads #include <pthread.h> // definicao de thread void* thread1(void *p) { printf("thread recebeu parametro: %s\n", (char *)p); dowork(p); } // programa principal main() { pthread_t pth; pthread_create(&pth, NULL, thread1, "Alo thread"); pthread_join(pth, NULL); // espera thread terminar }

Comunicação Inter-threads Como threads compartilham a área de dados do processo, a comunicação inter-threads por memória compartilhada é a mais natural. Este mecanismo não requer a intermediação do sistema operacional, exceto para fins de sincronização. Pilha Dados área compartilhada Texto Thread 1 Thread 2 Sincronização Inter-threads Mutexes: semáforos binários (inicializados em 1). Variáveis de condição: permitem o compartilhamento de mutexes com o objetivo de evitar espera ocupada (polling). Tal como os mecanismos de sincronização inter-processo, mutexes e variáveis de condição devem ser providos pelo núcleo do sistema operacional.

Sincronização Inter-threads Exemplo do uso de variáveis de condição: problema produtor-consumidor. Thread mestre (produtora) Buffer Mutex? Variável de condição Threads trabalhadoras (consumidoras) Sincronização Inter-threads Implementação (ineficiente!) das threads consumidoras: #include <pthread.h> pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; while(1) { // espera ocupada pthread_mutex_lock(&m); if(buffer.size == 0) { pthread_mutex_unlock(&m); usleep(10000); } else break; } // do work pthread_mutex_unlock(&m);

Sincronização Inter-threads Implementação (eficiente!) das threads consumidoras: #include <pthread.h> pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t c = PTHREAD_COND_INITIALIZER; pthread_mutex_lock(&m); if(buffer.size == 0) pthread_cond_wait(&c, &m); // do work pthread_mutex_unlock(&m); Sincronização Inter-threads Implementação (eficiente!) da thread produtora: #include <pthread.h> pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER; pthread_cond_t c = PTHREAD_COND_INITIALIZER; pthread_mutex_lock(&m); // do work pthread_cond_signal(&c, &m); pthread_mutex_unlock(&m);

Escalonamento de Threads O escalonamento de threads é idêntico ao de processos, ou seja, cada thread tem seu contexto salvo/restaurado quando a thread perde/recupera a CPU. Escalonamento de Threads Escalonamento não preemptivo (threads no nível do usuário): threads executam até bloquear ou terminar. Escalonamento preemptivo (threads no nível do núcleo): threads são escalonadas por time-sharing ou por prioridades. Tal como processos, Linux suporta escalonamento de threads por prioridades tipo FIFO ou RR (Round Robin). Os sistemas operacionais atuais escalonam threads, ou seja, o processo perde a CPU quando expira o quantum de CPU ou quando não existe nenhuma se suas threads no estado de pronto.

Escalonamento de Threads #include <pthread.h> main() { pthread_t pth; pthread_attr_t ta; // atributos de escalonamento struct sched_param sp; // pars. de escalonamento // obtem a maxima prioridade que uma thread pode ter sp.sched_priority = sched_get_priority_max(sched_fifo); // define parametros de escalonameento pthread_attr_init(&sp); pthread_attr_setinheritsched(&ta, PTHREAD_EXPLICIT_SCHED); pthread_attr_setschedpolicy(&ta, SCHED_FIFO); pthread_attr_setschedparam(&ta, &sp); // cria thread com prioridade explicita pthread_create(&pth, &ta, thread1, "Alo thread"); pthread_join(pth, NULL); // espera thread terminar } Threads e a Chamada fork O que acontece quando um programa que iniciou múltiplas threads executa a chamada fork? (a) O processo filho inicia com todas as threads em execução no processo pai. (b) O processo filho é criado apenas com a thread principal (função main). No Unix ocorre a alternativa (b). Pior ainda, os mutexes e as variáveis de condição no processo filho assumem um estado indefinido.

Threads em Sistemas de Tempo Real Em sistemas de tempo real deve-se evitar a criação e destruição frequente de threads durante a execução do sistema (o overhead é baixo mas não desprezível). É preferível a criação de um pool de threads na inicializaçao e, eventualmente, um ajuste do tamanho do pool durante a execução do sistema. As threads do pool são sincronizadas com mutexes e variáveis de condição. Exemplo: Servidor Multithreaded

Atividades Práticas A biblioteca pthread Criação de threads Mutexes Variáveis de condição