Resumo SC Efolio Global PDF
Document Details
Uploaded by LaudableBoston6741
Universidade Aberta Lisboa
Tags
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** -> 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_, _