Fundamentos de Sistemas Operacionais

Documentos relacionados
Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais

Introdução OpenMP. Nielsen Castelo Damasceno

Processos O conceito de processos é fundamental para a implementação de um sistema multiprogramável. De uma maneira geral, um processo pode ser entend

Sistemas Operacionais

Fundamentos de Sistemas Operacionais

Concorrência em Processos

Sistemas Operacionais

Ferramentas para Programação em Processadores Multi-Core

ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES II AULA 07: PROGRAMANDO COM THREADS EM LINGUAGEM C

Notas da Aula 7 - Fundamentos de Sistemas Operacionais

Notas da Aula 4 - Fundamentos de Sistemas Operacionais

LINGUAGENS LÓGICAS E PROGRAMAÇÃO CONCORRENTE

Fundamentos de Sistemas Operacionais

Arquitetura de Computadores Sistemas Operacionais II

Sistemas Operacionais

Sistemas Operacionais: Sincronização entre processos

SOP - TADS Threads. Revisão Ultima aula. Programa em execução Cada processo têm sua própria CPU

Sincronização e Comunicação entre Processos. Adão de Melo Neto

Sistemas Operacionais

Capítulo 2. Multiprogramação. Conteúdo. Objetivo. Recordando. Recordando. DCA-108 Sistemas Operacionais

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 03/07/2017 ALUNO

SSC0640 Sistemas Operacionais I

Computadores e Programação (DCC/UFRJ)

08/08/2016. Metodologia de trabalho Sistema de notas Trabalhos Artigos Celulares Presença Entrega de trabalhos Uso de laboratório

Linguagens de Programação Classificação

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017. ALUNO Prof. Bosco

Parte I Multiprocessamento

Aula 6: Comunicação entre processos. Instituto Federal da Bahia INF009 - Sistemas Operacionais Profª Flávia Maristela

Sistemas Operacionais

Threads. Agenda. Threads. Processo. Processo. Processo. Processo. (c) Volnys B. Bernal Versão de 22/3/2012

Sistemas Operacionais

Programação concorrente (processos e threads)

AULA 06: PROGRAMAÇÃO EM MÁQUINAS PARALELAS

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO

Sistemas Distribuídos Aula 3

INTRODUÇÃO AOS SISTEMAS OPERACIONAIS SEMANA 13

Sistemas Operacionais. Prof. Fabio Augusto Oliveira

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 03/07/2017 ALUNO

Exercícios Cap I. 1.1, 1.2, 1.3 (somente letras (a), (b) e (c)) , 1.8 e 1.12 IC - UFF

OpenMP: Variáveis de Ambiente

Sistemas Operacionais

Programação Concorrente

Sistemas de Informação. Sistemas Operacionais

Programação de Alto Desempenho - 2. Prof: Carla Osthoff

UNIVERSIDADE FEDERAL RURAL DE PERNAMBUCO Bacharelado em Sistemas de Informação. Processamento Paralelo Threads. Aluno: Wagner Palacio

Revisão Ultima aula [1/2]

Programação Paralela e Distribuída

LabSO Gerência de Processos. Processos. Porque eu preciso entender este assunto?

INE 5645 PROGRAMAÇÃO PARALELA E DISTRIBUIDA PROVA 2 12/06/2017 ALUNO

AULA 03: PROCESSAMENTO PARALELO: MULTIPROCESSADORES

SOP - TADS Processos. Revisão Ultima aula

Sistemas de Informação. Sistemas Operacionais

Conceitos básicos e serviços dos Sistemas Operacionais

AULA Nº 08 SISTEMAS OPERACIONAIS. Threads

Fundamentos de Sistemas Operacionais

Sistemas Operacionais. BSI / UAB 2013 Hélio Crestana Guardia

SISTEMAS EMBARCADOS. Programação Concorrente e CMSIS RTOS. Prof. André Schneider de Oliveira

Sistemas Operacionais Aula 3

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO BACHARELADO EM INFORMÁTICA SISTEMAS OPERACIONAIS I 1 0 SEM/05 Teste 1 Unidade I DURAÇÃO: 50 MINUTOS

Sistemas Operacionais Processos. Carlos Ferraz Jorge Cavalcanti Fonsêca

Redes de Computadores. INF201 - Fundamentos de Sistemas Operacionais - 2º Período

Introdução a Sistemas Operacionais. Adão de Melo Neto

Sistemas Operacionais. Processos e Threads

Paralelismo em Computadores com Tecnologia Multicore

Sistemas Distribuídos Aula 7

Fundamentos da Informática Aula 03 - Sistemas operacionais: Software em segundo plano Exercícios Professor: Danilo Giacobo

Threads ou Processos Leves

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 12 - Threads e Concorrência em Java

Aula 2: Tipos de Sistemas Operacionais. Instituto Federal da Bahia Campus Salvador INF009 - Sistemas Operacionais Profª Flávia Maristela

Introdução Aplicações Concorrentes Especificação de Concorrência em Programas Problemas de Compartilhamento de Recursos Exclusão Mútua Sincronização

SSC PROGRAMAÇÃO CONCORRENTE. Aula 06 Modelos de Programação Prof. Jó Ueyama e Julio Cezar Estrella

Estrutura dos Sistemas Operacionais. Sérgio Portari Júnior

Programação Concorrente e Paralela. Noemi Rodriguez

Introdução à Computação: Sistemas de Computação

Relatório Experimento 5 Sistemas Operacionais 1 Turma 3 Grupo 8

Modelos para Concorrência

Aula 1: Apresentação do Curso

Processos e Threads e em sistemas distribuídos. Prof. Me. Hélio Esperidião

Multiprogramação leve em arquiteturas multi-core

Sistemas Operacionais

Técnicas Avançadas de Programação

Sistemas Distribuídos e Paralelos

Informática I. Aula /09/2006 1

Introdução à OpenMP (Dia 1) Prof. Guido Araujo

08/02/2017. Metodologia de trabalho Sistema de notas Trabalhos Artigos Celulares Presença Entrega de trabalhos Uso de laboratório

Linguagens de Programação

Sistemas Operacionais

Sistemas Operacionais

Programação Estruturada Aula - Introdução a Linguagem C

Bibliografia. OpenMP. Disponibilidade de OpenMP. Abordagem SPMD. Nicolas Maillard

Sistemas Operacionais. Universidade Federal de Minas Gerais. Aula 2. Gerência de Processos

Processos. Adão de Melo Neto

Sistema Operacional. Prof. Leonardo Barreto Campos. 1/30

Arquitetura de Computadores. Processamento Paralelo

Carlos Eduardo Batista Centro de Informática - UFPB

Fundamentos de Sistemas Operacionais

SISTEMAS DISTRIBUÍDOS PROCESSOS. Slides cedidos pela professora Aline Nascimento

LabSO Gerência de Processos. Retrospectiva da aula passada... Na aula passada... Na aula passada...

Transcrição:

Fundamentos de Sistemas Operacionais Aula 4: Programação Concorrente Diego Passos

Últimas Aulas

Processos Compostos por: Código (programa). Estado (memória, registradores). Em um sistema com multiprogramação: Vários processos residentes em memória. Várias aplicações rodam simultaneamente. "Processo é um programa em execução". Exemplo de um único programa que usa mais de um processo. Função fork().

Threads

Threads Similares a processos. "Processos leves". Definem uma "linha de execução" em um programa. Sequência de instruções a serem executadas. Diferença entre processo e thread: espaço de endereçamento. Processos diferentes têm espaços de endereçamento diferentes. Threads diferentes (de um mesmo processo) compartilham o mesmo espaço de endereçamento. Memória compartilhada.

Threads (mais) Toda thread pertence a um processo. O conceito de thread não existe sem o conceito de processo. Todo processo tem ao menos uma thread. Uma sequência de instruções a serem executadas.

Vantagens e Desvantagens Threads são mais "leves". Mudança de contexto entre duas threads do mesmo processo é rápida. Poucas informações de estado para salvar/restaurar. Threads (de um mesmo processo) compartilham memória. Comunicação é mais fácil que entre processos. Porém, uma thread pode interferir na execução da outra. Os erros em uma podem se propagar para as outras. Programas podem ser mais difíceis de depurar.

Programação Concorrente

Definição Utilização de mais de uma "linha de execução" em um mesmo programa. Vários processos para um único programa. e.g., utilizando a função fork(). Várias threads em um mesmo processo. Ou uma mistura dos dois. Exemplo: Servidor web tem um processo principal que espera conexões dos usuários. Para cada nova conexão, é criado um novo processo (ou thread). Processo (thread) principal volta a esperar por conexões.

Programa Paralelo vs. Sequencial Programa Sequencial: Uma única linha de execução. Um processo com uma thread. Programa Paralelo: Múltiplas linhas de execução. Vários processos ou threads. Outro nome para a Programação Concorrente.

Objetivos da Programação Concorrente Permite a separação lógica das funcionalidades de um programa. Espera por conexões. Atendimento aos clientes. Simplifica a escrita de alguns programas. Existem programas intrinsecamente paralelos. Melhora a utilização dos processadores modernos. Vários núcleos. Ambientes multiprocessados. Operações de E/S são sobrepostas com processamento.

Sobreposição de Operações de E/S Versão Sequencial Versão Paralela (Concorrente)

Desvantagens da Programação Concorrente Coordenação dos processos (threads) pode ser complexa. Em termos de programação. Erros "não-intuitivos" ocorrem. Principalmente com threads. É comum fazer suposições inválidas: e.g, processos executam na mesma "velocidade". Condições de erro são difíceis de reproduzir. Depuração de programas paralelos tende a ser mais difícil. Ordem de execução dos processos (threads) é imprevisível.

Tipos de Paralelismo Paralelismo Real: Ocorre apenas em máquinas multiprocessadas. Processos (threads) são executados realmente simultaneamente. Paralelismo aparente: Ocorre em maquinas monoprocessadas. Processos (threads) são executados concomitantemente.

Especificação de Paralelismo

Diferentes Representações Sintaxe de criação de um programa paralelo depende do sistema. Chamadas podem ser ligeiramente (ou extremamente) diferentes em SOs diferentes. Porém, existem tipos "gerais" de especificação de paralelismo.

Paralelismo Explícito Paralelismo é descrito explicitamente no programa. Três funcionalidades básicas: Criação de um processo (thread): create_process(). Encerramento de um processo (thread): exit(). Espera pelo encerramento de um processo (thread): wait_process().

Paralelismo Explícito (Exemplo) int main() { f1 = create_process(codigo_filho); f2 = create_process(codigo_filho); wait_process(f1); wait_process(f2); } return(0); void codigo_filho() { } printf("alguma coisa\n"); exit();

Paralelismo Implícito Programador apenas indica quais "regiões" são paralelizáveis. Compilador é responsável por criar os respectivos processos (threads). Dois comandos básicos: Parbegin (início da região paralela). Parend (fim da região paralela).

Paralelismo Implícito (Exemplo) int main() { } Parbegin codigo_filho(); codigo_filho(); Parend return(0); Função codigo_filho() é executada duas vezes. Mas por dois processos (threads) diferentes. void codigo_filho() { } printf("alguma coisa\n"); exit();

Paralelismo Implícito vs. Explícito A versão explícita é mais comum. Em geral, as chamadas de sistema são deste tipo. e.g., função fork(). Há algumas linguagens (e compiladores) que implementam o paralelismo implícito. Exemplo: biblioteca OpenMP. Paralelismo implícito é mais simples. Programador não se preocupa com como os processos (threads) são alocados. Paralelismo explícito é mais flexivel. Programador tem total controle sobre os processos (threads).

Grafo de Precedência Algumas vezes, é preciso garantir a ordem em que certos eventos ocorrem em um programa paralelo. Exemplo: Garantir que o primeiro processo filho só morra após o início do segundo processo filho. Nem sempre é fácil nas representações implícita e explícita. Envolve a utilização de comunicação entre os processos (threads) filhos.

Grafo de Precedência (Exemplo)

Compartilhamento de Recursos

Recursos Comuns Processos (threads) de um programa paralelo geralmente compartilham recursos. Variáveis. Arquivos. Sockets.... Estes recursos, em geral, estão ligados à comunicação entre processos (threads) do programa paralelo.

Compartilhamento de Memória Tipo mais comum de recurso compartilhado. Threads compartilham todo o espaço de endereçamento. Processos podem requisitar do SO uma área de memória compartilhada. Processos (threads) alteram o valor de variáveis compartilhadas para trocar informações. e.g., segundo processo filho pode alterar a variável inicio_filho_2 de 0 para 1 para informar iniciou seu processamento.

Produtor-Consumidor Aplicação comum em vários sistemas. Há processos (threads) produtores. Geram dados quaisquer. Há um processo (thread) consumidor. Pega dados dos produtores e realiza alguma operação. Exemplo: servidor impressão. Processos (threads) geram dados a serem impressos. Um único processo é responsável por coletar os dados e realizar a operação de E/S de impressão. Múltiplas impressões podem ser requisitadas simultaneamente.

Produtor-Consumidor (Funcionamento) Há uma região de memória compartilhada por todos. Spool de impressão. Em geral, é um Buffer Circular. Ao adicionar um novo elemento, produtor avança o ponteiro do próxima posição livre. Ao coletar um dado, consumidor avança ponteiro da próxima posição livre.

Região (Ou Seção) Crítica

Definição É um trecho de código de um programa. Especial, pois alguma manipulação de variável compartilhada acontece ali. Em outras palavras: É um trecho de um programa paralelo no qual existe acesso a variáveis compartilhadas entre dois ou mais processos (threads).

Importância da Região Crítica A ordem de execução dos processos (threads) é imprevisível. Acessos concorrentes podem causar problemas. Exemplo: Considere 'x' uma variável compartilhada por duas threads. Seu valor inicial é 0 Qual o valor final de 'x'? Thread 1: x = x + 1; Thread 2: x = x + 1;

Importância da Região Crítica (mais) O trecho executado pelas threads em assembly se torna: MOVE x, ACC ADD ACC, 1 MOVE ACC, x Suponha que a Thread 1 começa a execução, porém é interrompida imediatamente antes da segunda instrução. A Thread 2 começa sua execução, lendo o valor de 'x' da memória. Valor ainda é 0. Thread 1 foi interrompida antes que pudesse armazenar em memória o novo valor de 'x'. Ao final das execuções, x = 1.

Outro Exemplo: Produtor-Consumidor Suponha dois produtores simultâneos. P1 insere "Dado 3" na próxima posição livre. Mas é interrompido antes de atualizar o ponteiro. P2 executa e insere "Dado 4" na posição antiga do ponteiro. "Dado 3" é sobreescrito.

Condição de Corrida Problema decorrente da execução simultânea de múltiplos processos na seção crítica. Resultados inesperados (e diferentes) ocorrem. O resultado depende da ordem de execução dos processos (threads). Operações não são atômicas. Como solucionar? Evitar que processos (threads) diferentes possam estar na região crítica simultaneamente. Conhecido como Exclusão Mútua. Tornar operações sobre recursos compartilhados atômicas.

Operação Atômica Operação que não pode ser interrompida. Exemplo: a execução de uma única instrução de máquina é atômica. Não há como interromper a operação uma vez que ela tenha sido iniciada. Se a manipulação de uma região compartilhada de memória é atômica, não há condição de corrida.

Revisão

Para Lembrar Definição de Programação Concorrente. Tipos de paralelismo. Real, aparente. Representações implícita e explícita de paralelismo. Razões para adoção de paralelismo. Ordem de execução de um programa paralelo é imprevisível. Não se pode fazer suposições. Compartilhamento de recursos. Recursos típicos. Razões para compartilhar. O que é região (seção) crítica é qual a sua importância. O que é uma condição de corrida. O que é exclusão mútua. O que é uma operação atômica.