Aspectos de Programação Paralela em Máquinas NUMA

Tamanho: px
Começar a partir da página:

Download "Aspectos de Programação Paralela em Máquinas NUMA"

Transcrição

1 Aspectos de Programação Paralela em Máquinas NUMA Alexandre Carissimi 1 Fabrice Dupros 2 Jean-François Méhaut 3 Rafael Vanoni Polanczyk 1 1 Instituto de Informática UFRGS Caixa Postal Porto Alegre RS Brasil 2 Bureau de Recherches Géologiques et Minières (BRGM) 3, av. C. Guillemin BP6009 Orléans Cedex2 França 3 Laboratoire d Informatique de Grenoble LIG (IMAG-ENSIMAG) Antenne Montbonnot ZIRST 51, Av. J. Kuntzmann Montbonnot St. Martin França {asc, Resumo: O desenvolvimento de aplicações paralelas de forma eficaz depende de uma série de fatores. Entre esses, pode-se citar características intrínsecas do problema a ser tratado, da plataforma de hardware disponível e do paradigma de programação empregado, memória distribuída ou memória compartilhada. Além disso, há uma forte influência do suporte dado pelo sistema operacional quanto às tarefas de escalonamento e gerência de memória, como os conceitos de afinidade e de falso compartilhamento, particularmente importantes em multiprocessadores simétricos (SMP) e em processadores multicore. Hoje em dia, os multiprocessadores dedicados ao processamento paralelo pesado apresentam um acesso não uniforme a memória (Non-Uniform Memory Access) quanto à latência e a banda passante. Isso é devido ao número de processadores que possuem e a forma pela qual a memória é distribuída entre eles. Para se obter um bom desempenho na execução de uma aplicação nessas máquinas é importante que as threads (ou processos) executem em processadores que minimizem o tempo de acesso à memória. Cabe ao sistema operacional considerar esse aspecto em suas decisões de escalonamento e na alocação de memória. Este trabalho aborda os principais conceitos relacionados com máquinas NUMA e apresenta, como estudo de casos, o suporte fornecido pelos sistemas operacionais OpenSolaris e Linux. Para ilustrar quão importante é considerar esses fatores na prática, são apresentados os resultados preliminares obtidos pela execução de uma aplicação da área de geociências (simulação sísmica) em uma máquina NUMA.

2 1 Introdução Os últimos anos têm sido marcados por avanços científicos nas mais diversas áreas do conhecimento humano as quais exigem, cada vez mais, um maior poder computacional. No decorrer desses anos, várias soluções foram adotadas para suprir essa demanda. Inicialmente, foram os supercomputadores, depois os clusters de computadores e os multiprocessadores simétricos (Simetric MultiProcessors SMP) e, mais recentemente, os processadores multicore. Com aumento do poder computacional dos computadores de prateleira (Commercial off-the-shelf COTS) e a disponibilidade dos equipamentos de interconexão, os clusters de computadores [4] se tornaram bastante populares. Porém, a desvantagem dos clusters é a necessidade de desenvolver aplicações paralelas específicas para eles, o que implica no uso do paradigma de programação por passagem de mensagens através de APIs como PVM [7] e MPI [GROP96], por exemplo. Isso exige um grau de especialização e de esforço de programação não natural para uma grande parte dos programadores. Já os multiprocessadores simétricos (SMPs) permitem o emprego do paradigma de programação por memória compartilhada, mais familiar a maioria dos programadores, e disponível por APIs de multithreading como o POSIX Threads [9] ou, ainda, OpenMP [5]. A desvantagem dos SMPs está no seu custo mais elevado e na limitação do número de processadores que o compõe. Entretanto, novamente impulsionado por uma redução de custo e pelo aparecimento de processadores multicore, os multiprocessadores cc-numa (cache-coherent Non- Uniform Memory Access) tem se tornado uma opção atrativa para o processamento de alto desempenho. Uma máquina cc-numa é composta por uma série de módulos (nós), cada um contendo um ou mais processadores (multicore ou não) com uma memória local. Esses nós são interligados por um hardware, denominado de interconect, que permite ao processador de um nó acessar memória em outro nó, formando um espaço de endereçamento único e mantendo coerência entre os dados armazenados nas diversas caches. Dessa forma é possível ter multiprocessadores com um grande número de processadores. O inconveniente nessa arquitetura é que o tempo de acesso (latência) a um endereço de memória de outro nó é menor que à memória local. Isso faz com que acessos locais sejam mais rápidos, portanto, com um melhor desempenho. É essa característica que confere o nome NUMA a essas máquinas. Em tais plataformas de hardware, é importante que o sistema operacional considere a localização física dos processadores e das áreas de memória em suas decisões de escalonamento e de alocação de memória. O Linux e o OpenSolaris são dois exemplos de sistemas operacionais que oferecem suporte para máquinas NUMA. Ambos constroem abstrações de grupos de recursos (processadores e memória) de acordo com um critério de latência de acesso à memória e usam essas abstrações no escalonamento e na alocação de memória. Além disso, esses dois sistemas ainda disponibilizam aos usuários uma API que permite um certo grau de controle sobre qual nó um processo (ou thread) deve ser escalonado e de onde a memória deve ser alocada. Isso pode ser útil para realizar ajustes finos na execução de uma aplicação, já que é comum as aplicações paralelas apresentarem tarefas com um grau de dependência e complexidade de conhecimento do próprio programador e que, dificilmente, seriam consideradas pelo sistema operacional de forma automática. O objetivo deste trabalho é mostrar a importância do suporte do sistema operacional nas decisões de escalonamento e alocação de memória no desempenho de aplicações

3 paralelas em arquiteturas NUMA. Para atingir o objetivo proposto, inicialmente, na seção 2, faz-se uma revisão das diferentes arquiteturas paralelas existentes para, na seção 3, apresentar os paradigmas de programação usados nessas máquinas. A seção 4 discute os aspectos de gerência de memória em sistemas Unix a serem considerados no caso de máquinas NUMA. Na seqüência, seção 5, são apresentados o suporte a máquinas NUMA dos sistemas operacionais Linux e OpenSolaris. Na seção 6, para demonstrar na prática a importância de considerar a latência e banda passante da memória no desempenho de aplicações paralelas, discute-se os resultados preliminares obtidos pela execução de uma aplicação da área de geociências (simulação sísmica) em uma arquitetura NUMA. Por último, a seção 7, conclusão, onde é feito um resumo e algumas considerações finais sobre máquinas NUMA. 2 Arquiteturas paralelas Tradicionalmente, os sistemas operacionais são organizados em torno de um conceito fundamental: o processo. Segundo sua definição mais clássica, um processo é uma abstração que representa um programa em execução [18]. Um processo possui um fluxo de controle (thread) que fornece a ordem em que as instruções são executadas sobre um conjunto de dados. Para se obter processamento paralelo é necessário que, de alguma forma, vários processos ou fluxos de controle (threads) sejam executados simultaneamente. Isso só é possível com o auxílio de hardware. Existem diferentes formas de se projetar máquinas voltadas à execução paralela de vários fluxos de controle, definindo as denominadas arquiteturas paralelas. Para melhor compreender o tipo de paralelismo a ser explorado, Flynn [6], em 1972, propôs uma taxonomia que classificava as máquinas de acordo com uma combinação de duas dimensões. A primeira dimensão é o número de fluxos de instruções (instruction stream) que uma máquina pode executar em um determinado instante de tempo t. A segunda dimensão é a quantidade de fluxos de dados (data stream) que são processados em um mesmo instante de tempo t. Considerando que em cada uma dessas duas dimensões é possível ter duas opções, único fluxo (single) ou vários fluxos (multiple), obtém-se as quatro combinações fornecidas na figura 1. Figura 1 A taxonomia de Flynn

4 Os computadores de fluxo único de instruções, fluxo único de dados (single instruction, single data - SISD) são as máquinas de Von Neuman tradicionais baseadas em processadores como um Intel 80486, onde um processador busca uma instrução por vez e a executa sobre um único dado. Se o hardware permite que uma mesma instrução seja feita sobre um conjunto de dados, temos os computadores de fluxo único de instruções, fluxo múltiplo de dados (single instruction, multiple data - SIMD). Um exemplo típico dessa classe de máquina são os processadores matriciais, comuns em aplicações de tratamento de imagens onde uma mesma instrução pode ser aplicada a um conjunto de pixels. Um computador de fluxo múltiplo de instruções, fluxo único de dados (multiple instruction, single data - MISD) seria capaz de executar um conjunto de instruções sobre um mesmo dado. Foi empregado o condicional (seria) porque, na prática, até hoje, não existe nenhuma máquina com essa capacidade, ficando apenas como uma classe teórica. Por fim, os computadores de fluxo múltiplo de instruções, fluxo múltiplo de dados (multiple instruction, multiple data) que constituem a plataforma de computação paralela mais comum hoje em dia. Os multicomputadores, os multiprocessadores e os processadores multicore são representantes típicos dessa classe. Em todos eles, em um dado instante de tempo, existem múltiplas unidades de processamento completamente independentes que realizam, cada uma, um fluxo de instruções sobre um fluxo de dados. O contexto de estudo deste trabalho é justamente sobre máquinas MIMD. Entretanto, a classificação de Flynn não é a mais adequada por não salientar um ponto de fundamental importância para o desenvolvimento de programas paralelos para essa classe de máquinas: o acesso à memória. É possível classificar as máquinas MIMD de acordo com o tipo de compartilhamento de memória em duas categorias [19]: Fortemente acoplada (tightly coupled): sistemas onde existe um único espaço de endereçamento compartilhado por todos os processadores. Nesse caso, a comunicação entre diferentes processadores ocorre de forma implícita através de instruções de escrita e leitura em posições de memória: um processador escreve em uma posição x (store x) e outro processador lê essa mesma posição (read x) Fracamente acoplada (loosely coupled): nesse sistema, cada processador tem seu próprio, e privativo, espaço de endereçamento. Aqui, a comunicação entre processos só é possível através de primitivas de troca de mensagens como send e receive. Tipicamente, os sistemas fortemente acoplados são denominados de sistemas de processamento paralelo e os sistemas fracamente acoplados de sistemas distribuídos. Também é comum, respectivamente, o emprego dos termos multiprocessadores e multicomputadores. Outro ponto interessante a destacar nos sistemas fortemente acoplados e fracamente acoplados é quanto à localização física da memória. A figura 2 [16], apresenta uma visão da classificação das arquiteturas paralelas segundo o tipo de compartilhamento de memória e a sua localização física.

5 Figura 2 Classificação de máquinas segundo compartilhamento de memória Em um sistema fortemente acoplado todos os processadores acessam, através de uma malha de interconexão, um mesmo espaço de endereçamento compartilhado. Dependendo da localização física da memória em relação aos processadores, o tempo de acesso a uma posição de memória pode ser uniforme ou não. Surge então as arquiteturas denominadas de UMA (Uniform Memory Access) e NUMA (Non-Uniform Memory Access). Uma máquina UMA é caracterizada por fornecer um tempo de acesso idêntico a todas posições de memória para todos os processadores do sistema. Isso é típico das máquinas multiprocessadores simétricos (SMP) onde existe um único banco de memória que é acessado por todos os processadores do sistema. Já em um máquina NUMA, a memória é fisicamente composta por vários bancos de memória, podendo estar, cada um, vinculados a um processador. Nesse caso, quando o processador acessa a memória que está vinculada a si diz-se que houve um acesso local. Se o acesso for à memória de outro processo, ocorre um acesso remoto. Os acessos remotos são mais lentos que os acessos locais já que é necessário passar pela malha de interconexão. A figura 3 ilustra esses casos. Figura 3 Arquiteturas (a) UMA e (b) NUMA com acesso local e remoto

6 Um outro ponto importante nas máquinas NUMA diz respeito à memória cache. É comum, por questões de desempenho, cada processador possuir uma memória cache. Imagine agora a seguinte situação: o processador P 0 acessa a memória M 1 vinculada ao processador P 1. Após esse acesso, P 0 mantém em sua memória cache uma cópia do dado da posição de memória acessada em M 1, novas referências (leituras ou escritas) de P 0 a essa posição será feita nessa cópia em cache. O que ocorre se durante os acessos feitos por P 0 a sua cache o processador P 1 mudar o valor dessa posição de memória? Tem-se um problema de coerência de cache (cache coherence). Para resolvê-lo é necessário invalidar a cache de P 0 para forçá-lo a buscar o novo valor na memória M 1. As máquinas cc-numa (cache coherent NUMA) são projetadas para garantir a coerência entre o valor armazenado em uma cache e na sua posição original. As arquiteturas ncc-numa (non-cache coherent NUMA) não provêem esse suporte. Conforme a figura 2, existem dois outros tipos de arquitetura: COMA (cache only memory architecture) e NORMA (non-remote memory access). Em uma máquina COMA, todas as memórias locais estão estruturadas como memórias caches e possuem, por hardware, uma replicação de um bloco de cache em todos os nós. Por isso, essas arquiteturas são mais caras de se implementar que as NUMA e raramente são usadas. As arquiteturas NORMA, por sua vez, salientam o aspecto de cada processador ter uma memória própria não compartilhada com os demais. A leitura (ou escrita) de uma posição de memória de outro processador só é possível via troca de mensagens. Os clusters de computadores (agregados) seguem esse modelo. Este trabalho aborda as questões de programação em máquinas UMA e cc-numa, especialmente essas últimas. Por isso, nas próximas seções serão discutidos mais alguns aspectos destas duas classes de máquinas. O leitor interessado em obter mais detalhes sobre as outras classes pode consultar [16]. 2.1 Arquiteturas UMA As máquinas UMA são caracterizadas pelo fato de que a memória é centralizada e acessível por todos os processadores da mesma forma, isso faz com que a latência de acesso à memória seja idêntica para todos esses. A rede de interconexão (figura 3a) normalmente usada é o barramento, o que gera um gargalo de acesso já que só pode haver um processador por vez realizando acessos à memória. Essa característica limita o número de processadores a serem empregados em uma arquitetura UMA já que, quanto mais processadores houver, maior a chance de disputas de acesso ao barramento e o aumento do tempo de espera para acessá-lo. Entretanto, há formas de reduzir esse conflito de acesso como, por exemplo, o uso de outras redes de interconexão, o emprego de memórias multiportas, organização da memória em bancos, memórias cache etc. O importante, porém, é manter a latência de acesso à memória uniforme. Todos os processadores atuais possuem caches internas para dados e instruções organizadas em um sistema hierárquico (L1, L2 e L3). As memórias cache atuais chegam a vários megabytes dependendo do modelo do processador e de seu fabricante. As caches, além de melhorem o desempenho do sistema já que seu tempo de acesso é inferior que os das memórias RAM em pelo menos uma ordem de grandeza, contribuem para reduzir o gargalo do barramento. Apenas os acessos às posições de memória não mantidas em cache necessitam disputar o uso do barramento. Entretanto, o uso de cache introduz o problema

7 de coerência de cache: sempre que uma posição de memória for modificada, sua cópia mantida em qualquer cache deve ser invalidada para que o processador seja forçado a buscar o novo valor na memória RAM. A unidade de transferência de dados entre a memória RAM e a cache de um processador é um conjunto contíguo de bytes, denominado de linha de cache. Conseqüentemente, apesar de ser modificado apenas um valor, toda a linha da cache é invalidada. Os multiprocessadores simétricos (Symmetric MultiProcessors SMP), disponíveis comercialmente, são exemplos típicos de máquinas UMA. Nessas máquinas é comum encontrar uma rede de interconexão do tipo barramento. Esse barramento, além de possuir as vias de endereços, de dados e de controle implementa um arbitrador e um protocolo de coerência de cache. O arbitrador serve para coordenar o acesso de um processador à memória RAM através do barramento impedindo acessos simultâneos e conflituosos entre processadores. Sempre que um processador modificar um dado contido em uma linha de cache, cabe ao protocolo de coerência de cache propagar essa modificação até a memória RAM e invalidar toda e qualquer outra linha de cache incluindo outros processadores que mantém uma cópia dessa posição de memória modificada. Mais recentemente, os computadores de uso geral começaram a vir com processadores dualcore, ou mesmo quadcore. Basicamente, um processador multicore é uma arquitetura UMA, só que interna a um chip. As unidades de processamento (cores) compartilham o acesso à memória da mesma forma que os processadores em um SMP. Em alguns processadores, o compartilhamento de memória já inicia na própria cache, nos níveis L2 ou L3. O problema de coerência de cache aparece novamente, já que pelo menos o nível L1 é privativo de cada core e pode manter cópias de posições de memórias. 2.2 Arquiteturas NUMA As máquinas NUMA são construídas interconectando vários módulos compostos por processadores e memórias. Partindo dessa descrição é possível se perguntar qual a diferença entre uma máquina NUMA e um cluster de computadores, pois este último nada mais é do que um conjunto de computadores (processador e memória) interconectados por uma rede de comunicação. Existem duas grandes diferenças. Primeiro, em uma máquina NUMA existe um único sistema operacional gerenciando todos os recursos (memória, processadores e entrada/saída), em um cluster, cada nó (computador) é uma máquina independente com o seu próprio sistema operacional. Segundo, o espaço de endereçamento de uma máquina NUMA é único e compartilhado, isto é, as memórias dos diferentes módulos compõem a memória total do sistema, cada uma respondendo por uma faixa do endereçamento total. Em um cluster, cada máquina tem um espaço de endereçamento privativo. Além disso, a rede de interconexão de um cluster é normalmente uma rede de comunicação standard como, por exemplo, Ethernet, e em arquiteturas NUMA a rede de interconexão é normalmente uma solução proprietária baseada em diferentes técnicas de comutação. Como visto anteriormente, o N de NUMA vem do fato que o acesso à memória é não uniforme: acessos a posições de memória remotas possuem uma latência maior, isto é, são mais lentos, que acessos a posições de memória locais. Em uma máquina NUMA todos os processadores enxergam o mesmo espaço de endereçamento, porém algumas posições são mais demoradas de se acessar que outras.

8 Analisando apenas sob o ponto de vista de espaço de endereçamento, o paradigma de programação usado em multiprocessadores simétricos (SMP) funciona corretamente em máquinas NUMA, desde que estas mantenham coerência de cache. Entretanto, executar corretamente é diferente de executar eficientemente. Se por um lado, as máquinas NUMA tem a vantagem de agregar mais paralelismo real adicionando mais processadores sem aumentar o conflito e gargalo de acesso ao barramento, comuns aos SMP, ela apresenta a desvantagem de fornecer um acesso não-uniforme à memória. Esse acesso não uniforme é importante para o desempenho da aplicação e deve ser avaliado. Uma forma bastante comum de medir a não-uniformidade de acesso à memória é considerar a razão entre o acesso a uma posição de memória remota e um acesso a uma posição de memória local. Essa razão é também denominada de distância ou fator NUMA. Uma mesma máquina pode apresentar diferentes valores para o fator NUMA dependendo de qual processador acessa qual memória. Portanto, para uma aplicação executar de forma eficiente em uma arquitetura NUMA é desejável que os processos sejam escalonados nos processadores mais próximos possíveis da faixa de endereçamento que eles acessam para reduzir o fator NUMA. Fica claro que é necessário estimar o fator NUMA de alguma forma e o sistema operacional deve usar essa informação na sua decisão de escalonamento. A ACPI (Advanced Configuration and Power Interface) é uma especificação de um standard industrial aberto desenvolvido pela HP, Intel, Microsoft, Phoenix e Toshiba que define uma API (Application Program Interface) para obter informações sobre placas mães, reconhecimento de hardware, configurações de dispositivos e gerenciamento de energia [1]. A versão inicial da ACPI é de 1996 e, a versão 3.0, a atual, foi liberada em outubro de As informações fornecidas pela ACPI são organizadas de forma hierárquica em um conjunto de tabelas. Para máquinas NUMA, as tabelas mais relevantes são a SRAT (System Resource Affinity Table) e a SLIT (System Locality Information Table). A SRAT foi definida para ser usada em sistemas operacionais dedicados a máquinas NUMA para permitir que na tarefa de alocação de memória os dados sejam alocados o mais próximo, em latência de memória, do local onde o processo (ou thread) será executado. A SLIT, por sua vez, fornece a distância relativa (latência de memória) entre diferentes domínios ou localidades, isto é, processadores, controladores de memória e pontes. Cada nó que compõem uma máquina NUMA é equivalente a um SMP e recebe um valor de localidade arbitrado a 10. A SLIT pode ser vista como uma matriz de distâncias de dimensão n, onde n é a cardinalidade das localidades (número de nós) e a linha i fornece a distância da localidade i para uma localidade j qualquer. A diagonal dessa matriz é a distância de um nó a si mesmo, os demais valores são relativos a distância SMP (10). Por exemplo, se a distância da localidade i para a localidade j é 2.4 vezes maior que a distância SMP, o valor a ser posto nessa entrada da matriz é 24. A figura 4 fornece alguns exemplos de máquinas NUMA reais e suas respectivas SLITs. Infelizmente, apesar de ser um standard a ACPI ainda não é adequadamente implementada nas BIOS dos principais fabricantes. Pelo padrão, a tabela SLIT é opcional, mas, normalmente, é ela e não a SRAT que é encontrada na BIOS. Alguns sistemas operacionais, entre eles, o Linux e OpenSolaris, definem a distância entre módulos usando abstrações próprias como domínios e lgroup, respectivamente. Isso será apresentado nas seções 5.1 e 5.2.

9 Figura 4 Exemplos de arquiteturas NUMA e suas SLITs 3 Programação paralela Como visto na seção anterior, existem várias arquiteturas para máquinas paralelas, cada uma delas com uma determinada característica em relação à quantidade de fluxos de instruções e de dados que podem ser executados em um instante de tempo. O problema agora é como desenvolver programas para essas máquinas. As aplicações, em si, geralmente, apresentam paralelismo intrínseco que são mais apropriados para uma ou outra arquitetura de máquinas paralelas. Portanto, é necessário no desenvolvimento de aplicações paralelas adequar o tipo de paralelismo com uma classe de máquinas para obter o melhor desempenho possível. Além disso, é necessário expressar esse paralelismo de alguma forma. Surgem então as linguagens paralelas, compiladores para extração automática de paralelismo e modelos ou paradigmas de programação. Cada uma dessas técnicas apresenta vantagens e desvantagens, porém é mais comum encontrar o uso de paradigmas de programação.

10 Empregando os paradigmas de programação paralela é necessário que a aplicação a ser paralelizada seja dividida em várias subtarefas, cada uma delas consistindo em um fluxo de instruções e operando sobre um conjunto de dados. Esses paradigmas são naturalmente apropriados para a classe de máquinas MIMD. Entretanto, durante a execução das tarefas é bastante comum que as tarefas tenham necessidades de comunicar entre si para fornecer resultados parciais e esperar que uma, ou outra, atinja um determinado ponto de execução (sincronização). A forma como essa comunicação e a sincronização é obtida depende se a arquitetura apresenta memória distribuída ou compartilhada e para isso existem dois paradigmas de programação paralela: passagem de mensagens e memória compartilhada. 3.1 Paradigma de programação por passagem de mensagens O paradigma de passagem de mensagens é baseado em duas primitivas básicas, send e receive, através das quais as tarefas comunicam entre si fornecendo e recebendo valores uma das outras. Essas duas primitivas podem ser usadas para a sincronização das tarefas já que podemos imaginar que uma tarefa que executa um receive fica bloqueada esperando que os dados sejam enviados (send) por outra tarefa. Esse paradigma é coerente com as máquinas MIMD de memória distribuída, onde é possível imaginar que cada tarefa é um processo e, portanto, possui um espaço de endereçamento próprio e privativo. Um processo só consegue ler ou passar dados para o espaço de outro processo do recebimento ou envio explicito desses dados através de primitivas de passagem de mensagens. Essas primitivas são fornecidas por APIs implementadas por bibliotecas de comunicação como, por exemplo, MPI e PVM. O MPI apresenta um conjunto de mais de uma centena de primitivas para permitir diferentes padrões de troca de mensagens como comunicação ponto a ponto, em grupo, vários tipos de send e receive, bloqueantes e bloqueantes, com diferentes semânticas e primitivas de sincronização, entre outras. O MPI fornece ainda APIs para a linguagem de programação C e Fortran. O programador que desenvolve uma aplicação paralela baseada em passagem de mensagens, além de ter o conhecimento de como o paradigma deve ser usado, precisa estudar e conhecer as primitivas da biblioteca de comunicação para usá-la adequadamente. Note ainda que nesse paradigma a idéia é criar processos que se comunicam por trocas de mensagens independentes de estarem sendo executados fisicamente em uma mesma máquina ou em máquinas distintas. Por isso, passagem de mensagens e, em especial, o MPI, é largamente difundido entre aplicações executadas em clusters de computadores (classe MIMD fracamente acopladas do tipo NORMA). E o quê pode ser usado para desenvolver aplicações paralelas para as máquinas MIMD fortemente acopladas? Bom, inicialmente, é possível, apesar de não ser o mais adequado, usar passagem de mensagens, já que esse modelo é baseado na troca de mensagens entre processos independentemente de onde eles estão sendo executados. Entretanto, essa solução não é natural para as máquinas fortemente acopladas por duas razões. Primeira, os programadores devem saber desenvolver aplicações baseadas no paradigma de passagem de mensagens, o que exige um certo esforço de aprendizado e de programação. Segunda, como, por definição, os processos possuem espaços de endereçamento próprios e privativos, comunicar um valor de um processo A a um processo B implica em copiar esse valor do espaço de endereçamento de A para o espaço de endereçamento do B passando pelo núcleo do sistema operacional. Isto implica em cópias

11 e, conseqüentemente, em queda de desempenho. Já que uma máquina fortemente acoplada é caracterizada por possuir uma memória compartilhada por que não permitir que o processo A escreva diretamente no espaço de endereçamento do processo B? Isso dá origem ao paradigma de programação por memória compartilhada. 3.2 Paradigma de programação por memória compartilhada Assim como ocorre com o paradigma de troca de mensagens, existem APIs e implementações dedicadas a programação por memória compartilhada onde se destaca a programação orientada a threads (multithreading). Como mencionado anteriormente, um processo é uma abstração que representa um programa em execução e possui um espaço de endereçamento próprio onde estão o código a ser executado (text), as variáveis globais (data), uma área para alocação dinâmica de memória (heap) e uma pilha (stack), empregada em chamadas de procedimento e na definição de variáveis locais. O ponto da execução em que o processo se encontra, isto é, instrução a ser executada (program counter) e o estado da pilha (stack pointer) é determinado por um fluxo de execução (thread, em inglês). A idéia por trás do multithreading é permitir que um processo tenha mais de um fluxo de execução ao mesmo tempo (threads). A figura 5 ilustra esse conceito. Figura 5 O conceito de multithreading em processos UNIX

12 As threads compartilham o espaço de endereçamento de um processo, à exceção da área da pilha. Dessa forma, todas as threads enxergam o mesmo código, a área de memória correspondente as variáveis globais e área de heap, esta última empregada na alocação dinâmica de memória através de chamadas de sistemas do tipo malloc (memory allocation). Dessa forma, cada thread executa uma função do código, por exemplo, rotina1 e rotina2, como dado na figura 5 (na realidade, as threads também podem executar uma mesma função). A comunicação entre uma thread 1 e uma thread 2 ocorre de forma bastante natural, bastando que uma delas escreva diretamente em uma posição de memória e a outra leia esta posição como, por exemplo, na seguinte situação: a thread1 atribui um valor a uma posição do arraya (arraya[2]=10) e a thread2 lê esse valor (x=arraya[2]). A sincronização entre as threads é fornecida por primitivas como mutexes, semáforos e variáveis de condições. Cabe ressaltar que as threads são particularmente importantes quando há mais de uma unidade de processamento em uma máquina, já que o sistema operacional pode escalonar para execução uma thread em cada unidade de processamento. Isso acontece em máquinas SMP, em máquinas NUMA e em processadores multicore. O suporte a threads pode ser implementado em nível de usuário, através de uma biblioteca (runtime), ou no próprio sistema operacional. Hoje em dia, todos os sistemas operacionais oferecem suporte a threads no próprio núcleo. Para um programador explorar o uso de threads uma API é disponibilizada pelo próprio sistema operacional ou integradas em uma linguagem de programação como o Java. No mundo Unix, a API mais difundida é a POSIX threads (Pthreads). A principal vantagem da programação orientada a threads é permitir que os programadores empreguem um conceito mais natural e comum do que a passagem de mensagens. A exploração do paralelismo real fica a cargo do sistema operacional. É importante notar que nesse caso, o sistema operacional tem uma contribuição significativa no desempenho de uma aplicação baseada em threads. Essa importância será discutida nas próximas seções. 4 Gerência de memória em Unix Um processo Unix que executa em arquiteturas de 32 bits pode, teoricamente, ocupar até 4 Gbytes. Entretanto, o espaço em memória física (RAM) é um recurso escasso e o sistema operacional deve dividi-lo entre os vários processos em execução. Quando é necessário carregar um novo processo em memória, o sistema operacional traz do disco apenas as porções necessárias à sua execução e não o processo inteiro. Se ao executar, o processo acessa uma posição de memória que não está carregada em memória, o sistema operacional bloqueia esse processo, realiza a carga da porção que está faltando e, na seqüência, torna o processo novamente apto a executar. Esse esquema de gerenciamento de memória desvincula o tamanho lógico do processo do espaço disponível em RAM, já que o sistema operacional mantém em memória física apenas as porções necessárias à execução do programa. Isso é a base do que é denominado de memória virtual [18]. Existem duas técnicas fundamentais para definir as porções de memória: segmentação e paginação. Na segmentação, o espaço de endereçamento do processo é dividido em porções de tamanhos variáveis denominados de segmentos. Já na paginação,

13 essas porções possuem tamanhos fixos e são denominados de páginas. A maioria dos sistemas operacionais emprega paginação por seu gerenciamento ser mais simples. A paginação é uma técnica de gerenciamento de memória que consiste em dividir tanto o espaço de endereçamento lógico do processo quanto o espaço físico em memória RAM em porções de tamanho fixo denominadas de página e quadros (frames), respectivamente. O sistema operacional mantém uma lista de quadros livres e os aloca a páginas à medida que os processos vão sendo carregados em memória (paginação por demanda). Qualquer página pode ser alocada a qualquer quadro. A vinculação entre páginas e quadros é feita a partir de uma tabela de páginas. O leitor interessado em obter mais detalhes desse procedimento pode consultar [18][15]. 4.1 Alocação de memória Sempre que um processo é criado, é definido um espaço de endereçamento lógico que pode ser visto como uma espécie de ambiente de execução contendo código, dados e pilha. O procedimento de criação de processos em Unix é baseado nas chamadas de sistema fork e exec. Um processo, denominado de processo pai, quando executa a chamada de sistema fork cria um novo processo, atribuindo um novo pid (process identifier) e um espaço de endereçamento lógico, que é, à parte algumas estruturas de dados e informações internas de contabilidade do sistema operacional, uma cópia quase exata do seu próprio espaço de endereçamento [21]. Na prática, isso é feito com que o processo filho receba uma cópia da tabela de páginas do processo pai. Entretanto, na maioria das vezes o processo filho é criado para executar um código diferente do processo pai. Assim, na seqüência o processo filho executa a chamada de sistema exec para substituir as cópias das páginas do processo pai por páginas próprias provenientes de um arquivo executável. A partir desse ponto, os processos pai e filho, se diferenciam. Nesse ponto, ocorre uma alocação de memória para as páginas do processo filho. Os processos, uma vez em execução, podem alocar memória adicional a partir da área de heap de seu espaço de endereçamento lógico. Isso é feito adicionando novas páginas ao seu espaço de endereçamento virtual, ou seja, aumentando o número de entradas em sua tabela de páginas, através da chamada de sistema malloc. Entretanto, normalmente, no Unix, a vinculação de uma nova página (endereço lógico) a um quadro (memória real) só acontece quando essa página for acessada pela primeira vez. Essa política é conhecida como first touch [21]. Posto de outra forma, ao se realizar uma primitiva malloc se obtém um espaço de endereçamento lógico proporcional à quantidade solicitada por malloc, porém a memória física correspondente só será realmente alocada quando for feito o primeiro acesso a ela. 4.2 O problema do falso compartilhamento A leitura e a escrita de dados na memória RAM envolve a geração de sinais de controle e o acesso ao barramento de dados e de endereço, que é normalmente compartilhado com outros subsistemas, como E/S, e, em máquinas multiprocessadores, com outros processadores. Além disso, há o próprio tempo de leitura e escrita na memória RAM. Para diminuir esse tempo (latência) todos os processadores atuais possuem um ou mais níveis de cache, já que as caches são internas ao processador e a memória RAM é externa. O princípio básico da cache é copiar um bloco de dados da memória principal para

14 uma linha de cache e assim permitir que a unidade de processamento acesse os dados sem realizar um acesso a RAM. Essa técnica funciona bem em sistemas monoprocessados executando programas seqüenciais, porém em máquinas SMP, ou em programas concorrentes usando multithreading, alguns cuidados devem ser tomados para não se comprometer o desempenho da aplicação. O falso compartilhamento (false sharing) ocorre quando múltiplos processadores compartilham uma mesma linha de cache sem efetivamente compartilharem os dados nela contidos [20]. Os algoritmos de alocação de memória em máquinas SMP podem provocar o falso compartilhamento alocando objetos (variáveis) consecutivamente em memória e, posteriormente, passando-os como parâmetros a threads independentes que serão executadas em diferentes processadores. Dessa forma, como ilustrado na figura 6, qualquer thread, em qualquer processador, que modificasse seu próprio objeto (variável) estaria invalidando a cache dos demais processadores por ter modificado a mesma linha de cache, embora não os dados utilizados por eles. Uma forma de resolver esse problema seria fazer com que o algoritmo de alocação de memória reservasse para cada objeto (variável) uma linha de cache, porém isso levaria a um grande desperdício de memória. Por exemplo, em processadores Sparc, a linha de cache é 64 bytes, se cada objeto fosse um inteiro (4 bytes) e ocupasse uma linha, cada um deles desperdiçaria 60 bytes na memória e, pior, na cache também. Convém salientar que esse problema ocorre mesmo quando há um único processador, pois uma thread ao modificar sua porção na linha de cache estaria invalidando toda ela. Figura 6 O problema do falso compartilhamento

15 O problema do falso compartilhamento também pode ocorrer quando diferentes threads executam a primitiva malloc e esta satisfaz as requisições de memória alocando espaço que é mapeado em uma mesma linha de cache (figura 7). Por exemplo, o algoritmo de alocação pode dividir um bloco de dados, mapeado em uma linha de cache entre x threads. Se uma delas realizasse uma escrita, a linha da cache seria invalidada e qualquer uma das outras x-1 threads que executasse uma operação de leitura deveria recarregar o bloco de dados para a cache. Figura 7 O problema do falso compartilhamento (outra situação) A conclusão que se tem é que os algoritmos de alocação de memória, principalmente em máquinas SMP, devem, na medida do possível, evitar o problema do falso compartilhamento. O Hoard [2] é uma proposta de alocador de memória para máquinas SMP executando Linux que busca reduzir o falso compartilhamento e ao mesmo tempo fazer um uso eficiente de memória. A técnica empregada consiste em dividir a área de heap entre os vários processadores do sistema e em uma área global compartilhada entre eles. O princípio básico é fazer com que uma thread, executando uma primitiva malloc em um processador i, tenha sua requisição de memória atendida por uma área de memória exclusiva àquele processador e assim evite a situação de uma área contígua ser alocada a diferentes threads em diferentes processadores. 5 Suporte do sistema operacional para NUMA Na seção 4 foram discutidos alguns aspectos sobre a gerência de memória em sistemas Unix em geral. Dessa discussão parece ficar claro que o sistema operacional tem uma forte influência no desempenho na execução de uma aplicação. A prova está na preocupação de sistemas operacionais para arquiteturas convencionais, como o Windows, em introduzir o conceito de afinidade no escalonamento de threads [17]e na proposta de um novo alocador de memória (Hoard) para o Linux. No caso específico de arquiteturas NUMA a preocupação está em fazer com que uma thread realize os acessos na memória local ao nó que ela executa. Essa lógica, aparentemente simples, possui uma série de pontos a serem considerados. Por exemplo, o que acontece se após alocar a memória fisicamente em um nó, a thread é escalonada para executar em outro processador? Ou, o que ocorre se não há memória suficiente no nó em

16 que a thread está executando? As respostas a essas e outras questões se traduzem em considerar a característica NUMA nas tarefas de escalonamento e gerenciamento de memória. Da mesma forma, é importante que o usuário tenha um conhecimento do que está acontecendo na máquina e que ele tenha mecanismos de influenciar e auxiliar as decisões do sistema operacional quanto ao escalonamento e a gerência de memória. Normalmente, isso é disponibilizado por bibliotecas de comunicação e por comandos específicos as máquinas NUMA. O principal conceito por trás de sistemas operacionais voltados a máquinas NUMA é o de afinidade. A idéia é fazer com que uma thread seja vinculada a um processador e que suas demandas por memória sejam satisfeitas de forma a oferecer o menor tempo de acesso possível. Fala-se em afinidade de processador e afinidade de memória. Esses conceitos podem ser implementados de diferentes maneiras e a melhor maneira de entendê-las é analisar como fazem os sistemas operacionais NUMA compatíveis. Este é o principal objetivo desta seção e para atingi-lo serão estudadas as implementações dos sistemas operacionais GNU/Linux e OpenSolaris. 5.1 Linux em arquiteturas NUMA O suporte a multiprocessadores em geral começou a ser introduzido no Linux a partir da versão 2.6 do núcleo através de modificações nos subsistemas responsáveis pelo escalonamento e pela gerência de memória. Além disso, para explorar adequadamente as características NUMA, foram introduzidas novas estruturas de dados para manter informações sobre a topologia da máquina, novas chamadas de sistemas e uma API em nível de usuário. A modificação mais importante no núcleo talvez tenha sido a introdução do conceito de domínio de escalonamento, sobre o qual o escalonador se baseia para tomar decisões. Isso afeta qualquer tipo de multiprocessador, incluindo as máquinas NUMA. Depois, o subsistema de memória virtual, que foi alterado para considerar a topologia de uma máquina NUMA quanto à localização física da memória para as tarefas de alocação e liberação de memória. Em particular, foram introduzidas políticas que permitem o usuário informar ao sistema como (e onde) a memória deve ser alocada. Além disso, a SGI introduziu em sua versão de Linux uma abordagem interessante, que é a replicação nos diferentes nós de uma máquina de áreas de memória read-only, como o código do próprio núcleo e de bibliotecas como a libc [3]. Isso reduz o tráfego entre os nós e a latência de acesso ao código do núcleo, já que todos os acesso serão feitos em uma cópia local. As novas chamadas de sistema, entre outras, permitem configurar uma política de gerência de memória para uma determina faixa de endereçamento (mbind), para um processo específico (set_mempolicy) e vincular um processo a um determinado processador (sched_setaffinity). Para o usuário essas funcionalidades são disponibilizadas através de uma API da biblioteca libnuma. Há também a possibilidade de configurar as políticas de memória e afinidade por linha de comando via numactl. Nas próximas seções, essas novidades serão apresentadas de forma mais detalhada.

17 5.1.1 Domínios de escalonamento Nas versões do núcleo anteriores a 2.6, o escalonador do Linux organizava todos os processos aptos a executar em uma única fila. Quando o processador se tornava livre, o algoritmo de escalonamento selecionava um processo dessa lista e o colocava em execução. Esse procedimento era simples e eficiente para máquinas com um único processador. Na medida que mais processadores foram sendo introduzidos no sistema via multithreading ou multicore essa fila começou a se tornar um gargalo de acesso. A solução adotada foi criar múltiplas filas, uma por processador. No entanto, essa solução trouxe consigo o problema de balanceamento de carga, ou seja, como distribuir de forma eqüitativa os processos (ou threads) entre os vários processadores. O Linux aborda o problema do balanceamento de carga com o auxílio da abstração de domínios de escalonamento (sched domains) para construir uma estrutura hierárquica em árvore que representa a topologia da máquina [11]. Essencialmente, um domínio de escalonamento é uma estrutura de dados (sched_domain) que implementa uma lista circular de outras estruturas (sched_groups) as quais definem os processadores que compõem um determinado domínio. Por exemplo, em processadores SMT, cada processador é representado por um sched_group diferente. Nesse caso, um sistema com dois processadores dualcore é visto pelo núcleo como dois domínios diferentes, um por processador, e cada um deles com dois sched_group (um por core). Um outro exemplo, uma máquina cc-numa com quatro processadores, dois em cada nó, é vista como na figura 8. Nesse último caso aparece a noção de hierarquia, cada nó define um domínio de escalonamento (folhas) formado por dois processadores e há um domínio de escalonamento formado pelos quatro processadores. Figura 8 Exemplo de domínios de escalonamento. O algoritmo de balanceamento de carga tenta manter todos os processadores com uma carga similar, porém isso é feito no interior de um domínio. Isso implica em migrar processos do processador mais ocupado a um processador menos ocupado dentro de um mesmo domínio-folha. O objetivo de evitar migração entre processos de domínios diferentes é mantê-los próximo à memória que eles acessam, porém, a migração interdomínios pode ocorrer. Nesse ponto, o Linux possui uma deficiência: os processadores de diferentes nós são agrupados em um domínio de hierarquia superior sem considerar seus

18 fatores NUMA eventualmente diferentes. Por exemplo, na figura 8, os processadores 0 a 3 são considerados de forma idêntica, independentemente de seus fatores NUMA individuais. A conseqüência disso é a possibilidade de migrar processos para processadores com o maior fator. Uma proposta de algoritmo de balanceamento de carga que considera os diferentes fatores NUMA é dado em [22]. As várias funcionalidade e comportamento do algoritmo original de balanceamento de carga do Linux podem ser vistas em [3] e [12 ] Gerenciamento de memória O sistema de gerenciamento de memória é baseado em uma entidade central denominada de alocador de páginas que trata as requisições de memória feitas pelos diferentes subsistemas do núcleo. O ponto a destacar é que o alocador atende essas requisições trabalhando sobre um conjunto de páginas que são mapeadas, posteriormente, para memória física. A vinculação de páginas a memória física (quadros) pode ser otimizado para latência ou para banda passante. Sempre que um processador acessa a memória local a seu nó, temos a menor latência. Entretanto, algumas aplicações podem ser mais sensíveis a banda passante de memória. Nesse caso, já que cada nó possui seus próprios controladores de memória é possível fazer com que eles trabalhem em paralelo de forma similar ao que acontece em um sistema RAID. A idéia é dividir o espaço de endereçamento do processo em blocos através de todo o sistema de memória. As diferentes porções podem ser acessadas em paralelo. Apesar dessa possibilidade, é mais comum que as aplicações procurem reduzir a latência. A maneira pela qual a memória será alocada no espaço de endereçamento físico é definida por uma série de políticas. Essas políticas são disponibilizadas para o usuário através da API NUMA. O Linux prevê quatro políticas básicas: Default: aloca memória no nó onde o processo (thread) está executando. Strict: a memória é alocada em um nó específico. Se não houver memória disponível, a requisição por memória retorna com erro. Na API NUMA, esse corresponde ao modo bind da API NUMA. Non-strict preferred: a alocação é feita preferencialmente em um determinado nodo, se ela não pode ser atendida, o sistema recai para o caso default. Esse modo é denominado de preferred na API NUMA. Round-robin: a memória é distribuída igualmente em todos os nós, na API NUMA isso equivale ao modo denominado de interleaved. Essas políticas podem ser definidas globalmente para o sistema, por uma região do espaço de endereçamento físico, ou por processo. Cabe ressaltar que a memória física só é efetivamente alocada e vinculada a uma página lógica quando do seu primeiro acesso, em outros termos, o Linux executa first-touch.

19 5.1.3 As chamadas de sistema da API NUMA O suporte NUMA adiciona três novas chamadas de sistema que afetam a alocação de memória: mbind, set_mempolicy e get_mempolicy. A chamada mbind permite definir uma política para uma região de memória, set_mempolicy é usada para definir a política a ser empregada pelo processo (thread) que a executa e, por fim, get_mempolicy que permite se consultar a política atual de quem realiza a chamada. Entretanto, as aplicações não utilizam diretamente essas chamadas de sistema, mas sim a API fornecida pela biblioteca libnuma ou via o comando numactl. Essas novas chamadas não fazem parte da glibc e uma aplicação que deseja empregá-las diretamente deve ser ligada com libnuma O comando numactl Em máquinas que executam o Linux com suporte a máquinas NUMA é disponibilizado o comando numactl que permite aplicar políticas NUMA para a execução de um determinado processo. Isso é interessante principalmente para os casos onde o usuário não tem acesso ao fonte da aplicação para modificá-lo e introduzir chamadas de sistemas ou funções da libnuma. Entre as opções disponibilizadas por numactl está a possibilidade de definir a política de alocação de memória para o processo, em quais nós o processo deve ser executado e para obter uma série de informações de configurações sobre o hardware da máquina. Várias dessas opções recebem como parâmetro uma máscara (nodemask) que diz para qual nó uma determinada política se aplica. Cada nó do sistema tem uma identificação única. É importante salientar que nó é diferente de processador, ou seja, por exemplo, indicar que um processo executa no nó 1, implica que ele pode executar em qualquer processador que pertença ao nó A biblioteca libnuma A desvantagem do comando numatcl é que ele afeta a execução de todo o processo, isto é, seus processos e ou threads. Às vezes é necessário ter uma granularidade menor, esse é o objetivo da libnuma. A libnuma é uma API que permite ao usuário, através de uma programação, definir políticas NUMA individualmente por threads. É importante salientar esse aspecto, a política é válida apenas para a thread que executa a função libnuma não afetando as demais. A libnuma disponibiliza cerca de vinte e cinco funções diferentes que servem para vários propósitos. Através delas é possível consultar informações sobre a máquina e sobre o sistema operacional, como por exemplo, o número de nós, a quantidade de processadores por nó, o tipo de política empregada e mesmo se o sistema oferece ou não o suporte NUMA, entre outras. Além disso, é possível definir políticas de memória por nó, por thread e por processo e determinar em qual nó uma determinada thread deverá executar. Várias dessas chamadas recebem como argumento uma máscara (nodemask) que é um mapa de bits dos nós do sistema NUMA.

20 5.2 OpenSolaris em máquinas NUMA O OpenSolaris é um sistema operacional de código aberto baseado no núcleo do Solaris, um sistema Unix-like, desenvolvido pela Sun Microsystems. A principal diferença entre o Solaris e o OpenSolaris é que este último não é uma distribuição completa de sistema operacional. Ele possuí apenas o código do núcleo, algumas bibliotecas de programação e comandos Unix, mas a medida que o projeto OpenSolaris evolui mais funcionalidades vão sendo incluídas. Atualmente, existem três principais distribuições: Solaris Express Developer Edition, Nexenta OS e BeleniX. Apesar da Sun não fazer uma distribuição própria, na prática o Solaris Express é considerado uma. O Solaris express é composto pela versão mais recente do núcleo OpenSolaris e permite ao usuário escolher um, dentre dois, sistemas de janelas, Gnome e CDE (Commom Desktop Environment). O Nexenta OS é composto por software GNU executando sobre o núcleo OpenSolaris e emprega o Gnome como sistema de janelas e um gerenciador de pacotes baseado no Synaptic. Por fim, o BeleniX, desenvolvido em Bagalore (India), que executa na forma de um CD-live. O ponto importante a salientar é que, atualmente, o código do núcleo do Solaris e do OpenSolaris é o mesmo. Eles têm exatamente a mesma funcionalidade, incluindo o suporte para máquinas NUMA, portanto, no contexto deste trabalho, eles são equivalentes. O OpenSolaris provê suporte para arquiteturas NUMA através de um framework denominado de Memory Placement Optmization (MPO) construído em torno de três conceitos: localidade, balanceamento de carga e suporte dinâmico a topologia. O conceito de localidade implica que o núcleo conhece quais recursos físicos, memória, processadores e outros dispositivos, estão instalados em cada módulo (nó) e usa essa informação para obter o melhor desempenho da máquina. A idéia é alocar os recursos próximos ao nó onde a aplicação está executando. Para implementar isso, o núcleo mantém estruturas de dados que criam grupos de recursos de hardware em função da sua proximidade. Esses grupos são denominados de grupos de latência, ou simplesmente, lgroups. A razão de alocar recursos próximos a aplicação é minimizar o número de acessos remotos reduzindo tempo de latência [14]. Embora a localidade seja importante, e extremamente relevante, o sistema operacional busca também efetuar um balanceamento de carga para evitar que recursos fiquem ociosos. Se o sistema operacional levar à risca o critério de proximidade, é possível que alguns nós fiquem sobrecarregados enquanto outros estarão ociosos. O núcleo do OpenSolaris, em suas decisões, tenta escalonar threads em diferentes nós mantendo uma relação custo versus benefício entre localidade e carga. Por fim, o núcleo mantém informações sobre a topologia da máquina permitindo que dispositivos sejam inseridos e removidos à quente. A nova topologia é reconhecida e os valores de latência (localidade) são reavaliados. Apesar de todos os três conceitos serem fundamentais, o mais importante é o de grupos de latência, pois dele tudo se deriva.

Desenvolvimento de Programas Paralelos para Máquinas NUMA: Conceitos e Ferramentas

Desenvolvimento de Programas Paralelos para Máquinas NUMA: Conceitos e Ferramentas 1 Pontifícia Universidade Católica do Rio Grande do Sul Faculdade de Informática Programa de Pós-Graduação em Ciência da Computação Desenvolvimento de Programas Paralelos para Máquinas NUMA: Conceitos

Leia mais

Arquitetura NUMA 1. Daniel de Angelis Cordeiro. INRIA MOAIS project Laboratoire d Informatique de Grenoble Université de Grenoble, França

Arquitetura NUMA 1. Daniel de Angelis Cordeiro. INRIA MOAIS project Laboratoire d Informatique de Grenoble Université de Grenoble, França Arquitetura NUMA 1 Daniel de Angelis Cordeiro INRIA MOAIS project Laboratoire d Informatique de Grenoble Université de Grenoble, França 6 de Outubro de 2010 1 Baseado em slides feitos por Christiane Pousa

Leia mais

Sistemas MIMD. CES-25 Arquiteturas para Alto Desmpenho. Paulo André Castro

Sistemas MIMD. CES-25 Arquiteturas para Alto Desmpenho. Paulo André Castro Sistemas MIMD Arquiteturas para Alto Desmpenho Prof. pauloac@ita.br Sala 110 Prédio da Computação www.comp.ita.br/~pauloac Arquiteturas Paralelas (SISD) Single Instruction Stream, Single Data Stream: Monoprocessador

Leia mais

Capítulo 8 Arquitetura de Computadores Paralelos

Capítulo 8 Arquitetura de Computadores Paralelos Capítulo 8 Arquitetura de Computadores Paralelos Necessidade de máquinas com alta capacidade de computação Aumento do clock => alta dissipação de calor Velocidade limitada dos circuitos => velocidade da

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais SISTEMAS COM MÚLTIPLOS PROCESSADORES LIVRO TEXTO: CAPÍTULO 13, PÁGINA 243 Prof. Pedro Luís Antonelli Anhanguera Educacional INTRODUÇÃO Arquiteturas que possuem duas ou mais CPUs interligadas

Leia mais

CAPÍTULO 2 ORGANIZAÇÃO DE COMPUTADORES

CAPÍTULO 2 ORGANIZAÇÃO DE COMPUTADORES CAPÍTULO 2 ORGANIZAÇÃO DE COMPUTADORES 2.1 Organização de um Computador Típico : Armazena dados e programas. Processador (CPU - Central Processing Unit): Executa programas armazenados na memória, interpretando

Leia mais

Sistemas Operacionais Carlos Eduardo Portela Serra de Castro

Sistemas Operacionais Carlos Eduardo Portela Serra de Castro Introdução Sistemas Operacionais 1 Sistema Operacional: Um conjunto de programas, executado pelo computador como os outros programas. Função: Controlar o funcionamento do computador, disponibilizando seus

Leia mais

Sistemas Distribuídos Conceitos HW e SW. Edeyson Andrade Gomes www.edeyson.com.br

Sistemas Distribuídos Conceitos HW e SW. Edeyson Andrade Gomes www.edeyson.com.br Sistemas Distribuídos Conceitos HW e SW Edeyson Andrade Gomes www.edeyson.com.br Roteiro da Aula Roteiro da Aula Conceitos de Hardware Conceitos de Software Combinações de SW e HW 3 Sistemas Distribuídos

Leia mais

Sistemas Paralelos e Distribuídos. Prof. Jorge Dantas de Melo Depto. Eng. Comp. e Automação CT - UFRN

Sistemas Paralelos e Distribuídos. Prof. Jorge Dantas de Melo Depto. Eng. Comp. e Automação CT - UFRN Sistemas Paralelos e Distribuídos Prof. Jorge Dantas de Melo Depto. Eng. Comp. e Automação CT - UFRN Conceitos preliminares Paralelismo refere-se a ocorrência simultânea de eventos em um computador Processamento

Leia mais

Professores: Aula 10. Lúcia M. A. Drummond Simone de Lima Martins. Conteúdo: Arquiteturas Avançadas. - Arquiteturas RISC - Processamento Paralelo

Professores: Aula 10. Lúcia M. A. Drummond Simone de Lima Martins. Conteúdo: Arquiteturas Avançadas. - Arquiteturas RISC - Processamento Paralelo 1 Professores: Aula 10 Lúcia M. A. Drummond Simone de Lima Martins Conteúdo: Arquiteturas Avançadas - Arquiteturas RISC - Processamento Paralelo 2 Arquiteturas RISC Reduced Instruction Set Computer se

Leia mais

Sistemas Operacionais Arquitetura e organização de sistemas operacionais: Uma visão estrutural hardware & software. Prof. MSc.

Sistemas Operacionais Arquitetura e organização de sistemas operacionais: Uma visão estrutural hardware & software. Prof. MSc. Sistemas Operacionais Arquitetura e organização de sistemas operacionais: Uma visão estrutural hardware & software Prof. MSc. Hugo Souza Continuando nossas aulas relativas ao Módulo 1, veremos a seguir

Leia mais

Capítulo 8. Sistemas com Múltiplos Processadores. 8.1 Multiprocessadores 8.2 Multicomputadores 8.3 Sistemas distribuídos

Capítulo 8. Sistemas com Múltiplos Processadores. 8.1 Multiprocessadores 8.2 Multicomputadores 8.3 Sistemas distribuídos Capítulo 8 Sistemas com Múltiplos Processadores 8.1 Multiprocessadores 8.2 Multicomputadores 8.3 Sistemas distribuídos 1 Sistemas Multiprocessadores Necessidade contínua de computadores mais rápidos modelo

Leia mais

SISTEMAS OPERACIONAIS

SISTEMAS OPERACIONAIS SISTEMAS OPERACIONAIS Processos e Threads Andreza Leite andreza.leite@univasf.edu.br Plano de Aula 2 Gerenciamento de Processos Threads Aplicações com múltiplas Threads Concorrência e Compartilhamento

Leia mais

Programação Concorrente Processos e Threads

Programação Concorrente Processos e Threads Programação Concorrente Processos e Threads Prof. Eduardo Alchieri Processos O conceito mais central em qualquer sistema operacional é o processo Uma abstração de um programa em execução Um programa por

Leia mais

Comparação SDs X Scs

Comparação SDs X Scs Prof. Alexandre Lima Sistemas Distribuídos Cap 9 1/7 Comparação SDs X Scs Distribuição inerente Economia Velocidade Confiabilidade Crescimento incremental Descrição Algumas aplicações envolvem máquinas

Leia mais

hvbacellar@gmail.com Palavras-chave Cluster; Beowulf; OpenMosix; MPI; PVM.

hvbacellar@gmail.com Palavras-chave Cluster; Beowulf; OpenMosix; MPI; PVM. Cluster: Computação de Alto Desempenho Hilário Viana Bacellar Instituto de Computação, Universidade Estadual de Campinas Av. Albert Einstein 1251, Cidade Universitária, CEP 13083-970 Campinas, SP, Brasil

Leia mais

4 Computação Paralela 4.1. Introdução

4 Computação Paralela 4.1. Introdução 4 Computação Paralela 4.1. Introdução Nos últimos anos observa-se uma tendência cada vez maior do aumento da demanda computacional na resolução de grandes problemas. Exemplos de aplicações que exigem alto

Leia mais

Nível do Sistema Operacional

Nível do Sistema Operacional Nível do Sistema Operacional (Aula 14) Introdução a Sistemas Operacionais Roberta Lima Gomes - LPRM/DI/UFES Sistemas de Programação I Eng. Elétrica 2007/1 Introdução Hardware Provê os recursos básicos

Leia mais

ALGORÍTMOS PARALELOS (Aula 2) LCAD. Neyval C. Reis Jr. OUTUBRO/2004. Laboratório de Computação de Alto Desempenho DI/UFES

ALGORÍTMOS PARALELOS (Aula 2) LCAD. Neyval C. Reis Jr. OUTUBRO/2004. Laboratório de Computação de Alto Desempenho DI/UFES ALGORÍTMOS PARALELOS (Aula 2) Neyval C. Reis Jr. OUTUBRO/2004 LCAD Laboratório de Computação de Alto Desempenho DI/UFES Programa do Curso LCAD 1. Introdução 2. Arquitetura de Computadores 3. Arquiteturas

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Gerência do processador 2 a edição Capítulo 4 Revisão: Fev/2003 Sumário Implementação do conceito de processos e threads Escalonamento Escalonadores não -preemptivos Escalonamento

Leia mais

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES INTRODUÇÃO AO PARALELISMO: PROCESSADORES SUPERESCALARES. Prof. Dr. Daniel Caetano 2012-1

ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES INTRODUÇÃO AO PARALELISMO: PROCESSADORES SUPERESCALARES. Prof. Dr. Daniel Caetano 2012-1 ARQUITETURA E ORGANIZAÇÃO DE COMPUTADORES INTRODUÇÃO AO PARALELISMO: PROCESSADORES SUPERESCALARES Prof. Dr. Daniel Caetano 2012-1 Lembretes Compreender o funcionamento da Arquitetura Superpipeline Compreender

Leia mais

Processamento Paralelo

Processamento Paralelo Processamento Paralelo Hardware Paralelo Universidade Estadual de Santa Cruz Bacharelado em Ciência da Computação Prof. Esbel Tomás Valero Orellana Portabilidade O principal problema das primeiras maquinas

Leia mais

Conceitos Básicos sobre Sistemas Operacionais

Conceitos Básicos sobre Sistemas Operacionais Conceitos Básicos sobre Sistemas Operacionais Ivanovitch Medeiros Dantas da Silva Universidade Federal do Rio Grande do Norte Departamento de Engenharia de Computação e Automação DCA0800 - Algoritmos e

Leia mais

Sistemas Operacionais Aula 06: Threads. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com

Sistemas Operacionais Aula 06: Threads. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com Sistemas Operacionais Aula 06: Threads Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com Objetivos Introduzir o conceito de thread Discutir as APIs das bibliotecas de threads Pthreads, Win32

Leia mais

Symmetric Multiprocessing Simultaneous Multithreading Paralelismo ao nível dos dados

Symmetric Multiprocessing Simultaneous Multithreading Paralelismo ao nível dos dados Symmetric Multiprocessing Simultaneous Multithreading Paralelismo ao nível dos dados Luís Nogueira luis@dei.isep.ipp.pt Departamento Engenharia Informática Instituto Superior de Engenharia do Porto SMP,

Leia mais

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br

PROJETO LÓGICO DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Aula 6 - ARQUITETURAS AVANÇADAS DE COMPUTADORES 1. INTRODUÇÃO As arquiteturas dos processadores têm evoluído ao longo dos anos, e junto com ela o conceito de arquitetura avançada tem se modificado. Nos

Leia mais

Introdução às arquiteturas paralelas e taxonomia de Flynn

Introdução às arquiteturas paralelas e taxonomia de Flynn Introdução às arquiteturas paralelas e taxonomia de Flynn OBJETIVO: definir computação paralela; o modelo de computação paralela desempenhada por computadores paralelos; e exemplos de uso da arquitetura

Leia mais

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

Introdução à Computação: Sistemas de Computação Introdução à Computação: Sistemas de Computação Beatriz F. M. Souza (bfmartins@inf.ufes.br) http://inf.ufes.br/~bfmartins/ Computer Science Department Federal University of Espírito Santo (Ufes), Vitória,

Leia mais

Programação em Memória Compartilhada com OpenMP

Programação em Memória Compartilhada com OpenMP Programação em Memória Compartilhada com OpenMP Esbel Tomás Valero Orellana Bacharelado em Ciência da Computação Departamento de Ciências Exatas e Tecnológicas Universidade Estadual de Santa Cruz evalero@uesc.br

Leia mais

Edeyson Andrade Gomes. www.edeyson.com.br

Edeyson Andrade Gomes. www.edeyson.com.br Sistemas Operacionais Histórico e Estruturas Edeyson Andrade Gomes www.edeyson.com.br Roteiro da Aula Histórico de SOs Tipos de SOs Estruturas de SOs 2 Histórico de SOs Baseado em Francis Machado e Luiz

Leia mais

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

É a associação de mais de um fluxo de execução em um único processo. Profa. Rita Rodorigo Threads Um processo é uma abstração que reúne uma série de atributos como espaço de endereçamento descritores de arquivos abertos, quotas, etc. Um processo possui ainda uma área de

Leia mais

CONCEITOS BÁSICOS SOBRE PROGRAMAÇÃO Programação Orientada a Objetos (POO)

CONCEITOS BÁSICOS SOBRE PROGRAMAÇÃO Programação Orientada a Objetos (POO) CONCEITOS BÁSICOS SOBRE PROGRAMAÇÃO Programação Orientada a Objetos (POO) Profa. Vania V. Estrela, Profa. Albany E. Herrmann 1. Programação Programação requer o uso de uma linguagem, cuja sintaxe geralmente

Leia mais

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

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia O Sistema Operacional que você usa é multitasking? Por multitasking, entende-se a capacidade do SO de ter mais de um processos em execução ao mesmo tempo. É claro que, num dado instante, o número de processos

Leia mais

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

APLICAÇÕES EM SISTEMAS DISTRIBUÍDOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 6 - ALGORÍTIMOS PARALELOS MPI - Parallel Virtual Machine e PVM - Parallel Virtual Machine 1. INTRODUÇÃO Inicialmente é necessário conceber alguns conceitos para entendimento dos algoritmos paralelos:

Leia mais

Universidade Federal do Rio de Janeiro Pós-Gradução em Informática. Microarquiteturas de Alto Desempenho. Multithreading. Gabriel P. Silva.

Universidade Federal do Rio de Janeiro Pós-Gradução em Informática. Microarquiteturas de Alto Desempenho. Multithreading. Gabriel P. Silva. Universidade Federal do Rio de Janeiro Pós-Gradução em Informática Microarquiteturas de Alto Desempenho Multithreading Introdução Muitos dos sistemas operacionais modernos suportam o conceito de threads,

Leia mais

Unidade 13: Paralelismo:

Unidade 13: Paralelismo: Arquitetura e Organização de Computadores 1 Unidade 13: Paralelismo: SMP e Processamento Vetorial Prof. Daniel Caetano Objetivo: Apresentar os conceitos fundamentais da arquitetura SMP e alguns detalhes

Leia mais

8 Threads. 8.1 Introdução

8 Threads. 8.1 Introdução 1 8 Threads 8.1 Introdução Uma thread, também chamada de tarefa, pode ser definida como uma parte ou rotina de um processo em execução que compartilha o mesmo espaço de endereçamento, mas tem seu próprio

Leia mais

Gerenciamento de memória

Gerenciamento de memória Na memória principal ficam todos os programas e os dados que serão executados pelo processador. Possui menor capacidade e custo maior. S.O buscam minimizar a ocupação da memória e otimizar sua utilização.

Leia mais

Máquinas Multiníveis

Máquinas Multiníveis Infra-Estrutura de Hardware Máquinas Multiníveis Prof. Edilberto Silva www.edilms.eti.br edilms@yahoo.com Sumário Conceitos básicos Classificação de arquiteturas Tendências da tecnologia Família Pentium

Leia mais

Programação Paralela e Distribuída 2009/10. Fundamentos

Programação Paralela e Distribuída 2009/10. Fundamentos Programação Paralela e Distribuída 1 Porquê Programação Paralela? Se um único computador (processador) consegue resolver um problema em N segundos, podem N computadores (processadores) resolver o mesmo

Leia mais

Sistemas Operacionais Aula 14: Sistema de Arquivos. Ezequiel R. Zorzal ezorzal@unifesp.br www.realidadeaumentada.com.br

Sistemas Operacionais Aula 14: Sistema de Arquivos. Ezequiel R. Zorzal ezorzal@unifesp.br www.realidadeaumentada.com.br Sistemas Operacionais Aula 14: Sistema de Arquivos Ezequiel R. Zorzal ezorzal@unifesp.br www.realidadeaumentada.com.br Introdução O sistema de arquivos é a parte mais vísivel do sistema operacional Cria

Leia mais

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com

Sistemas Operacionais. Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Sistemas Operacionais Prof. André Y. Kusumoto andrekusumoto.unip@gmail.com Estruturas de Sistemas Operacionais Um sistema operacional fornece o ambiente no qual os programas são executados. Internamente,

Leia mais

slide 0 Algoritmos Paralelos

slide 0 Algoritmos Paralelos slide 0 Algoritmos Paralelos Slide 2 Demanda por Velocidade Computational Demanda contínua por maior rapidez computational das máquinas que as atualmente disponíveis. As áreas que exigem maior rapidez

Leia mais

Problema: Solução: Vantagens da estruturação em Níveis: Introdução INTRODUÇÃO À ARQUITETURA DE COMPUTADORES. Introdução

Problema: Solução: Vantagens da estruturação em Níveis: Introdução INTRODUÇÃO À ARQUITETURA DE COMPUTADORES. Introdução INTRODUÇÃO À ARQUITETURA DE COMPUTADORES Curso Técnico de Informática Eduardo Amaral Introdução Computador: Máquina programável, de propósito geral, que processa informação. Programa: Seqüência de instruções

Leia mais

3 Noções de Sistemas Operacionais

3 Noções de Sistemas Operacionais 3 Noções de Sistemas Operacionais Para que o hardware ou parte física de um computador possa funcionar faz-se necessário um conjunto de regras e ordens que coordenem todos os processos realizados. Tal

Leia mais

2 Modelos de Implementação

2 Modelos de Implementação 2 Modelos de Implementação Os modelos de concorrência definem como uma aplicação atende às requisições concorrentes. Os modelos de sandboxes definem como o ambiente das aplicações são criados. Os modelos

Leia mais

2. NÍVEL DE SISTEMA OPERACIONAL

2. NÍVEL DE SISTEMA OPERACIONAL 2. NÍVEL DE SISTEMA OPERACIONAL Nos períodos anteriores foram mostrados os níveis iniciais da organização de um computador, quando vimos em Circuitos Digitais os detalhes do Nível 0 (zero) de Lógica Digital.

Leia mais

Um sistema é constituído de um conjunto de processos que executam seus respectivos códigos do sistema operacional e processos e códigos de usuários.

Um sistema é constituído de um conjunto de processos que executam seus respectivos códigos do sistema operacional e processos e códigos de usuários. Os sistemas computacionais atuais permitem que diversos programas sejam carregados na memória e executados simultaneamente. Essa evolução tornou necessário um controle maior na divisão de tarefas entre

Leia mais

Gerenciamento Básico B de Memória Aula 07

Gerenciamento Básico B de Memória Aula 07 BC1518-Sistemas Operacionais Gerenciamento Básico B de Memória Aula 07 Prof. Marcelo Z. do Nascimento marcelo.nascimento@ufabc.edu.br Roteiro Introdução Espaço de Endereçamento Lógico vs. Físico Estratégias

Leia mais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais

Arquitetura de Computadores. Introdução aos Sistemas Operacionais Arquitetura de Computadores Introdução aos Sistemas Operacionais O que é um Sistema Operacional? Programa que atua como um intermediário entre um usuário do computador ou um programa e o hardware. Os 4

Leia mais

Capítulo 2 Processos e Threads Prof. Fernando Freitas

Capítulo 2 Processos e Threads Prof. Fernando Freitas slide 1 Capítulo 2 Processos e Threads Prof. Fernando Freitas Material adaptado de: TANENBAUM, Andrew S. Sistemas Operacionais Modernos. 3ª edição. Disponível em: http://www.prenhall.com/tanenbaum_br slide

Leia mais

Controle de granularidade de tarefas em OpenMP

Controle de granularidade de tarefas em OpenMP UNIVERSIDADE FEDERAL DO RIO GRANDE DO SUL INSTITUTO DE INFORMÁTICA CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO MÁRCIO DE OLIVEIRA DA SILVA Controle de granularidade de tarefas em OpenMP Trabalho de Conclusão

Leia mais

Apresentação da disciplina. Sistemas Operacionais I N. A disciplina. O Professor. Áreas de atuação na pesquisa. Referências bibliográficas básicas

Apresentação da disciplina. Sistemas Operacionais I N. A disciplina. O Professor. Áreas de atuação na pesquisa. Referências bibliográficas básicas 1 Apresentação da disciplina Sistemas Operacionais I N Prof. Marcelo Johann 2009/2 O professor A disciplina Bibliografia Cronograma Avaliação Trabalhos Regras do jogo Introdução: Sistemas Operacionais

Leia mais

Ricardo Gonçalves 2013/2014. Arquitecturas Multicore

Ricardo Gonçalves 2013/2014. Arquitecturas Multicore Ricardo Gonçalves 2013/2014 Arquitecturas Multicore Outline Introdução Processador Multi-core: o que é? Do multi-processador ao multi-core Evolução dos processadores multi-core Arquitecturas multi-core

Leia mais

Sistemas Distribuídos: Conceitos e Projeto Classificação de Sistemas Distribuídos e Middleware

Sistemas Distribuídos: Conceitos e Projeto Classificação de Sistemas Distribuídos e Middleware Sistemas Distribuídos: Conceitos e Projeto Classificação de Sistemas Distribuídos e Middleware Francisco José da Silva e Silva Laboratório de Sistemas Distribuídos (LSD) Departamento de Informática / UFMA

Leia mais

Apresentação. Ementa da Disciplina. Objetivo da Disciplina. DCA-108 Sistemas Operacionais

Apresentação. Ementa da Disciplina. Objetivo da Disciplina. DCA-108 Sistemas Operacionais DCA-108 Sistemas Operacionais Luiz Affonso Guedes www.dca.ufrn.br/~affonso affonso@dca.ufrn.br Apresentação Disciplina básica do curso de Engenharia de Computação Carga-horária: 60h teóricas Associadas

Leia mais

Sistema Operacional Correção - Exercício de Revisão

Sistema Operacional Correção - Exercício de Revisão Prof. Kleber Rovai 1º TSI 22/03/2012 Sistema Operacional Correção - Exercício de Revisão 1. Como seria utilizar um computador sem um sistema operacional? Quais são suas duas principais funções? Não funcionaria.

Leia mais

Organização e Arquitetura de Computadores I. de Computadores

Organização e Arquitetura de Computadores I. de Computadores Universidade Federal de Campina Grande Departamento de Sistemas e Computação Curso de Bacharelado em Ciência da Computação Organização e Arquitetura de I Organização Básica B de (Parte V, Complementar)

Leia mais

COMPUTAÇÃO PARALELA. uma visão geral. Guilherme Galante. v.2.0

COMPUTAÇÃO PARALELA. uma visão geral. Guilherme Galante. v.2.0 COMPUTAÇÃO PARALELA uma visão geral Guilherme Galante v.2.0 Guilherme Galante Bacharel em Informática Unioeste (2003) Mestre em Ciência da Computação UFRGS (2006) Professor Assistente do curso de Informática/Ciência

Leia mais

Capítulo 11: Implementação de Sistemas de Arquivos. Operating System Concepts 8 th Edition

Capítulo 11: Implementação de Sistemas de Arquivos. Operating System Concepts 8 th Edition Capítulo 11: Implementação de Sistemas de Arquivos Silberschatz, Galvin and Gagne 2009 Sobre a apresentação (About the slides) Os slides e figuras dessa apresentação foram criados por Silberschatz, Galvin

Leia mais

DISSERTAÇÃO DE MESTRADO

DISSERTAÇÃO DE MESTRADO ENRIQUE VINICIO CARRERA E. IMPLEMENTAÇÃO DE UMA METODOLOGIA PARA A CONSTRUÇÃO DE SISTEMAS DISTRIBUÍDOS CONFIGURÁVEIS SOBRE PVM DISSERTAÇÃO DE MESTRADO DEPARTAMENTO DE ENGENHARIA ELÉTRICA Rio de Janeiro,

Leia mais

Organização de Computadores 2005/2006 Processamento Paralelo

Organização de Computadores 2005/2006 Processamento Paralelo Organização de Computadores 2005/2006 Processamento Paralelo Paulo Ferreira paf a dei.isep.ipp.pt Maio de 2006 Introdução 2 Porquê?...........................................................................................

Leia mais

Sistemas Operacionais I

Sistemas Operacionais I UFRJ IM - DCC Sistemas Operacionais I Unidade II - Threads 24/04/2014 Prof. Valeria M. Bastos 1 ORGANIZAÇÃO DA UNIDADE Threads Processos Threads Conceituação Descrição e Imagem de uma Thread Tipos de thread

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais O que se espera de um sistema de computação? Execução de programas de usuários Permitir a solução de problemas Sistema Operacional (SO) é um programa colocado entre o hardware do

Leia mais

Sistemas de Computação e Desempenho (UCE Computação Paralela Distribuída)

Sistemas de Computação e Desempenho (UCE Computação Paralela Distribuída) Sistemas de Computação e Desempenho (UCE Computação Paralela Distribuída) Arquitecturas Multi-Core João Luís Ferreira Sobral jls@... 9-Dez-2008 Hierarquia processador-memória Organização dos diversos níveis

Leia mais

SO: Gerenciamento de Processos

SO: Gerenciamento de Processos SO: Gerenciamento de Processos Adriano J. Holanda http://holanda.xyz 10/8/2015 O que é um processo Um processo é um programa (código objeto armazenado em alguma mídia) em. O que é um processo Um processo

Leia mais

Prof. Marcelo de Sá Barbosa SISTEMAS DISTRIBUIDOS

Prof. Marcelo de Sá Barbosa SISTEMAS DISTRIBUIDOS Prof. Marcelo de Sá Barbosa SISTEMAS DISTRIBUIDOS Objetos distribuídos e invocação remota Introdução Comunicação entre objetos distribuídos Chamada de procedimento remoto Eventos e notificações Objetos

Leia mais

Escalonamento de processos

Escalonamento de processos Escalonamento de processos Adriano J. Holanda http://holanda.xyz 24/8/2015 Conceitos básicos Políticas Processos limitados por E/S x processador E/S processos limitados por E/S gastam a maior parte do

Leia mais

FACENS Engenharia Mecatrônica Sistemas de Computação Professor Machado. Memória Armazenamento Sistema de Arquivos

FACENS Engenharia Mecatrônica Sistemas de Computação Professor Machado. Memória Armazenamento Sistema de Arquivos FACENS Engenharia Mecatrônica Sistemas de Computação Professor Machado Memória Armazenamento Sistema de Arquivos 1 Hierarquia de Memórias 2 Partes físicas associadas à memória Memória RAM Memória ROM Cache

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Prof. Jó Ueyama Apresentação baseada nos slides da Profa. Dra. Kalinka Castelo Branco, do Prof. Dr. Antônio Carlos Sementille, da Profa. Dra. Luciana A. F. Martimiano e nas transparências

Leia mais

Multi-processamento. Arquitecturas MIMD de memória partilhada Multi-cores heterogéneos Multi-processadores

Multi-processamento. Arquitecturas MIMD de memória partilhada Multi-cores heterogéneos Multi-processadores Multi-processamento Arquitecturas MIMD de memória partilhada Multi-cores heterogéneos Multi-processadores Arquitecturas MIMD de memória distribuída Massive Parallel Computers Sistemas distribuídos Ainda

Leia mais

Memória compartilhada (shared memory): - o espaço de endereçamento é único; - comunicação através de load e store nos endereços de memória.

Memória compartilhada (shared memory): - o espaço de endereçamento é único; - comunicação através de load e store nos endereços de memória. 4. Arquiteturas ID áquinas ID (ultiple Instruction ultiple Data) são arquiteturas caracterizadas pela execução simultânea de múltiplos fluxos de instruções. Essa capacidade deve-se ao fato de que são construídas

Leia mais

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

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064 Sistemas Distribuídos Professora: Ana Paula Couto DCC 064 Questões Em uma rede de sobreposição (overlay), mensagens são roteadas de acordo com a topologia da sobreposição. Qual uma importante desvantagem

Leia mais

Arquitetura de Computadores. Sistemas Operacionais IV

Arquitetura de Computadores. Sistemas Operacionais IV Arquitetura de Computadores Sistemas Operacionais IV Introdução Multiprogramação implica em manter-se vários processos na memória. Memória necessita ser alocada de forma eficiente para permitir o máximo

Leia mais

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos, 2014 2015

implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Fernando Ramos, Nuno Neves, Sistemas Operativos, 2014 2015 Sistemas de ficheiros: implementação Nuno Ferreira Neves Faculdade de Ciências de Universidade de Lisboa Objetivos da aula Descrever algunsdetalhes daimplementação deumsistema de ficheiros Discutir algoritmos

Leia mais

Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos

Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos Sistemas Distribuídos: Conceitos e Projeto Threads e Migração de Processos Francisco José da Silva e Silva Laboratório de Sistemas Distribuídos (LSD) Departamento de Informática / UFMA http://www.lsd.deinf.ufma.br

Leia mais

Sistemas Operacionais Aula 03: Estruturas dos SOs. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com

Sistemas Operacionais Aula 03: Estruturas dos SOs. Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com Sistemas Operacionais Aula 03: Estruturas dos SOs Ezequiel R. Zorzal ezorzal@unifesp.br www.ezequielzorzal.com OBJETIVOS Descrever os serviços que um sistema operacional oferece aos usuários e outros sistemas

Leia mais

FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS PLANO DE ENSINO

FACULDADE DE CIÊNCIAS SOCIAIS E TECNOLÓGICAS PLANO DE ENSINO PLANO DE ENSINO 1. IDENTIFICAÇÃO BSI-4 Faculdade: Faculdade de Ciências Sociais e Tecnológicas Curso: Bacharelado em Sistemas de Informação Disciplina: SISTEMAS OPERACIONAIS Professor: Paulo de Tarso Costa

Leia mais

Nível 3 Sistema Operacional

Nível 3 Sistema Operacional Nível 3 Sistema Operacional Universidade Tuiuti do Paraná UTP Faculdade de Ciências Exatas - FACET Tecnologia de Análise e Desenvolvimento de Sistemas Organização de Computadores Prof. André Luiz 1 Nível

Leia mais

Introdução à Arquitetura de Computadores. Renan Manola Introdução ao Computador 2010/01

Introdução à Arquitetura de Computadores. Renan Manola Introdução ao Computador 2010/01 Introdução à Arquitetura de Computadores Renan Manola Introdução ao Computador 2010/01 Introdução Conceitos (1) Computador Digital É uma máquina que pode resolver problemas executando uma série de instruções

Leia mais

Sistemas Distribuídos Aula 1 Introdução

Sistemas Distribuídos Aula 1 Introdução Sistemas Distribuídos Aula 1 Introdução 35T34 3B2 Programa Introdução. Conceitos de sistemas distribuídos. Comunicação em sistemas distribuídos. Sincronização em sistemas distribuídos. Processos e processadores

Leia mais

7 Processamento Paralelo

7 Processamento Paralelo 7 Processamento Paralelo Yes, of course, who has time? Who has time? But then if we do not ever take time, how can we ever have time? (The Matrix) 7.1 Introdução Classificação de Sistemas Paralelos Diversas

Leia mais

Estudo de Caso 2: Windows Vista

Estudo de Caso 2: Windows Vista Faculdades Integradas de Mineiros Curso de Sistemas de Informação Sistemas Operacionais II Estudo de Caso 2: Windows Vista Grupo 4 Helder / Wagner / Frantyeis Junho/2010 O Windows usa uma estratégia Just-In-Time

Leia mais

Apresentação. Rio de Janeiro, 19 de fevereiro de 2002 Waldemar Celes

Apresentação. Rio de Janeiro, 19 de fevereiro de 2002 Waldemar Celes Apresentação A disciplina de Estruturas de Dados (ED) está sendo ministrada em sua nova versão desde o segundo semestre de 1998. Trata-se da segunda disciplina de informática oferecida no curso de Engenharia

Leia mais

Classificação Quanto. Sistemas de Lotes (2) Sistemas de Lotes (3)

Classificação Quanto. Sistemas de Lotes (2) Sistemas de Lotes (3) 1 Mono e multiprogramação Introdução Classificação (Aula 2) Recap Sistemas Máquina Profa. Patrícia Gerenciador D. CostaLPRM/DI/UFES Provê Fornece Compartilhamento programador máquina justa recursos Operacionais

Leia mais

Resumo. Introdução Cluster Cluster Beowulf Curiosidades Conclução

Resumo. Introdução Cluster Cluster Beowulf Curiosidades Conclução Cluster Resumo Introdução Cluster Cluster Beowulf Curiosidades Conclução Introdução Sua empresa esta precisando fazer um grande processamento; As Nuvens existentes não são suficientes para sua empresa;

Leia mais

Programação Paralela

Programação Paralela rogramação aralela FEU 2. Arquitecturas de omputadores e rogramação aralela Arquitecturas de omputadores Taxonomia de Flynn (extra livro recomendado) Base da Taxonomia: D: data stream (fluxo de acesso

Leia mais

Projetos I Resumo de TCC. Luiz Rogério Batista De Pieri Mat: 0413829 5

Projetos I Resumo de TCC. Luiz Rogério Batista De Pieri Mat: 0413829 5 Projetos I Resumo de TCC Luiz Rogério Batista De Pieri Mat: 0413829 5 MAD RSSF: Uma Infra estrutura de Monitoração Integrando Redes de Sensores Ad Hoc e uma Configuração de Cluster Computacional (Denise

Leia mais

Arquitetura de Computadores II

Arquitetura de Computadores II Universidade Federal do Rio de Janeiro Bacharelado em Ciência da Computação - DCC/IM Arquitetura de Computadores II Multithreading Prof. Gabriel P. Silva Introdução Muitos dos sistemas operacionais modernos

Leia mais

Coerência de Cache. Protocolo de Coerência para processadores multi-cores baseados em barramentos

Coerência de Cache. Protocolo de Coerência para processadores multi-cores baseados em barramentos Coerência de Cache Protocolo de Coerência para processadores multi-cores baseados em barramentos Roteiro da Aula Multiprocessador Simétrico de Memória Compartilhada - SMP Problema Coerência e consistência

Leia mais

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

Sistemas Distribuídos Processos I. Prof. MSc. Hugo Souza Sistemas Distribuídos Processos I Prof. MSc. Hugo Souza Até agora vimos a organização como um todo dos SDS, com o mapeamento estrutural e suas devidas características descritas em elementos, regras, conceitos,

Leia mais

Turno/Horário Noturno PROFESSOR : Salomão Dantas Soares AULA Apostila nº

Turno/Horário Noturno PROFESSOR : Salomão Dantas Soares AULA Apostila nº UNIDADE 1I: SISTEMA COMPITACIONAL Elementos hardware e periféricos Um sistema computacional consiste num conjunto de dispositivos eletrônicos (hardware) capazes de processar informações de acordo com um

Leia mais

Sistemas Operacionais. Alexandre Meslin meslin@inf.puc-rio.br

Sistemas Operacionais. Alexandre Meslin meslin@inf.puc-rio.br Sistemas Operacionais Alexandre Meslin meslin@inf.puc-rio.br Ementa Apresentação do curso Cap1 - Visão Geral Cap2 - Conceitos de Hardware e Software Cap3 - Concorrência Cap4 - Estrutura do Sistema Operacional

Leia mais

Notas da Aula 6 - Fundamentos de Sistemas Operacionais

Notas da Aula 6 - Fundamentos de Sistemas Operacionais 1. Monitores Notas da Aula 6 - Fundamentos de Sistemas Operacionais Embora os semáforos sejam uma boa solução para o problema da exclusão mútua, sua utilização não é trivial. O programador é obrigado a

Leia mais

Introdução. Nível do Sistema Operacional. Introdução. Um Sistema Operacional... Introdução a Sistemas Operacionais

Introdução. Nível do Sistema Operacional. Introdução. Um Sistema Operacional... Introdução a Sistemas Operacionais Introdução Nível do Sistema Operacional (Aula 14) Introdução a Sistemas Operacionais Hardware Provê os recursos básicos de computação (CPU, memória, E/S,etc.) Programas (aplicações) Definem as maneiras

Leia mais

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO I Campus Rio Pomba

Concurso Público para provimento de cargo efetivo de Docentes. Edital 20/2015 CIÊNCIA DA COMPUTAÇÃO I Campus Rio Pomba Questão 01 Assumindo um registrador de 10 bits e utilizando-se de representação binária, com valores negativos representados em código de 2, os valores em representação decimal 235, -189 possuem, respectivamente,

Leia mais

Sistemas Operacionais

Sistemas Operacionais UNIVERSIDADE BANDEIRANTE DE SÃO PAULO INSTITUTO POLITÉCNICO CURSO DE SISTEMAS DE INFORMAÇÃO Sistemas Operacionais Notas de Aulas: Tópicos 7 e 8 Estrutura do Sistema Operacional São Paulo 2009 1 Sumário

Leia mais

Computador Digital Circuitos de um computador (Hardware)

Computador Digital Circuitos de um computador (Hardware) Computador Digital SIS17 - Arquitetura de Computadores (Parte I) Máquina que pode resolver problemas executando uma série de instruções que lhe são fornecidas. Executa Programas conjunto de instruções

Leia mais

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES

FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES FACULDADE PITÁGORAS DISCIPLINA: ARQUITETURA DE COMPUTADORES Prof. Ms. Carlos José Giudice dos Santos cpgcarlos@yahoo.com.br www.oficinadapesquisa.com.br ESQUEMA DE UM COMPUTADOR Uma Unidade Central de

Leia mais

(Aula 15) Threads e Threads em Java

(Aula 15) Threads e Threads em Java (Aula 15) Threads e Threads em Java Um fluxo computacional. A programa maioria de execução, dos seqüencial programas o qual simples consiste realiza tem uma de essa um certa único tarefa Grande característica:

Leia mais