Técnico de Gestão e Programação de Sistemas Informáticos
2
Arquitetura de Microprocessadores
Conteúdos
Execução de um programa residente em memória; Arquitetura de um microprocessador: – Arquitetura Básica; – Acesso à memória; – Operações com a ALU; – Interrupções.
3
Na
Execução de um programa
arquitetura von Neumann, para minimizar os recursos envolvidos, as instruções e dados partilham a mesma memória e canais de comunicação (barramento); Para o CPU identificar as posições de memória que contêm as instruções ou dados é necessário que estejam distribuídas de forma consecutiva; Assim o CPU “sabe” que pela leitura da primeira posição de memória o que virá a seguir.
4
Execução de um programa
Se
por exemplo a primeira posição contiver o código da instrução: somar dois valores; A posição seguinte irá conter os operandos referidos na instrução anterior; Terminada a execução das instruções o CPU “sabe” automaticamente que na próxima posição de memória se encontra a próxima instrução a executar.
Instrução Operando Instrução
Operando Instrução
5
Execução de um programa
O facto de na
arquitetura von Neumann os dados e instruções serem encaminhados em série reduz a sua velocidade.
Uma outra arquitetura
chamada Harvard preconiza a utilização de barramentos de dados e endereços distintos; Bem como memória de programa e dados independentes.
6
Execução de um programa
Para se tornar a base dos atuais microprocessadores, a arquitetura von Neumann teve de sofrer alguns aperfeiçoamentos; Tendo aproveitado algumas características da arquitetura Harvard;
Por exemplo a divisão
de parte da memória para os programas e outra parte da memória para dados.
7
Execução de um programa
A
execução de um programa determinado conjunto de etapas:
segue
um
– Busca na unidade de memória pela próxima instrução a ser executada; – Descodificação da instrução a executar (Identificação dos operandos e qual o tipo de operação a realizar); – Obtenção dos operandos e carregamento destes nos registos internos do CPU; – Execução da tarefa; – Armazenamento do resultado em memória ou em registos internos do CPU. Repetir o processo
para a próxima instrução.
8
Execução de um programa
Nem
todos os programas necessitam de percorrer todas as etapas, assim sendo, a execução pode resumir-se nos passos do ciclo: fetch – decode – execute FETCH (procurar)
EXECUTE (executar)
DECODE (descodificar)
Arquitetura Básica
9
O
microprocessador assenta basicamente nos seguintes blocos: Barramentos de dados
Acumulador
IR
SP
PC
R0
…
Rn ALU
Unidade de descodificação -----------------------------
UC
Barramento de controlo
Barramento de endereços
Registo temporário
F L A G S
10
Arquitetura Básica
UC: Unidade de controlo
– Controlador de toda a máquina inclusivamente a própria ALU; – Trata do endereçamento da memória, envio dos dados para a ALU, coordenando todas as operações que esta deve realizar. ALU ou ULA: Unidade Lógica e Aritmética
– Unidade responsável pela realização de operações aritméticas como somas, subtrações, etc.; – É ainda responsável pela realização de operações lógicas com OR (ou) AND (e) XOR (ou exclusivo).
11
Arquitetura Básica
Unidade de descodificação
– Tem com função indicar qual o tipo de instrução (ler, adicionar, etc.) à Unidade de Controlo em linguagem que esta entenda (descodificada); PC: Program Counter (registo de programa)
– Guarda o endereço da próxima instrução a ser lida da memória (basicamente é um apontador de posições de memória); IR: Instruction Register (Registo de instrução)
– Contém uma cópia da instrução a ser executada no momento.
12
Arquitetura Básica
SP: Stack Pointer (Apontador de pilha)
– Tem como função guardar a informação de retorno à rotina a ser executada antes de uma interrupção ter lugar; R0…Rn: Register (Unidade de registos)
– Memórias internas onde são armazenados temporariamente dados e resultados com que o CPU trabalha; Acumulador
– Registo associado à ALU que serve de buffer enquanto a outra entrada da ALU ainda não tem o valor carregado, em alguns processadores guarda o resultado de cada operação.
13
Arquitetura Básica
Flags (Registos de estado)
– Responsáveis por guardar o estado resultante de cada operação realizada pela ALU (EX: se houver overflow); – Uma ALU que opere a 8 bit só lida com 0-255 se somar por exemplo 200+200 gera um overflow. Registo Temporário
– Necessário para armazenar o resultado de uma operação realizada pela ALU enquanto o barramento de dados se encontra ocupado; – Existem arquiteturas de microprocessadores que utilizam este registo na outra entrada da ALU prescindindo dele na saída.
Acesso à Memória
14
Barramento de dados
CPU ALU
descodificação
Bus interno PC
IR
Endereços
Conteúdo
K
Mover L para Ra
L
23
M
Outra instrução
…
Ra
…
K
Registos Barramento de controlo
RAM
Unidade de controlo e
Barramento de endereços
No exemplo a seguir apresentado iremos ler um conteúdo de memória (um operando) para um registo interno do CPU:
15
Acesso à Memória
O Program Counter contém o endereço K da memória onde se encontra a próxima instrução: “Mover o valor do endereço L da memória para o registo Ra”;
Considerando que a posição de memória com o endereço L tem como conteúdo o valor 23; Na imagem anterior podemos verificar que o único registo interno a verde é o PC, isso significa que se encontra preenchido com um endereço (endereço K); Podemos ainda verificar que no endereço seguinte (L) se encontra o valor 23, que se pretende que no final da execução seja copiado para o registo interno Ra.
16
Numa
Acesso à Memória
segunda fase a Unidade de Controlo (UC) executa duas operações: – Coloca no barramento de endereços o conteúdo do Program Counter (K); – E através do barramento de controlo envia um comando de leitura do conteúdo da posição (endereço) K da memória.
Acesso à Memória
17
Barramento de dados
Unidade de controlo e
ALU
descodificação
Bus interno PC
IR
Ra
K
Conteúdo
K
Mover L para Ra
L
23
M
Outra instrução
…
Ler memória
…
K
Registos Barramento de controlo
RAM
Barramento de endereços
CPU
Endereços
18
Acesso à Memória
Por
sua vez a memória responde com o conteúdo dessa posição (neste caso uma instrução): – Colocando-o no barramento de dados que o levará para o processador.
Esta instrução é copiada para o Instruction Register:
– Que passa a conter a instrução a ser executada no momento. O
Program Counter é também incrementada de um valor: – Que passa a apontar para o endereço L (próxima posição de memória) que contém o operando a retirar da memória.
Acesso à Memória
19
Barramento de dados
CPU ALU
descodificação
Bus interno PC
LK
IR
L
Endereços
Conteúdo
K
Mover L para Ra
L
23
M
Outra instrução
…
Ra
Mover L para Ra
…
Registos Barramento de controlo
RAM
Unidade de controlo e
Barramento de endereços
A fase identificada como Fetch (procura) fica concluída.
20
Acesso à Memória
Segue-se a fase Decode (descodificação); A
unidade de descodificação recebe a instrução presente no Instruction Register, descodifica-a e entrega-a à Unidade de Controlo numa linguagem que esta compreenda.
Acesso à Memória
21
Barramento de dados
CPU ALU
Bus interno PC
L
IR
Endereços
Conteúdo
K
Mover L para Ra
L
23
M
Outra instrução
…
Ra
…
Mover L para Ra
Registos Barramento de controlo
RAM
UC e descodificação
Barramento de endereços
Fase Decode (descodificação)
22
Acesso à Memória
Finalmente a Unidade de Controlo verifica qual a operação que é necessário realizar e passa à fase de execução (execute); Verifica que é necessário mover o conteúdo da posição L da memória para o registo Ra; Assim volta a usar o barramento de controlo para indicar que vai ler da memória; Esta responderá com o valor presente na posição da memória com o endereço L, colocando-o no barramento de dados que o levará até ao registo Ra; O Program Counter é novamente incrementado para apontar para a próxima instrução (M).
Acesso à Memória
23
Barramento de dados
Unidade de controlo e
ALU
descodificação
L
IR
Ra
Conteúdo
K
Mover L para Ra
L
23
M
Outra instrução
…
Bus interno PC
Endereços
Ler memória
Mover L para Ra
…
Registos Barramento de controlo
RAM
Barramento de endereços
CPU
23
24
Aproveitando
Operações com a ALU
o exercício anterior veremos as operações realizadas pela ALU; Aproveitando o valor do registo Ra (23) e iremos mover outro valor para o registo Rb (7); Suponhamos que a próxima instrução era uma soma: Ra=Ra+Rb; Assim no final Ra deverá conter o resultado da soma calculada pela ALU; Assumimos que o registo IR já contem a instrução a executar e os registos Ra e Rb já estão carregados com os valores 23 e 7.
Operações com a ALU
25
Barramentos de dados
IR Ra=Ra+Rb
Ra 23
Rb 7
Acumulador
…
Rn
ALU
Registo temporário
F L A G S
26
O
Operações com a ALU
primeiro passo será colocar o valor do registo Ra no acumulador à entrada da ALU; Este registo é necessário para realizar a função de buffer, isto é para aguentar o valor 23 até que o valor do registo Rb seja colocado na outra entrada da ALU.
Operações com a ALU
27
Barramentos de dados
23 IR Ra=Ra+Rb
Ra 23
Rb 7
…
Rn
Acumulador Acumulador 23
ALU
Registo temporário
F L A G S
28
Assim
Operações com a ALU
que as duas entradas da ALU tenham os operandos carregados, esta efetua a soma; De seguida coloca-os num registo temporário; O resultado desta operação origina um tipo de variável de estado (FLAGS) que será diferente consoante o tipo de valor que for devolvido pela ALU.
Operações com a ALU
29
Barramentos de dados 7 IR Ra=Ra+Rb
Ra 23
Rb 7
…
Rn
Acumulador 23
ALU
Registo temporário
F L A G S
Operações com a ALU
30
Barramentos de dados
IR Ra=Ra+Rb
Ra 23
Rb 7
…
Rn
Acumulador 23
7
23 ALU
23+7
Registo 30 temporário
F L A G S
31
O
Operações com a ALU
registo temporário é necessário para servir de buffer; Acontece que o barramento de dados ainda está ocupado com o valor de Rb e se não houvesse este buffer o resultado da operação seria novamente introduzido na ALU alterando o resultado final; Assim, quando o barramento ficar livre o resultado é finalmente escrito no registo Ra.
Operações com a ALU
32
Barramentos de dados
IR Ra=Ra+Rb
Ra 30 23
Rb 7
…
Rn
Acumulador 23
ALU
Registo 30 temporário
30
F L A G S
33
Por
Interrupções
vezes o CPU interrompe o seu trabalho para atender outros pedidos; Para esse efeito o CPU possui linhas de interrupção próprias que disponibiliza para atender interrupções provenientes de dispositivos exteriores (uma tecla do teclado); Para atender a interrupção, tem de saber onde interrompeu o trabalho anterior, para o poder retomar mais tarde; Isso só é possível se o CPU armazenar temporariamente a informação em memória.
34
Interrupções
É aqui que entra o registo Stack Pointer (SP);
Será
esse registo o responsável por guardar a informação relativa às interrupções numa zona especial da memória denominada por Stack – pilha; A sua função passa por guardar a informação de retorno à rotina que estava a ser executada antes da interrupção, ou seja o valor do Program Counter ou por vezes o valor dos registos internos; Desta forma o Program Counter fica livre para poder ser carregado com o endereço da rotina que gerou a interrupção.
Interrupções
35
Resumindo
os passos que ocorrem durante uma interrupção: a) O conteúdo do registo Program Counter (endereço de memória) é guardado na Stack; b) Guardam-se os valores dos registos internos a ser utilizado aquando da interrupção, igualmente na Stack. O apontador Stack Pointer é incrementado para a próxima posição da pilha, isto é, para a posição imediatamente acima.
Interrupções
36
Interrupção Interrupção
PC
A
10100110
D
11110110
C
10111110
D
10110100
E
10110000
…
Livre Livre Programa principal RAM
Conteúdo
01110110
N
10010110
O
11110110
SP
Livre
SP
PC+Registos Livre
…
.…
M
Livre
Outro principal
Stack
Endereços
37
Interrupções
c) Atender a interrupção passando o Program Counter a apontar para a zona da memória onde está o programa a executar durante a interrupção; d) Termina a execução da interrupção , são recuperados da Stack os valores que os registos internos tinham antes da interrupção, o valor do Program Counter e o apontador Stack Pointer é decrementado; e) Finalmente retoma a execução do programa interrompido.
Interrupções
38
PC
A
10100110
D
11110110
C
10111110
D
10110100
E
10110000
…
PC
Livre Livre Programa principal
Livre
01110110
N
10010110
O
11110110
SP
PC+Registos Livre
…
.…
M
Livre
RAM
Conteúdo
Outro principal
Stack
Endereços
39
No
Interrupções
entanto, pode ocorrer outra interrupção quando já está a ser atendida uma interrupção; Esta situação não tem limites e pode ocorrer tantas vezes quantas as necessárias; A ordem pela qual a informação das interrupções é armazenada na stack e posteriormente extraída segue normalmente uma lógica LIFO (Last In First Out) a última interrupção será a primeira a ser atendida.
40
Resumindo
Interrupções o CPU necessita de armazenar em
memória: – Instruções; – Dados; – Informação que permite retomar a execução de um programa previamente interrompido.
41
Bibliografia
SÉRGIO, Ricardo, Arquitetura de Computadores, 1ª Edição, Areal Editores, 2011.