TRABALHO DE ARQUITETURAS PARALELAS E DISTRIBUÍDAS

UNIVERSIDADE ANHANGUERA – UNIDERP

TRABALHO DE ARQUITETURAS PARALELAS E DISTRIBUÍDAS

Lucas ROZENDO VIANA

Introdução

O grande interesse por problemas cada vez mais complexos tem levado à necessidade de computadores cada vez mais potentes para resolvê-los. Entretanto, limitações físicas e econômicas têm restringido o aumento da velocidade dos computadores sequenciais, ou seja, computadores que executam instruções em série, uma após a outra pela CPU. Por outro lado, os problemas computacionais usualmente podem ter algumas de suas partes divididas em pedaços que teriam como ser solucionados ao mesmo tempo ou processadas em paralelo. Processamento paralelo é então uma forma pela qual a demanda computacional é suprida por meio do uso simultâneo de recursos computacionais como processadores para solução de um problema. A computação paralela é caracterizada pelo uso de várias unidades de processamento ou processadores para executar uma computação de forma mais rápida. É baseada no fato de que o processo de resolução de um problema pode ser dividido em tarefas menores, realizadas simultaneamente por meio de algum tipo de coordenação. O conceito foi originalmente introduzido no CDC 6600 em 1964 pela CDC (control data corporation).

Desenvolvimento

Processos e Threads.

Processo é geralmente entendido como um programa em execução porém, na realidade, trata-se de uma estrutura mais complexa que contém, além do programa no seu formato executável, todas as informações necessárias (contexto) à execução e ao controle da execução do mesmo, como por exemplo: o contador de programa, pilhas, registradores e área de dados. O programa é uma entidade passiva, que pode ser visto como o conteúdo de um arquivo em disco, enquanto que o processo é uma entidade ativa, possuindo um contador de programa (PC), que especifica a próxima instrução a ser executada, e um conjunto de recursos a ele alocados. Nos sistemas operacionais mais antigos, cada processo possuia um único fluxo de controle, ou seja, as instruções são executadas seqüencialmente, uma de cada vez. Já nos sistemas mais modernos, um processo pode, por sua vez, dar início a um ou mais subprocessos, que são executados em paralelo ou de forma concorrente com o processo pai e, para todos os efeitos, apresentam as mesmas características e particularidades de um processo qualquer, no tocante a contexto e fluxo de controle. Threads, por outro lado, representam uma nova concepção na forma de um processo paralelizar a execução de partes do seu código. Os threads, conceitualmente, se assemelham a subprocessos porém, diferentemente destes, não possuem identidade própria e, portanto, não são independentes. Cada thread possui seu próprio contador de programa, sua pilha e seus registradores porém compartilham todos o mesmo espaço de endereçamento, isto é, como se fossem uma única entidade . Nos sistemas tradicionais, cada processo tem seu próprio contexto e apenas um fluxo de controle – são do tipo single thread. Freqüentemente, no entanto, é desejado ter-se múltiplos fluxos de controle que compartilhem do mesmo espaço de endereçamento e sejam executados de forma paralela (no caso de multiprocessamento) ou de forma concorrente (no caso de monoprocessamento), como se fossem processos separados. Threads satisfazem estes requisitos, pois compartilham do mesmo espaço de endereçamento com o processo pai e com os demais threads, e podem ser executados de forma concorrente ou paralela (fig. VIII.1). O esquema de threads, no entanto, só pode ser utilizado quando for especificamente suportado pelo sistema operacional ou quando da existência de um gerenciador de threads. Os threads não são tão independentes como os processos e os subprocessos, uma vez que compartilham de um mesmo espaço de endereçamento e, por conseguinte, compartilham das mesmas variáveis globais, dos mesmos arquivos, das mesmas tabelas, etc. Uma vez que todo thread pode acessar todo o espaço virtual de endereçamento do processo pai e dos demais threads, ele pode “ler e escrever” em qualquer local, mesmo na pilha dos outros threads – o que significa que não há qualquer forma de proteção de acesso entre os threads. Os threads compartilham a UCP da mesma forma que os processos o fazem, isto é, podem criar outros threads e podem ficar suspensos aguardando (em block waiting) pelo término de uma P Processos e Threads 39 operação qualquer (system call).

2.1.2  CONTEXTO DE PROCESSO

O ambiente necessário a execução de um processo é formado pelos contextos de hardware e de software. O contexto de hardware é fundamental para que os processos possam se revezar no controle (utilização) da UCP, podendo ser interrompidos pelo SO e, posteriormente, reinicializados do ponto onde haviam parado sem qualquer solução de continuidade, isto é, como se nada tivesse ocorrido. A operação que possibilita tal revezamento é chamada de troca de contexto (context switch) e consiste basicamente em salvar o conteúdo dos registradores e carregá-los com os valores referentes ao processo que esteja ganhando o controle da UCP. O contexto de software especifica características do processo que influem na execução do mesmo, tais como: o número máximo de arquivos abertos, o tamanho do buffer para operações de E/S, etc. O Sistema Operacional cria para cada processo uma estrutura chamada PCB – Process Control Block, onde ele mantém todas as informações de contexto (hardware e software) do processo. O conteúdo e a estrutura do PCB variam de sistema para sistema, sendo que no exemplo mostrado na figura VIII.2 a seguir, ele consiste do estado do processo, da sua identificação, do registrador PC, dos demais registradores da UCP, de informações de escalonamento, de informações de memória, de informações de contabilização e de informações de entrada e saída.

2.1.3  ESTADO DE UM PROCESSO.

O procedimento de execução de um processo tem início com a criação do mesmo, carga do mesmo em memória, para que de lá possa ser escalado para tomar o controle da UCP e realizar seu processamento e, finalmente, terminado, quando da sua conclusão. Quando em memória, o processo pode estar num dos três estados seguintes: em execução, em espera pela ocorrência de um evento previamente solicitado por ele mesmo ou, no estado de pronto para execução. Estados estes representados na figura VIII.3. Processos e Threads 41 Um processo para poder ser escalado para execução precisa estar no estado de pronto (ready). Um processo em execução pode perder o controle da UCP de forma voluntária (quando ele próprio realiza uma operação de E/S) ou de forma involuntária (quando por algum critério gerencial o próprio sistema operacional retoma o controle da UCP). Um processo em estado de espera fica nesta situação até que sua pendência seja satisfeita e de lá passa para o estado de pronto. 

2.1.4  ESTADOS DE EXECUÇÃO DE UM PROCESSO

 Dentro do estado de execução, para fins de proteção do sistema como um todo, são adotados níveis de prioridade que definem o que o processo está ou não autorizado a fazer. É a forma utilizada para evitar que processos dos usuários venham a danificar áreas do sistema operacional ou mesmo áreas reservadas a outros processos. Diversas são as estratégias de definição destes níveis de prioridade. A estratégia básica consiste na definição de dois estados, um supervisor e outro usuário. Sistemas mais complexos como o OS/2 por exemplo, adotam 4 níveis: 0 – kernel (supervisor), 1 – sistema de arquivos, comunicação entre processos e acionadores de dispositivos de E/S, 2 – subsistema de E/S e 3 – usuário. Um processo somente passa de um nível superior para um inferior com autorização do sistema operacional, que assim garante a integridade operacional.

2.2  O PROCESSAMENTO PARALELO E A TAXONOMIA DE FLYNN.

A taxonomia de Flynn abrange quatro classes de arquiteturas de computadores:

● SISD (Single Instruction Single Data): fluxo único de instruções sobre um único conjunto de dados.

● SIMD (Single Instruction Multiple Data): fluxo único de instruções em múltiplos conjuntos de dados.

● MISD (Multiple Instruction Single Data): fluxo múltiplo de instruções em um único conjunto de dados.

● MIMD (Multiple Instruction Multiple Data): fluxo múltiplo de instruções sobre múltiplos conjuntos de dados.

SISD (Single Instruction Single Data)

Nesta classe, um único fluxo de instruções opera sobre um único fluxo de dados. Isso corresponde ao processamento sequencial característico da máquina de Von Neumann e que compreende os computadores pessoais e estações de trabalho. Apesar dos programas estarem organizados por meio de instruções sequenciais, elas podem ser executadas de forma sobreposta em diferentes estágios (pipelining). Arquiteturas SISD caracterizam-se por possuírem uma única unidade de controle, podendo possuir mais de uma unidade funcional. Um exemplo seria seu computador pessoal com um processador convencional.

2.2.1  SIMD (SINGLE INSTRUCTION STREAM MULTIPLE DATA).

Esta classificação corresponde ao processamento de vários dados sob o comando de apenas uma instrução. Em uma arquitetura SIMD, o programa ainda segue uma organização sequencial. Para possibilitar o acesso a múltiplos dados é preciso uma organização de memória em diversos módulos. A unidade de controle é única, e existem diversas unidades funcionais. Nesta classe estão os processadores vetoriais e matriciais.

Quanto às facilidades de hardware para armazenamento, essas normalmente são classificadas como:

● Processor Array

● Vector Pipeline

Exemplo de computadores com a arquitetura processor array são as máquinas ILLIAC IV (Universidade de Illinois), Thinking Machine CM- 2 e MASPAR MP-1216.

Exemplo de computadores com a arquitetura vector pipeline são as máquinas IBM 9000, Cray X-MP, Y-MP & C90, Fujitsu VP, NEC SX-2, Hitachi S820, ETA10. As GPUs, também, estão sob essa classificação.

2.2.2  MISD (MULTIPLE INSTRUCTION STREAM SINGLE DATA STREAM).

Um conjunto de dados é colocado concorrente em múltiplas unidades de processamento. Cada UP opera de maneira independente via conjuntos independentes de instruções. Algumas utilizações de uma configuração MISD poderiam ser:

● Filtros de múltiplas frequências operando um mesmo sinal

● Múltiplos algoritmos de criptografia tentando a quebra de uma mensagem codificada

Não se tem conhecimento de arquitetura de máquinas comercial com múltiplas instruções trabalhando com um único conjunto de dados concorrente. Em 1971, uma máquina denominada como C.mmp computer foi desenvolvida na Universidade de Carnegie-Mellon.

2.2.3  MISD (MULTIPLE INSTRUCTION STREAM SINGLE DATA STREAM).

Esta classe é bastante genérica, envolvendo o processamento de múltiplos dados por parte de múltiplas instruções. Neste caso, várias unidades de controle comandam suas unidades funcionais, as quais têm acesso a vários módulos de memória. Qualquer grupo de máquinas operando como uma unidade (deve haver certo grau de interação entre as máquinas) enquadra-se como MIMD. Alguns representantes desta categoria são os servidores multiprocessados, as redes de estações e as arquiteturas massivamente paralelas.

2.2.4  APLICAÇÃO DO USO DA ARQUITETURA PARALELA.

Processadores vetoriais ou processamento vetorial é definido como aplicação de operações aritméticas/lógicas sobre vetores, em vez de operações sobre pares de dados ou dados escalares. Ela possui as seguintes características: reduz o custo de manutenção de estruturas de controle para laços de processamento; reduz conflitos de acesso à memória; pode ser empregada com conceitos de pipeline; em geral tem um aumento de desempenho da ordem de 10 a 20 vezes quando comparada com máquinas escalares; aumenta os custos de hardware; aumenta os custos de compilação do código (vetorização).

2.2.5   MULTIPROCESSADORES SIMÉTRICOS.

Estes ambientes são conhecidos como arquiteturas de compartilhamento total, que são caracterizadas por até dezenas de processadores compartilhando os mesmos recursos computacionais e rodando um único sistema operacional. Os processadores são considerados simétricos porque têm os mesmos custos para acesso à memória principal.

A utilização de SMP é mais popular do que se imagina. Esse tipo de máquina é encontrado facilmente em grande parte das organizações de hoje, e também vem ganhando espaço em áreas menores, reflexo da redução de custos. Um problema desta arquitetura é sua escalabilidade, pois, com o aumento do número de processadores, a taxa de colisão de acesso à memória também cresce, sendo necessária a utilização de soluções de memórias de cache e globais, que serão vistas à frente.

2.2.6 MÁQUINAS MACIÇAMENTE PARALELAS.

Como o próprio nome já diz, essas máquinas almejam o alto desempenho por meio da utilização de um grande número de processadores comerciais, os quais, por causa do fator do custo, acabam sendo processadores de baixo ou médio poder computacional. Cada nó possui uma memória local com um espaço de endereçamento próprio. Assim, cada nó só tem acesso à sua própria memória, o que a caracteriza como uma máquina NORMA. Assim, a comunicação entre as máquinas é feita por meio de troca de mensagens.

2.2.7   MÁQUINAS COM MEMÓRIA COMPARTILHADA DISTRIBUÍDA.

São sistemas em que, apesar das memórias estarem fisicamente separadas, todos os processadores podem endereçar as memórias de todos os nós por causa do fato de que foi implementado um espaço único de endereçamento (que pode ter sido feito tanto em hardware como em software).

2.2.8   REDE DE ESTAÇÕES DE TRABALHO.

Basicamente as máquinas NOW utilizam uma rede local (normalmente Ethernet ou ATM) já existente para a execução de aplicações paralelas. A rede local pode ser vista como uma máquina paralela em que vários processadores, com suas memórias locais (estações de trabalho), são interligados por uma rede, o que a torna uma máquina NORMA de custo quase nulo. A diferença da NOW para as MPP está na hierarquia de barramento utilizada nas estações, por possuir um disco local (DL) nos nós e na rede de interconexão. Essas diferenças vêm do fato de a rede local ter sido planejada para um tipo distinto de aplicações paralelas (compartilhar arquivos e acessar periféricos remotos, como a impressora). Uma das dificuldades encontradas nessa troca de função está na rede de interconexão. Redes como Ethernet e ATM não são otimizadas para aplicações paralelas, que geram uma alta latência nas operações, o que compromete o desempenho da máquina como um todo.

2.2.9  CLUSTER.

Um cluster, ou aglomerado de computadores, é formado por um conjunto de computadores que se utiliza de um tipo especial de sistema operacional classificado como sistema distribuído. Muitas vezes, é construído a partir de computadores convencionais (personal computers), os quais são ligados em rede e comunicam-se por meio do sistema, trabalhando como se fossem uma única máquina de grande porte. Há diversos tipos de cluster. Um tipo famoso é o cluster da classe Beowulf, constituído por diversos nós escravos gerenciados por um só computador. Ele pode ser definido também como o cruzamento de uma trilha com um setor de um disco formatado. Um HD (hard disc) possui vários clusters que serão utilizados para armazenamento dos dados de um determinado arquivo. Com essa divisão em trilhas e setores, é possível criar um endereçamento que visa facilitar o acesso a dados não contíguos, assim como o endereçamento de uma planilha de cálculos ou, como um exemplo mais simples, o tabuleiro do jogo “batalha naval”.

 

Conclusão

Com as limitações impostas pelos materiais utilizados na construção de processadores, viu que não se podeira aumentar indefinidamente a frequência dos processadores para ganhar desempenho. Partiu – se para outras abordagens, como a paralelização.

O paralelismo computacional é uma forma pela qual a demanda é suprida através do uso simultâneo de recursos como processadores para solução de um problema.

Sobre a limitações técnica de se construir um computador com um único processador cujo período seja de, por exemplo 0,001 ns, uma máquina com 100 processadores com período de 1 ns cada é perfeitamente possível de ser construída, a potência computacional de ambas é semelhante.

O paralelismo tem vários níveis: de instrução, de dados e de tarefas. No nível das instruções, por exemplo, os projetos pipeline e superescalar podem ser usados para aumentar a performance de um fator em torno de 10, quando comparados aos projetos puramente sequenciais. Porém, para aumentar esse fator tem-se utilizado replicar processadores inteiros, ou no mínimo partes substanciais de processadores, fazendo com que trabalhem juntos, de maneira eficiente.

feito

Use agora o Mettzer em todos
os seus trabalhos acadêmicos

Economize 40% do seu tempo de produção científica