Summary

Este documento descreve os diferentes tipos de computadores, as unidades de informação, as oito grandes ideias da arquitetura de computadores, bem como hardware, interface de programação e modelos de aplicação distribuída.

Full Transcript

## Sistemas Computacionais ### Tipos de Computadores - **Computador Pessoal (PC)** - Incorporado ecrã _display_ gráfico, _teclado_ e _rato_. Designado para executar _software_ de terceiros. Uso individual. - **Servidores** - Correr programas maiores, múltiplos utilizadores remotamente. Acessado vi...

## Sistemas Computacionais ### Tipos de Computadores - **Computador Pessoal (PC)** - Incorporado ecrã _display_ gráfico, _teclado_ e _rato_. Designado para executar _software_ de terceiros. Uso individual. - **Servidores** - Correr programas maiores, múltiplos utilizadores remotamente. Acessado via rede de comunicação. - **Super Computadores** - Elevado desempenho. Servidores com milhares de processadores. Acesso e custo. Configurados como _programas_ computacionalmente "pesados". - **Computadores Embebidos (embedded)** - Computador dentro de outro dispositivo. Executa aplicações pré-determinadas, integradas no _hardware_. Ex: automóveis, televisões, máquinas de lavar. - **Dispositivos móveis (PMD)** - Dispositivos _portáteis_ com bateria autónoma e conectividade à internet se for possível. _Software_ é instalado por meio de _download_ (apps). Ex: _smartphones; tablets_. - **3 Servidores individuais** estes são substituídos **↓** - **Clusters de Servidores** em _data centers_. **↓** - **Centros de Dados / Data Center** **↓** - **Computação em núvem** (tira partido destes _clusters_) - **SaaS** (Software as a Service) - _Softwares_ à correm na _nuvem_ sendo o acesso efectuado através da internet - poupar espaço. **↓** **WSC** (Warehouse Scale Computers) - Enormes centros de dados. ### Unidades de Informação - **Digitos binários** - 0's e 1's. **bits**. - **Byte** - 8 digitos binários (8 bits). - A informação digitada é constituída por bits e é agrupada em bytes. **Ordem Crescente**: KB > MB > GB > TB > PB > EB > ZB > YB - 10<sup>3 </sup> Bytes - 10<sup>6</sup> - 10<sup>9</sup> - 10<sup>12</sup> - 10<sup>15</sup> - 10<sup>18</sup> - 10<sup>21</sup> -10<sup>24</sup> - Os programadores por conveniência de cálculo, na base binária usam potencias de 2. - **KIB** > **MIB** > **GIB** > **TIB** > **PIB** > **EIB** > **ZIB** > **YiB** - 2<sup>10</sup> - 2<sup>20</sup> - 2<sup>30</sup> - 2<sup>40</sup> - 2<sup>50</sup> - 2<sup>60</sup> - 2<sup>70</sup> - 2<sup>80</sup> ### Oito Grandes Ideias em Arquitetura de Computadores 1. **Lei de Moore** - Circuitos integrados, componentes básicos do _computador_, duplicam a sua capacidade a cada 18-24 meses. Permite aos arquitetos adaptarem os seus projetos, tendo em carta os _chips_ e os seus _integrals_. 2. **Abstração** - As camadas superiores abstêm-se dos detalhes das camadas inferiores e vice-versa. Torna a ideia de _hardware_ e _software_ + tratável. 3. **Rapidez dos Casos Comuns** - Investir no casos + frequentes, casos + fiéis e + fiéis. 4. **Desempenho através do paralelismo** - Efetuar operações onde pendentes em paralelo. 5. **Pipelining** - Uma forma de paralelismo. Dividir uma tarefa com várias etapas ou estágios que correm em sequência e passam informação de uns para os outros. Várias instruções encontram-se assim processamento no mesmo tempo. 6. **Desempenho através da previsão** - Antecipar situações futuras, em vez de esperar a se concretize. 7. **Hierarquia de Memórias** - Memória + rápida, menor e mais cara, no topo da hierarquia (acesso imediato), Memória + lenta, mais barata, na parte inferior (acesso + esparádico), memórias no topo tem capacidades < & as do fundo. 8. **Confiabilidade através da Redundância** - Computadores têm de ser confiáveis. Tolerantes a falhas. Incluir componentes redundantes e minimizem a falha do sistema. Ex: Usar memórias redundantes, níveis de hierarquia. ### Camadas de Abstração - As camadas de programa dependem são os vários _software_ de sistemas e do _hardware_. ### Software do Sistema - Sistema operativo, compiladores, _assemblers_. **• Sistema Operativo** - Faz a interface entre o programa do usuário e o _hardware_. Tem como funções importantes: gerir operações de entrada e saída; reserva de armazenamento de memória; assegurar a partilha dos recursos de _computador_ pelas _apps_ em segurança. **• Compilador** - Traduz o código de _apps_ escrito em linguagem de alto nível em instruções básicas e o _hardware_ pode executar. **• Linguagem _"assembly"_**: Representação simbólica das instruções da máquina. **• "Assembler"** Programa a traduzir a versão simbólica das instruções em uma versão binária. **• Linguagem de máquina**: Representação binária das instruções de máquina. ### Hardware - Componentes físicos da máquina a executar as instruções determinadas pelo programa. Instruções de baixa nível, simples. ### Linguagem de Alto Nível - Compilador > _Assembly_ > _Assembler_ > Código-máquina / linguagem de máquina > _Hardware_. ### Dentro do _IPL_ recebe informação 1. **Entrada de dados** (_input_) - teclado, rato, microfone. 2. **Saída de dados** (_output_) - ecrã, impressora, altifalante. 3. **Memória** 4. **Caminho de dados** (_datapath_) 5. **Controlo** > _Processador / CPU_ ### 1- Output - Ecrãs de Cristais líquidos (_LCDs_) (película fina de polímeros líquidos). - **Pixel** - Menor elemento de imagem individual. Uma imagem num ecrã é composta por uma _grelha_ de retângulos de _pixels_, que representam uma matriz de _bits_ (ou _bitmap_). - **Resolução** - Número de _pixels_ na horizontal * vertical de _grelha_ - **Com do pixel:** Cada _pixel_ = 3 bytes (3*8=24 bits). ### 2- Memória - Contém os programas + estes a serem executados bem como os dados necessários. - 2 níveis de trabalho: - **_Cache_**: Acesso + rápido: Dados de acesso frequente. -> **SRAM** (Static random access memory). + dispendiosa; Encontra-se dentro do processador. - **Acesso Aleatório (_RAM_)**: Menos rápido; Acesso não tão frequente. -> **DRAM** (dynamic random access memory). - **Memória Principal** - Somente retém dados, enquanto são alimentadas com energia elétrica. ### Não Voláteis - Dados de _firmware_ mais permanente. Ex: disco rígidos; _pen-drives_; - Memórias Secundarias. ### CPU - **Mecanismos de controlo e Caminho de dados** - **_Chips_** (Circuitos integrados digitais): CPU, _memória_ e outros componentes. - **_Chips_** (Circuitos integrados digitais): CPU, memória e outros componentes. - **Caminho de dados:** Efetuam operações de processamento e encaminhamento de dados. - **Controlo**: Orienta a operação do _processador_. Dizendo à _memória_ e às unidades de _aritmética_ e _lógica_ como devem reagir às instruções. - **Arquitetura Computacional:** Abstração que faz a interface entre o _software_ de + baixo nível e o _hardware_. ### Tecnologias para a Construção de Computadores e Memórias - **Transistores:** Dispositivos muito pequenos que controlam correntes elétricas através de materiais _semi-condutores_. - **VLSI** (Very Large Scale Integration). - + agregados aos _circuitos integrados_ (dezenas de transístores num único _chip_. - **ULSI** - Ultra-large scale integration. ### Silício - Mais condutor que o _ferro_ metal. Se os átomos estão peguenos e bem posicionados adicionar mais átomos sub-átomos originam Transistores. - **Etapas de Processamento** - Produto conto em _wafers_. - **_Wafer_** - Cristal de _Silício_ finamente cortado em _wafers_. - **Transistores** - _wafer_ e contado em dies/matrítes _-> Chips_. - **Yield** - percentagem de unidades boas (dies) do total de unidades num _wafer_. ### Desempenho **Medidas de Desempenho** - **Tempo de resposta ou de execução:** Tempo total necessário para um computador executar uma tarefa. - **Largura de _Band_ (Bandwidth ou throughput)** - Quantidade total de trabalho realizada por um computador durante um certo intervalo de tempo. - **DesempenhoX = 1/Tempo execuçãoX** • **DesempenhoX <=> DesempenhoY * Tempo execuçãoY (E7)** - Tempo de execuçãoY => Tempo de execuçãoX (E) * X é + rápido que Y <=> DesempenhoX = h (DesempenhoY) (=) - X é + rápido que Y <=> DesempenhoX = h (DesempenhoY) (=) - DesempenhoX - Tempo execuçãoY - DesempenhoY - Tempo execuçãoX - **Tempo de CPU:** tempo que o processador usa na execução de um programa. - **Tempo de CPU do utilizador:** usado a executar instruções do programa. - **Tempo de CPU do sistema:** Tempo do CPU usado para executar instruções do S.O. (Invocados pelo programa). ### Desempenho do CPU - **Ciclo de relógio (Clock cycle):** Intervalo de tempo mínimo de funcionamento do CPU. - **Frequência de relógio do CPU (Clock rate):** Número de ciclos de relógio por segundo. - Nota: 1Hz = 1 000 000 MHz - 1Hz = 1 Ciclo por Segundo. - **Tempo de execução do CPU para o programa:** N° de ciclos de relógio para o programa * Tempo do ciclo de relógio. - A frequência é inversa ao tempo do ciclo de relógio. - Tempo de execução do CPU para o programa = N° de ciclos de relógio para o programa / Frequência do relógio. - **CPI** - N° de ciclos de relógio necessários para executar uma instrução. - Tempo de execução do programa = (N° de instruções do programa * CPI) / Frequência do relógio. **3 Fatores chave que afetam o desempenho do CPU:** - **Frequência de relógio do processador:** - **Quantidade de instruções do programa:** - **N° médio de ciclos de relógio por instrução (CPI):** **Outros Fatores que afetam os 3 fatores chave:** - **Algoritmo:** - **Linguagem de programação:** - **Compilador:** - **Arquitetura do Conjunto de Instruções:** ### Barreira de Energia - A frequência do relógio está diretamente relacionada à energia necessária para o CPU funcionar. - Custo energético para frequências elevadas é proibitivo, bem como o _refrigiamento_ dos _chips_. **É preciso arranjar alternativas.** ### Uniprocessadores vs. Multiprocessadores - Barreira de energia -> Mudança dramática no desenho _de microprocessadores_. - **Microprocessadores** têm + do que um _processador_: **"Cores"**. **Correm em paralelo.** ### Paralelismo - Forma de melhorar o desempenho das _computadores_, pois é importante: - **Distribuição de tarefas pelos _cores_ de forma equivalente:** - **Minimizar a comunicação entre os _cores_;** + independência ### Benchmarks - Conjunto de _programas_ padronizados e servem para medir o desempenho e comparativamente entre vários computadores. **• SPEC (System Performance Evaluation Cooperative)** - Projeto para criar _benchmarks_ normalizados para _sistemas_ de computadores modernos. **• SPECratio** - Medida normalizada. - A SPECratio = Tempo de execução no processador de referência / Tempo de execução no computador utilizado. - Maior _desempenho_ de _computador_ -> maior _SPEC_ratio_. ### Lei de Amdahl - Aumento do desempenho possível de uma melhoria no sistema e sempre limitada pelo grau de uso dessa melhoria. - **Tempo de execução após melhoria** = ( Tempo de execução afetado pela melhoria / Grau de melhoria) + Tempo de execução não afetado pela melhoria. **Utilizações:** - Estimar melhorias de desempenho quando carecemos do tempo consumido por alguma função e o seu potencial de aceleração. - Argumentar sobre os limites práticos ao número de processadores paralelos. ### Máquinas de Estados - Modelo de sistema com um número limitado de modos ou estados. - Diagramas de transição de estados - forma _de visualizar_ um sistema particular. **• Estados:** O ou 1 **• Estado inicial:** - 0 ou □ (onde começa). **• Setas entre estados** - Transições (mudanças de estado). **• Regras:** ativar uma transição; Mostradas junto da respetiva seta. - **Máquinas de estado deterministas:** a partir de cada estado, se aplica uma e um só regra para chegar a outro estado. - **Máquinas de estado não-deterministas:** Pode-se aplicar mais do que uma regra. - A determinista pode-se transformar numa determinista ### Estados Finais - Podem conter onde a máquina pode parar. - As máquinas de estados finitos podem representar inúmeras operações computacionais. **Mas têm limitações no sua expressividade. → Precisam de formalismos + elaborados.** ### Expressões regulare - Padrões simbólicos. Mesma expressividade a máquinas de estado finitos. - **Máquinas de pilha:** máquinas de estado com dispositivos de memória associados -> Pilha - armazena resultados temporários. - **Gramáticas independentes de contexto:** Conjuga regras a determinar padrões de _símbolos_. -> Mesma expressividade a máquinas de pilha. - **Máquinas de Turing:** máquinas de estado com memórias de acesso aleatório -> Mesma expressividade dos computadores atuais. ### Abstração e Comunicação entre Camadas - Computadores organizam-se em camadas. Camadas + altas - + próximas do utilizador e + distantes do funcionamento do _computador_. **• Aplicações** -&gt; Dominio _Software_: abstrações e permitem utilizar as _computadores_ sem precisar de saber como o _software_ funciona; Cada nível de abstração é um computador. **• Linguagem de programação** **• Bibliotecas** **• Sistemas Operativos** **• Arquitetura** - Dominio Digital: Abstrações sobre a organização e funcionamento de computador com a máquina. + maneiras de pensar sobre o mesmo. **• Componentes** - Dominio _Físico_: Abstrações sobre o funcionamento eletrónico do _computador_ (elétrica) + baixo. **• Circuitos integrados** **• Portas Lógicas** - _Dominio_ físico: abstrações sobre o funcionamento eletrónico do _computador_ (elétrica) + baixo. - **Dominio Digital** vs. **Dominio Físico**: Digital significa representado por 1's e 0's. Análogico é informação e é representada por sinais ou voz, continuamente. ### Aplicações (Software) - Programas com os quais os utilizadores interagem. Desenhados para serem utilizados por pessoas e _cabelo_ de informática. - São construídas em _linguagens_ de programação. Ex: _word; excel_ (_apps_ de escritório_); comunicação (_email, chat_); _vídeo jogos_; tratamento e _visualização_ de fotos (_photoshop_); edição de _vídeos_; Áudio e _músicas_. ### Linguagens de Programação (Software) - Permitem ao programador construir as _apps_. Expressam a lógica e funcionamento da _app_. - **Código-fonte:** Descrição da _app_ numa _linguagem_ de programação. - Deve ser legível (_readability_) -> outro programador tem de ser capaz de _deler_; - Deve funcionar como uma "receita" e o _computador_ automaticamente executa. - **Linguagens de Alto Nível:** + abstratas; Utilização de conceitos + afastados dos _circuitos_ e _das bits_ (ou _computador_). Facilitam o foco no problema em vez de como o _hardware_ funciona devido as abstrações, e é fácil codificar um programa complexo. - **Linguagens de Baixo Nível:** - abstrações; + próximos do _hardware_. Exigem a se sabe muito sobre arquitetura do _computador_. Ex: _assembly_ e _linguagens_ de máquina. **Preferências pelas Linguagens de Alto Nível:** - Produzem programas + seguros < probabilidade de _bugs_. - Não exigem o gerenciamento de memória no _computador_. - Tornam o programa + eficiente porque oferecem + abstrações. - **É preferível usar Linguagens de baixo nível quando se pretende escrever Sistemas Operacionais.** ### Bibliotecas vs. Frameworks (Software) - São partes de programas pré-feitas, ajudam o programador a incluir funcionalidades comuns sem ter de se preocupar com os detalhes de implementação. Ambas permitem absorver de certos detalhes. • **Bibliotecas:** Usadas pelo programador em uma estrutura de código definida por ele. O programador tem o _controlo_ do fluxo do programa. • **Frameworks:** Tem uma estrutura pré-definida, o programador tem de precaver algumas áreas. As frameworks _controlam_ o fluxo através de uma estrutura pré-definida. - **Sistemas Operativos (SO) Software:** - _Software_ a gerenciar diretamente o _hardure_ do _computador_. _Apps_ e _bibliotecas_ dependem dele para comunicar e o _computador_. - **Responsáveis por:** - Gerir o _sistema_ de _ficheiros_. - Gerir o _sistema_ de _ambiente gráfico_. - Comunicar com dispositivos externos, como o _teclado_ e a _impressora_. - A maior parte dos SO já incluem _apps_ básicas (Ex: _editor de texto_; calculadora). - **Kernel (Núcleo do SO):** - Descrito na linguagem de baixo nível; controla diretamente o _hardware_. -**As suas funções são:** - **Escalonamento:** Ter acesso ao _relógio_ de tempo do _hardware_. controla e alterna o tempo a cada _execução_ de _programa_. - **Segurança:** Organiza e gerencial a _memória RAM_ durante a _execução_ de _programas_. Impede que programas interfiram uns com os outros. - **Entrada e Saída:** Comunica diretamente com os dispositivos de _input/output_, sendo os _apps_ só o podem fazer através do _kernel_. ### Arquitetura (Dominio Digital) - Abstração do funcionamento do _computador_ no seu nível + básico. **• Elemento + importante é o Conjunto de instruções - _máquina_.** - Conjunto de instruções de nível super baixo e o _hardware_ executa. - **Imp:** A forma como o _processador_ se liga à _memória_. DO nº de fios à conectam o processador à memória > largura da arquitetura, medida em bits > Um _computador_ + largo, pode processar + dados em 1 instrução. Ex: 64 _bits_ - O processador pode ler informação da _memória_ 64 _bits_ de cada vez. ### Componentes (Dominio Digital) - _Visrios_ componentes, como um único objetivo. - Todos têm **CPU** (_processador_), _memória_ e _dispositivos_ _entrada/saída_. - Componentes à se interligam entre si, mesmo à sejam _visíveis_. ### Circuitos Integrados (Chips) (Dominio Digital) - Dispositivo _eletrónico_ à agrega milhões de unidades _elétricas_ básicas (transistores), e tem _uma_ funcionalidade específica. - _O processador_ pode ser _um chip_. A _memória_ pode ser _vários chips_. A Sua capacidade é soma dos chips). - **_Chips_** também possuem _camadas_ de abstração. - **_Projetistas/designers_.** Os _chips_ são feitos com _linguagens_ de _programação_ básicas de propósito especial e os permitem criar pequenos _unidades_ - combinam peças de tamanho médio até atingirem _um_ circuito como _um todo_. ### Portas Lógicas (Dominio Digital) - Os circuitos que implementam funções booleanas (operações _lógicas_) ### _Chips_ - Os _chips_ são construídos/projetados em torno de _portas lógicas_. - **_As portas lógicas_ controlam o _fluxo_ de energia.** - As operações booleanas têm valores de _verdadeiro_ e _falso_ (1's e 0's). - ** AND:** Resultado é verdadeiro (1) se _ambas_ as entradas forem (1). - **OR:** Resultado é (1) se _pelo menos uma_ das entradas é (1). - **NOT:** Resultado é (1) se a (única) entrada for (0). ### _Chips_ - _Qualquer_ computação é _reútivel_ a combinar de _portas_ lógicas. - _Qualquer_ programa seja composto por milhões ou bilhões de _portas_ - poder de _abstração_. ### Transistores (Dominio Analógico) - Núcleos de _tensão_ elétrica. - São dispositivos eletrónicos básicos e constituem as _portas_ _lógicas_. - Interruptor controlado por _corrente_ elétrica. Se a _tensão_ ultrapassar _um_ certo limite, o _interruptor_ fecha; se _descende_ abaixo de _outro_ fica aberto. - Ex: 0,4 _volts_ = 0; 72,6 _volts_ = 1 (IComuns). ### Modelos de Aplicações Distribuídas - _Apps_ podem ser: - Centralizadas numa máquina. - _Correr_ de forma _distribuída_ em varias máquinas. - Computadores ligados entre si, através de _redes_ -> _apps_ e utilizam dados e funcionalidades localizados nos outros _sítios_. ### Modelos de Distribuição de Aplicações - **Modelo Cliente-Servidor:** _Computador_ _cliente_ depende do _servidor_. _Computador_ _servidor_: tem foco no compartilhamento de informação, para o _servidor_, e o _computador_ está no mesmo nível, _insistindo_ os serviços e dados entre si. Tem foco na conectividade com os computadores remotos. **• Principal Diferença:** No modelo cliente-servidor, o gerenciamento de dados é centralizado, no _peer-to-peer_ cada usuário tem os seus próprios dados e aplicações. ### Modelo Cliente - Servidor - **_Servidor_:** _Sistema_ poderoso a aguardar os pedidos de dados e informação. - **_Cliente_:** _Máquina_ à permite aos _utilizadores_ aceder aos dados no _servidor._ - As máquinas _cliente_ e _servidor_ estão ligados por uma _rede_. - O _administrador_ do _sistema_ gerencia os dados do _servidor_. - O _cliente_ envia uma _solicitação_ ao _servidor_ -> O _servidor_ devolve uma resposta no _cliente_ a informação _solicitada_. - Os serviços são fornecidos por um _servidor_ centralizado. Se muitos _clientes_ acederem ao servidor, pode haver a possibilidade deste ficar congestionado, diminuindo a eficiência do _sistema_ -> o servidor deve ser _um sistema_ + poderoso. ### Redes _Peer-to-peer_ - Todos os _computadores_ da _rede_ _peer-to-peer_ funcionam como _clientes_ e como _servidores_. Cada _computador_ é um nó indiferenciado na rede. - **Formas de serviços:** - O nó fornecedor regista os seus serviços junto de _um_ serviço de _pesquisa_ centralizado, a todos os outros podem consultá-lo; - O nó requerente transmite (ou _broadcast_) a _tudo_ o seu pedido de serviço a todos os outros, sendo o nó fornecedor correspondente a responder ao nó requerente. O resto da comunicação é feita entre os dois. - **A _distribuição_ é mais equitativa entre as máquinas.** - **Este modelo sofre tantos gargalas devido aos serviços serem fornecidos por vários nós. Os mesmos nós, ou mt poucos, podem ter impacto no nível de desempenho ou disponibilidade da informação.** ### Gargalos: - Partes do sistema que limitam a eficiência ou o desempenho. ### Paralelismo - Sistema com pelo menos dois _processadores_ - **Paralelismo em nível do processador:** _Executar programas_ independentes ou _simultâneos_ _em processadores_ diferentes _melhoram_ o _desempenho_ do sistema. **• Programa de processamento paralelo:** - Um programa único que corre _simultaneamente_ em _varios processadores._ - Divide uma tarefa em varias subtarefas que são executadas _simultaneamente_ e _aumenta_ a _eficiência_ e _velocidade_ do _processamento_. - **Elusten:** Conjunto de computadores ligados em rede -> Como um _único grande multiprocessador_. - **Microprocessador multicore::** microprocessador contendo vários processadores (_cores_) num único _circuito_ integrado. ### _Processadores_ e _memória_ partilhada (SMP) - Система multiprocessador com _um_ único espaço de endereços de _memória_ física. ### Vantagens dos _multiprocessadores_: - Substituir _grandes_ processadores ineficientes por _muitos_ processadores _menores_ e eficientes, melhorando a eficiência energética e o desempenho escalável (+ desempenho *escalável* (+ processadores) e + eficiente energeticamente (_custo_ de _energia_ para realizar + tarefas); - *Melhoram_ a _disponibilidade_: Se um único processador falhar em _um sistema_ com multiprocessadores contínua a oferecer serviço. - **O _software_ multiprocessado_ deve ser projetado para trabalhar com _um_ número variável de _processadores_.** - **O desafio é criar _hardware_ e _software_ que tornem fácil executar programas de paralelamente._ ### Construção de programas paralelos - Tem que ter atenção aos seguintes aspetos: - **_Partições_ do programa em _threads_ (pedaços) à possam _correr_ paralelamente;** - **Divisão equitativa da quantidade de _trabalho_ pelos _threads_.** - **Sincronização_ dos _threads_** - Uns processadores vão ter de estar à espera de _outros_. - **Minimização da _comunicação_ entre os _threads_.** - **+ processadores** -> **o desafio!** ### Lei de Amdahl - _Obstáculo_: mesmo pequenas partes do programa devem ser paralelitas para se _tirar_ + partido dos vários _cores_. - O aumento do desempenho do programa devido ao paralelismo, é limitado pela parte do programa que não pode ser _paralelizada_. ### Categorização do _hardware_ paralelo - Baseada no nº de fluxos de instruções e no nº de fluxos de _dados_. - **SISD** (Single Instruction Stream, Single Data Stream) - Um _uniprocessador_. - Dem _paralelismo_. - **MIMD** (Multiple Instruction stream, Multiple data Stream): _Um_ _multiprocessador_ - ** SIMD** (Single Instruction Stream, Multiple data Stream) -> a mesma instrução é aplicada a _vários_ _streams_ de _dados_ (ex: base de dados, dividindo os _dados _pelos _processadores_). - **SPMD** (Single Program Stream, Multiple data Stream): Forma habitual de programar _um_ único programa -> Ramificações do programa atribuídas a _vários_ processadores. - **Vetor - Interpretação do SIMD:** + _operações_ + aprimoradas em _um_ conjunto de _registos_ sobre os dados, e _operacionais_ em _pipeline_. O processamento é sequenciado, mas cada _unidade_ corre em _paralelo_ sobre os _vários_ _registos_. ### Multithreading par hardware - Permite a múltiplos _threads_ compartilharem as _unidades_ funcionais de _um_ único processador. Otimizar a _execução_ das _threads_ no mesmo _processador_. - **Thread:** - Processo leve, "mini-processo", partilha um espaço de endereço - em _memória_. - Cada é uma unidade de _execução_ dentro de _um_ _processo_. - _Processos_ incluem o espaço de endereçamento + a estado do sistema _operativo_. - _Threads_ compartilham o espaço de _endereçamento_ e a estado do sistema _operativo_. - **Multithreading par _hardware_** - Forma de otimizar a utilização de um _processador_, mudando para _outra_ _thread_ quando a presente _thread_ está _pronta_. - **_Fine-grained_ multithreading:** Implica a mudança de _thread_ _após_ cada instrução. - **_Coarse-grained_ multithreading:** Implica a mudança de _thread_ apenas quando há _esperas_ significativas. Ex: espera a informação seja lida no _disco_; falta no _cache_ de último nível. - **_Simultaneous_ multithreading (SIMT):** Versos de _multithreading_. _Redut_ o custo: _vários threads_ são executados _simultaneamente_, aproveitando os recursos do _processador_. - _Clock._ Aproveitando os _ciclos_ do _processador_ no paralelismo. - **Troca de _processos_** é _uma operação_ + pesada -> _envolve_ a _alteração_ do espaço de _memória_ e estado do SO. - **Troca de _thread_** é + eficiente - permite alterar o _contexto_ de _execução_ sem alterar o espaço de _memória_. ### _Processadores_ Multicore e _memória_ Partilhada. ### SMP (Shared memory multiprocessor) - Oferece ao programador um único espaço de _endereço_ físico compartilhado entre todos os processadores. - _Programas_ executados em _paralelo_. Coerência de _cache_. ### Organização Clássica de um SMP. - _Processador_ > Processador (...) Processador > - _Cache_ > _Cache_ (...) _Cache_ - _Interconection Network_ - _Memory_ _I/O_. - # _processadores_ comunicam-se por meio de dados compartilhados. - Todos os _processadores_ são capazes de acessar qualquisel _lado de memória_ por meio de " _cangas_ (locks)" e armazenamentos ("_stores_"). ### Dois Estilos: - **UMA** (Unified memory address) - Latência de acesso à _memória_ é a mesma, _qualquer_ que seja o _processador_ a realizar a operação. Não depende de _qual_ _processador_ a solicitou. - **NUMA** (Non-unified memory address) - As _latências_ são _diferentes_ _consoante_ o _processador_ e a localização física do endereçamento de _memória_, em _faceless_. - Desafios de _programação_ + _difíceis_ no _multiprocessado_ NUMA. - As máquinas NUMA podem escalar para tamanhos + grandes. - Busca para a _memória_ próxima. - **Sincronização:** O _processo_ de coordenar o comportamento de dois ou _mais_ _processos_ que podem estar a executar _em processadores_ ≠. - **Se não houver esta coordenação, um processador pode começar a _trabalhar_ nos dados antes que outro termine de usá-los.** - **Lock / Bloqueio:** Um dispositivo de _sincronização_ que permite o acesso aos dados _por_ apenas _um_ _processador_ de cada vez. Apenas um _processador_ por vez pode acquerir o _bloqueio_. Os outros interessados nos dados compartilhados devem esperar até q o _processador_ original libere a _variável_. ### Unidades de Processamento Gráfico (GPU) - Altamente _paralelas_. - São _aceleradoras_ e complementam o CPU. - Não precisam realizar todas as tarefas, mas as que realizam tem de ser rápidas. - _Memória_ gigante: _megabytes_ ou _gigabytes_. - Usam _multithreading_ par _hardware_ -+ otimiza o processamento. - _Memória_ é optimizada para _largura_ de banda. - _GPU_ + _potente_; CPU + _muitos processadores paralelos (MIMD)_; ### Clusters e Computadores de grande escala - _Organização_ clássica de um _multiprocessador_ -> Várias _espaços_ de endereços _privados_. - _Processador_ > Processador (...) Processador > - _Cache_ > _Cache_ (...) _Cache_ - _Memory_ > - _Memory_ > - _Memory_ - _Interconection_ Network - ~Não é prático_ os _processadores_ _acederem_ à mesma _memória_ partilhada de uma vez, é como se tivesse a noção de um _espaço_ de _endereços físicos_ único. - Comunicam _por_ meio de _passagem_ explicita _de mensagens_ (_message passing)_ - Clusters são _um_ exemplo + definido de computadores paralelos baseados em _passagem de mensagens_. - Computadores de _grande escala_ (Datazens - WSC) _workstations._ - Podem ser classificados como grandes _clusters_ mas _a sua_ arquitetura é _mais_ sofisticada. **3 diferenças principais:** - _Paralelismo_ fácil e alargado. - _Contabitação_ de _custos_ + rigorosa. - Oportunidades e _problemas_ relacionados. ### WSC - Levaram à _ascensão_ da _computação_ em _nuvem_. ### Modelos de _computação_ em _nuvem_ - São categorizadas com base no nível de _controlo_ e _responsabilidade_ que oferecem aos clientes, bem como no _tipo de recursos_ _disponíveis_. - _**End Users**_ -> _**PaaS**_ -> _**IaaS**_ -> _**Applications**_ -> _**Developers**_ -> _**Infrastructure e Network Architetcs**_ - _**End Users**_ - _**PaaS**_ fornece _aplicações_ prontas para uso. _**PaaS**_ fornece uma plataforma completa para o desenvolvimento, teste e _implementação_ de aplicações, eliminando a necessidade de _gerar infraestrutura_. - _**Infrastructure e Network Architetcs**_ - _**IaaS**_ fornece _infraestruturas_ de computação virtualizada, incluindo _servidores_, _armazenamento_, _

Use Quizgecko on...
Browser
Browser