Você está na página 1de 31

Introdução a Organização de

computadores

Everton Alceu Carara


carara@ufsm.br
Sala 285, anexo B do CT
1
Introdução

• Estrutura básica de um sistema computacional


– Principais componentes
Armazena o programa a ser
executado

Barramentos
Processador
Memória Suporte à
Bloco de
controle interação com o
usuário
Bloco de
dados Sub-sistema de
Entrada/Saída
Introdução

• Estrutura básica de um sistema computacional


– Principais componentes

Barramentos
Processador
Memória
Bloco de
controle

Bloco de
dados Sub-sistema de
Entrada/Saída

- Organização e computadores
- Projeto de sistemas digitais
Introdução

• Estrutura básica de um sistema computacional


– Principais componentes

Barramentos
Processador
Memória
Bloco de
controle

Bloco de
dados Sub-sistema de
Entrada/Saída

- Arquitetura de computadores - Projeto de sistemas embarcados


- Projeto de processadores - Sistemas operacionais
Introdução

• O sub-sistema de E/S constitui a interface de um


sistema computacional com o mundo
– Aquisição de dados (e.g. teclado, mouse, scanner, HD)
– Exibição/Armazenamento de resultados (e.g. monitor,
impressora, HD, pen drive)

• Inclui circuitos de interface através das quais os


dispositivos periféricos (E/S) são conectados ao
sistema
– Teclado, mouse, pen drive, impressora, monitor, ...
Introdução

• Place mãe de um PC (mother board)


– Conecta os componentes de um sistema computacional
Som, Video, Rede
Processador

• Principal componente de um sistema computacional


(e.g. notebook, tablet, smart phone)
– Conhecido como CPU (Central Processing Unit)
• Circuito responsável pela execução de programas e
processamento de dados
– Processadores podem ser de dois tipos
• Propósito geral
– Programáveis
– Exemplo: Core i9, ARM, MIPS, ...
– Foco desta disciplina
• Propósito único
– Não programáveis
– Projetados para realizar uma única tarefa
– Exemplo: decodificador MP3, decodificador de vídeo
– Disciplina de Projeto de Sistemas Digitais
Processador

• Funcionalidade definida por um programa (software)


– Escrito em alguma linguagem de programação (e.g.
C/Java/Python), o qual é traduzido para um conjunto de
instruções assembly (linguagem nativa do processador),
codificadas em binário para que o processador as entenda

Programa equivalente
Programa escrito em C escrito em assembly

Compilador
Processador

• Cada processador ou família de processadores tem


seu próprio conjunto de instruções assembly
 ISA – Instruction Set Architecture

• Funcionamento básico
1. Buscar instrução na memória (programa) Barramento
de dados
2. Identificar instrução (decodificação)
3. Executar instrução
Barramento de
4. Volta para o passo 1 endereços
Processador
• Bloco de dados (data path, unidade operacional…)
– Executa as instruções que compõem os programas
• Bloco de controle (control path, unidade de controle…)
– Decodifica instruções e gera sinais de controle para a execução

Bloco de controle

Bloco de dados
Processador
• Bloco de dados (data path, unidade operacional…)
– Composto basicamente por ULA, registradores, multiplexadores, tri-states e
barramentos de interconexão

Bloco de controle

Bloco de dados
Processador
• Bloco de controle (control path, unidade de controle…)
– Tipicamente implementado como uma máquina de estados (FSM)
• Registrador de estados e circuitos combinacionais (saídas e próximo estado)
– Controla escrita em registradores, operação da ULA, seletor de
multiplexadores, ativação de tri-states...

Bloco de controle

Bloco de dados
Processador
• Bloco de dados (data path, unidade operacional…)
– Executa as instruções que compõem os programas
• Bloco de controle (control path, unidade de controle…)
– Decodifica instruções e gera sinais de controle para a execução

Titereiro
Bloco de controle

Bloco de dados

Fantoche
Processador

• Elementos básicos do bloco de dados


– ULA (Unidade lógica e aritmética)
• Realiza operações lógicas e aritméticas sobre um ou mais operandos
Operando A Operando B

Operação: ULA Códigos de condição (flags):


- add - Overflow
- sub - Sinal
- and - Carry
- or - Zero
-… Resultado
Processador

• Elementos básicos do bloco de dados


– Registradores
• Elementos de memória internos ao processador
• Armazenamento temporário de dados

• Propósito geral
– Usados como operandos de instruções assembly
» add r1, r2, r3 (r1 ← r2 + r3)
– Podem ser organizados em bancos de registradores (Register file),
quando em grande quantidade (e.g. 16 ou 32)

• Específicos
– Controlam a execução dos programas e estado do processador
– PC (Program Counter) ou IP (Instruction Pointer)
» Armazena o endereço da instrução a ser executada
– IR (Instruction Register)
» Armazena a instrução sendo executada
– Programador não tem acesso direto
Processador
• Bloco de dados do processador Cleópatra

Write
decoder

Read
decoder
Abstração

• Eliminação de detalhes
– Exemplos:
• Ao programar em C, características do processador como a
quantidade/largura de registradores são completamente abstraídas
• Ao projetar um somador ripple carry, os CIs que serão utilizados na
implementação (e.g. CMOS, TTL) são completamente abstraídos
• Usado para facilitar o entendimento/projeto de sistemas
complexos
• Aplicado tanto para hardware quanto para software

• Níveis de abstração
– Quanto mais alto o nível de asbtração, mais detalhes são
eliminados
– Quanto mais baixo o nível de asbtração, menos detalhes são
eliminados
Abstração (software)
• Linguagens de alto nível abstração
– C, C++, C#, Python, Java…
– Conjunto de comandos (e.g. if/else, while, for, case, …)
– Portabilidade
• Um mesmo programa pode ser executado em qualquer processador
• Linguagem de baixo nível abstração
– Assembly (linguagem nativa do processador)
• Conjunto de instruções (e.g. soma, subtração, acesso à memória )
• Mnemônicos associados às instruções
– add: addition (adição)
– sub: subtraction (subtração)
– lb: load byte (leitura da memória)
– Tipicamente 3 letras no máximo
• Simploria, com poucos recursos (baseadas operações básicas)
• Programação demorada e de difícil depuração
• Portabilidade altamente limitada
– Cada processador tem seu próprio conjunto de instruções (ISA)
– Um mesmo programa NÃO pode ser executado em qualquer processador
• Tipicamente usada para criar código compacto e eficiente
Abstração (hardware)
• Detalhes de tecnologia de implementação abstraídos do
esquemático
Conforme o projeto avança em
direção à implementação, o nível
de abstração diminui e detalhes
abstraídos começam a ser
relevantes (e.g. CMOS ? TTL ?,
tensão de alimentação,
frequência de operação,...)

Write
decoder

Read
decoder
Programação

• Ferramentas básicas
– Compilador
• Traduz um programa escrito em uma linguagem de alto nível em
um programa equivalente utilizando o conjunto instruções
assembly (ISA) do processador alvo
• Alta complexidade
– Análise sintática de comandos (for, case,…) com várias partes
– Otmização de código (tamanho e velocidade)
– Montador (assembler)
• Gera código binário (linguagem de máquina) a partir de
instruções assembly
– Para cada instrução do programa assembly será gerado um código binário
• Baixa complexidade
– Ligador (linker)
• Cria um código executável ligando (“juntando”) o código binário do
programa do usuário com o código binário das funções chamadas no
programa (e.g. printf() e scanf())
Programação

• Compilação

Código C

Compilador

Código assembly
Programação

• Montagem

Código assembly

Montador

Código binário
(cada linha Conteúdo
corresponde a armazenado na
uma instrução do memória RAM
código assembly)
Programação

• Tipicamente as IDEs (e.g. Code Blocks) abstraem


chamadas ao montador (assembler) e ao ligador
(linker)
– Aparentemente o arquivo executável (e.g. .exe) é gerado
diretamente a partir do código fonte (menu Build nas IDEs)
• Exemplo com gcc
– Compilação: código assembly (-S)
– Complilação e montagem: código binário (-c)
– Compilação, montagem e ligação: programa executável
Programação

• Tipos comuns de instruções assembly


– Lógicas/aritméticas
• Soma (add), subtração (sub), and, or, not
– Acesso à memória
• Load (ld) e Store (st)
– Desvio
• Jump (jmp)
Programação

• Exemplo de programa assembly (Neander)


test:
lda i ;
not ;
add UM ; AC = -i
add m ; AC = m - i

body:
jn end ; Se m - i < 0 salta para end
sta m ; m = m - i
lda i ;
add DOIS ;
sta i ; i = i + 2
lda n ;
add UM ;
sta n ; n = n + 1
jmp test

end:
hlt
Codificação
Programação binária

• Tipicamente o tipo da instrução determina o formato


– Exemplo: processador hipotético com instruções de 16 bits
• Lógicas/Aritméticas
15-12 11-8 7-4 3-0

Formato: Operação R. destino R. fonte1 R. fonte2

– Exemplo: add r5, r2, r1 (r5 ← r2 + r1)


add r5 r2 r1

Codificação – Supondo que o código da instrução add seja 3 e que os


0011
registradores 0101codificados
sejam 0010
de acordo 0001
como o número.
binária

add r5, r2, r1 → 00110101001000012 = 3521h


Montagem (assembly)
Codificação
Programação binária

• Tipicamente o tipo da instrução determina o formato


– Exemplo: processador hipotético com instruções de 16 bits
• Acesso à memória
15-12 11-8 7-0

Formato: Operação Reg. Endereço

– load r8, 100 (r8 ← MEM[100])


load r8 100

Codificação – Supondo que a instrução load seja codificada como 4 e que os


0100
registradores 1000codificados de1100100
sejam acordo como o número.
binária

load r8, 100 → 0100100011001002 = 4864h


Montagem (assembly)
Montagem de código (assembler)
• Exercício: obter os códigos hexadecimais das instruções
– or r7, r6, r9 Códigos das operações
– and r9, r3, r12 and: 0
– sub r0, r15, r7 or: 1
– load r14, 212 sub: 2
– add r4, r5, r11 add: 3
– store r13, 128 load: 4
store: 5
Lógicas/aritméticas
15-12 11-8 7-4 3-0

Operação R. destino R. fonte1 R. fonte2

Acesso à memória
15-12 11-8 7-0

Operação Reg. Endereço


Montagem de código (assembler)
• Exercício: obter os códigos hexadecimais das instruções
– or r7, r6, r9 Códigos das operações
– and r9, r3, r12 and: 0
– sub r0, r15, r7 or: 1
– load r14, 212 sub: 2
– add r4, r5, r11 add: 3
– store r13, 128 load: 4
store: 5
Lógicas/aritméticas
15-12 11-8 7-4 3-0

0001 0111 0110 1001 = 1769h


Acesso à memória
15-12 11-8 7-0

Operação Reg. Endereço


Desmontagem de código
(disassembler)
• Exercício: obter as instruções a partir dos códigos binários
– 0101 1111 0011 01002 Códigos das operações
– 0000 0001 0010 00112 and: 0
– 0100 0101 0110 01112 or: 1
– 0010 1010 1011 11002 sub: 2
– 0001 0100 1111 11012 add: 3
– 0010 0101 1010 01002 load: 4
store: 5
Lógicas/aritméticas
15-12 11-8 7-4 3-0

Operação R. destino R. fonte1 R. fonte2

Acesso à memória
15-12 11-8 7-0

Operação Reg. Endereço


Desmontagem de código
(disassembler)
• Exercício: obter as instruções a partir dos códigos binários
– 0101 1111 0011 01002 Códigos das operações
– 0000 0001 0010 00112 and: 0
– 0100 0101 0110 01112 or: 1
– 0010 1010 1011 11002 sub: 2
– 0001 0100 1111 11012 add: 3
– 0010 0101 1010 01002 load: 4
store: 5
Lógicas/aritméticas
15-12 11-8 7-4 3-0

Operação R. destino R. fonte1 R. fonte2

Acesso à memória store r15, 52


15-12 11-8 7-0

0101 1111 00110100 = 5F34h

Você também pode gostar