Organização de Computadores Aula 27 Estrutura e Função da CPU Rodrigo Hausen 17 de novembro de 2011 http://cuco.pro.br/ach2034 1/33
Apresentação 1. Bases Teóricas 2. Organização de computadores... 2.5. Subsistema de Entrada/Saída (I/O) 2.6. Conjunto de Instruções 2.7. Estrutura e Função da CPU Aula de hoje: Stallings (5a. Edição), Capítulo 11 2/33
Estrutura da CPU CPU deve: Obter instruções Interpretar instruções Obter dados (da memória/dispositivos) Processar dados Escrever dados (para a memória/dispositivos) 3/33
CPU e o Barramento do Sistema ULA registradores Unid. de Controle Barramento de Controle Barramento de Dados Barramento de Endereço Barramento do Sistema 4/33
Estrutura Interna da CPU Unid. Lógico-Aritmética Reg. de Estado Deslocador Complementador Lógica Booleana e Aritmética Barramento Interno da CPU Registradores Unid. de Controle Sinais de Controle 5/33
Registradores CPU deve possuir um espaço de trabalho (armazenamento temporário) Denominado registradores Número e função variam entre projetos de processadores Uma das decisões de projeto mais importantes Nível superior da hierarquia de memória 6/33
Registradores Visíveis ao Usuário Aquele que pode ser acessado por meio da linguagem de máquina que a CPU executa (por usuário, entende-se programador) de Propósito Geral: usados pelo programador para uma variedade de funções de Dados: apenas para dados que não podem ser usados para cálculo de endereços de operandos de Endereço de segmento, de índices, apontador de topo de pilha, etc. de Códigos de Condição: bits atualizados pelo hardware que indicam o resultado de operações (flags) 7/33
Registradores Visíveis ao Usuário de Propósito Geral Podem ser verdadeiramente de propósito geral. Ou nem tanto: registradores usados apenas para operações de ponto flutuante ou operações envolvendo a pilha Podem ser usados para dados ou endereçamento Podem ser usados para dados ou cálculo de endereçamento Acumulador regs. de segmento: contém o end. base de um segmento regs. de índice: usados para endereçamento indexado apontador de topo de pilha 8/33
Registradores Visíveis ao Usuário de Propósito Geral - Decisões Torná-los de propósito verdadeiramente geral: Mais flexibilidade e opções para programador Aumenta tamanho e complexidade das instruções Torná-los especializados: Permite referências implícitas aos registradores Instruções menores e menos complexas (mais rápidas) Menor flexibilidade Tendência atual: mais registradores especializados 9/33
Registradores Visíveis ao Usuário de Propósito Geral - Decisões Quantos registradores? Número adequado: entre 8 e 32 (empírico) Poucos registradores mais referências à memória Muito mais não reduz significativamente referências à memória e complica o projeto da CPU Abordagem RISC: centenas de registradores 10/33
Registradores Visíveis ao Usuário de Propósito Geral - Decisões Qual o tamanho de cada registrador? Grande o suficiente para armazenar o maior endereço Grande o suficiente para conter uma palavra Geralmente é possível combinar dois registradores de dados para representar palavras de tamanho maior em linguagem C: float versus double int versus long int ou long long int 11/33
Registradores Visíveis ao Usuário de Códigos de Condição Conjuntos de bits individuais que indicam o resultado de operações (flags) resultado da última operação lógica/aritmética foi zero, divisão por zero, overflow, etc. Podem ser lidos (geralmente implicitamente) por programas p. ex. em desvios condicionais, como Jump if Zero (JZ) Geralmente, não podem ser escritos diretamente por programas 12/33
Regs. de Controle e Estado Utilizados pela Unid. de Controle para controlar a operação da CPU e pelo Sistema Operacional para controlar a execução de programas Maioria deles não é visível ao usuário PC (Program Counter) IR (Instruction Register) MAR (Memory Address Register) MBR (Memory Buffer Register) I/O AR, I/O BR 13/33
Program Status Word (PSW) PSW = Palavra de Estado de Programa: conjunto de bits que contém os códigos de condição (flags) e outras informações de estado: Signal: sinal do último resultado Zero: indica se último resultado foi zero Carry: último vai-um Equal: indica se os últimos operandos eram iguais Overflow Interrupções habilitadas ou desabilitadas Modo supervisor ou usuário: para uso do SO. Permite que instruções privilegiadas executem (modo supervisor, ring 0 ou kernel mode), limita instruções, acesso à memória e registradores (modo usuário, ring 3, user mode). 14/33
Outros Registradores Dependendo da CPU, pode haver uma variedade de outros registradores de uso específico: blocos de controle de processo (para uso do SO) vetores de interrupção (para uso do SO) topo de pilha, base da pilha controle de operações de entrada/saída Vários fatores influenciam decisões de projeto de registradores; principalmente, suporte a sistemas operacionais. 15/33
Exemplos: Organizações de Regs. Motorola 68000 (usado no Mega Drive) Registradores separados, mas de uso misto (mais flexibilidade) Regs. de endereçamento e dados separados. Regs. de dados também usados para índices Dados (e índices): acessíveis em 8, 16, 32 bits (depend. opcode) A7 usado para apontador de pilha (um para usuário, um para SO, dependendo do modo de execução corrente) 16/33
Exemplos: Organizações de Regs. Intel 8086 (usado no PC XT) Registradores de uso especial, alguns podem também ser de propósito geral (menos flexibilidade) Regs. de dados: acessíveis em 8, 16 bits (dependendo do prefixo da instrução) Regs. apontadores/índices: 16 bits Regs. de segmento: 16 bits 17/33
Exemplos: Organizações de Regs. Intel 80386 até Pentium II Modos de execução: modo real (8086), modo protegido do 80286, modo protegido do 80386 Regs. de dados: acessíveis em 8, 16 ou 32 bits (depende do modo de execução, do prefixo da instrução e/ou do opcode) Regs. apontadores/índices: acessíveis em 16 ou 32 bits (depende do do modo de execução, prefixo da instrução e/ou do opcode) Regs. de segmento (não mostrados): 16 ou 32 bits, dependendo do modo de execução 18/33
Ciclo de Instrução Fetch (busca) Decode Execute sem interrupções, sem endereçamento indireto 19/33
Ciclo de Instrução Verificação e Process. de Interrupção interrupções desabilitadas Fetch (busca) Decode interrupções habilitadas Execute com interrupções, sem endereçamento indireto 20/33
Ciclo de Instrução Fetch (busca) Verificação e Process. de Interrupção interrupções desabilitadas Decode Process. de end. indireto interrupções Execute habilitadas com interrupções, com endereçamento indireto 21/33
Diagrama de Estados indireção indireção Busca de Instrução Busca de Operando Armazenamento de resultado Cálculo de endereço de Instrução Decodificação de Instrução múltiplos operandos Cálculo de endereço de operando Execução da Operação múltiplos resultados Cálculo de endereço de Operando Verificação Interrupção Process. Interrupção busca da próxima instrução 22/33
Fluxo de Dados (1) Depende do projeto da CPU. Em geral: Busca de instrução: PC contém endereço da próxima instrução Endereço em PC movido para MAR, endereço no MAR colocado no barramento de endereço Unidade de controle requisita leitura à memória Memória coloca conteúdo no barramento de dados, que é copiado para o MBR Copia instrução lida no MBR para o IR PC é incrementado de 1 unidade (prepara para próxima) Decodificação: IR é examinado pela unidade de controle Busca de operando: se endereçamento indireto, ciclo de indireção é executado. N bits menos significativos do MBR transferidos ao MAR Unidade de controle requisita leitura à memória Resultado (endereço do operando) movido para MBR 23/33
Fluxo de Dados (2): Execução As instruções podem assumir várias formas Depende da instrução em execução Pode incluir: Operação de leitura/escrita na memória Operação de entrada/saída Transferências entre registradores Operações com a ULA 24/33
Fluxo de Dados(3): Interrupção PC atual é gravado para, após processamento da interrupção, permitir retorno ao ponto anterior Conteúdo do PC copiado para MBR Posição especial de memória (p. ex. stack pointer = SP) copiado para MAR MBR escrito na memória PC é carregado com endereço da rotina de tratamento de interrupção (handler) Próxima instrução (primeira do handler) pode ser obtida 25/33
Pré-Busca (Prefetch) Busca da próxima instrução acessa a memória principal Comumente, execução não acessa a memória principal Portanto, geralmente a CPU pode buscar a próxima instrução a ser executada ao mesmo tempo em que etá executando a instrução corrente Esta otimização chama-se instruction prefetch. Requer maior complexidade da CPU Fazem prefetch: Intel do 8086 até dias atuais; ARM; microcontroladores Atmel AVR e Microchip PIC Não faz: Z80 (versão atualizada ez80, lançada em 2001, faz) 26/33
Prefetch: Aumento de Desempenho O prefetch de instruções aumenta o desempenho, mas não o dobra Subciclo de busca, em geral, é mais curto que o de execução Em casos de desvios na execução do programa (jump/branch), a instrução pré-buscada não é a que será executada Pode-se adicionar mais estágios para aumentar o desempenho: pipelining 27/33
Linha de Montagem de Carros Ciclo de montagem de carro é composto por: 1) Fusão e moldagem dos componentes do carro 2) Montagem dos componentes mecânicos no chassis (direção, embreagem, motor, etc) 3) Montagem das laterais, portas, capô, teto 4) Montagem da parte elétrica: bateria, fios, ignição eletrônica 5) Montagem do painel 6) Montagem dos bancos 7) Montagem dos vidros 8) Pintura 9) Limpeza 10) Regulagem e controle de qualidade. 11) Montagem de acessórios: ar, vidros elétricos, alarme, etc. Em uma fábrica, etapas são feitas paralelamente em uma linha de montagem (refinada e popularizada por Henry Ford) 28/33
Pipeline: uma linha de montagem Se possível, faça as seguintes operações em paralelo: Busca de instrução Decodificação de instrução Cálculo de endereço(s) de operando(s) Busca de operando(s) Executa instrução Cálculo de endereço(s) de operando(s) destino Escrita do(s) resultado(s) Instruction prefetch é um tipo simples de pipeline com apenas 2 estágios: busca e execução em paralelo Aumenta mais o desempenho, mas complica ainda mais o projeto da CPU Implementado nos processadores da Intel desde o 80386 29/33
Pipeline: Diagrama de Tempo FI = Fetch Instruction, DI = Decode Instruction, CO = Cálculo de Operando, FO = Fetch Operand, EI = Execução Instrução, WO = Write Operand 30/33
Pipeline: Efeito de um Desvio FI = Fetch Instruction, DI = Decode Instruction, CO = Cálculo de Operando, FO = Fetch Operand, EI = Execução Instrução, WO = Write Operand 31/33
Para Casa Exercício 3.1 é sobre fluxo de dados dentro da CPU e para fora dela. Use Register Transfer Notation (modo preferido de mostrar fluxo de dados), de acordo com o que foi mostrado na lousa. Ler 11.1, 11.2, 11.3. Ler introdução do 11.4, incluindo estratégia de pipeline (não precisa ler de desempenho do pipeline até o final da seção). Ler 11.5 e 11.6 apenas como cultura geral. Fazer exercícios: 11.1 e 11.2 32/33
ATENÇÃO!!! Será permitida consulta na P2, de acordo com as seguintes regras: 1 folha (frente e verso) de papel formato A4 sem pauta (você pode fazer a pauta a lápis se achar necessário) texto escrito em caneta vermelha não pode colocar resolução de exercícios ou questões coloque o seu nome e número USP na folha Não vou aceitar: folha de caderno, folha rasgada ou recortada, texto a lápis ou escrito em outra cor, folhas com soluções de exercícios, folha sem nome. Prepare a sua folha de consulta com antecedência!!! Aproveite enquanto estuda e faça um resumo. Seja esperto: não é necessário colocar especificações técnicas de barramentos, processadores, etc. Estas serão fornecidas na prova, se necessário. 33/33