Organização e Manutenção de Computadores
❓
O que é um computador?
O que é organização de computadores?
Qual a diferença entre organização de computadores e arquitetura de Computadores?
“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
“Cyberpunk 2077, um dos jogos eletrônicos mais aguardados da história … “
💸
Um videogame é um computador? Ou um computador é um videogame?
Definição do dicionário de Oxford:
Evolução histórica
Computadores (que computam -> fazem conta!)
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)
Notícia do dia 27 de outubro de 2020
“‘Cyberpunk 2077’ é adiado para 10 de dezembro e estúdio promete ser o último atraso"
Justificativa dos desenvolvedores
Desdobramentos da história
“Sony remove Cyberpunk 2077 da PSN e vai reembolsar quem quiser”
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?
Por que é interessante usar a abstração?
“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
Já ouviram falar em jogo multiplataforma?
Vamos a outra notícia:
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.
Uma plataforma computacional é um ambiente onde um software é executado.
“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
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”
Software: instruções primitivas que são dadas ao computador: Forma de comunicação entre nós, seres humanos e o computador
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
Hardware x Software
Hardware | Software |
---|---|
Dado o software: x=2; y= x+1;
Qual o hardware que o implementa?
Você consegue entender esse circuito?
Exemplo: Meio somador
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…
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
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
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
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.
Aprofundando o estudo de cada camada
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 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 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 de máquina do sistema operacional
Novo conjunto de instruções que possibilitam novas funcionalidades. Exemplos:
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 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 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
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.)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.
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.
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…)
Grande importânica na história da computação
Programas podem ser armazenados na memória
Computadores com diversos fins
Calculadora x App Calculadora
Unidade de entrada
Unidade de saída
Unidade de processamento central
Unidade de memória
Esquema com barramentos
Por que é necessário conhecer algumas arquiteturas atuais?
x86, ARM ou AVR?
x86, ARM ou AVR?
x86, ARM ou AVR?
Técnico em informática
Ementa: Especificação de componentes de informática
Seleção de hardware/software para solução de problemas gerais
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?
Reduced Instruction Set Computer
Computador com um conjunto reduzido de instruções
Complex Instruction Set Computer
Computador com um conjunto complexo de instruções
(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
Evolução do 486
Dois pipelines
Pentium Pro, Pentium II, Pentium III, Pentium Dual Core
Core 2 duo
i3, i5, i7
É possível executar programas feitos para processadores de 16 bits nos computadores modernos?
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)
Pentium 4 de 4GHZ cancelado: Pentium 4 de 3.6 GHZ consumia 115 WATTS
Abordagem multicore
Multiplas CPUs no mesmo CHIP
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
Surgiu como concorrente ao IBM-PC (empresa Acorn)
Radicalmente diferente dos processadores x86: Arquitetura RISC (Berkeley)
Acorn RISC Machine (ARM)
Macbook Air 2021, Macbook Pro
CPU M1 (Silicon)
CPU RISC
Computador num chip - Microcontroladoress
Atmega
Microchip
Computador
Computador digital
Game engines (APIs)
Plataforma
Arquitetura de computadores
Organização de Computadores
Estratégia de implementação em camadas
Arquitetura de von Neumann
CISC vs RISC
Arquiteturas mais comuns atualmente: x86(x64), ARM, ARV
(Software): Entender o caso relacionado ao jogo Cyberpunk 2077 e consequências no desenvolvimento de software
(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
Computador no Minecraft
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)