ORGANIZAÇÃO PARALELA Notas de aula - Carlos Sica - 1999 1. Multiprocessamento 1.1 Tipos Multiprocessamento fracamente acoplado Consiste de uma coleção de sistemas relativamente autônomos, cada CPU tem sua própria Memória principal e canais de E/S. o termo multicomputador é muito utilizado neste contexto. Processadores funcionalmente especializados Neste caso, existe um mestre, genérico, e os processadores especializados são controlados pela CPU mestre, que fornece os serviços para eles. Como exemplo cita-se os coprocessadores aritméticos e de E/S. Multiprocessamento fortemente acoplado Consiste de um conjunto de processadores que compartilham a memória principal e dependem do controle integrado do sistema operacional. Processamento paralelo Os processadores fortemente acoplados que trabalham cooperativamente para executar uma tarefa em paralelo. Também chamados de sistemas multiprocessados ou miltiprocessadores, tem as seguintes características: Contém dois ou mais processadores genéricos similares e com capacidade também similares. Todos os processadores compartilham o acesso à memória principal. Alguma memória local, de acesso privado, pode ser utilizada. Todos os processadores compartilham o acesso ao sistema de E/S, através do mesmo canal ou através de canais diferentes que fornecem caminhos para o mesmo dispositivo. O conjunto é controlado por um sistema operacional integrado, que fornece interação entre os processadores e seus programas nos níveis de tarefas, arquivos e dados. Este é o ponto que ilustra um dos contrastes com o sistema fracamente acoplado que, usualmente interagem fisicamente com um arquivo completo e, no caso multiprocessado, dados podem constituir níveis de interação e podem estabelecer um alto grau de cooperação entre os processos. 1.2 Classificação O método de Flynn, baseia-se nas possibilidades de combinação entre uma ou mais seqüências de instruções atuando sobre uma ou mais seqüências de dados. Este método é impreciso para classificar variações de sistemas multiprocessados e processadores vetoriais. 1. SISD - uma seqüência de instruções, uma seqüência de dados. Corresponde aos computadores seqüenciais convencionais nos quais só existe uma única unidade de controle que decodifica seqüencialmente instruções que operam sobre um conjunto de dados. 1 UC SI UP SD MEM SI 2. SIMD - uma seqüência de instruções, múltiplas seqüências de dados. Corresponde aos computadores matriciais nos quais vários elementos processadores são conectados por uma única unidade de controle que decodifica seqüencialmente as instruções e as transmite para todas as unidades de processamento. Os processadores que estiverem disponíveis executarão as instruções recebidas sobre os dados previamente carregados em suas memórias. SI UC UP1 MEM1 UP2 MEM2 UPn MEMn 3. MISD - Múltiplas seqüências de instruções, uma seqüência de dados. SD UC1 UC1 SI1 SI1 UP1 MEM1 MEM2 UP2 MEMn SIn UCn UPn SD 4. MIMD - Múltiplas seqüências de instruções, múltiplas seqüências de dados. Multiprocessadores. SD1 UC1 SI1 UP1 MEM1 SD2 UC1 SI1 UP2 SIn UCn MEM2 SDn UPn MEMn 2 1.3 Organização do multiprocessamento ou Classificação estrutural da classe MIMD A figura abaixo mostra, em termos gerais, a organização de um sistema multiprocesado. Esses sistemas têm duas ou mais CPUs, sendo que cada CPU é autônomo, incluindo a unidade de controle, ULA, registradores e cache. Compartilham, porém, a memória principal e o sistema de E/S. Os processadores podem se comunicar através da memória, mantendo mensagens e informações de estado em uma área de dados comum. Existe a possibilidade também, de trocarem sinais entre si por linhas específicas. CPU CPU ... CPU Interconexão E/S E/S ... E/S Memória principal A memória é organizada para que acessos simultâneos a blocos distintos de memória sejam possíveis. Em algumas configurações, cada CPU pode ter sua própria memória principal e seus próprios canais de E/S, além dos recursos compartilhados. A organização dos sistemas multiprocessados pode ser classificada como: Barramento com tempo compartilhado ou barramento comum; Memória Distribuída (multiporta); Unidade de controle central. 1.3.1 Barramento com compartilhada tempo compartilhado ou Memória Este é o mecanismo mais simples para construir um sistema multiprocessado. A estrutura e as interfaces são semelhantes ao sistema monoprocessado que utiliza interconexão por barramentos como proposto por Von Neumann (barramento de endereços, de controle e de dados). Para facilitar transferências DMA, existem as seguintes características: Endereçamento: ele deve saber distinguir módulos no barramento para determinar a fonte e o destino do dado. Arbitragem: todo módulo de E/S pode funcionar como mestre temporariamente. Um mecanismo é fornecido para arbitrar a competição de requisição de barramento, utilizando algum esquema de ordenação por prioridade. Compartilhamento por tempo: quando um módulo está controlando o barramento, outros módulos aguardam e devem, se necessário, suspender sua operação até que o barramento seja liberado. Neste caso, podem existir múltiplas CPUs, bem como, múltiplos coprocessadores de E/S, todos tentando acessar um ou mais módulos de memória via barramento. 3 Estas características são diretamente aplicadas numa configuração multiprocessador. NO caso Time Sharing existem múltipas CPUs, bem como, vários processadores de E/S e todos concorrendo aos módulos de memória através do barramento. CPU ... CPU E/S ... E/S MEM ... MEM Esta organização tem várias vantagens sobre outras Simplicidade: a interface física, e a lógica de endereçamento, arbitragem e compartilhamento do tempo são iguais a de um sistema monoprocessado. Flexibilidade: em geral, é fácil de expandir o sistema ligando mais CPU's ao barramento. Reliability: o barramento é essencialmente um meio passivo e a falha de um dispositivo ligado a ele, não deve causar falhas no sistema. O principal destaque da organização do barramento é a performance, pois, toda referência à memória passa por ele, assim, a velocidade do sistema é limitada pelo tempo do ciclo. Para melhorar a performance, é desejável que cada CPU seja equipada com memória cache, pois isto, reduz o número de acessos drasticamente. O uso de caches introduz algumas novas considerações no projeto. Visto que, cada cache local tem um espelho de uma porção de memória, se uma palavra é alterada em uma cache, deve causar a invalidação de uma palavra em outra cache. Para prevenir isso, as outras CPU's devem ser alertadas que uma atualização está acontecendo. CPU cache 1.3.2 ... CPU E/S ... E/S MEM ... MEM cache Memória distribuída A técnica da memória multiporta permite o acesso direto e independente dos módulos de memória principal por cada CPU e dispositivos de E/S, neste caso, uma lógica associada com a memória é necessária para resolver conflitos. M1 CPU1 ... CPUn M2 Mn E/S1 ... E/Sn O método freqüentemente utilizado para resolver esses conflitos é o de designar permanentemente prioridade para cada porta de memória. Tipicamente, a interface física e elétrica em cada porta é idêntica ap que é visto em sistemas de memória com módulos de porta única, assim, para acomodar as memórias multiportas, pequenas ou nenhuma modificação são necessárias tanto para a CPU quanto para os dispositivos E/S. 4 Esta técnica é mais complexa que a do barramento, pois, requer lógica adicional ao sistema de memória, porém, fornece melhor performance, visto que, cada processador tem um caminho fixo para um módulo de memória. Outra vantagem é que é possível configurar porções de memória como privadas, para uma ou mais CPU's e/ou dispositivos de E/S, esta característica permite aumentar a segurança contra acessos não autorizados e também o armazenamento de rotinas em áreas não susceptíveis a modificações por outros processadores. 1.3.3 Unidade de Controle Central A unidade de controle central, separa dados entre módulos independentes: CPU memória, E/S. O controlador poder "bufferizar" pedidos e executar funções de arbitragem e temporização. Pode também, passar mensagens de estado e controle entre a CPUs e executar alertas de atualização da cache. Devido ao fato de toda lógica de coordenação da configuração do sistema multiprocessado se concentrar essencialmente na unidade central de controle, interfaces de E/S, memória e CPU não são perturbadas com esta tarefa. Esta técnica fornece a flexibilidade e simplicidade da técnica de barramentos. A desvantagem é que a unicade de controle é complexa e sua performance é potencialmente "botteleneck". A estrutura da unidade central de processamento é comum nos sistemas mainframes de processadores múltiplos, tal como, membros da família IBM S/370. 1.4 Sistemas operacionais multiprocessados Em um sistema fortemente acoplado, o usuário percebe um sistema operacional único, controlando os recursos do sistema, de fato, tal configuração deveria aparecer como um sistema multiprogramado e monoprocessado. Em ambos os casos, múltiplas tarefas ou processos podem estar ativos ao mesmo tempo e o sistema operacional tem a responsabilidade de despachar para execução e alocar recursos. Sete funções de um sistema operacional multiprocessado: 1. Alocação e gerenciamento de recursos; 2. Proteção de dados e tabelas 3. Prevenção contra deadlock do sistema 4. Terminação anormal 5. Balanceamento de carga de E/S 6. Balanceamento de carga de processador 7. Reconfiguração Se levarmos em conta os sistemas multiprogramados, somente as últimas três são substancialmente diferentes, quando estabelecida comparação entre sistemas multiprocessados e monoprocessados. É responsabilidade do sistema operacional determinar quais recursos são utilizados eficientemente, de outra forma, os investimentos em várias CPU´s são desperdiçados. Ele deve também, reconfigurar o sistema quando um processador falha, para pode continuar a operação, mesmo que num nível de performance reduzido. Multiprocessadores fortemente acoplados podem ser caracterizados pela forma que uma tarefa é despachada. Existem duas dimensões para uma função de despacho: 1. Se processos são dedicados ao processador. 2. Como processos são despachados para o processador. Se cada processador tiver uma fila de despacho exclusiva (tipo short-term), então uma vez que o processo for ativado, ele é associado a um processador definitivamente até seu término. Neste caso, um processador pode estar ocioso, com a fila vazia, enquanto outro processador tem um "backlog". Para previnir esta situação, uma fila comum, pode ser 5 utilizada. Todos os processos vão para a fila e são despachados para qualquer processador disponível. Assim, a tarefa pode ser executada em processadores diferentes em tempos diferentes. Retomando o assunto, se um processo é dedicado a um processador, alguns princípios são necessários para associar um processo ao processador. Duas técnicas são utilizadas: mestre/escravo e "peer". 1.4.1 Arquitetura mestre/escravo Com a arquitetura mestre e escravo, o SO sempre roda em um processador específico, enquanto os outros processadores podem rodar somente programas do usuário. O mestre é responsável por despachar as tarefas. Uma vez que um processo está ativo, se o escravo precisa executar um serviço, por exemplo, uma chamada de E/S, ele deve enviar um pedido ao mestre e esperar pela execução desse serviço. Esta técnica é simples e requer pouca melhora em relação a um sistema operacional multitarefa operando sobre um sistema monoprocessado. A resolução de conflitos é simplificada visto que, um processador tem controle de todos os recursos de memória e E/S. Existem, porém, duas desvantagens: 1. A falha do mestre põe o sistema em colapso 2. O mestre pode tornar a performance "bottleneck" 1.4.2 Arquitetura peer O sistema operacional pode executar em qualquer processador e cada processador faz um despacho próprio a partir do conjunto de processos disponível. Esta técnica torna o SO mais complicado, pois, ele deve garantir que dois processadores não escolham o mesmo processo e que os processos não fiquem perdidos na fila, além disso, deve existir uma técnica para resolver o sincronismo entre a competição de recursos. 6