Multiprocessamento

Preview:

DESCRIPTION

Multiprocessamento. Sérgio Cavalcante GRECO - CIn / UFPE. Multitasking. Capacidade de executar mais de uma tarefa ( task ) “simultaneamente” TAREFAS: atividades de software executadas independentemente de outras. Podem ser: PROCESSOS: programas que executam em paralelo. - PowerPoint PPT Presentation

Citation preview

Multiprocessamento

Sérgio CavalcanteGRECO - CInCIn / UFPE

MultitaskingCapacidade de executar mais de uma tarefa (task) “simultaneamente”TAREFAS: atividades de software executadas

independentemente de outras.Podem ser:

PROCESSOS: programas que executam emparalelo.

THREADS: tarefas de um mesmo programa.

Multitasking:

ProcessosÁrea de memória isolada dos outros processos contendo segmentos de:

código executávelpilha - variáveis locais e/ou temporáriasdados - variáveis globaisheap - espaço para alocação dinâmicastatus - recursos alocados, localização dos

segmentos, contexto de execução...

Multitasking:

ThreadsCada thread tem sua própria pilha e contexto de execução.Todas as threads de um processo compartilham os mesmos segmentos de código, dados, heap, e parte do status. - maior compartilhamento de recursos- maior compartilhamento de recursos

- maior facilidade de sincronização- maior facilidade de sincronização- menos proteção- menos proteção

Multitasking:

Sincronização de ThreadsFunções que acessam apenas variáveis locais não estáticas podem ser chamadas de várias threads simultaneamente desde que sejam declaradas como reentrantFunções que usem variáveis globais ou estáticas têm, em geral, seu acesso restrito.

Multitasking:

Processos X ThreadsTipos de sistemas

1 processo X 1 thread: MSDOSN processos X 1 thread: OS/386, VAX/VMS, Windows 3.1, UNIX antigo1 processo X N threads: kernels para sist. embarc.N processos X N threads: Windows 95/98,NT, UNIX

Multiprocessamento:

Quando usar ?Tarefas diversas que necessitam de pouca ou nenhuma interação.Tarefas que necessitam de proteção.Capacidade de modificação dinâmica do sistemaExemplo:

PDA: calendário, email, spreadsheetSistema de Gerenciamento Industrial

Programas para comunicação/controle da fábricaSpreadsheet para apresentação de resultadosBanco de dados para depto de pessoal e almoxarifado

Multithreading:

Quando usar ?Várias atividades de um mesmo programa precisam ser executadas simultaneamente, principalmente em velocidades diferentes

Controle de recursos diferentesTratamento de diversas entradas / saídas de dados e sinais

Multithreading:

Como dividir em threads ?Identifique atividades que precisam ou são melhor executadas em paraleloCandidatos naturais:

Usar uma thread para cada tipo de I/O:Teclado, display, sensores, atuadores

Atividades independentesExemplo: Impressora conectada na rede

1 thread para receber jobs1 thread para processar PostScript1 thread para controlar o hardware de impressão

Multithreading:

EscalonamentoEstados: running, ready, suspendedEscalonamento CooperativoTarefas cooperam no uso do processador, liberando-o por conta própria.

Escalonamento PreemptivoInterferência do S.O. para recuperar o uso do processador.

Escalonamento de Threads:

Round-Robin

Tar. BContextoTar. BContexto

Tar. CContextoTar. CContexto

CPU:RunningCPU:Running

Tar. AContextoTar. AContexto

Tar. AContextoTar. AContexto

Tar. AContexto

Escalonamento de Threads:

Round-RobinO exemplo dado é independente do escalonador ser cooperativo ou preemptivo, e das tarefas terem ou não prioridade.

Escalonamento Cooperativo de Threads:

Round-Robin com MEFsCada thread é implementada como uma Máquina de Estados FinitosCaso não haja mudança de estado, a MEF libera o processador.Caso haja mudança de estado, a MEF executa a ação correspondente e libera o processador.

Round-Robin com MEFs:

Como implementar ?main(){[inicialização de variáveis, dispositivos,

etc.]while (1)

{TarefaA();TarefaB();}

}

[Rotinas de tratamento de interrupção][Outras funções auxiliares]

main(){[inicialização de variáveis, dispositivos,

etc.]while (1)

{TarefaA();TarefaB();}

}

[Rotinas de tratamento de interrupção][Outras funções auxiliares]

Tarefa A(){static char estadoA = estA0;[Ações comuns a todos os

estados]switch(EstadoA)

{case(estA0): ação0; break;case(estA1): ação1; break;case(estA2): ação2; break;}

[Ações comuns a todos os estados]

}

Tarefa A(){static char estadoA = estA0;[Ações comuns a todos os

estados]switch(EstadoA)

{case(estA0): ação0; break;case(estA1): ação1; break;case(estA2): ação2; break;}

[Ações comuns a todos os estados]

}

Tarefa B(){static char estadoB = estB0;[Ações comuns a todos os

estados]switch(estadoB)

{case(estB0): ação0; break;case(estB1): ação1; break;case(estB2): ação2; break;}

[Ações comuns a todos os estados]

}

Tarefa B(){static char estadoB = estB0;[Ações comuns a todos os

estados]switch(estadoB)

{case(estB0): ação0; break;case(estB1): ação1; break;case(estB2): ação2; break;}

[Ações comuns a todos os estados]

}

Round-Robin com MEFs:

Abordagem SíncronaTodas as MEFs são tratadas ANTES que novas entradas sejam verificadas.Chamados de Sistemas Reativos SíncronosLinguagem para espeficicação: Esterel

Round-Robin com MEFs:

Como particionar as threads ?São consideradas mudanças de

estado:Alterações em sinais de entradaRecepção de dadosTérmino de tempos de espera

Round-Robin com MEFs:

Como usar as interrupções ?As interrupções devem ser usadas para:

Tratar rapidamente e guardar informações sobre alterações em sinais de entrada e/ou recepção de dadosGerenciar o timer para controlar tempos de espera e contadoresNão devemNão devem ser sobrecarregadas de ações ser sobrecarregadas de ações que que podem e devempodem e devem ser tratadas nas ser tratadas nas threads.threads.Eventos são tratados nas interrupçõesAções são tratadas nos estados das MEFs

Recommended