A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Multiprocessamento Sérgio Cavalcante CIn GRECO - CIn / UFPE.

Apresentações semelhantes


Apresentação em tema: "Multiprocessamento Sérgio Cavalcante CIn GRECO - CIn / UFPE."— Transcrição da apresentação:

1 Multiprocessamento Sérgio Cavalcante CIn GRECO - CIn / UFPE

2 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. THREADS: tarefas de um mesmo programa.

3 Multitasking: Processos Área de memória isolada dos outros processos contendo segmentos de: código executável pilha - variáveis locais e/ou temporárias dados - variáveis globais heap - espaço para alocação dinâmica status - recursos alocados, localização dos segmentos, contexto de execução...

4 Multitasking: Threads Cada 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 - menos proteção

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

6 Multitasking: Processos X Threads Tipos de sistemas 1 processo X 1 thread: MSDOS N processos X 1 thread: OS/386, VAX/VMS, Windows 3.1, UNIX antigo 1 processo X N threads: kernels para sist. embarc. N processos X N threads: Windows 95/98,NT, UNIX

7 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 sistema Exemplo: PDA: calendário, email, spreadsheet Sistema de Gerenciamento Industrial Programas para comunicação/controle da fábrica Spreadsheet para apresentação de resultados Banco de dados para depto de pessoal e almoxarifado

8 Multithreading: Quando usar ? Várias atividades de um mesmo programa precisam ser executadas simultaneamente, principalmente em velocidades diferentes Controle de recursos diferentes Tratamento de diversas entradas / saídas de dados e sinais

9 Multithreading: Como dividir em threads ? Identifique atividades que precisam ou são melhor executadas em paralelo Candidatos naturais: Usar uma thread para cada tipo de I/O: Teclado, display, sensores, atuadores Atividades independentes Exemplo: Impressora conectada na rede 1 thread para receber jobs 1 thread para processar PostScript 1 thread para controlar o hardware de impressão

10 Multithreading: Escalonamento Estados: running, ready, suspended Escalonamento Cooperativo Tarefas cooperam no uso do processador, liberando-o por conta própria. Escalonamento Preemptivo Interferência do S.O. para recuperar o uso do processador.

11 Escalonamento de Threads: Round-Robin Tar. B Contexto Tar. B Contexto Tar. C Contexto Tar. C Contexto CPU:Running Tar. A Contexto Tar. A Contexto Tar. A Contexto Tar. A Contexto Tar. A Contexto

12 Escalonamento de Threads: Round-Robin O exemplo dado é independente do escalonador ser cooperativo ou preemptivo, e das tarefas terem ou não prioridade.

13 Escalonamento Cooperativo de Threads: Round-Robin com MEFs Cada thread é implementada como uma Máquina de Estados Finitos Caso 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.

14 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] }

15 Round-Robin com MEFs: Abordagem Síncrona Todas as MEFs são tratadas ANTES que novas entradas sejam verificadas. Chamados de Sistemas Reativos Síncronos Linguagem para espeficicação: Esterel

16 Round-Robin com MEFs: Como particionar as threads ? São consideradas mudanças de estado: Alterações em sinais de entrada Recepção de dados Término de tempos de espera

17 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 dados Gerenciar o timer para controlar tempos de espera e contadores Não devem ser sobrecarregadas de ações que podem e devem ser tratadas nas threads. Eventos são tratados nas interrupções Ações são tratadas nos estados das MEFs


Carregar ppt "Multiprocessamento Sérgio Cavalcante CIn GRECO - CIn / UFPE."

Apresentações semelhantes


Anúncios Google