26
Gerências de Processos: Threads Sistemas Operacionais I Prof. Alexandre Duarte : http://alexandrend.com Centro de Informática | Universidade Federal da Paraíba Estes slides são baseados no material que acompanha o livro Operating Systems Concepts de Silberschatz, Galvin and Gagne

Gerências de Processos: Threads

Embed Size (px)

DESCRIPTION

Introduzir a noção de thread, uma unidade fundamental de utilização de CPU e que representa a base da maioria dos sistemas computacionais modernos Questões relacionadas a criação de threads

Citation preview

Page 1: Gerências de Processos: Threads

Gerências de Processos: Threads

Sistemas Operacionais I

Prof. Alexandre Duarte : http://alexandrend.comCentro de Informática | Universidade Federal da Paraíba

Estes slides são baseados no material que acompanha o livro Operating Systems Concepts de Silberschatz, Galvin and Gagne

Page 2: Gerências de Processos: Threads

Objetivos

Introduzir a noç ão de thread, uma unidade fundamental de utilizaç ão de CPU e que representa a base da maioria dos sistemas computacionais modernos

Questões relacionadas a criaç ão de threads

Page 3: Gerências de Processos: Threads

Processo com thread único e com múltiplos threads

Page 4: Gerências de Processos: Threads

Benefícios

Responsividade

Compartilhamento de recursos

Economia

Escalabilidade

Page 5: Gerências de Processos: Threads

Programação com múltiplos núcleos

Sistemas com múltiplos núcleos pressionam os programadores

Os desafios incluem Particionamento das atividades Balanç o Particionamento dos dados Dependência dos dados Teste e depuraç ão

Page 6: Gerências de Processos: Threads

Arquitetura de um servidor multi-threaded

Page 7: Gerências de Processos: Threads

Execução concorrente em um sistema de núcleo único

Page 8: Gerências de Processos: Threads

Execução paralela em um sistema com múltiplos núcleos

Page 9: Gerências de Processos: Threads

Threads do usuário

Gerencia de threads feita por bibliotecas carregadas no nível do usuário

Três principais bibliotecas de threads: POSIX Pthreads Win32 threads Java threads

Page 10: Gerências de Processos: Threads

Threads do Núcleo

Gerenciadas pelo pró prio sistema operacional

Exemplos Windows XP/2000 Solaris Linux Tru64 UNIX Mac OS X

Page 11: Gerências de Processos: Threads

Modelos de Multi-threading

Muitos-para-um

Um-para-um

Muitos-para-muitos

Page 12: Gerências de Processos: Threads

Muitos-para-um

Muitas threads do usuário mapeadas para uma única thread do núcleo

Exemplos: Solaris Green

Threads GNU Portable

Threads

Page 13: Gerências de Processos: Threads

Um-para-um

Cada thread do usuário é mapeada uma uma thread do núcleo

Exemplos Windows NT/XP/2000 Linux Solaris 9 e posterior

Page 14: Gerências de Processos: Threads

Muitos-para-muitos

Permite que muitas threads do usuário sejam mapeadas em muitas threads do núcleo

Exemplos Solaris antes da

versão 9 Windows NT/2000

como o pacote ThreadFiber

Page 15: Gerências de Processos: Threads

Modelo em dois níveis

Similar ao M:M porém também permite que uma thread do usuário seja associada a uma thread do núcleo

Exemplos IRIX HP-UX Tru64 UNIX Solaris 8 e anteriores

Page 16: Gerências de Processos: Threads

Bibliotecas de threads

Bibliotecas de threads oferecem uma API para criaç ão e manipulaç ão de threads

Duas formas primárias de implementaç ão Biblioteca localizada inteiramente no espaç o do

usuário Biblioteca localizada no núcleo com suporte do

SO

Page 17: Gerências de Processos: Threads

Pthreads

Pode ser fornecida tanto no nível do usuário quanto no núcleo

API padrão POSIX (IEEE 1003.1c) para criaç ão e sincronizaç ão de threads

A API especifica unicamente o comportamento da biblioteca, a implementaç ão fica a cargo dos desenvolvedores

Comum em sistemas operacionais UNIX (Solaris, Linux, Mac OS X)

Page 18: Gerências de Processos: Threads

Java Threads

Threads em Java são gerenciados pela JVM

Tipicamente implementados de acordo com o modelo de threads do sistema operacional “hospedeiro”

Threads em Java podem ser criados Estendendo a classe Thread Implementando a interface Runnable

Page 19: Gerências de Processos: Threads

Questões relacionadas a criação de threads

As chamadas de sistema fork() e exec()

Cancelamento de threads Assíncrono versus adiado

Manipulaç ão de sinais Pools de Thread Dados específicos de threads Ativaç ões do escalonador

Page 20: Gerências de Processos: Threads

As chamadas de sistema fork() e exec()

O fork() duplica apenas o thread que invocou a chamada ou todos os threads do programa ?

O que acontece com o exec() ?

Page 21: Gerências de Processos: Threads

Cancelamento de threads

Cancelar uma thread antes de sua conclusão

Duas abordagens Cancelamento assíncrono: termina

a thread alvo imediatamente Cancelamento adiado: permite que

a thread alvo verifique periodicamente se ela deve ser cancelada

Page 22: Gerências de Processos: Threads

Manipulação de sinais

Sinais são utilizados no UNIX para notificar um processo de que um determinado evento ocorreu

Todos os sinais seguem o mesmo padrão São gerados por um evento particular São entregues a um processo São manipulados pelo processo

Opç ões: Entregar o sinal para a thread a qual ele se aplica Entregar o sinal para todas as threads do processo Entregar o sinal para certas threads do processo Escolher uma thread específica para receber todos os sinais do

processo

Page 23: Gerências de Processos: Threads

Pools de threads

Cria um número de threads em um pool onde elas aguardam por trabalho

Vantagens: Geralmente é um pouco mais rápido requisitar

uma thread já existente do que criar uma nova thread

Permite que o número de threads na(s) aplicaç ão(ões) seja limitado ao tamanho do pool

Page 24: Gerências de Processos: Threads

Dados específicos de threads

Permite que cada thread tenha sua pró pria có pia dos dados

Útil quando não se tem controle sobre o processo de criaç ão de threads (ex., quando se usa um thread pool)

Page 25: Gerências de Processos: Threads

Ativações do escalonador

Tanto o modelo M:M quanto o de dois níveis utilizam uma estrutura de dados intermediária (LWP) entre as threads do núcleo e do usuário

O LWP funciona como um processador virtual para a aplicaç ão no qual a aplicaç ão pode agendar a execuç ão de uma thread

O núcleo, em seguida, atribui uma de suas threads para executar a thread do usuário associada a um LWP

Page 26: Gerências de Processos: Threads

Ativações do escalonador

Para esse esquema funciona, o núcleo precisa notificar a aplicaç ão sobre certos eventos de escalonamento de threads

Essa notificaç ão é feita através de um procedimento chamado upcall e a esse esquema de comunicaç ão é conhecido com ativação do escalonador