Prévia do material em texto
Introdução aos Sistemas Computacionais Disciplina: 113468 Prof. Marcus Vinicius Lamar Arquitetura de Computadores UnB/CIC 113468– Introdução aos Sistemas Computacionais 3 Sistema Computacional FireFox Software Básico ou Software de Sistema É um conjunto de programas desenvolvido para gerenciar um computador Software de Aplicação e utilitários Arquitetura do Conjunto de Instruções UnB/CIC 113468– Introdução aos Sistemas Computacionais Sistema Computacional 4 Arquitetura do Conjunto de Instruções Memória Processador E/S Sistemas Digitais Portas Lógicas Transistores Física dos Semicondutores Software de Desenvolvimento Software de Aplicação Sistema Operacional Problema do Usuário Software Hardware UnB/CIC 113468– Introdução aos Sistemas Computacionais UnB/CIC 113468 – Introdução aos Sistemas Computacionais Sistemas Operacionais Fornecer Interface amigável do hardware com o usuário Hoje em dia qualquer pessoa consegue usar Gerenciar a execução de programas e uso da memória carregamento e execução de programas Gerenciar o armazenamento secundário controla o uso de discos (HD), CD, DVD, Pendrives, etc. Gerenciar atividades de E/S teclado, mouse, vídeo, etc. Tratamento de Erros Tela azul Exemplos: Unix, DOS, Windows, AIX, Solaris, Linux, Android, Mac OS X, FreeBSD, Symbian, ... 5 UnB/CIC 113468– Introdução aos Sistemas Computacionais 6 Software de Desenvolvimento Principais categorias: Compiladores: convertem previamente códigos em linguagens de alto nível para linguagem de máquina para posterior execução O programa executável é carregado pelo sistema operacional Ex.: C, C++, COBOL, Fortran, Pascal, BASIC,... Interpretadores: convertem códigos em linguagens de alto nível para linguagem de máquina em tempo de execução Necessita um ambiente de execução Ex.: Python, LISP, HTML, JavaScript, MatLab, BASIC, ... Híbridos: atuam com características de interpretadores e compiladores Ex.: Java, ... UnB/CIC 113468– Introdução aos Sistemas Computacionais Processo de Compilação (gcc) 7 hello.c hello.s hello.o libc.a lib.lib bib.dll lib.so hello.exe cpp.exe (pré-proc) + cc1.exe (comp) as.exe ld.exe exesv.exe UnB/CIC 113468– Introdução aos Sistemas Computacionais UnB/CIC 113468 – Introdução aos Sistemas Computacionais Compiladores x Interpretadores Compilação e Interpretação 8 UnB/CIC 113468– Introdução aos Sistemas Computacionais 9 Arquitetura do Conjunto de Instruções (ISA) - interface entre o hardware e o software de baixo nível - padroniza instruções, padrões de bits de linguagem de máquina, etc. Arquiteturas de conjunto de instruções modernas: EM64T, AMD64, x86-64 ou x64 IA-32 (x86), ARMv7 (32) e ARMv8 (64), PowerPC, MIPS32 e MIPS64, SUN SPARC, HP PA-RISC e outras UnB/CIC 113468– Introdução aos Sistemas Computacionais Principais arquiteturas hoje -ARMv7 (32 bits) e ARMv8 (64 bits) -x86 (32 bits) e x64 (64 bits) 10 Arquiteturas de Processadores MIPS=Microprocessor without Interlocked Pipeline Stages Arquitetura projetada na universidade de Stanford em 1981. Empresa fundada em 1984. A MIPS Inc. foi comprada pela Imagination Tech. em Fev de 2013. Vamos usar a arquitetura do processador MIPS32 como exemplo de aplicação dos conceitos básicos em um projeto completo. http://www.mips.com http://www.imgtec.com UnB/CIC 113468– Introdução aos Sistemas Computacionais 11 O Processador MIPS: Semelhante a outras arquiteturas RISC desenvolvidas desde a década de 1980 (ARM, SunSparc,...) Foi usada pela NEC, Nintendo, Cisco, Broadcom, Silicon Graphics, Sony... MIPS 32 e 64 bits, e coprocessadores (3D,DSP,...) Preparado para Android e Linux. UnB/CIC 113468– Introdução aos Sistemas Computacionais 12 Programação Programar em Linguagem de Alto nível: • Linguagem próxima à humana • Aumenta a produtividade • Independência da máquina • Hoje, compiladores muito eficientes Porém, processadores só “entendem” Linguagem de Máquina, logo necessita tradução A+B add A,B 1000110010100000 UnB/CIC 113468– Introdução aos Sistemas Computacionais 13 Linguagem Assembly MIPS Código de Alto-nível Pseudo Assembly a = b + c; add a, b, c a = b - c; sub a, b, c ‘add’ e ‘sub’ códigos mnemônicos das instruções a, b, c argumentos ou operandos das instruções Ex.: Código mais complexo a = b + c - d; add t, b, c sub a, t, d ou, ou, ou... sub t, c, d add a, b, t t: variável temporária UnB/CIC 113468– Introdução aos Sistemas Computacionais 14 Obs.: RISC versus CISC RISC : Reduced Instruction Set Computer - Processador com um conjunto reduzido de instruções - Apenas instruções simples - “Rápidas” e “Compactas” - Ex.: ARM, MIPS, SunSPARC CISC: Complex Instruction Set Computer - Processador com um grande número de instruções - Instruções simples e complexas - “Lentas” e “Grandes” - Ex.: x86, x64 Grande questão: RISC ou CISC qual a melhor estratégia ??? UnB/CIC 113468– Introdução aos Sistemas Computacionais 15 Localização dos Operandos Os operandos das instruções podem estar localizados: No Banco de Registradores: internos à CPU - Banco de Registradores (Register File ou Bank) - Pequena quantidade (8, 16, 32) - Acesso rápido Na Memória de Dados: geralmente externa à CPU - Memória RAM - Grande quantidade (4, 8, 16 GiB) - Acesso lento Na Própria Instrução: geralmente externa à CPU - Memória RAM - No próprio programa - Acesso muito rápido (na própria instrução) UnB/CIC 113468– Introdução aos Sistemas Computacionais Cada registrador 32 flip-flops Exceção registrador $0 “Processador de x bits”: x número de bits de um registrador No Banco de Registradores: 32 registradores de 32 bits cada Arquitetura MIPS32 - Operandos $0 Registrador Conteúdo 32 bits 32 bits 32 bits 32 bits 32 bits 32 bits 32 bits 32 bits $1 $2 $3 $4 $5 $6 $7 $30 $31 32 bits ... 32 bits 32 bits $8 16 UnB/CIC 113468– Introdução aos Sistemas Computacionais 17 Geralmente os registradores possuem nomes específicos segundo uma convenção de utilização. $0 ($zero) : contém sempre o valor 0 (hardwired). $1 ($at) : reservado para uso do montador (Assembly Temporary) $2 e $3 ($v0, $v1) : retorno de valores de funções (Return Values). $4 ... $7 ($a0,...,$a3) : passagem de argumentos de funções (Arguments) $8...$15, $24, $25 ($t0...$t9) : dados temporários (Temporary) $16...$23 ($s0...$s7) : dados salvos (Saved) $26 e $27 ($k0, $k1): reservados para uso do sistema operacional (Kernel) $28 ($gp): Ponteiro Global (Global Pointer) $29 ($sp): Ponteiro da Pilha (Stack Pointer) $30 ($fp): Ponteiro de Frame (Frame Pointer) $31 ($ra): Endereço de retorno de funções (Return Address) UnB/CIC 113468– Introdução aos Sistemas Computacionais 18 Linguagem Assembly MIPS Obs.: /* Comentário em C */ # comentário em Assembly MIPS Código de Alto-nível Assembly MIPS a = b + c; # $s0 = a, $s1 = b, $s2 = c add $s0, $s1, $s2 # a=b+c Ex.: // Programa em C # MIPS assembly code a = b - c; # $s0 = a, $s1= b, $s2 = c, $s3 = f, f = (g + h) - (i + j); # $s4 = g, $s5 = h, $s6 = i, $s7 = j sub $s0, $s1, $s2 # a = b - c add $t0, $s4, $s5 # $t0 = g + h add $t1, $s6, $s7 # $t1 = i + j sub $s3, $t0, $t1 # f = (g + h) - (i + j) UnB/CIC 113468– Introdução aos Sistemas Computacionais "Byte addressing" significa que um endereço aponta para um byte na memória Word: 32 bits -> 4 endereços Half-word: 16bits-> 2 endereços Byte: 8 bits -> 1 endereço. “Processador de x bits”: 32 bits: N=32 64 bits: N=36, 40, 48, ...,64 Na Memória de Dados: - Muito maior porém mais lenta Arquitetura MIPS32 - Operandos 0 Endereço Dado 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 8 bits 1 2 3 4 5 6 7 2N-2 2N-1 8 bits ... 8 bits 8 bits 8 19 UnB/CIC 113468– Introdução aos Sistemas Computacionais 20 • Arquitetura Load/Store: Apenas as instruções load e store têm acesso à memória. • As outras instruções operam apenas com registradores. • Formação de endereço básico do MIPS: Imm (registrador) endereço = registrador + imediato. $s0 = Memoria[$t1+10] Memoria[$t1+10] = $s0 • Instruções: LOAD STORE word (32 bits) : lw $s0,10($t1) sw $s0,10($t1) half-word (16 bits): lh $s0,10($t1) sh $s0,10($t1) byte (8 bits): lb $s0,10($t1) sb $s0,10($t1) Linguagem Assembly MIPS UnB/CIC 113468– Introdução aos Sistemas Computacionais 21 Arquitetura MIPS32 - operandos Na própria instrução: - Usado para fazer operações com constantes nos programas - Uso de números imediatos (Imm) na instrução Instruções addi $s1,$s0, 12 # $s1 = $s0 + 12 andi $s1,$s0,0x0001 # $s1 = $s0 & 0x0001 ori $s1,$s0,0xFFF0 # $s1 = $s0 | 0xFFF0 xori $s1,$s0,0xFF00 # $s1 = $s0 ^ 0xFF00 Ex.: Linguagem alto nível Assembly MIPS # $s0 = a, $s1 = b b++; addi $s1, $s1, 1 a = b - 37; addi $s0, $s1, -37