Prévia do material em texto
ARQUITETURA DE COMPUTADORES CONCEITOS GERAIS Prof. Geovani Rodrigo Scolaro Unoesc Microprocessadores x Microcontroladores Estrutura Física Microcontrolador Genérico Introdução Perspectiva histórica Visão Geral Arquitetura Big Endian vs. Little Endian Tópicos Microprocessadores x Microcontroladores (1) Microprocessador Microcontrolador Os microprocessadores possuem: Largura de barramento de endereços elevada Desde meados da década de 1980 a 1990 que essa largura de barramento de endereços se estabilizou em 32 bits, chegando à 64 bits hoje Unidade de gerenciamento de memória integrada ou on-chip Tratamento de dados com representação binária de 8, 16, 32, 64 e até mesmo de 80 bits Unidade de cálculo de matemática em ponto flutuante on-chip com suporte a operações numéricas bastante complexas com números reais Apresentam alto custo e alto consumo de energia Microprocessadores x Microcontroladores (2) Os microcontroladores apresentam: Memória e unidades periféricas on-chip Barramento de endereços com poucos bits, só permitindo o gerenciamento de pequena quantidade de memória; algumas larguras típicas variam de 10 a 14 bits e, nesses casos, limitando seu acesso à memória variando de 1 KB a 8 KB Tratamento de dados restrito aos inteiros com representação binária de 8 bit; atualmente, algumas famílias permitem o tratamento de inteiros de 8 e de 16 bits Ausência de unidades aritméticas de ponto flutuante Em contrapartida, são de baixo custo, apresentam baixo consumo Microprocessadores x Microcontroladores (3) Estrutura Física (1) Estrutura Física (2) A escolha de um microcontrolador depende das características econômicas e complexidade do projeto Existem desde microcontroladores de 4 bits com funções limitadas até modernos de 32 bits e clocks elevados Microcontrolador Genérico (1) CPU, Memórias e Dispositivos de I/O A CPU executa os programas controlando o sistema, sendo composta por três módulos ALU: Realiza operações aritméticas e lógicas Registradores: Armazenam dados temporários; nos microcontroladores esses são divididos em registradores de uso geral e específico Unidade de Controle: Decodifica a instrução e envia sinais de controle Microcontrolador Genérico (2) Barramentos de Dados, Endereço e Controle A CPU se comunica com os dispositivos de I/O ou as memórias via comunicação paralela A CPU só se comunica através de duas operações: Leitura e escrita Esse canal de comunicação é chamado barramento Microcontrolador Genérico (3) Barramentos de Dados, Endereço e Controle Existem três tipos de barramento: Endereço, controle e dados Barramento de Endereços: É uma via apenas de saída; é usado para endereçar o dispositivo (memórias, I/O) para realizar uma operação Barramento de Dados: É uma via bidirecional por onde trafegam os dados Barramento de Controle: Determina se a operação é leitura ou escrita Microcontrolador Genérico (4) Memória de Armazenamento Memória não-volátil presente no próprio microcontrolador ou pode ser acoplada externamente a ele, para o armazenamento de dados de forma segura Exemplo: Memórias EEPROM (Electrically Programmable Read Only Memory) Registradores São pequenas unidades de memória para alocação temporária de dados; trabalham diretamente com o processador, armazenando resultados de suas operações lógicas e aritméticas Microcontrolador Genérico (5) Clock Fornece a sensibilidade de tempo para o processador, ou seja, ele fornece um sinal em forma de onda quadrada, sendo chamado de oscilador A cada nível alto, no mínimo uma instrução é executada Um ciclo de clock consiste na diferença de tempo entre dois níveis altos dessa onda Microcontrolador Genérico (6) Todos os sistemas digitais representam tudo como 0s e 1s O 0 e 1 são, na verdade, duas diferentes faixas de tensão em eletrônica Tudo inclui: Números: inteiros e ponto-flutuante Caracteres: blocos de construção de strings Instruções: diretivas para a CPU construir um programa Ponteiros: endereços os objetos de dados armazenados na memória Estas codificações são armazenadas por todo o sistema computacional Em registradores, caches, memórias, discos, etc Todos eles precisam de endereços Uma forma de encontrá-los Encontrar um novo lugar para armazenar um novo item Recuperar o lugar na memória quando o dado não é mais necessário Introdução (1) Representação de números em base 2 Representar 35110 como 00000001010111112 ou 1010111112 Implementação eletrônica Fácil de armazenar com elementos biestáveis Transmissões confiáveis em fios sujeitos a ruídos Introdução (2) 0.0V 0.5V 2.8V 3.3V 0 1 0 Há uma grande distância entre como nós pensamos a respeito de programas e dados e os 0s e 1s dos computadores Necessitamos de linguagens para descrever o que queremos Linguagens precisam ser traduzidas uma passo de cada vez Palavra-por-palavra Estruturas de frases Gramática Java é uma linguagem de programação Temos que descer até o nível dos 0s e 1s dos computadores Tentar não perder nada nesta tradução Encontramos bytecodes Java, linguagem C, linguagem Assembly e código de máquina Introdução (3) C/Java, Assembly, e Código de Máquina Introdução (4) if (x != 0) y = (y+z)/x; cmpl $0, -4(%ebp) je .L2 movl -12(%ebp), %eax movl -8(%ebp), %edx leal (%edx, %eax), %eax movl %eax, %edx sarl $31, %edx idivl -4(%ebp) movl %eax, -8(%ebp) 1000001101111100001001000001110000000000 0111010000011000 10001011010001000010010000010100 10001011010001100010010100010100 100011010000010000000010 1000100111000010 110000011111101000011111 11110111011111000010010000011100 10001001010001000010010000011000 C/Java, Assembly, e Código de Máquina Os três programas são equivalentes Normalmente as pessoas preferem programar em C ou Java, pois são linguagens mais ‘amigáveis’ O hardware gosta de cadeias de bits! 0 e 1 como tensões altas e baixas Introdução (5) cmpl $0, -4(%ebp) je .L2 movl -12(%ebp), %eax movl -8(%ebp), %edx leal (%edx, %eax), %eax movl %eax, %edx sarl $31, %edx idivl -4(%ebp) movl %eax, -8(%ebp) 1000001101111100001001000001110000000000 0111010000011000 10001011010001000010010000010100 10001011010001100010010100010100 100011010000010000000010 1000100111000010 110000011111101000011111 11110111011111000010010000011100 10001001010001000010010000011000 if (x != 0) y = (y+z)/x; Introdução (6) car *c = malloc(sizeof(car)); c->miles = 100; c->gals = 17; float mpg = get_mpg(c); free(c); Car c = new Car(); c.setMiles(100); c.setGals(17); float mpg = c.getMPG(); get_mpg: pushq %rbp movq %rsp, %rbp ... popq %rbp ret JavaC Linguagem Assembly Código de máquina 0111010000011000 100011010000010000000010 1000100111000010 110000011111101000011111 Sistema computacional OSAssembler Compilador Hardware começou de forma muito primitiva Instruções simples para somar dois números inteiros, por exemplo Software também era muito primitivo Primitivas do software refletiam o hardware de forma muito próxima Perspectiva Histórica (1) Hardware Especificação da Arquitetura (Interface) Assemblers (montadores) Tornaram a vida mais fácil 1 instrução Assembly = 1 instrução em código de máquina Instruções Assembly são cadeias de caracteres, e não cadeias de bits, muito mais fácil de ler e escrever para pessoas Pode usar nomes simbólicos Perspectiva Histórica (2) Hardware Programa do usuário em asm Especificação Assembler Assembler Nível mais alto de abstração 1 linha em uma linguagem de alto nível é compilada em muitas (às vezes muitas e muitas) linhas em linguagem Assembly Perspectiva Histórica (3) Hardware Programa do usuário em C Especificaçãoda linguagem C Assembler Compilador C Codificação → Compilação → (Tempo de) Execução Nota: O compilador e o montador são apenas programas, desenvolvidos usando este mesmo processo Perspectiva Histórica (4) Hardware Programa do usuário em C Assembler Compilador C Etapa de Codificação Etapa de Compilação Etapa de Execução Run Time arquivo .exearquivo .c O que é um Computador? Três componentes principais Computação Comunicação Armazenamento (memória) Visão Geral (1) Sistema Computacional Unidade de Computação Unidade de Comunicação Unidade de Memória/ Armazenamento Sistema de Memória Sistema de Armazenamento Hardware – Visão Lógica Visão Geral (2) CPU Memória Barramento (Bus) Discos Rede USB Etc. Hardware – Visão Semi-Lógica Visão Geral (3) Hardware – Visão Física Visão Geral (4) Memória da CPU: Registradores e Cache de Instruções Há um número fixo de registradores na CPU Registradores armazenam dados Há um I-cache na CPU que armazena as instruções acessadas mais recentemente Se um programa executar um laço que caiba no cache, a CPU irá à memória procurar as instruções somente uma vez, e então as executará de dentro do cache Visão Geral (5) Cache de Instruções Registradores Memória Movimentação de dados controlada pelo programa Cache de instruções transparente (controlado pelo hardware) CPU Performance: Não é somente velocidade da CPU Dados e instruções residem na memória Para executar uma instrução, ela precisa ser levada até a CPU A seguir, os dados aos quais a instrução opera precisam também ser buscados na memória e levados até a CPU Largura de barramento entre CPU Memória pode limitar a performance Melhorando a performance 1: melhorar o hardware a fim de incrementar a largura do barramento de memória (Ex: DDR → DDR2 → DDR3) Melhorando a performance 2: mover menos dados para/da CPU Colocar alguma memória no chip da CPU (memória cache) Visão Geral (6) Endianess (extremidade) Big endian vs. Little endian (MSB no byte mais alto ou mais baixo) Arquitetura Big Endian vs. Little Endian (1) Vantagens Big endian Inteiros armazenados na mesma ordem das cadeias de caracteres (da esquerda para a direita) Sinal do número determinado olhando para o byte de endereço base Vantagens Little endian Facilita conversão de representações com diferentes tamanhos (exemplo: Inteiro 12 é representado pelo byte 0x0C e pela palavra 0x000C: a localização de deslocamento mantém o mesmo valor, o que não acontecia na representação big endian) Arquitetura Big Endian vs. Little Endian (2) PIC: Little endian 8051: Big endian ATmega: Little endian Intel x86 e x86-64: Little endian Motorola 68000: Big Endian PowerPC: Big Endian JVM: Big Endian Arquitetura Big Endian vs. Little Endian (3) O TIFF (acrónimo para Tagged Image File Format) é um formato de arquivo para imagens digitais de alta resolução Programação em redes (sockets): Padronização para utilização do big-endian Por esse motivo, esse formato é também chamado de network order O formato utilizado nativamente pelo host é chamado de host order Inclusive os endereços são representados em big-endian A API de sockets possui várias funções para a conversão da representação de inteiros #include uint16_t htons(uint16 data_in_host_order); uint16_t ntohs(uint16 data_in_net_order); uint32_t htonl(uint32 data_in_host_order); uint32_t ntohl(uint32 data_in_net_order); Arquitetura Big Endian vs. Little Endian (4)