• Nenhum resultado encontrado

Sistemas Operativos Cap. IV Threads. Prof. José Rogado Universidade Lusófona

N/A
N/A
Protected

Academic year: 2021

Share "Sistemas Operativos Cap. IV Threads. Prof. José Rogado Universidade Lusófona"

Copied!
34
0
0

Texto

(1)

Sistemas Operativos

Cap. IV

Threads

Prof. José Rogado

jose.rogado@ulusofona.pt

(2)

Threads

 Necessidades e Conceito  Modelos de Multithreading  Problemas de Threading  As Pthreads  Windows XP Threads  Linux Threads  Java Threads

(3)

Necessidades de Multithreading

Browser

Servidor Web

Browser

 Grande parte das aplicações interactivas e distribuídas precisa de

gerir diversos fluxos de execução simultâneos

 Interactividade com utilizador (Browser) ou gestão de várias

conecções simultâneas (Web server)

 A utilização de vários processos distintos não é óptima pois implica

overhead na comunicação de dados e comutação de contexto Browser

Browser

Servidor Web

(4)

Múltiplos Fluxos de Execução

 A solução passa por criar vários

fluxos de execução dentro de cada processo

 Executam código

independente

 Podem bloquear sem que o

processo bloqueie

 Partilham todo o espaço de

memória do processo

 Têm contextos de execução

separados

 Esses fluxos de execução

designam-se por threads ou

actividades Servidor Web BDs Servidor Web Servidor Web Browser Servidores Web BDs

(5)

Separação de Recursos

 Um processo é caracterizado por dois tipos de recursos distintos

 Recursos estáticos: espaço de endereçamento (código, dados,

atributos, PCB, etc.

 Recursos dinâmicos: execução, estado, pilha, registos,

escalonamento, etc.

 O modelo mutithreaded separa estes dois tipos de recursos:

 Os recursos estáticos são geridos através do conceito de processo ou

tarefa (task)

 Os recursos dinâmicos são geridos através do conceito de thread ou

actividade (lightweight process)

 O processo é a unidade de gestão de recursos

(6)

Single and Multithreaded Processes

 No modelo multithreaded, em cada processo existem

vários fluxos de execução ou threads (actividades)

 As várias threads de um processo partilham o espaço de

endereçamento, mas têm contextos de execução distintos

Thread Context

(7)

Benefícios

 Maior interactividade

 Menor tempo de resposta

 Partilha de Recursos

 Economia

 Utilização de Arquitecturas Multiprocessador

(8)

Escalonamento Clássico

 No modelo clássico, em cada processo existe um único fluxo de

execução

 A atribuição do CPU é feita por processo, sendo necessário uma

comutação para passar de um fluxo para outro

Sou rce : O pe rati ng Sy s te m s , G a ry Nutt Copy righ t © 2 0 0 4 Pe a rso n Edu c a tio n, In c .

(9)

Escalonamento Multi-threaded

 No modelo multithreaded, cada processo pode ter vários fluxos de

execução

 A atribuição do CPU é feita por thread, podendo não ser

necessário uma comutação para passar de um fluxo para outro

Sch ed ul in g Prog ress P1 P2 P3 Th1 Th2 Th3 Th4 Th5 Th1 Th6 Th2 Sched init

(10)

Implementação do Conceito de Thread

 A implementação do conceito de Thread (ou actividade) pode ser

feito de várias formas

 Implementação em modo utilizador numa biblioteca, ligada ao

executável da aplicação

 Threads POSIX (pthreads) na implementação inicial

 Threads Java

 Fibers Windows

 Implementadas no sistema operativo, e invocadas através de uma

API específica que utiliza os system calls

 Linux

 Windows XP/2000

 Solaris

 Mac OS X

 Frequentemente, a mesma biblioteca de threads pode suportar as

duas implementações, com desempenhos diferentes

(11)

As pthreads

 Uma API standard POSIX (IEEE 1003.1c) para a criação de

threads e sua sincronização

 A API especifica o comportamento da biblioteca de threads, a

implementação é da responsabilidade da biblioteca

 Comum aos sistemas UNIX (Solaris, Linux, Mac OS X)

 Alguns métodos:

pthread_create: criação de uma thread

pthread_join: espera que uma thread acabe

pthread_exit: finalização da thread

pthread_mutex_init: criação de um mutex

pthread_mutex_lock: aquisição do mutex

pthread_mutex_try_lock: aquisição não bloqueante

(12)

Exemplo:

Criação das threads

Código da thread Espera

(13)

Exemplo: Chat

 Objectivo:

 Pretende-se realizar uma aplicação que permita a dois

processos comunicarem em modo conversacional (chat)

 Utilizando dois FIFOs para comunicar

 Funcionalidades de cada processo

 Ler o teclado e escrever no FIFO1

 Ler o FIFO2 e escrever no terminal

 Não deve bloquear, permitindo enviar e receber dados

simultaneamente

 São dadas 4 rotinas

 readKeyboard

 writeTerminal

 receiveBytes

(14)

P0 P1 writeTerminal writeTerminal readKeyboard readKeyboard sendBytes receiveBytes sendBytes receiveBytes fifoOne fifoTwo

Chat: 1ª Solução

Funciona?

(15)

P0 P1

writeTerminal writeTerminal

readKeyboard readKeyboard sendBytes sendBytes

receiveBytes receiveBytes fifoOne fifoTwo

Chat: 2ª Solução

(16)

Problemas de Threading

 Semântica dos system calls fork() e exec()

 Cancelamento de Threads

 Gestão de Sinais

 Pools de Threads

(17)

Semantica de fork() e exec()

 Será que fork() deve duplicar todas as threads de um processo, ou

só aquela que invocou o system call ?

 Se o processo invoca exec(), não é necessário duplicar as

threads pois o novo processo vai carregar código diferente

 Se o processo continua a sua execução normal, deve ser

idêntico ao processo pai, incluindo no número de threads

 Muitos sistemas (ex. Linux, Solaris) têm duas versões de fork()

uma que duplica as threads, outra que não duplica (vfork, clone)

 No caso de fork() seguido de exec() deve ser utilizado vfork()

 Em Windows o syscall CreateProcess(), utilizado para criar e

executar um novo processo, instancia sempre uma só thread (primary thread).

(18)

Cancelamento de Threads

 Cancelar uma thread antes do código ter finalizado

 Ex: caso de um browser que carrega uma página usando uma

thread por frame e é interrompido pelo utilizador no meio do carregamento da página

 Duas aproximações possíveis:

Terminação síncrona finaliza a thread imediatamente

 Pode ser problemático se uma thread se encontra no decurso de

uma actualização de um recurso e pode criar problemas de coerência

Terminação deferida deixa a thread alvo verificar periodicamente se deve ser terminada

 Permite que a thread detecte o facto de ter sido cancelada, e

realizar as operações necessárias para o fazer de forma correcta

 A thread examina a ordem de terminar nos chamados

(19)

Gestão de Sinais

 Os Sinais são utilizados em sistemas Unix para notificar um processo de

que um dado evento ocorreu

 Versão utilizador dos interrupts hardware

 Syscall signal (int signum, sighandler_t handler)

 Um processo declara um signal handler para gerir sinais

1. Um sinal é gerado por um evento específico

2. O sinal é entregue ao processo sob forma da invocação do signal

handler

3. O sinal é gerido pelo processo

 Em processos com threads: em que thread é executado o handler ?

 Na thread na qual o sinal faz sentido (caso das excepções)

 Em todas as threads de um processo – confuso e difícil de gerir

 Estabelecer de forma explícita que threads recebem que sinais

 pthread_sigmask() estabelece os sinais para cada thread

(20)

Pools de Threads

 Criação de um número de threads por antecipação

 As threads são guardadas numa pool esperando pelo

necessidade de actuarem

 Vantagens:

 É mais rápido servir um pedido com uma thread existente do

que criar uma nova

 Permitir que o numero de threads numa aplicação seja

limitado a um número pré determinado

 Em caso de necessidade a aplicação pode alocar mais

threads, caso tenha direitos para o efeito.

 Pode também diminuir o número de threads na pool em

função da carga.

 Exemplos

 Windows: QueueUserWorkItem (Function)

 Permite executar uma função por uma thread da pool

(21)

Linux Threads

 Em Linux, uma nova thread cria um novo fluxo de execução que partilha

todos os recursos

 Internamente não há distinção entre thread e processo

 Implementação one-to-one

 A criação de threads é feita através do syscall clone() que permite

implementar fork e pthread_create

 Cria um novo fluxo de execução que pode ou não partilhar todos os

recursos com o precedente

 No caso de partilha total, obtém-se uma nova thread no “mesmo” processo

com uma nova pilha

clone(CLONE_THREAD|CLONE_VM|CLONE_FILES, …)=> pthread_create

 No caso de duplicação, obtém-se um novo processo com um espaço de

endereçamento copiado mas distinto

clone(SIGCHLD, …) => fork

 Ambas as funcionalidades são implementadas por uma rotina comum:

do_fork()

(22)

Estruturas de Dados em Linux

task_struct 1 thread_info 1 task_struct 2 sched.h thread_info.h http://lxr.linux.no/#linux+v2.6.31/include/linux/sched.h#L1166 http://lxr.linux.no/#linux+v2.6.31/arch/x86/include/asm/thread_info.h thread_info 2

(23)

A Task List

~2Kbytes de memória Source

: Li nu x k e rne l Dev e lo pm e nt, Robe rt Lo v e Nov e ll Pres s , 2 0 0 5 .

(24)

Localização da thread_struct

Sou rce : Li nu x k e rne l Dev e lo pm e nt, Robe rt Lo v e Nov e ll Pres s , 2 0 0 5 .

(25)

Threads Windows

 Implementação one-to-one

 Cada descritor de thread contém:

 Um identificador: thread id

 Cópia dos registos

 2 pilhas: utilizador e supervisor

 Dados privados

 Os registos, as pilhas e os dados privados são designados

pelo contexto da thread

 As estruturas de dados de uma thread incluem:

 ETHREAD (executive thread block)

 KTHREAD (kernel thread block)

(26)

Arquitectura do Windows NT

Processor(s) Main Memory Devices

Libraries

Process

Process

Process

Subsystem

User Supervisor

Subsystem

Subsystem

Hardware Abstraction Layer

NT Kernel

NT Executive

I/O Subsystem

T T T T T T T T T Process Management Memory Management File Management Device Mgmt Infrastructure

Source: Operating Systems, Gary Nutt Copyright © 2004 Pearson Education, Inc.

(27)

Criação de Processos no NT

CreateProcess(…);

Win32 Subsystem

ntCreateProcess(…);

ntCreateThread(…);

NT Executive

NT Kernel

Handle Table

Process Descriptor

Source: Operating Systems, Gary Nutt Copyright © 2004 Pearson Education, Inc.

(28)

Estruturas de Dados em XP

 As estruturas de dados de uma thread incluem:

 ETHREAD (executive thread block)

 KTHREAD (kernel thread block)

 TEB (thread environment block)

Sou rce : O pe rati ng Sy s te m s , G a ry Nutt Copy righ t © 2 0 0 4 Pe a rso n Edu c a tio n, In c .

(29)

ETHREAD

Windows NT Thread Descriptor

EPROCESS KPROCESS

NT Kernel

KTHREAD

NT Executive

Source: Operating Systems, Gary Nutt Copyright © 2004 Pearson Education, Inc.

(30)

API Threads do Windows

(31)
(32)

Java Threads

 As threads Java são geridas pela JVM

 Podem ser criadas:

 Estendendo a classe Thread

 class <name> extends Thread

 Implementando a interface Runnable

 class <name> implements Runnable

(33)
(34)

Referências

Documentos relacionados

– Os interrupts não são imediatamente encaminhados para o Linux se uma Xenomai Thread está em execução. – Este mecanismo funciona da

Encontram-se muitas instruções para o tratamento da mucosite oral induzida por terapia antineoplásica determinada por organizações, mas com base em pesquisas

É possível identificar que os pesquisadores realizam constantemente a aproximação entre as duas temáticas, o que torna clara a percepção da economia solidária como forte

Música Onde Deus Te Levar Podes achar que não tens P’ra onde ir, nem que fazer Não sabes bem quem és aqui Neste mundo tão grande e frio Mas há qualquer coisa em ti Que te

Essas operações, com e sem risco de crédito, são contabilizadas em conta do ativo “Outros créditos de operações com planos de assistência à saúde”

18.14.24.1 A ponta da lança e o cabo de aço de levantamento da carga devem ficar no mínimo a 3,00m (três metros) de qualquer obstáculo e ter afastamento da rede elétrica que

Serão realizadas também aulas remotas com turmas pequenas (decidir com a turma) para discussão entre o professor e os alunos referentes a cada ítem da ementa de laboratórios

Fazenda Guadalupe Fazenda Heringer - Dalton Dias Heringer Fazenda Porto Seguro Fazenda Santa Edwiges - Raphael Coutinho João Augusto Rodrigues Jorge Sayed Picciani e Filhos -