Gerências de Processos: Threads

Post on 07-Jul-2015

2.164 views 0 download

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

Transcript of 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

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

Processo com thread único e com múltiplos threads

Benefícios

Responsividade

Compartilhamento de recursos

Economia

Escalabilidade

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

Arquitetura de um servidor multi-threaded

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

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

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

Threads do Núcleo

Gerenciadas pelo pró prio sistema operacional

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

Modelos de Multi-threading

Muitos-para-um

Um-para-um

Muitos-para-muitos

Muitos-para-um

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

Exemplos: Solaris Green

Threads GNU Portable

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

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

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

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

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)

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

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

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() ?

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

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

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

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)

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

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