310 likes | 407 Views
6. Sistemas com Múltiplos Processadores. Introdução. Limitações à velocidade de processamento do hardware Propagação dos sinais eléctricos Limitados pela velocidade da luz nos condutores eléctricos Os computadores têm que ser cada vez mais pequenos Dissipação Calor
E N D
Introdução • Limitações à velocidade de processamento do hardware • Propagação dos sinais eléctricos • Limitados pela velocidade da luz nos condutores eléctricos • Os computadores têm que ser cada vez mais pequenos • Dissipação Calor • Por outro lado, quanto mais pequenos são mais difícil é efectuar a dissipação de calor • Solução • Obter maior capacidade de processamento através da associação de vários elementos com capacidade processadora (nodos)
Introdução • Arquitecturas típicas • Multiprocessadores • Várias CPUs, habitualmente na mesma placa • Comunicação entre CPUs através de memória partilhada • Clusters (Multicomputadores) • Cada CPU tem a sua memória • Comunicação entre CPUs feita através de mensagens • Sistemas distribuídos • Hardware disperso pelo mundo • Sistemas em rede – partilha de alguns recursos (ex: ficheiros) • Sistemas verdadeiramente distribuídos – partilha de tudo
Introdução • Arquitecturas típicas
CPU CPU CPU Memória partilhada CPU CPU CPU CPU CPU Multiprocessadores • Vários processadores fisicamente muito próximos uns dos outros • Uma memória física partilhada por todos os processadores • Geralmente dividida em vários módulos • Utilizados na resolução de cálculos computacionais muito exigentes em processamento, mas paralelizáveis
Multiprocessadores • Hardware • Ligação por BUS • Todos os CPUs e Memória partilham o mesmo BUS • A capacidade de processamento fica limitada pela velocidade do BUS • Possibilidade de engarrafamento (bottlenecks) no BUS • Cada CPU tem que esperar que o BUS esteja livre para poder aceder à memória partilhada • Soluções para minorar este problema: • Dotar cada CPU de uma cache – são necessárias políticas de coerência mais complexas • Dotar cada CPU de uma memória privada
Multiprocessadores • Ligação por BUS(configurações) Simples Cada CPU tem a sua cache Cada CPU tem a sua cache e uma memória privada
Multiprocessadores • Comutadores (Switches) • Alternativa ao BUS para minorar engarrafamentos • Conseguem-se mais ligações em simultâneo estabelecendo caminhos separados entre os CPUs e a memória partilhada • Distribui-se a memória partilhada por vários módulos
Switch Multiprocessadores • Switch clássico • O switch é basicamente constituído por um conjunto de linhas que se cruzam, existindo um interruptor por cruzamento • Quando o interruptor é activado, as duas linhas que se cruzam ficam ligadas uma à outra • Com n processadores e n módulos de memória são necessários n x n pontos de cruzamento, pelo que não é aconselhável este esquema para valores elevados de n
Multiprocessadores • Organização do Sistema Operativo • Cada CPU tem o seu SO • O código do SO encontra-se carregado em memória • Cada CPU corre uma cópia privada desse código • Problema: • A arquitectura multiprocessador fica parecida com um conjunto de arquitecturas uniprocessador • No entanto está facilitada a comunicação entre processos e a partilha de periféricos Memória
Multiprocessadores • Master-Slave • Um dos CPUs – o Master – está encarregue de correr o sistema operativo • Os outros CPUs – Slaves – direccionam as chamadas ao sistema para o Master • Problema: • Probabilidade elevada de engarrafamento no Master quando o número de processadores é elevado
Multiprocessadores • SMP – Symmetric Multiprocessor • Cada processador pode processar as chamadas ao sistema e correr processos do SO • São necessários mecanismos de sincronização para assegurar a exclusão mútua quando se correm certos processos do SO • Ex: 2 processadores a actualizar process tables em simultâneo – uma região crítica... • Soluções: • Proteger todo o SO com um mecanismo de sincronização • Problema: o sistema fica parecido com Master-Slave... • Uma alternativa melhor consiste em dividir o SO em regiões críticas independentes e proteger individualmente cada uma delas • Problema: é preciso ter em especial atenção a possibilidade de deadlocks
Multiprocessadores • Sincronização • Para um sistema uniprocessador vimos que as operações atómicas permitiam a implementação de mecanismos de sincronização eficientes • Com multiprocessadores são inviáveis as operações atómicas sob o ponto de vista do SO • Não se podem utilizar semáforos... • Outra possibilidade é a utilização da instrução TSL (Test and Set Lock) – atómica do ponto de vista da CPU • Do modo que foi estudado anteriormente não funciona, pois um processador B pode-se “intrometer” enquanto um processador A executa a instrução TSL
Multiprocessadores • No entanto existe uma variante da instrução TSL • O primeiro passo é trancar o BUS, de seguida executa-se TSL e destranca-se o BUS (ou o switch) • Deste modo previne-se que um processador B aceda à memória, enquanto um processador A executa a instrução TSL • O modo como um processador reage a um trinco fechado levanta outra questão: • Fica em ciclo a testar o trinco ? • Ou efectua uma comutação de processos ? • No caso de sistema uniprocessador a escolha seria fácil – bloquear o processo corrente e efectuar uma comutação • Nos multiprocessadores não é bem assim...
Multiprocessadores • Caso 1 – o processador fica em ciclo • Neste caso o trinco denomina-se Spin Lock • Tem-se uma situação de espera activa – o CPU vai ficar em ciclo durante o qual não efectua processamento útil • Mas o mais grave é o CPU ocupar desnecessariamente o BUS(Muitos CPUs trancados podem ser a causa de um bottleneck) • Existem algumas estratégias para evitar a ocupação do BUS • Guardar o valor trinco num bloco de cache especial(assim o CPU não utiliza o BUS) • Ir introduzindo um atraso adicional entre verificações do valor do trinco
Multiprocessadores • Caso 2 – o processador comuta de processo • A comutação de processos em arquitecturas multiprocessador não é tão rápida como numa arquitectura uniprocessador • Se demorar mais tempo do que a destrancar o trinco, não vale a pena... • Pode ainda acontecer que os recursos trancados sejam por exemplo as process tables dos processos executáveis • Neste caso é impossível escolher um novo processo para correr... • Uma terceira hipótese seria a possibilidade de escolha entre comutar ou não, consoante a situação em causa
Multiprocessadores • Sequenciamento • O sequenciador de processos é mais complexo do que num sistema uniprocessador • É necessário escolher não só qual o processo a executar, mas também qual o processador a atribuir a esse processo • O sequenciador deve-se também preocupar com os grupos de processos (ou threads) que estão relacionados entre si • Suponha-se que existe um grupo de dois processos – um produtor e um consumidor • Não faz sentido correr o consumidor e só muito mais tarde o produtor... Convém que corram os dois ao mesmo tempo
Multiprocessadores • Alguns tipos de algoritmos • Timesharing • Trata os processos individualmente • Todos os processadores têm que aceder à fila de processos executáveis (o que pode originar engarrafamentos) • Spacesharing • Trata os processos (ou threads) por grupos relacionados • Atribui conjuntos de processadores a grupos de processos • Os processos correm no conjunto de processadores atribuídos até terminarem • Gang • Cada grupo de processos corre num conjunto de processadores durante um certo intervalo de tempo - quantum • No fim do quantum comuta-se para um novo grupo
M M CPU CPU CPU CPU M M M M CPU CPU Ligações CPU CPU M M Clusters (Multicomputadores) • Várias CPUs ligados através de uma rede local dedicada, e que comunicam entre si através de mensagens • Cada CPU tem a sua memória privada • O projecto da rede e a interface CPU-rede são os factores mais importantes para o desempenho do sistema • Tal como os multiprocessadores, são utilizados na resolução de cálculos computacionais complexos
Clusters (Multicomputadores) • Ligações típicas • Estrela • Um nodo central e todos os outrosligados a ele • Inexistência de caminhos alternativos • Devido a isso, o nodo central pode ser um switch • Anel • Cada nodo ligado a dois vizinhos • Só existem dois caminhos • Os caminhos podem ser demasiado longos • Muito utilizada quando existem poucos nodos
Clusters (Multicomputadores) • Ligações típicas • Grelha • Muitos caminhos alternativos • Alguns caminhos são longos • Toro duplo • Variante da grelha com oobjectivo de encurtar caminhos
Clusters (Multicomputadores) • Ligações típicas • Cubos e hiper-cubos • Estruturas de ligações caracterizadas por o caminho mais ser proporcional ao número de dimensões do hiper-cubo • Cubo (3D) – caminho mais longo – 3 ligações • Hipercubo 4D – caminho mais longo – 4 ligações • Utilizada quando existe um nº muito elevado de nodos (ex: 1024 nodos)
Clusters (Multicomputadores) • Comunicação por envio/recepção de mensagens • Utilização de chamadas ao sistema do tipo Send e Receive(de modo análogo ao estudado para as filas de mensagens) • As chamadas podem ser bloqueantes ou não bloqueantes • Bloqueantes • o emissor bloqueia enquanto a mensagem não é enviada • o receptor bloqueia enquanto não recebe a mensagem • Não bloqueantes • do lado do emissor, a mensagem é copiada para um buffer do núcleo, e depois disso o processo continua em execução • há que ter em conta que não se pode enviar uma nova mensagem enquanto a anterior não tiver sido despachada
Clusters (Multicomputadores) • Chamadas bloqueantes vs. não-bloqueantes
Clusters (Multicomputadores) • Comunicação por RPC (Remote Procedure Call) • Abordagem alternativa que tenta evitar que a comunicação se assemelhe a operações de I/O • Basicamente consiste no envio de parâmetros para um procedimento que corre noutra máquina • Limitações: • Não podem ser passados parâmetros por referência – pois o espaço de endereçamento na outra máquina é diferente • O número de parâmetros não pode ser variável (como acontece, por exemplo, na função fprintf) • Não podem ser utilizadas variáveis globais(Existem alguns “truques” para contornar estas limitações)
Clusters (Multicomputadores) • Comunicação por DSM (Distributed Shared Memory) • Neste modelo, o SO estabelece um espaço de endereçamento global divido em páginas que são espalhadas pelo vários nodos • Quando um nodo faz uma referência a uma página que não se encontra carregada na sua memória, passa-se ao modo núcleo e o SO procura a página em questão • As mensagens trocadas pelos nodos consistem em páginas de memória • Do ponto de vista do SO, basicamente ocorre uma page-fault, mas vai-se buscar a página a outro nodo e não ao disco • Do ponto de vista do utilizador, aparentemente é utilizada memória partilhada, embora fisicamente não o seja
Clusters (Multicomputadores) • Sequenciamento • Um sequenciador para clusters pode ser visto como um sequenciador a dois níveis • Sequenciador global • Efectua a escolha do nodo no qual vai ser iniciado um processo • Tenta manter os recursos equilibrados nos vários nodos • Sequenciador local • Presente em cada nodo • Comporta-se como um sequenciador para um sistema uniprocessador
Sistemas Distribuídos • Os vários nodos são agora computadores completos • Estão espalhados por uma rede que pode ser a Internet • Podem-se subdividir em duas categorias: • Sistemas em rede • São partilhados alguns recursos entre os vários nodos, mas não processadores (é o caso da rede de computadores do ISCTE) • Os sistemas operativos diferem de nodo para nodo • Sistemas operativos distribuídos • Neste caso existe também partilha de processadores • Utiliza-se um único sistema operativo • A grande diferença em relação aos clusters reside no tempo que uma mensagem demora a chegar de um nodo a outro, o que obriga o SO a possuir algumas características adequadas ao problema
Sistemas Distribuídos • A possibilidade de existirem diversos Sistemas Operativos obriga à existência de uma base comum para as aplicações – Middleware – • O middleware pode ser considerado um sistema operativo a correr por cima de outro sistema operativo
Sistemas Distribuídos • O middleware pode ser a vários níveis • Documentos • Ex: WWW (World Wide Web) • Sistema de ficheiros • Partilha de ficheiros, uploads/downloads, etc. • Objectos • Linguagens de programação orientadas para objectos distribuídos (invocar métodos remotamente) • Ex: CORBA (Common Object Request Broker Arquitecture) • Midlleware coordenado • Troca de dados e sincronização entre vários processos a correr em máquinas diferentes • Ex: Jini (Sun)
Sistemas Distribuídos • Sistema verdadeiramente distribuído • Existência de um único SO que transformasse um conjunto de máquinas espalhadas pelo mundo numa única máquina virtual • Existência de chamadas ao sistema comuns em todas as máquinas • Criação e destruição de processos feitos de igual modo em todas as máquinas. Existência de sequenciamento global • Um único sistema de ficheiros comum. Cada utilizador estaria sujeito às mesmas regras de protecção e segurança • Este sistema teria características próximas dos clusters e dos sistemas em rede. (E eventualmente de multiprocessadores) • Ainda não existe nenhum sistema operativo com todos estes requisitos...