🖥️

Introdução

Organização e Manutenção de Computadores

João Paulo Guimarães

O que é um computador?

O que é organização de computadores?

Qual a diferença entre organização de computadores e arquitetura de Computadores?

Foi notícia

Foo

“WhatsApp ganha um novo app para Windows com melhorias em ligações “

Por que isso foi notícia? Aonde tá a novidade?

Por que o Whatsapp funcionava melhor num celular de R$ 850 reais do que num computador de R$ 8500?

Como isso está relacionado com a disciplina?

🎮 Cyberpunk 2077

Foo

“Cyberpunk 2077, um dos jogos eletrônicos mais aguardados da história … “

💸

Preço de um PC capaz de rodar Cyberpunk 2077: R$ 4450,00

Preço do Xbox Series X: R$ 4999,00; Series S: R$ 2999,00

Afinal, o que é um computador?

Um videogame é um computador? Ou um computador é um videogame?

Definição do dicionário de Oxford:

  1. o que computa; calculador, calculista.
  2. (no contexto de informática) máquina destinada ao processamento de dados, capaz de obedecer a instruções que visam produzir certas transformações nesses dados para alcançar um fim determinado.

Exemplos de computadores?

Evolução histórica

Computadores (que computam -> fazem conta!)

Dicas de livros e séries para momento assíncrono

Definição de Tanenbaum:

“Um computador digital é uma máquina que pode resolver problemas para as pessoas, executando instruções que lhe são dadas”

(voltaremos a esta definição)

Ainda sobre o jogo Cyberpunk 2077

Notícia do dia 27 de outubro de 2020

“‘Cyberpunk 2077’ é adiado para 10 de dezembro e estúdio promete ser o último atraso"

Foo

Justificativa dos desenvolvedores

“The biggest challenge for us right now is shipping the game on current-gen, next-gen, and PC at the same time, which requieres us to prepare and test 9 versions of it (Xbox one/X, compatibility on Xbox Seriex S|X, Ps4/Pro, compatibility on PS5, PC, Stadia)…

Desdobramentos da história

“Sony remove Cyberpunk 2077 da PSN e vai reembolsar quem quiser”

Porque são necessárias tantas versões?

Por que um algoritmo (software -> jogo) não é executado (roda) em todos os dispositivos?

O que os dispositivos tem em comum entre si e no que são diferentes? O que os torna diferentes?

O jogo é desenvolvido usando uma ou mais Game engines

Game engine -> Motor de jogo

Conjuto de bibliotecas que os desenvolvedores utilizam para abstrair e agilizar o processo de desenvolvimento de jogos.

Por que é interessante agilizar?

  • Desenvolvedor foca nos aspectos do jogo propriamente dito, sem precisar se preocupar em reimplementar uma série de funcionalidades paralelas, como por exemplo, interface com joystick.

Por que é interessante usar a abstração?

  • Os game engines, também conhecidos como motores de jogos, forncem abstração com relação ao hardware que estará executando o jogo.

“Motores de jogo fornecem abstração de hardware, permitindo um programador desenvolver jogos sem a necessidade de conhecer a arquitetura da plataforma-alvo, que pode ser um videogame ou um sistema operacional. Por esse motivo, muitos motores são desenvolvidos a partir de uma API existentes, como OpenGL, DirectX, OpenAL e SDL, ou até mesmo a partir de outro motor, que pode facilitar o seu desenvolvimento. A abstração de hardware também é essencial para o desenvolvimento de motores de jogo multiplataforma "

Palavra-chaves mencionadas -> plataforma e arquitetura

Plataformas

Já ouviram falar em jogo multiplataforma?

Vamos a outra notícia:

Among Us nos consoles

Among Us é jogo cross-plataform, ou seja, ele está disponível para PC, Android e iOS.

Além disso ele também é cross-play, ou seja, é possível jogar no PC com um amigo que está no celular.

Conceito de plataforma

Uma plataforma computacional é um ambiente onde um software é executado.

  • hardware
  • sistema operacional
  • navegador de internet

“A forma com que o jogo foi implementado permite que jogadores de plataformas diferentes possam interagir. Isso é um dos diferenciais que explica o sucesso do título. No caso do software Among Us, três plataformas são mencionadas: Android, iOs e PC. Cada um desses ambientes exige uma versão diferente do mesmo software para execução correta.”

Game engine do jogo Among Us?

Unity permite “exportar” o jogo para cada uma das plataformas acima.

Exemplo do Unity sendo usado: https://www.youtube.com/watch?v=odKtPBsyFnw

O game Cyberpunk 2077 foi desenvolvido usando a REDengine 4, uma engine desenvolvido pela própria Project Red, empresa que lançou o jogo.

Lista de algumas engines: https://www.gamedevdrops.com/melhores-game-engines/

Leitura complementar: https://unity.com/case-study/mediatonic-fall-guys

Plataforma

plataforma

e arquitetura?

O que é arquitetura de computadores?

Arquitetura de Computadores: Conceito abstrato

Precisamos de background knowledge

Necessário relembrar a definição de Tanenbaum de computador:

“Um computador digital é uma máquina que pode resolver problemas para as pessoas, executando instruções que lhe são dadas”

Algoritmo

  • Sequência de instruções para realizar uma tarefa
  • contexto de computador digital -> Software, Programa de computador

Software: instruções primitivas que são dadas ao computador: Forma de comunicação entre nós, seres humanos e o computador

Problema

Gap enorme entre nossa linguagem e a linguagem do computador -> Difícil fazer programas mais complexos em linguagem de máquina

Pontos fortes e fracos do ser humano; Pontos fortes e fracos da máquina (computador digital)

OBS: Instruções (linguagem de máquina) são definidas pelo projeto do computador

Como resolver esse problema entre o GAP entre a linguagem de máquina e a linguagem dos seres humanos?

(Tanenbaum) É exatamente isso que uma organização estruturada de computadores propõe: Abordagem por meio de abstrações

Interface

Hardware x Software

Hardware Software

Hardware x Software

Dado o software: x=2; y= x+1;

Qual o hardware que o implementa?

Como implementar …

  • … operações lógicas em hardware?
  • … operações aritiméticas em hardware?
  • … memória em hardware?
  • … operações com memória?

Operações lógicas?

Portas lógicas!

  • Exemplo: Porta AND

Você consegue entender esse circuito?

Operações aritiméticas?

Circuitos aritméticos!

Exemplo: Meio somador

Memória?

Circuitos de memória!

  • Exemplo: Flipflops JK

Tabela verdade - Flipflop JK

Como facilitar a programação?

Divisão em camadas

  • Estratégia de Abstração

Define-se uma linguagem l0 -> linguagem de máquina (conjunto de instruções)

Define-se uma linguagem l1 -> Instruções que podem ser melhor lidas/escritas por seres humanos

Novo problema: Como conectar as instruções da linguagem l1 com as instruções da linguagem l0?

Solução do novo problema: Abordagem por tradução

Instruções da linguagem l1 são substituídas por 1 ou mais instruções da linguagem l0

Atenção! Todas as instruções do nível l1 são traduzidas inteiramente antes do programa de nível 0 ser gerado

Outra possibilidade: Abordagem por interpretação

Programa l1 como entrada para programa l0 -> Cada instrução individualmente é convertida para 1 ou mais instruções do nível l0 que por usa vez já são executadas

Programa interpretador que converte e executa cada instrução

(voltaremos aos interpretadores e tradutores para falar sobre os compiladores)

Seja via interpretação ou tradução…

Problema: l1 e l0 são semelhantes

Por estarem “próximas”, l1 e l0 tem instruções correspondentes

Apenas uma camada é suficiente?

Por um tempo foi.

Aumento da complexidade do problema, difícil solução

Alternativa?

Novas linguagens

L2-> L1 -> L0

L2 é traduzido ou interpretado para L1 que leva a 1 ou mais instruções de nível l0 que pode ser entendido e implementado pelo hardware

L2 mais próxima do ser humano -> Mais fácil de programar

Abstração e Camadas

Abordagem utilizada por projetistas de computadores de forma a aproximar o desenvolvimento de programas de computador para um determinado hardware. Isso é feito pela implementação de camadas de abstração entre o nível que atua o programador e o nível de execução em hardware.

Máquina Multinível

Figura máquina implementada

Exemplo sobre importância das diversas camadas

Enquanto usuário do computador, usando um navegador de internet, ou enquanto programador, quando você faz um programa com uma interface gráfica, você pensa nos elétrons correndo pela placa mãe? Faz cálculos de voltagens necessárias para introduzir um item a mais num menu?

Esse nível de abstração só é possível graças a estrutura de camadas implementadas pelos computadores modernos.

Não existe uma instrução do processador para fazer um desenho de uma interface gráfica na tela.

Camadas

Aprofundando o estudo de cada camada

Nível 0

Nível lógico digital

Hardware Eletrônica analógica e Digital

Estudado em disciplinas anteriores

Memórias -> Flipflops (Transistores)

Processador -> Circuitos Somador, somador completo… (Portas lógicas -> transistores)

Barramentos

Nível 1

Nível de microarquitetura

Mais abstrações inseridas

Microprograma -> Implementa programas escritos no nível acima

Controla o caminho dos dados pelo hardware

Interface entre nível 0 (ULA, memória, barramentos, etc) e instruções do nível 1 (ADD, Move, etc)

Nível 2

Nível de arquitetura do conjunto de instrução

ISA -> Instruction set Architecture

Instruction(Software) | Architecture (Hardware)

Nível da mais clara interface hardware x software

Fabricantes fornecem o ISA do seus computadores

Exemplo do set de instruções do processador ARM

(ver página 3 e 56 para exemplos)

Nível 3

Nível de máquina do sistema operacional

Novo conjunto de instruções que possibilitam novas funcionalidades. Exemplos:

  • Execução de mais de um programa ao mesmo tempo;
  • Chamada direta a instruções do nível 2 (nível híbrido -> instruções próprias e/ou redirecionamentos)

Tanenbaum:

“Há uma quebra fundamental entre os níveis 3 e 4. Os três níveis mais baixos não servem para uso do programador do tipo mais comum. Em vez disso, eles são voltados principalmente para a execução dos interpretadores e tradutores necessários para dar suporte aos níveis mais altos. Esses interpretadores e tradutores são escritos pelos programadores de sistemas, profissionais que se especializam no projeto e execução de novas máquinas virtuais. Os níveis 4 e acima são voltados para o programador de aplicações, que tem um problema para solucionar.”

Nível 4

Nível de linguagem de Assembly

Facilitador para escrita de programas para as linguagens que estão bem baixo dela

Geralmente programas do nível 4 são traduzidos para programas dos níveis 1,2 e 3 e interpretados pelos níveis mais baixos

Essa tradução é feita por um programa chamado Assembler

Nível 5

Nível de linguagem orientada a problemas

MENOR gap entre o programador e o computador

Linguagens de alto nível: C,C++, Python, Java etc

(Tanembaum)

"De modo geral, tradutores podem ser divididos em dois grupos, dependendo da relação entre a linguagem-fonte e a linguagem-alvo. Quando a linguagem-fonte é, basicamente, uma representação simbólica para uma linguagem de máquina numérica, o tradutor é denominado assembler (montador) e a linguagem-fonte é denominada linguagem de montagem (linguagem assembly). Quando a linguagem-fonte é uma linguagem de alto nível como Java ou C e a linguagem-alvo é uma linguagem de máquina númerica ou uma representação simbólica de uma linguagem de máquina numérica, o tradutor é denominado compilador" - Organização estruturada de computadores p408.

Momento assíncrono: Leitura do PDF do livro Organização estruturada de computadores p408.

Ainda no nível 5

Linguagens compiladas: C++ Linguagem interpretadas: Python

Em geral, nível 2 e 3 são sempre interpretados;

Linguagens dos níveis 2 e 3 não são natural para seres humanos (Difícil programar)

Níveis mais altos são apoiados por tradução (Mais fácil de programar)

Código c++ para somar dois números:

#include <iostream>
using namespace std;

int x = 2;
int y = 3;
int z = x + y;
cout  << z << endl;

Código assembly para somar dois números:

.model small
.data
 opr1 dw 1234h
 opr2 dw 0002h
 result dw 01 dup(?),\'$\'
.code
        mov ax,@data
        mov ds,ax
        mov ax,opr1
        mov bx,opr2
        clc
        add ax,bx
        mov di,offset result
        mov [di], ax

        mov ah,09h
        mov dx,offset result
        int 21h

        mov ah,4ch
        int 21h
        end

Análise do deassembly

https://github.com/jp-guimaraes/cpp_demo

Arquitetura de Computadores

Afinal, o que é arquitetura de computadores?

Qual a diferença de arquitetura de computadores para organização de computadores?

Tanenbaum:

> O conjunto de tipos de dados, operações e características de cada nível é denominado arquitetura. Ela trata dos aspectos que são visíveis ao usuário daquele nível. Características que o programador vê, como a quantidade de memória disponível, são parte da arquitetura. Aspectos de implementação, como o tipo da tecnologia usada para executar a memória, não são parte da arquitetura. O estudo sobre como projetar as partes de um sistema de computador que sejam visíveis para os programadores é denominado arquitetura de computadores. Na prática, contudo, arquitetura de computadores e organização de computadores significam basicamente a mesma coisa.

Discordância entre autores

Stallings diz:

Embora seja difícil estabelecer definições precisas para tais termos, existe um consenso a respeito das áreas que abrangem cada um. (Por exemplo, veja VRANESIC; THURBER, 1980, SIEWIOREK; BELL; NEWELL, 1982 e BELL; MUDGE; McNAMARA, 1978a; uma visão alternativa interessante é apresentada em REDDI; FEUSTEL, 1976.)

Tanenbaum

Define como organização estruturada de computadores a forma em que os projetistas resolvem a discrepância entre a linguagem de máquina e a linguagem natural dos seres humanos. Dessa forma, para se resolver esse GAP, organizamos níveis abstratos onde software são implementados e diminuem essa distância.

Por outro lado, a arquitetura de computadores trata do arcabouço disponibilizado ao usuário (programador) em cada um dos níveis abstratos pré-definidos.

Stallings

Arquitetura de computador refere-se aos atributos de um sistema visíveis a um programador ou, em outras palavras, aqueles atributos que possuem um impacto direto sobre a execução lógica de um programa.

Maior exemplo: ISA

Organização de computador refere-se às unidades operacionais e suas interconexões que percebam as especificações de arquitetura.

É uma questão de projeto de arquitetura se um computador terá uma instrução de multiplicação.

É uma questão de organização se essa instrução será implementada por uma unidade de multiplicação especial ou por um mecanismo que faça uso repetido da unidade de adição do sistema.

A decisão organizacional pode ser baseada na previsão da frequência de uso da instrução de multiplicação, na velocidade relativa das duas técnicas e no custo e tamanho físico de uma unidade de multiplicação especial.

Ficou claro a diferença?

A arquitetura de computadores está mais relacionada a uma abordagem mais teórica de projeto, fornecendo ferramentas ao usuário (programador). Quais são as instruções disponíveis ao usuário num determinado nível, por exemplo.

A organização de computadores lida com a implementação de uma dada arquitetura.

Para ajudar a entender: Dentro de uma mesma arquitetura, existem evoluções na implementação da mesma. O que está sendo mudado é a organização.

Um determinado programador está escrevendo um software para um computador e precisa armazenar um dado na memória de longo prazo. A instrução para escrita na memória é definida pela arquitetura do nível que ele se encontra. A organização desse computador descriminou a tecnologia utilizada pela memória, por exemplo, do tipo FLASH. A existência de mais de um tipo de memória de longo prazo é uma característica da organização desse computador. As instruções para acessar cada uma delas é característica da arquitetura dessa máquina.

Foco da disciplina é maior na organização do que na arquitetura dos computadores. Entretanto, entender as diferentes arquiteturas é essencial ao técnico de informática.

Por isso, nome da disciplina é Organização e Manutenção de Computadores

Mais importante: Entender como funciona o computador para nos tormarmos melhores programadores e, claro, realizarmos a manutenção dos computadores!

Leitura complementar - Momento assíncrono

Seção 1.2 Marcos da arquitetura de Computadores (Organização estruturada de comptuadores - Tanenbaum)

Gerações (Mecânico, Válvulas, Transistores, Circuitos integrados…)

Arquitetura de von Neumann

Grande importânica na história da computação

Programas podem ser armazenados na memória

Computadores com diversos fins

Calculadora x App Calculadora

Componentes

Unidade de entrada

Unidade de saída

Unidade de processamento central

Unidade de memória

Arquitetura de von Neumann

Arquitetura de von Neumann

Esquema com barramentos

Arquiteturas

  • x86
  • ARM
  • AVR

Por que é necessário conhecer algumas arquiteturas atuais?

x86, ARM ou AVR?

x86, ARM ou AVR?

x86, ARM ou AVR?

Solução de problemas

  • Técnico em informática

  • Ementa: Especificação de componentes de informática

Seleção de hardware/software para solução de problemas gerais

Linhas de arquiteturas de computadores

RISC vs CISC

Análise em termos de produtos

Conjunto 1: Raspberry pi 2(Cortex-A7), Samsung Galaxy Note 10 (Snapdragon 855), Arduino Uno (Atmega328)

Conjunto 2: Intel i7-10610U, Pentium 2, Ryzen 5 1600x

O que esses produtos tem em comum?

RISC

Reduced Instruction Set Computer

Computador com um conjunto reduzido de instruções

CISC

Complex Instruction Set Computer

Computador com um conjunto complexo de instruções

Leituras complementares

What dows risc and cisc mean?

Risc and Cisc differences

x86

(1978) Intel 8086 - CPU de 16 bits

(1980) Intel 8088 - Evolução do 8086 -> Escolhido para ser a CPU do IBM PC

Sucesso do IBM-PC: Clones!

(1982) Intel 80286 (8088 mais rápido)

(1985) Intel 80386 - CPU de 32 bits retrocompatibidade até o 8080

(1989) Intel 80486 (80386 mais rápido) - Introdução da memória cache

Pentium

  • Evolução do 486

  • Dois pipelines

  • Pentium Pro, Pentium II, Pentium III, Pentium Dual Core

Core

  • Core 2 duo

  • i3, i5, i7

Quiz

É possível executar programas feitos para processadores de 16 bits nos computadores modernos?

x86

Característica mais marcante: retrocompatibilidade

  • Pentium 4 consegue executar programas feitos para o processador 8086 sem modificações

  • Arquitetura CISC - Conjunto de instruções complexo (agregando)

Lei de Moore nos chips INTEL

Problemas de superaquecimento

  • Pentium 4 de 4GHZ cancelado: Pentium 4 de 3.6 GHZ consumia 115 WATTS

  • Abordagem multicore

  • Multiplas CPUs no mesmo CHIP

AMD 64

Processadores de 64 bits vs 32 bits

Consequências?

Sistemas operacionais 32 ou 64 bits?

Programas 32 ou 64 bits?

Memória RAM?

x86-64

ARM

  • Surgiu como concorrente ao IBM-PC (empresa Acorn)

  • Radicalmente diferente dos processadores x86: Arquitetura RISC (Berkeley)

  • Acorn RISC Machine (ARM)

Vantagens

  • Menor consumo energético (aplicado a dispositivos móveis)

Macbook Air 2021, Macbook Pro

CPU M1 (Silicon)

Leitura recomendada

Arquitetura AVR

CPU RISC

Computador num chip - Microcontroladoress

Atmega

Microchip

Arduino

Revisão

Conteúdos revisitados

  • Portas lógicas
  • Eletrônica digital
  • Circuitos eletrônicos para implementação de lógica digital, aritmética e memória
  • Flipflops, transistores

Conceitos vistos

  • Computador

  • Computador digital

  • Game engines (APIs)

  • Plataforma

  • Arquitetura de computadores

  • Organização de Computadores

Estudamos

Estratégia de implementação em camadas

Estudamos

  • Arquitetura de von Neumann

  • CISC vs RISC

  • Arquiteturas mais comuns atualmente: x86(x64), ARM, ARV

Motivações

(Software): Entender o caso relacionado ao jogo Cyberpunk 2077 e consequências no desenvolvimento de software

“O maior desafio para nós no momento é disponibilizar não uma mas 9 versões do jogo (Xbox one/X, compatibility on Xbox Seriex S|X, Ps4/Pro, compatibility on PS5, PC, Stadia)…

(Hardware): Entender de onde vem o ganho de desempenho trazido pelo novo processador M1 dos Macbooks

(Manutenção de Computadores) Entender melhor o funcionamento dos computadores para facilitar o reparo

Curiosidades

Computador no Minecraft

Computador de 8 bits

Bibliografia

Arquitetura e Organização de Computadores - William Stallings (10 edição)

Organização estruturada de computadores - Andrew S. Tanenbaum (6 edição)

Organização e arquitetura de computadores - Leonardo Guimarães Tangon, Rogerio Carlos dos Santos (2016)

Introdução a computação - Gilberto Souza Filho, Eduardo de Santana Medeiros (2014)