Universidade Federal de São Carlos Departamento de Computação. Sistemas Operacionais. Sincronização de Threads no Windows



Documentos relacionados
OO Engenharia Eletrônica

Mecanismos de Sincronismo da Win32

Sistemas Operacionais

Métodos de Sincronização do Kernel

Universidade Federal de São Carlos Departamento de Computação. Sistemas Operacionais. Gerenciamento de Threads no Windows

Sistemas Operativos. Sincronização de threads com objectos kernel no Windows. Centro de Cálculo Instituto Superior de Engenharia de Lisboa

Sistemas Operativos. Sincronização de threads com objectos kernel no Windows. Centro de Cálculo Instituto Superior de Engenharia de Lisboa

Aula 3. Sistemas Operacionais. Prof: Carlos Eduardo de Carvalho Dantas

Evitando conflitos em aplicações multi-thread no Delphi/Kylix

Até o final de década de 70, os sistemas operacionais suportavam apenas processos com um único thread;

Arquitetura dos Sistemas Operacionais

OO Engenharia Eletrônica

Sistemas Operacionais

SISTEMAS OPERACIONAIS

8 Threads. 8.1 Introdução

Memória - Gerenciamento. Sistemas Operacionais - Professor Machado

PROCESSOS. Prof. Maicon A. Sartin

Notas da Aula 6 - Fundamentos de Sistemas Operacionais

Acessando o SVN. Soluções em Vendas Ninfa 2

Sistemas Operacionais. Prof. André Y. Kusumoto

Sistemas Operacionais Aula 08: Sincronização de Processos. Ezequiel R. Zorzal

Capítulo 4 Gerenciamento de Memória

O aplicativo de desktop Novell Filr é compatível com as seguintes versões do sistema operacional Windows:

Modelo Entidade-Relacionamento

Sistemas Distribuídos Processos I. Prof. MSc. Hugo Souza

SOP - TADS Sistemas de Arquivos Cap 4 Tanenmbaum

Trabalho 3: Agenda de Tarefas

É a associação de mais de um fluxo de execução em um único processo.

Gerência do Sistema de Arquivos. Adão de Melo Neto

Computação II Orientação a Objetos

Desenvolvimento OO com Java Orientação a objetos básica

Introdução a Programação. Ponteiros e Strings, Alocação Dinâmica

É importante que nos atenhamos a alguns aspectos importantes sobre banco de dados:

Filas: conceitos e implementações

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

Algoritmos e Estrutura de Dados. Prof. Tiago A. E. Ferreira

Linguagens de Programação Aula 10

Tópicos Avançados em Banco de Dados Gerenciamento de Transações em Banco de Dados. Prof. Hugo Souza

Manual de Utilização e-rh para Servidor em Geral

Todos os microprocessadores hoje disponíveis em micros compatíveis com PC utilizam o funcionamento do como ponto de partida.

INTRODUÇÃO À LINGUAGEM C++

Sistemas Operacionais I

Linguagem C: variáveis, operadores, entrada/saída. Prof. Críston Algoritmos e Programação

Informática básica Telecentro/Infocentro Acessa-SP

Sistemas Distribuídos Modelo Cliente-Servidor

Tecnologia da Informação. Prof Odilon Zappe Jr

Sobre a apresentação (About(

AULA 16 - Sistema de Arquivos

Linguagem e Técnicas de Programação I Tipos de dados, variáveis e constantes. Prof. MSc. Hugo Souza Material desenvolvido por: Profa.

Montagem e Manutenção. Luís Guilherme A. Pontes

Sistemas Operacionais. Curso Técnico Integrado Profa: Michelle Nery

Fiery Driver Configurator

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

Sistemas Operacionais Aula 06: Threads. Ezequiel R. Zorzal

Livro de Ocorrências de Alterações de Dados (Logbook)

Sumário. Deadlock. Definição. Recursos. M. Sc. Luiz Alberto

Sistemas Operacionais Arquivos. Carlos Ferraz Jorge Cavalcanti Fonsêca

Início Rápido para o Templo

Sistemas Operacionais

Um retrospecto da aula passada... Um retrospecto da aula passada... Principais Aspectos de Sistemas Operacionais. Gerência de E/S

SISTEMA BRENA DE AUTOMAÇÃO COMERCIAL

Bem-vindo ao tópico sobre administração de listas de preços.

Respondendo a eventos

Chaves. Chaves. O modelo relacional implementa dois conhecidos conceitos de chaves, como veremos a seguir:

Java Como Programar, 8/E

Sistemas de Arquivos. André Luiz da Costa Carvalho

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

Permitir a troca de mensagens de texto entre os dois alunos; Permitir que um aluno enviasse para o outro uma cópia de prova;

AKNA SOFTWARE. Configurações. de DNS

ITIL v3 - Operação de Serviço - Parte 1

Sistema Integrado de Gerenciamento ARTESP. MANUAL DO USUÁRIO - SIGA Extranet GRD e Projetos. MANUAL DO USUÁRIO SIGA EXTRANET GRD e Projetos

SISTEMA OPERACIONAL - WINDOWS

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

LÓGICA DE PROGRAMAÇÃO. Vitor Valerio de Souza Campos

Capítulo 6. Gerenciamento de Arquivos. 6.1 Arquivos 6.2 Diretórios 6.3 Implementação (6.3.1 a 6.3.6) 6.4 Exemplos

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

PROGRAMAÇÃO EM C# COM VISUAL STUDIO.NET

GABARITO COMENTADO SISTEMAS OPERACIONAIS. PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida, Vinícius de M. Rios

ECD1200 Equipamento de Consulta de Dados KIT DE DESENVOLVIMENTO

O processador é um dos elementos componentes do computador moderno, sendo responsável pelo gerenciamento de todo o computador.

Introdução a Computação 07 Sistemas operacionais. Márcio Daniel Puntel marcio.puntel@ulbra.edu.br

Guia de funções do SWCA (System-Wide Call Appearance, Apresentação de chamada em todo o sistema)

CED. Manual do Usuário

ACOMPANHAMENTO FÍSICO E FINANCEIRO DESCENTRALIZAÇÃO DE CRÉDITO PARA AS SDRS

Gravando Dados e Cópias de CD s com o Nero 6.0 Disciplina Operação de Sistemas Aplicativos I

PARTE I INSTRUÇÕES GERAIS

Sistemas de Arquivos NTFS, FAT16, FAT32, EXT2 e EXT3

Programação de Computadores I. Linguagem C Arquivos

Leitura. Capítulo 7 (Prog. Orient. a Obj. usando Java - 4th Edition)

Conceitos Básicos de Rede. Um manual para empresas com até 75 computadores

MODELAGEM E SIMULAÇÃO

(Aula 15) Threads e Threads em Java

O Gerenciamento de Documentos Analógico/Digital

Threads em Java. Sistemas Operacionais - Laboratório Professor Machado

Estruturas de Dados Aula 15: Árvores 17/05/2011

Transcrição:

Universidade Federal de São Carlos Departamento de Computação Sistemas Operacionais Sincronização de Threads no Windows

Padrões de Projeto com Thread Vantagens do uso de padrões no projeto com threads: A maioria dos problemas da programação multithread pode ser resolvida facilmente; Muitos erros de programação podem ser evitados Um vocabulário comum entre os desenvolvedores provê: Melhor entendimento dos problemas envolvidos Uma melhor análise dos problemas envolvidos Os defeitos mais comuns podem ser descritos

Problemas com Threads Acesso conflitante à memória compartilhada Um dos threads começa uma operação na memória compartilhada, é suspenso, e deixa a região de memória com uma transformação incompleta; O segundo thread é ativado e acessa a memória compartilhada em um estado corrompido, causando erros na sua operação e potencialmente no thread suspenso quando ele retomar sua execução.

Race Condition & Deadlock Race Condition A correta operação depende da ordem de término de duas ou mais atividades independentes A ordem de término não é determinística Deadlock Dois ou mais threads estão esperando para o outro terminar uma certa tarefa.

Sincronização de Thread Alguns dos métodos de sincronização já vistos são: WaitForSingleObject WaitForMultipleObject

Sincronização de Thread Também podemos sincronizar threads por: Incremento Interlocked; Seção Crítica; Objetos do Kernel Mutex Semaphore

Armazenamento volatile Qualificador de armazenamento do ANSI C. Assegura que a variável irá ser armazenada na memória depois da modificação Informa o compilador que a variável pode mudar de valor a qualquer tempo.

Incremento Interlocked O incremento Interlocked incrementa um inteiro de 32 bits como uma operação atômica. É garantido que termine antes do thread de incremento ser suspenso. LONG InterlockedIncrement ( LONG volatile* lpaddend); O decremento Interlocked decrementa um inteiro de 32 bits como uma operação atômica. LONG InterlockedDecrement(LONG volatile* lpaddend); (Ver 1_Exemplo_Interlocked)

Seção Crítica É a região do código que pode ser acessada somente por um thread de cada vez. Programa Principal Threads InitializeCriticalSection(); EnterCriticalSection();...... CreateThread(); LeaveCriticalSection(); CreateThread(); CreateThread();... DeleteCriticalSection();

Seção Crítica - Não é um Objeto do Kernel Pode aumentar a performance; Pode sincronizar somente threads do mesmo processo; Objetos do Kernel devem ser usados para sincronizar processos. Threads podem entrar uma seção crítica que eles já possuam Um contador é mantido; O thread tem que sair da seção crítica o mesmo número de vezes que entrou. A seção crítica não será liberada automaticamente se o thread que a mantem é terminado antes de executar LeaveCriticalSection()

Seção Crítica void InitializeCriticalSection( LPCRITICAL_SECTION lpcriticalsection ); void DeleteCriticalSection( LPCRITICAL_SECTION lpcriticalsection ); void EnterCriticalSection( LPCRITICAL_SECTION lpcriticalsection ); void LeaveCriticalSection( LPCRITICAL_SECTION lpcriticalsection ); lpcriticalsection Um ponteiro para a Seção Crítica. (Ver 2_Exemplo_critical_Section)

Objetos do Kernel Objetos do Kernel Estruturas de dados mantidas internamente pelo Sistema Operacional; Pode ser usado para sincronização inter-processo; Mutexes, Semaphores. Um contador é associado com: Mutex: valor máximo do contador = 1 No máximo um thread possui ele. Semaphore: valor máximo do contador = N No máximo N threads podem possuir ele.

Objeto do Kernel & Estado do Objeto O contador: Decrementa quando o Thread o possui; Incrementa quando o Thread libera ele; Sempre um valor não negativo e não maior que máximo. Estado do Objeto: Um objeto do kernel está em um estado sinalizado quando seu contador é maior que zero, caso contrário ele está no estado não sinalizado; Um thread pode somente possuir um objeto do kernel que esteja sinalizado.

Mutex Mutex pode ser nomeado e ter manipuladores, desta forma eles podem ser também usados para sincronização inter-processo (threads em processos diferentes). Programa Principal Threads HANDLE hmutex; WaitForSingleObject(); hmutex = CreateMutex( );...... CreateThread(); ReleaseMutex(); CreateThread(); CreateThread();... CloseHandle();

CreateMutex A função é usada para criar ou abrir um objeto mutex nomeado ou não nomeado. HANDLE CreateMutex( LPSECURITY_ATTRIBUTES lpmutexattribute, BOOL binitialowner, LPCTSTR lpname); Se o valor de binitialowner é TRUE, o thread que cria o mutex o obtém inicialmente, caso contrário não o obtém. BOOL ReleaseMutex ( HANDLE hmutex) (Ver 3_Exemplo_Mutex)

Semaphore O objeto semáforo é sinalizado quando seu contador for maior que 0 e não sinalizado quando seu contador for 0. Programa Principal Threads HANDLE hsemaphore; WaitForSingleObject( ); hsemaphore = CreateSemaphore( );...... CreateThread(); ReleaseSemaphore( ); CreateThread(); CreateThread();... CloseHandle();

CreateSemaphore A função é usada para criar ou abrir um objeto semáforo nomeado ou não nomeado. HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpsemaphoreattribute, LONG linitialcount, LONG lmaximumcount, LPCTSTR lpname);

ReleaseSemaphore Permite que o contador seja incrementado O contador do Release precisa ser maior que zero; O contador do Release não pode exceder o máximo; O ponteiro lppreviouscount pode ser NULL, se não necessário; Qualquer thread pode release um semáforo BOOL ReleaseSemaphore ( HANDLE hsemaphore, LONG creleasecount, LPLONG lppreviouscount); (Ver 4_Exemplo_Semaphore)