Você está na página 1de 206

Introduo aos Sistemas Digitais e Microprocessadores

Guilherme Arroz Jos Monteiro 23 de Maio de 2003 Arlindo Oliveira

Contedo
Prefcio 1 2 Introduo Bases de Numerao e Cdigos 2.1 Bases de Numerao . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Representao de nmeros em base . . . . . . . . 2.1.2 Representao de nmeros em base . . . . . . . . 2.1.3 Representao de nmeros em bases potncia de 2 . 2.2 Operaes aritmticas . . . . . . . . . . . . . . . . . . . . . 2.2.1 Somas em base . . . . . . . . . . . . . . . . . . . . 2.2.2 Multiplicaes em Base . . . . . . . . . . . . . . . 2.2.3 Operaes aritmticas em outras bases . . . . . . . 2.3 Cdigos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 Codicao . . . . . . . . . . . . . . . . . . . . . . . 2.3.2 Cdigos numricos . . . . . . . . . . . . . . . . . . . 2.3.3 Cdigos alfanumricos . . . . . . . . . . . . . . . . . 2.4 Representao digital da informao . . . . . . . . . . . . .

2 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 6 7 11 14 14 16 16 18 18 19 21 25 27 27 28 29 30 30 31 33 33 34 36 37 38 39 40 43 45 47 49

Funes Lgicas 3.1 lgebra de Boole Binria . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Funes Lgicas de Uma Varivel . . . . . . . . . . . . . 3.1.2 Funes de Duas Variveis . . . . . . . . . . . . . . . . . 3.1.3 As Funes AND e OR . . . . . . . . . . . . . . . . . . . . 3.1.4 Funo Conjuno . . . . . . . . . . . . . . . . . . . . . . 3.1.5 Funo Disjuno . . . . . . . . . . . . . . . . . . . . . . . 3.1.6 Princpio da Dualidade . . . . . . . . . . . . . . . . . . . 3.1.7 Prioridade na Execuo de Operaes . . . . . . . . . . . 3.1.8 Teoremas Envolvendo Conjuno e Disjuno . . . . . . 3.1.9 Denio Formal de lgebra de Boole . . . . . . . . . . . 3.1.10 Funes NAND e NOR . . . . . . . . . . . . . . . . . . . . 3.1.11 Funo XOR . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.12 Funes de Variveis . . . . . . . . . . . . . . . . . . . . 3.1.13 Manipulao de Expresses Lgicas . . . . . . . . . . . . 3.2 Representao de Funes Lgicas . . . . . . . . . . . . . . . . . 3.2.1 Forma Cannica Normal Disjuntiva . . . . . . . . . . . . 3.2.2 Forma Cannica Normal Conjuntiva . . . . . . . . . . . . 3.2.3 Representao de Funes Usando um s Tipo de Funo

ii 3.3

CONTEDO
Minimizao de Expresses Lgicas . . . . . . . . . . . . . . . . 3.3.1 Mtodo de Karnaugh . . . . . . . . . . . . . . . . . . . . . 3.3.2 Mtodo de Quine-McCluskey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 53 71 83 83 83 83 83 83 83 83 83 83 83 83 85 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 86 87 88 88 88 88 88 88 88 88 88 88 88 88

4 Realizao Fsica de Circuitos Lgicos 4.1 Famlias lgicas . . . . . . . . . . . . . 4.1.1 Portas bsicas . . . . . . . . . . 4.1.2 Elementos de alta impedncia 4.1.3 Interligaes e barramentos . . 4.2 Realizao directa . . . . . . . . . . . . 4.2.1 ROM . . . . . . . . . . . . . . . 4.2.2 PLA . . . . . . . . . . . . . . . . 4.3 Dispositivos programveis . . . . . . . 4.4 Projecto assistido de circuitos lgicos . 4.4.1 Editor de esquemticos . . . . 4.4.2 Simulao . . . . . . . . . . . .

5 Mdulos Combinatrios de Mdia Complexidade 5.1 Descodicadores . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 Descodicadores binrios . . . . . . . . . . . . . . . . . . 5.1.2 Interligao de descodicadores . . . . . . . . . . . . . . 5.1.3 Realizao de descodicadores . . . . . . . . . . . . . . . 5.2 Codicadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2.1 Codicadores binrios . . . . . . . . . . . . . . . . . . . . 5.2.2 Codicadores com prioridade . . . . . . . . . . . . . . . . 5.2.3 Realizao de codicadores . . . . . . . . . . . . . . . . . 5.3 Multiplexadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.1 Tipos de multiplexadores . . . . . . . . . . . . . . . . . . 5.3.2 Interligao de multiplexadores . . . . . . . . . . . . . . 5.3.3 Aplicaes de multiplexadores . . . . . . . . . . . . . . . 5.3.4 Realizao de multiplexadores . . . . . . . . . . . . . . . 5.4 Realizao de funes lgicas com mdulos de mdia complexidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1 Realizaes com descodicadores . . . . . . . . . . . . . 5.4.2 Realizaes com multiplexadores . . . . . . . . . . . . . . 5.4.3 Outras realizaes . . . . . . . . . . . . . . . . . . . . . . 6 Circuitos aritmticos 6.1 Somadores . . . . . . . . . . . . . . . . . . . . . . . . . . 6.1.1 Semi-somador de um bit . . . . . . . . . . . . . . 6.1.2 Somador de um bit . . . . . . . . . . . . . . . . . 6.1.3 Interligao em cadeia de somadores de um bit 6.1.4 Subtraco usando somadores . . . . . . . . . . 6.1.5 Somadores rpidos . . . . . . . . . . . . . . . . . 6.2 Nmeros com sinal . . . . . . . . . . . . . . . . . . . . . 6.2.1 Codicao . . . . . . . . . . . . . . . . . . . . . 6.2.2 Operaes com nmeros com sinal . . . . . . . . 6.3 Multiplicadores e Divisores . . . . . . . . . . . . . . . . 6.4 Representaes em vrgula xa . . . . . . . . . . . . . . 6.4.1 Operaes em vrgula xa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

CONTEDO
6.4.2 Operaes em vrgula xa usando unidades inteiras . 6.4.3 Limitaes da representao em vrgula xa . . . . . Representaes em vrgula utuante . . . . . . . . . . . . . . 6.5.1 Mantissa e expoente . . . . . . . . . . . . . . . . . . . 6.5.2 Mtodos de representao . . . . . . . . . . . . . . . . 6.5.3 O standard IEEE-754 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

iii 88 88 88 88 88 88 89 90 91 91 93 95 96 97 97 98 98 101 104 105 106 106 106 106 110 111 111 111 111 111 111 111 111 111 111 111 111 111 111 113 114 116 116 119 121 121 122

6.5

Projecto de Circuitos Sequenciais 8.1 Descrio de circuitos sequenciais . . . . . . . . . . 8.1.1 Mquinas de Mealy e de Moore . . . . . . . . 8.1.2 Diagrama de estados . . . . . . . . . . . . . . 8.1.3 Fluxograma . . . . . . . . . . . . . . . . . . . 8.1.4 Tabelas de transio de estados . . . . . . . . 8.1.5 Reduo do nmero de estados . . . . . . . . 8.2 Sntese de circuitos sequenciais . . . . . . . . . . . . 8.2.1 1-bscula por estado . . . . . . . . . . . . . . 8.2.2 Codicao dos estados . . . . . . . . . . . . 8.3 Tcnicas de realizao de controladores . . . . . . . 8.3.1 Controladores realizados com lgica discreta 8.3.2 Controladores baseados em contadores . . . 8.3.3 Controladores micro-programados . . . . . .

Circuitos para Transferncia de Dados 9.1 Nveis de Abstraco . . . . . . . . . . . . . . . . . . . . . 9.2 Separao entre Circuito de Dados e Circuito de Controlo 9.2.1 Exemplo de Motivao . . . . . . . . . . . . . . . . 9.2.2 Unidade de Processamento . . . . . . . . . . . . . 9.2.3 Unidade de Controlo . . . . . . . . . . . . . . . . . 9.3 Linguagem de Descrio de Hardware . . . . . . . . . . . 9.3.1 Linguagem de Transferncia entre Registos . . . .

. . . . . . . . . . . . .

Circuitos Sequenciais 7.1 Comportamento Sequencial de Circuitos . . . . . . . . 7.2 Bsculas Sensveis ao Nvel . . . . . . . . . . . . . . . 7.2.1 Bscula SR . . . . . . . . . . . . . . . . . . . . . 7.2.2 Realizao de Bsculas SR com Sinal de 7.2.3 Bscula Tipo D . . . . . . . . . . . . . . . . . . 7.3 Sinal de Relgio . . . . . . . . . . . . . . . . . . . . . . 7.3.1 Circuitos Sequenciais Sncronos e Assncronos 7.3.2 Caractersticas do Sinal de Relgio . . . . . . . 7.4 Bsculas Actualizadas no Flanco do Relgio . . . . . . 7.4.1 Tipos de Amostragem . . . . . . . . . . . . . . 7.4.2 Tipos de Bsculas . . . . . . . . . . . . . . . . . 7.4.3 Sinais de Controlo Imediato . . . . . . . . . . . 7.5 Registos . . . . . . . . . . . . . . . . . . . . . . . . . . 7.5.1 Registos Bsicos . . . . . . . . . . . . . . . . . . 7.5.2 Registos de Deslocamento . . . . . . . . . . . . 7.5.3 Contadores . . . . . . . . . . . . . . . . . . . . 7.5.4 Mtodos de Interligao de Registos . . . . . . 7.6 Memrias . . . . . . . . . . . . . . . . . . . . . . . . .

iv 9.3.2 Exemplo: Mximo Divisor Comum . . . . . . Unidades Lgicas e Aritmticas . . . . . . . . . . . . . 9.4.1 Estrutura de uma ULA . . . . . . . . . . . . . . 9.4.2 Bits de Estado . . . . . . . . . . . . . . . . . . . 9.4.3 Unidade Aritmtica . . . . . . . . . . . . . . . 9.4.4 Unidade Lgica . . . . . . . . . . . . . . . . . . 9.4.5 Unidade de Deslocamento . . . . . . . . . . . . 9.4.6 Tabela de Controlo da ULA . . . . . . . . . . . 9.4.7 Exemplo Revisitado: Mximo Divisor Comum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

CONTEDO
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 129 131 132 133 135 137 139 140 145 145 147 147 149 151 153 154 155 155 158 160 160 161 161 162 164 166 169 169 172 173 175 176 178 179 180 182 182 183 184 185 186 187 187 188 189 192 193

9.4

10 Arquitectura de um Computador 10.1 Perspectiva Histrica . . . . . . . . . . . . 10.2 Tipos de Computadores . . . . . . . . . . 10.3 Organizao Interna de um Computador 10.4 Interaco com o Exterior . . . . . . . . . 10.5 Nveis de Abstraco de um Computador 10.6 Componentes de um Computador . . . . 10.7 Sumrio . . . . . . . . . . . . . . . . . . .

11 Conjuntos de Instrues 11.1 Linguagens de Programao . . . . . . . . . . . . . . 11.2 Instrues Assembly . . . . . . . . . . . . . . . . . . . 11.3 Especicao dos Operandos . . . . . . . . . . . . . . 11.3.1 Registos Internos . . . . . . . . . . . . . . . . . 11.3.2 Constantes Especicadas na Prpria Instruo 11.3.3 Memria e Portos de Entrada/Sada . . . . . . 11.3.4 Modos de Endereamento . . . . . . . . . . . 11.3.5 Utilizao de Pilhas . . . . . . . . . . . . . . . 11.4 Codicao das Instrues . . . . . . . . . . . . . . . 11.5 Controlo da Sequncia de Execuo . . . . . . . . . . 11.5.1 Instrues de Salto . . . . . . . . . . . . . . . . 11.5.2 Chamadas a Subrotinas . . . . . . . . . . . . . 11.5.3 Interrupes . . . . . . . . . . . . . . . . . . . 11.6 Conjunto de Instrues do Processador P3 . . . . . . 11.6.1 Instrues Aritmticas . . . . . . . . . . . . . . 11.6.2 Instrues Lgicas . . . . . . . . . . . . . . . . 11.6.3 Instrues de Deslocamento . . . . . . . . . . . 11.6.4 Instrues de Controlo . . . . . . . . . . . . . 11.6.5 Instrues de Transferncia de Dados . . . . . 11.6.6 Outras Instrues . . . . . . . . . . . . . . . . . 11.6.7 Exemplos de Utilizao . . . . . . . . . . . . . 11.7 Formato das Instrues do Processador P3 . . . . . . 11.7.1 Instrues sem Operandos . . . . . . . . . . . 11.7.2 Instrues com Um Operando . . . . . . . . . 11.7.3 Instrues com Dois Operandos . . . . . . . . 11.7.4 Instrues de Controlo . . . . . . . . . . . . . . 11.7.5 Exemplos de Codicao . . . . . . . . . . . . 11.8 Um Assembler para o Processador P3 . . . . . . . . . . 11.9 Programao em Linguagem Assembly . . . . . . . . . 11.9.1 Programao Estruturada em Assembly . . . .

CONTEDO
11.9.2 Exemplo de Programao em Assembly . . . . . . . . . . 12 Estrutura Interna de um Processador 12.1 Circuito de Dados . . . . . . . . . . . . . . . . . 12.1.1 Banco de Registos . . . . . . . . . . . . . 12.1.2 Unidade Lgica e Aritmtica . . . . . . 12.1.3 Registo de Instruo . . . . . . . . . . . 12.1.4 Registo de Estado . . . . . . . . . . . . 12.1.5 Barramentos de Interligao . . . . . . . 12.1.6 Controlo do Circuito de Dados . . . . . 12.2 Unidade de Controlo . . . . . . . . . . . . . . . 12.2.1 Formato das Micro-instrues . . . . . . 12.2.2 Micro-Sequenciador . . . . . . . . . . . 12.2.3 Teste de Condies . . . . . . . . . . . . 12.2.4 Unidade de Mapeamento . . . . . . . . 12.2.5 Controlo do Banco de Registos . . . . . 12.2.6 Circuito de Controlo . . . . . . . . . . . 12.3 Micro-Programao . . . . . . . . . . . . . . . 12.3.1 Carregamento do Registo de Instruo 12.3.2 Carregamento dos Operandos . . . . . 12.3.3 Execuo das Instrues . . . . . . . . . 12.3.4 Escrita do Resultado . . . . . . . . . . . 12.3.5 Teste de Interrupes . . . . . . . . . . . 12.3.6 Gerao do Micro-cdigo . . . . . . . .

v 193 201 202 203 204 205 205 206 206 208 209 211 213 215 218 220 221 222 223 226 227 228 229 233 234 234 236 239 242 244 246 248 248 251 254 255 255 256 257 260 260 261 261 262

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . .

13 Sistemas de Memria 13.1 Organizao de Sistemas de Memria . . . . . . . . . . 13.1.1 Planos de Memria . . . . . . . . . . . . . . . . . 13.1.2 Mapas de Memria . . . . . . . . . . . . . . . . . 13.1.3 Gerao dos Sinais de Controlo . . . . . . . . . . 13.2 Hierarquia de Memria . . . . . . . . . . . . . . . . . . 13.2.1 Caches . . . . . . . . . . . . . . . . . . . . . . . . 13.2.2 Memria Virtual . . . . . . . . . . . . . . . . . . 13.3 Organizao de Sistemas de Cache . . . . . . . . . . . . 13.3.1 Mapeamento de Dados em Caches . . . . . . . . 13.3.2 Blocos de Cache . . . . . . . . . . . . . . . . . . . 13.3.3 Polticas de Substituio . . . . . . . . . . . . . . 13.3.4 Polticas de Escrita . . . . . . . . . . . . . . . . . 13.3.5 Bits de Controlo . . . . . . . . . . . . . . . . . . . 13.4 Memria Virtual . . . . . . . . . . . . . . . . . . . . . . 13.4.1 Tabelas de Pginas . . . . . . . . . . . . . . . . . 13.4.2 Poltica de Substituio . . . . . . . . . . . . . . 13.4.3 Poltica de Escrita . . . . . . . . . . . . . . . . . . 13.4.4 Bits de Controlo . . . . . . . . . . . . . . . . . . . 13.4.5 Translation Lookaside Buffers . . . . . . . . . . . . 13.4.6 Interligao da Memria Virtual com as Caches

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

CONTEDO
14 Entradas, Sadas e Comunicaes 14.1 Arquitectura de Entradas/Sadas . . . . . . . . . . . . . . . . . . 14.1.1 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.1.2 Tipos de Endereamento dos Portos . . . . . . . . . . . . 14.2 Perifricos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2.1 Teclados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2.2 Monitores . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2.3 Discos Magnticos . . . . . . . . . . . . . . . . . . . . . . 14.3 Comunicao Paralela . . . . . . . . . . . . . . . . . . . . . . . . 14.3.1 Interfaces sem Sincronizao . . . . . . . . . . . . . . . . 14.3.2 Protocolos de Sincronizao . . . . . . . . . . . . . . . . . 14.3.3 Interfaces Sncronas . . . . . . . . . . . . . . . . . . . . . 14.4 Comunicao Srie . . . . . . . . . . . . . . . . . . . . . . . . . . 14.4.1 Comunicao Assncrona . . . . . . . . . . . . . . . . . . 14.4.2 Comunicao Sncrona . . . . . . . . . . . . . . . . . . . . 14.5 Modos de Transferncia de Dados . . . . . . . . . . . . . . . . . 14.5.1 Transferncia Controlada por Programa . . . . . . . . . . 14.5.2 Transferncia Controlada por Interrupes . . . . . . . . 14.5.3 Acesso Directo Memria . . . . . . . . . . . . . . . . . . 14.5.4 Transferncia usando um Processador de Entrada/Sada 15 Tpicos Avanados de Arquitectura 15.1 Desempenho de micro-processadores . . . . . . . . . . . . 15.1.1 Factores limitativos do desempenho . . . . . . . . . 15.1.2 Explorao do paralelismo ao nvel de instruo . . 15.2 Computadores CISC e RISC . . . . . . . . . . . . . . . . . . 15.2.1 Simples e rpido vs. complexo e lento . . . . . . . . 15.2.2 Modos de endereamento . . . . . . . . . . . . . . . 15.2.3 Instrues . . . . . . . . . . . . . . . . . . . . . . . . 15.2.4 Conjunto de instrues para um processador RISC 15.3 Pipelines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3.1 Processador RISC com pipeline . . . . . . . . . . . . 15.3.2 Conitos de dados . . . . . . . . . . . . . . . . . . . 15.3.3 Conitos de controlo . . . . . . . . . . . . . . . . . . 15.3.4 Resoluo de conitos . . . . . . . . . . . . . . . . . 15.4 Tcnicas avanadas de explorao de paralelismo . . . . . 15.4.1 Processadores super-escalares . . . . . . . . . . . . . 15.4.2 Execuo especulativa . . . . . . . . . . . . . . . . . 15.4.3 Previso de saltos . . . . . . . . . . . . . . . . . . . . 15.4.4 Agendamento dinmico de instrues . . . . . . . . Glossrio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1 267 268 268 270 272 272 274 277 279 280 280 286 287 288 291 293 294 294 303 309 311 312 312 312 312 312 312 312 312 312 312 312 312 312 312 312 312 312 312 313

112

CONTEDO

Captulo 9

Circuitos para Transferncia de Dados


As tcnicas de projecto de circuitos digitais, combinatrios e sequenciais, apresentadas nos captulos anteriores permitem a realizao de sistemas de baixa e mdia complexidade. O nvel de detalhe a que estas tcnicas so aplicadas demasiado elevado para que possam ser usadas na concepo de circuitos de grande dimenso. Assim, no projecto de sistemas com uma funcionalidade mais complexa necessrio um nvel de abstraco mais elevado de forma a esconder muitos detalhes e a tornar o problema manejvel. Neste captulo descreve-se o projecto de sistemas digitais em termos de duas componentes. Uma a Unidade de Processamento, tambm chamada de circuito de dados (ou datapath, em ingls), que contm toda a lgica que faz os clculos propriamente ditos bem como os registos onde os dados so guardados. A segunda a Unidade de Controlo que gere quais as operaes que a unidade de processamento deve efectuar em cada ciclo de relgio. Esta abordagem pressupe que uma complexidade de processamento mais elevada requer em geral vrios ciclos de relgio para se completar. De facto, operaes acima de um certo nvel de complexidade podem implicar um circuito lgico especco com uma dimenso tal que tornaria incomportvel a sua realizao na prtica. Estas operaes so assim divididas numa sequncia de operaes mais simples, estas sim facilmente realizveis em hardware. A unidade de processamento o circuito que disponibiliza estas operaes mais simples e a unidade de controlo o circuito que as sequencia de forma a realizar a operao complexa. Para permitir descrever de maneira clara o algoritmo de realizao de operaes complexas em termos das operaes bsicas da unidade de processamento, foram desenvolvidas linguagens de descrio de hardware. Um exemplo simples deste tipo de linguagens apresentado na Seco 9.3, a ser usada no resto deste livro. Embora as unidades de processamento possam ser projectadas para um m especco, em muitos casos opta-se por usar unidades que disponibilizam um conjunto de operaes aritmticas e lgicas tpicas, chamadas Unidades Aritmticas e Lgicas ou ULA (em ingls, Arithmetic and Logic Unit ou ALU). Na Seco 9.4 descreve-se o exemplo de uma ULA, que ser usada no processador P3, estudado no Captulo 12. 113

114

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

Mais Abstracto

Sistema

Menos Detalhe

Transferncia entre Registos

Porta Lgica

Transistor

Mais Concreto

Layout

Mais Detalhe

Figura 9.1: Diferentes nveis de abstraco no projecto de sistemas lgicos complexos.

9.1 Nveis de Abstraco


A abordagem usada neste captulo para o projecto de circuitos corresponde a subir o nvel de abstraco na descrio de circuitos lgicos. O projecto de sistemas complexos envolve diferentes nveis de abstraco, tendo o projecto incio no mais abstracto, descendo-se sucessivamente para nveis mais concretos. A abordagem por nveis de abstraco torna possvel o projecto de sistemas para os quais uma abordagem directa seria demasiado complexa. De forma a dar uma ideia geral deste processo e um melhor contexto para os mtodos de projecto apresentados neste livro, descrevem-se em seguida os diferentes nveis de abstraco tipicamente considerados no projecto de circuitos lgicos complexos. A Figura 9.1 representa estes nveis de abstraco ordenados de cima para baixo dos nveis mais abstractos para os nveis mais concretos. Dito de outra forma, nesta ordenao o grau de detalhe na descrio do sistema aumenta de cima para baixo. O projecto tem incio ao nvel de sistema onde so feitas anlises globais, mas muito gerais, sobre o projecto, nomeadamente sobre o nmero de subsistemas em que o sistema se deve dividir, qual o tipo de sub-sistemas e a sua forma de interligao. Termina ao nvel de layout onde se vai a um grau de detalhe em que ca denido o caminho de cada interligao do circuito elctrico, permitindo portanto a sua fabricao. Em cada nvel de abstraco, a anlise feita individualmente sobre mdulos criados no nvel imediatamente acima. Assim, o projecto sucessivamente dividido em mdulos mais pequenos, o que permite ir aumentando o nvel de detalhe, mantendo-o sempre como um problema gervel em cada nvel. este processo de dividir para conquistar que faz o sucesso deste conceito de nveis de abstraco. Por outro lado, num dado nvel de abstraco possvel desenvolver o projecto sem necessitar de informao sobre nveis inferiores. Esta caracterstica

9.1. NVEIS DE ABSTRACO

115

esconde os detalhes de implementao, permitindo que o projectista se concentre em conseguir a melhor soluo possvel a esse nvel. At ao captulo anterior, toda a anlise se debruou sobre circuitos descritos ao nvel da porta lgica. Este o nvel de abstraco intermdio, como se pode observar na hierarquia da Figura 9.1. Referiu-se atrs que a realizao de portas lgicas feita com o uso de transistores que, como se pode ver na gura, um nvel de abstraco imediatamente abaixo. No entanto, para a denio das tcnicas de projecto apresentadas, nunca foi necessrio saber em concreto como que as portas lgicas iriam ser realizadas em termos de transistores. Aps obtida uma especicao ao nvel de portas lgicas, o passo seguinte convert-las para transistores e fazer as ligaes elctricas. Para uma dada tecnologia de fabrico de circuitos, a cada porta lgica corresponde um esquema elctrico de interligao de transistores. No entanto, para alm deste mapeamento necessrio fazer o dimensionamento dos transistores de maneira a garantir, por exemplo, determinados tempos de atraso e consumos de potncia. Embora se possam realizar sistemas digitais com elementos discretos, cada vez mais comum que a realizao dos sistemas digitais seja em termos de circuito integrado. Neste caso, o passo nal converter esta descrio a nvel de transistor, que no fundo uma descrio de um circuito elctrico, para mscaras que so usadas directamente no fabrico de circuitos integrados, a que se chama nvel de layout. Estas mscaras denem linhas por onde passam certo tipos de elementos que constituem o circuito nal. Por exemplo, as interliges so normalmente realizadas por linhas de metal, podendo existir vrias camadas destas linhas e correspondendo a cada camada uma mscara. No caso da tecnologia CMOS, os transistores so formados pelo cruzamento de uma linha de polisilcio por outra de dopagem de substracto, correspondendo a mais duas mscaras diferentes. Tipicamente, na passagem do nvel de transistor para o nvel de layout, o objectivo escolher o caminho de cada linha de forma minimizar a rea total ocupada pelo circuito. Estes dois nveis de abstraco, assim como o nvel de sistema, saem fora do mbito deste livro e portanto no sero discutidos. Neste captulo apresenta-se o nvel de transferncia entre registos, nvel imediatamente acima do nvel de porta lgica. De acordo com a losoa dos nveis de abstraco, usam-se mdulos de complexidade mais elevada, mas sem detalhar a forma como so construdos. Por exemplo, so utilizados directamente somadores sem haver a preocupao de como esses somadores sero realizados em termos de portas lgicas. De referir que, para a maior parte das operaes de projecto e optimizao a cada nvel de abstraco, o projectista pode recorrer a ferramentas de sntese de circuitos. A partir de uma descrio do circuito a um dado nvel, estas ferramentas geram automaticamente o circuito correspondente num nvel de abstraco mais baixo, optimizando-o tendo em conta um conjunto de parmetros que o projectista pode especicar. A rea de investigao de algoritmos de sntese lgica uma rea de intensa actividade, mas este tambm um tema que sai fora do mbito deste livro.

116

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS


Palavra de Controlo Unidade de Controlo Bits de Estado (flags) Unidade de Processamento

Entradas de Controlo Sadas de Controlo Operandos

Resultados

Figura 9.2: Estrutura de um sistema digital em termos de unidade de processamento e de unidade de controlo.

9.2 Separao entre Circuito de Dados e Circuito de Controlo


Um sistema digital pode ser construdo de raiz usando bsculas e portas lgicas discretas usando as tcnicas de projecto de circuitos sncronos apresentadas nos captulos anteriores. Porm, como discutido na seco prvia, esta aproximao tem grandes limitaes. Por exemplo, qualquer dos mtodos de gerao de circuitos combinatrios descritos na Seco 3.3 impraticvel quando o nmero de variveis de entrada elevado. Os sistemas digitais so, assim, normalmente estruturados em duas unidades principais, a Unidade de Processamento e a Unidade de Controlo, conforme est ilustrado na Figura 9.2. A unidade de processamento constituda por pequenos mdulos interligados para armazenar e processar a informao til do sistema. Como indicado na gura, recebe as entradas a processar, ou seja, os operandos ou dados do exterior e calcula o resultado. A unidade de controlo responsvel por gerar os sinais de controlo que sequenciam as operaes bsicas da unidade de processamento de forma a que o sistema realize operaes complexas. Ao conjunto de sinais de controlo que saem da unidade de controlo para a unidade de processamento chama-se palavra de controlo. A sequncia de sinais de controlo gerada pela unidade de controlo pode depender dos resultados dos clculos efectuados pela unidade de processamento. Esta informao fornecida unidade de controlo por bits de estado ou ags, cujo funcionamento ser discutido mais frente. A unidade de controlo pode tambm receber informao directamente do exterior, como por exemplo, um sinal externo que indica quando dar incio operao ou qual a operao a realizar. Em geral, existiro sadas de controlo para indicar para o exterior o estado da computao, como por exemplo, um sinal que indica o m da operao. Naturalmente, entre os ciclos de relgio necessrios ao processamento de uma operao complexa ter-se- que guardar valores temporrios de clculos intermdios. Estes so guardados em registos, disponveis na unidade de processamento. As formas de interligao de registos e mdulos de processamento foram apresentadas na Seco 7.5.4.

9.2.1 Exemplo de Motivao


Para ilustrar este processo de separao de uma operao complexa numa sequncia de operaes mais simples, considere-se o caso de uma multipli-

9.2. SEPARAO ENTRE CIRCUITO DE DADOS E CIRCUITO DE CONTROLO117


LD LD

LD Dec

Zero

LD

LD

LD Reset

P
(a) (b)

Figura 9.3: Circuitos multiplicadores: (a) bloco combinatrio; (b) somas sucessivas.

cao. Na Seco 6.3 discutiu-se a realizao lgica de multiplicadores, nomeadamente o facto de serem mdulos complexos que requerem muito hardware. Na Figura 9.3(a) apresentada a realizao directa para uma operao de multiplicao P=A B. Uma alternativa trivial a este circuito realizar esta multiplicao atravs de somas sucessivas, somando A vezes o valor de B, conforme Figura 9.3(b). Assim, em vez de um mdulo multiplicador ser necessrio apenas um somador, mdulo signicativamente mais simples. Para este exemplo, o circuito da Figura 9.3(b) funciona como a sua unidade de processamento. O preo a pagar pela simplicao do hardware do circuito a necessidade de um mdulo adicional de controlo capaz de realizar a seguinte sequncia de operaes: 1. colocar registo P a zero. 2. carregar em P a soma de P com B. 3. decrementar o registo A. 4. se o registo A no chegou a zero, voltar para 2. Para facilitar estas operaes, os registos utilizados tm algumas funcionalidades adicionais. Assim, o registo A de facto um contador, com uma entrada de controlo para fazer a sua decrementao e uma sada de estado que ca activa quando este registo contm o valor 0. Por seu lado, o registo P tem um sinal de controlo que permite coloc-lo a zero. Tendo disponveis estes sinais de controlo, a unidade de controlo ser um circuito sequencial que gera a sequncia de sinais para realizar o algoritmo apresentado atrs. Na Figura 9.4 apresenta-se este algoritmo sob a forma de serve um uxograma, ao qual foram adicionados dois sinais. A entrada para indicar quando se deve dar incio operao. A sada indica quando a operao terminou. Este sinal til porque o nmero de ciclos de relgio necessrios para esta operao no xo. Para cada operao de multiplicao

 

118

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

0 inicio 1

Reset P

Load P

Dec A

0 Zero A 1

fim

Figura 9.4: Fluxograma que descreve a unidade de controlo para a operao de multiplicao por somas sucessivas. o tempo de processamento determinado pelo valor inicial de A e portanto importante que o sistema possa dar esta indicao para o exterior. descrio da Figura 9.4 possvel aplicar qualquer das tcnicas de projecto de circuitos sequenciais apresentadas no Captulo 8.3. Nas seces seguintes, apresenta-se uma linguagem de descrio que permite descrever as operaes bsicas da unidade de processamento, facilitando a composio de um circuito sequencial que realize a operao complexa desejada. Este exemplo ilustra como se pode reduzir a complexidade do circuito a implementar, traduzindo operaes complexas numa sequncia de operaes mais simples. Existe assim um compromisso que o projectista pode explorar entre a complexidade da unidade de processamento a implementar e o tempo (em termos de ciclos de relgio) que a operao demora a realizar. Em geral, quanto mais simples as operaes disponveis menor o hardware necessrio na unidade de processamento, mas maior a sequncia de operaes, correspondendo portanto a um tempo total de execuo maior. O exemplo aqui apresentado simplesmente ilustrativo. Embora na prtica se evitem de facto os mdulos multiplicadores combinatrios devido sua complexidade, existem mtodos sequenciais mais ecientes do que o aqui apresentado. Alm disso, este exemplo discute duas alternativas possveis, uma combinatria, outra sequencial. Em muitos casos, as operaes so de tal modo complexas que a alternativa de um mdulo combinatrio puro est partida fora de causa.

9.2. SEPARAO ENTRE CIRCUITO DE DADOS E CIRCUITO DE CONTROLO119


A B C

9.2.2 Unidade de Processamento


As unidades de processamento so tipicamente construdas usando os mdulos combinatrios de mdia complexidade estudados nos Captulos 5 e 6 e registos estudados no Captulo 7.5. Sobre a informao contida nos registos podem ser realizadas operaes cujo resultado pode ser guardado no mesmo registo, noutro registo ou mesmo numa posio de memria. Por exemplo, se se pretender um sistema para uma funcionalidade especca como o clculo de D=(A+B) C, uma possvel unidade de processamento seria simplesmente a indicada na Figura 9.5. Pela forma como o circuito da Figura 9.5 est desenhado, todos os ciclos de relgio o registo D actualizado com o valor (A+B) C, em que os valores de A, B e C so os destes registos no incio de cada ciclo de relgio. Existe alguma liberdade na construo da unidade de processamento. Em primeiro lugar, o projectista tem ao seu dispr um conjunto de mdulos, sejam eles aritmticos, lgicos ou outros, pelos quais poder optar dependendo da operao a realizar. Poder ainda construir mdulos novos e especcos usando as tcnicas de projecto do Captulo 3. No exemplo anterior, assumiuse que estavam disponveis mdulos somadores, mdulos multiplicadores e registos. Em segundo lugar, em muitos casos possvel fazer compromissos entre a complexidade da unidade de processamento e a complexidade da unidade de controlo, tentando-se arranjar um equilbrio entre a quantidade de hardware necessrio para o circuito e o desempenho deste. Concretizando para o exemplo anterior, para poupar hardware, em vez de se usar um mdulo multiplicador, poder-se-ia optar por realizar a multiplicao por somas sucessivas, como discutido na seco anterior. Para isto seria necessrio um registo temporrio onde se somaria vezes o valor do registo C, sendo o valor do resultado A+B. A desvantagem bvia que a operao que antes se realizava num nico ciclo de relgio agora necessita de ciclos para a multiplicao, mais um ciclo para a soma original. A complexidade da unidade de controlo aumenta pois agora tem que controlar o nmero de vezes que a soma da multiplicao se efectua. Outro ponto a considerar no projecto de uma unidade de processamento

Figura 9.5: Unidade de processamento para realizar a operao .

120

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS


A B C

Figura 9.6: Reduo do perodo de relgio para a unidade de processamento que realiza a operao . est relacionado com a frequncia mxima permitida para o sinal de relgio. Como referido na Seco 8.3, para o correcto funcionamento do sistema, o perodo de relgio ter que ser sempre superior ao maior atraso na lgica entre 2 registos da unidade de processamento. Para o exemplo da Figura 9.5, . Portanto, mesmo que existam operaes muito simples no sistema, esta ser sempre a granularidade mnima de durao de uma operao. Para reduzir esta granularidade, os mdulos podem ser intercalados com registos, como ilustrado na Figura 9.6 onde o registo T guarda temporariamente o resultado da soma. Neste caso, a operao D=(A+B) C demora 2 ciclos de relgio, um para calcular a soma T=A+B e outro para calcular a multiplicao D=T C, mas o ciclo de relgio foi reduzido para . De sublinhar que esta optimizao pode ter um impacto enorme no desempenho do sistema pois esta reduo de ciclo de relgio tem inuncia em todas as operaes simples do sistema. Uma vez escolhidos os mdulos para a unidade de processamento, cam denidas quais as operaes que podem ser realizadas sobre a informao armazenada nos registos a cada ciclo de relgio. Estas operaes so chamadas de micro-operaes e estas denem os pontos de controlo para a unidade de controlo. Apresenta-se mais frente neste captulo um exemplo de uma unidade de processamento construda para um m especco (Seco 9.3.2). No entanto, podem-se contruir unidades de processamento para as quais no esteja denida partida uma aplicao em particular, como o caso das unidades de processamento de computadores. Para estas situaes, dene-se um conjunto de micro-operaes sucientemente genrico e poderoso para acomodar ecientemente um conjunto grande de funcionalidades. A estas unidades de processamento d-se o nome de Unidade Lgica e Aritmtica ou ULA (em ingls, Arithmetic and Logic Unit ou ALU). No nal deste captulo exemplica-se a construo de uma unidade de processamento deste tipo.






           



9.3. LINGUAGEM DE DESCRIO DE HARDWARE

121

9.2.3 Unidade de Controlo


A unidade de controlo responsvel por denir quais as micro-operaes que so executadas na unidade de processamento em cada ciclo de relgio. Estas micro-operaes so denidas atravs de um conjunto de sinais de controlo aceites pela unidade de processamento, a cujo conjunto se chama palavra de controlo. As unidades de controlo tm dois tipos de entradas. Por um lado tm entradas externas que controlam o funcionamento global do sistema. Por outro lado, tm entradas provenientes da unidade de processamento, os bits de estado. A partir destes, a unidade de controlo tem informao acerca do resultado de uma dada operao, podendo desencadear diferentes operaes com base nesta informao. Pegando novamente no exemplo da Seco 9.2.1, como se pode observar pelo uxograma da unidade de controlo apresentado na Figura 9.4, esta unidade tem duas entradas, uma entrada de controlo externa e um bit de estado da unidade de processamento. O sinal uma entrada de controlo que indica quando se deve iniciar um novo clculo. O sinal uma entrada proveniente da unidade de processamento que informa a unidade de controlo do resultado da operao anterior, permitindo a esta decidir qual a aco a tomar. Para alm das sadas que formam a palavra de controlo, as unidades de controlo podem tambm ter sadas de controlo que comunicam com entidades externas indicando o estado do sistema. Um exemplo deste tipo de sadas o da Figura 9.4. Neste caso, como o tempo de clculo no xo, mas sim dependente dos valores dos operandos, necessrio que o sistema informe o exterior acerca do estado do clculo, nomeadamente, se este j terminou ou no. Estando denida a unidade de processamento, o projectista tem que denir a sequncia de micro-operaes necessrias para realizar a funcionalidade pretendida para o sistema. O projecto da unidade de controlo no mais do que o projecto de um circuito sequencial, como estudado no Captulo 8. Embora a sua realizao possa ser feita usando qualquer das tcnicas apresentadas nesse captulo, o nmero de entradas (bits de estado e entradas de controlo) e sadas (largura da palavra de controlo e sadas de controlo) em geral muito elevado, levando a que as tcnicas mais comuns usadas no projecto de unidades de controlo assentem em controladores micro-programados, estudados na Seco 8.3.3.

9.3 Linguagem de Descrio de Hardware


A especicao de sistemas mais complexos necessita de uma linguagem de descrio com um nvel de abstraco mais elevado do que as funes booleanas ou os diagramas de estado de forma a esconder os detalhes do sistema e assim permitir descries sucintas. Estas linguagens chamam-se linguagens de descrio de hardware. Embora o nvel de abstraco possa variar, em geral esta descrio feita ao nvel de transferncia entre registos, em que o projectista dene quais as micro-operaes efectuadas entre registos em cada ciclo de relgio. A forma como as micro-operaes so realizadas em termos de portas lgicas no de-

 

122

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

R1

R2

nida na descrio do sistema, pressupondo-se a criao de uma unidade de processamento que permita executar essas micro-operaes. Existem vrios formatos possveis para as linguagens de descrio de hardware. A linguagem adoptada neste livro e descrita em seguida muito simples e permite apenas especicar as micro-operaes que o sistema deve realizar. Outras linguagens, como VHDL e Verilog, tm um nvel de descrio igual ao de uma linguagem de programao usual, mas com a diferena fundamental de terem que acomodar o facto do hardware ser intrinsecamente concorrente. Para isso, as linguagens de descrio de hardware denem blocos de cdigo que descrevem uma operao e portanto so sequenciais, mas os diferentes blocos funcionam em paralelo.

9.3.1 Linguagem de Transferncia entre Registos


Dene-se nesta seco a linguagem simples de descrio de hardware a nvel de transferncia entre registos a ser usada nos captulos seguintes. Nesta linguagem, a especicao de um sistema digital conseguida atravs de um conjunto de micro-operaes que denem a funcionalidade pretendida. A transferncia de informao de um registo para outro, ou mais exactamente a replicao dessa informao, designada em forma simblica pela instruo: que signica R2 recebe o contedo de R1. O valor guardado em R1 no alterado. Em termos de circuito lgico, a instruo anterior corresponde Figura 9.7. Se para alm desta micro-operao simples de transferncia houver algum processamento, isso explicitado, por exemplo:

ou A primeira destas instrues ser realizada pelo circuito lgico da Figura 9.8. Quando se do duas transferncias em simultneo, podem-se agrupar micro-operaes separando-as por vrgulas:
  

O circuito lgico correspondente o da Figura 9.9. Para alm de registos, os operandos das micro-operaes podero ser tambm valores constantes ou referncias a posies de memria. A indicao de uma posio de memria feita usando M[endereo], em que endereo

Figura 9.7: Circuito lgico correspondente instruo

9.3. LINGUAGEM DE DESCRIO DE HARDWARE

123

R5

n + R1

R2

R6

n n R3

R2

n x R9

2n

R4

poder por seu lado ser um valor constante ou um registo. Exemplos possveis de micro-operaes sero:

Pela forma como esto expressas, as micro-operaes apresentadas at aqui ocorrem em todos os ciclos de relgio. Num sistema digital no se pretende normalmente que uma transferncia, com ou sem processamento, ocorra sempre que surge um impulso de relgio. Para indicar que uma certa operao s deve ocorrer na presena de certas condies, usa-se o formato condio: microoperao. Por exemplo, uma instruo como

tem uma traduo num circuito lgico como o da Figura 9.10. Para haver apenas uma transferncia, a linha tem que permanecer a 1 apenas durante uma transio ascendente do sinal de relgio. Um exemplo de uma situao deste tipo est ilustrada na Figura 9.11, onde a transferncia se d apenas no instante . A condio de activao da micro-operao pode ser uma expresso lgica genrica. Por exemplo,
 

 

Figura 9.9: Circuito lgico correspondente instruo .




Figura 9.8: Circuito lgico correspondente instruo

124

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS


K1
LD

R1

R2

Clk K1
t

Figura 9.11: Diagrama temporal que garante uma transferncia nica de R1 para R2. signica que a cada ciclo de relgio apenas se transfere o contedo de R0 para R5 se ambos os sinais e estiverem a 1. Por vezes til trabalhar no com todos os bits guardados num registo, mas apenas com um subconjunto dos seus bits. Para indicar que uma microoperao apenas se aplica a parte dos bits de um registo, a seguir ao nome do registo indica-se entre parntesis quais os bits envolvidos. Por exemplo, se se prentender trabalhar apenas com o bit 5 de um registo R2, isso seria indicado por R2(5). Para uma gama de bits, a representao a seguinte:

que neste caso indica que o octeto menos signicativo de R6 copiado para o octeto mais signicativo de R3. Naturalmente, ter que haver o cuidado de ser consistente no nmero de bits envolvidos numa micro-operao. Por outro lado, pode ser necessrio fazer a concatenao de vrios registos para uma dada operao, o que indicado pelo operador |. Por exemplo,


signica que o resultado da multiplicao de R3 por R2, cujo resultado, como referido anteriormente, precisa do dobro dos bits dos operandos, car guardado em dois registos, R7 e R6, em que R7 tem a parte mais signicativa e R6 a menos signicativa. Com esta linguagem simples possvel descrever unidades de processamento com uma complexidade arbitrria. Esta descrio indica quais as microoperaes que podem ser executadas na unidade de processamento e sob que condies elas ocorrem. Dada esta descrio, o projectista pode desenhar a unidade de controlo que gera a sequncia de sinais de controlo para realizar a operao pretendida. De notar que esta linguagem no dene completamente a implementao do sistema. Muitas vezes existe alguma liberdade de escolha pois possvel considerar diferentes circuitos que realizam uma mesma funcionalidade. Por

Figura 9.10: Circuito lgico correspondente instruo

 

9.3. LINGUAGEM DE DESCRIO DE HARDWARE


R2 R1
T1 T2
0 1 Sel MUX
OE

125

R2

OE

R1

T1

LD

T2

LD

R0

R0

(a)

(b)

Figura 9.12: Circuitos equivalentes para realizar uma transferncia de duas fontes possveis. Maior_Divisor_Comum(X, Y) 1. enquanto (Y 0){ 2. se X Y 3. ento X=X-Y 4. se no, troca X com Y 5. } 6. resultado em X

Figura 9.13: Pseudo-cdigo do algoritmo para o clculo do mximo divisor comum. exemplo, considere-se o caso comum de um registo que pode ser carregado a partir de uma de duas fontes:
  

Como discutido na Seco 7.5.4, estes registos podem estar ligados atravs de multiplexadores ou atravs de barramentos. Estas duas situaes tm a representao em termos de circuito lgico indicada nas Figuras 9.12(a) e 9.12(b), respectivamente. Notar que no caso do barramento se usa menos hardware, mas h que ter o cuidado de garantir que os sinais e nunca esto activos em simultneo.

9.3.2 Exemplo: Mximo Divisor Comum


De forma a ilustrar os conceitos apresentados atrs, desenvolve-se nesta seco um exemplo completo. Considere-se que se pretende projectar um sistema para calcular o mximo divisor comum de dois nmeros inteiros positivos de bits. Um algoritmo conhecido para realizar esta operao est indicado em pseudo-cdigo na Figura 9.13. Por palavras, neste algoritmo subtrai-se sucessivamente o menor dos nmeros ao maior at que o resultado desta subtraco seja 0. Quando isso acontece, o algoritmo termina e o resultado o valor nal do outro operando. No

126

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

T0
fim

0 inicio 1

T1

Ry=0 0 0 Rx>=Ry

Rx

Ry,Ry

Rx

Rx

Rx-Ry

Figura 9.14: Fluxograma do algoritmo para o mximo divisor comum. um algoritmo muito eciente pois, por vezes, demora muito a terminar, mas simples de realizar. Assume-se que na especicao do sistema se indica que os operandos e se encontram inicialmente guardados em dois registos, designados por Rx e Ry. Alm disso, essa especicao indica que existem dois sinais de controlo, um sinal de entrada para indicar que os registos Rx e Ry foram carregados com os operandos e que se deve dar incio ao clculo do maior divisor comum entre eles, um sinal de sada que assinala o m deste clculo. Para um funcionamento correcto do sistema, o sinal e os registos Rx e Ry s devem ser alterados do exterior quando o sinal estiver activo. Tendo em conta estas especicaes, o algoritmo da Figura 9.13 pode ser apresentado sob a forma de uxograma, como o apresentado na Figura 9.14. O representa um estado de espera, onde nada acontece at que seja estado accionado o sinal . Neste estado a sada de controlo est activa. Quando a entrada vai a 1, o sistema avana para o estado , onde todo o processamento realizado. O sistema mantm-se neste estado enquanto Ry no chegar a zero, situao em que terminou o clculo, regressando o sistema a . Enquanto em , em cada ciclo os valores relativos de Rx e Ry so testados e, de acordo com este teste, ou se trocam os valores destes ou se subtrai Ry a Rx. Neste uxograma os registos Rx e Ry esto a ser re-utilizados durante a operao uma vez que a cada ciclo de relgio no h novos valores a serem criados que necessitem de novos registos. Neste ponto necessrio decidir a funcionalidade da unidade de processamento, ou seja, quais as micro-operaes que estaro disponveis. Para este exemplo, as micro-operaes necessrias so simples, optando-se por inclu-las na unidade de processamento. Em geral, no entanto, poder no ser este o caso, quer pela complexidade das operaes quer por se estar a usar uma unidade de processamento predenida. Nesse caso ter-se- que subdividir as operaes

 

 

 

9.3. LINGUAGEM DE DESCRIO DE HARDWARE


127

Rx Rx

Figura 9.15: Descrio a nvel de transferncia entre registos do algoritmo para o clculo do mximo divisor comum. em sub-operaes mais simples que j sejam suportadas por micro-operaes da unidade de processamento. Esta situao estudada na Seco 9.4.7. Por observao do uxograma da Figura 9.14, as operaes necessrias so apenas a transferncia de valores entre registos e uma subtraco. Estas indicam a necessidade de registos com sinal de controlo load, e , e um subtractor. Alm das operaes, h trs condies a serem testadas: a 1, para o que no necessrio hardware especco; o valor do registo Ry ter chegado a 0; o valor Rx ser maior do que o valor de Ry. Para a segunda destas condies, pode-se assumir a existncia de um comparador com a constante 0, o que realizado atravs de uma porta NOR de entradas, onde esto ligados todos os bits sada de Ry. O mais usual utilizar para Ry um registo que inclui j esta porta NOR e portanto com uma sada de controlo, , que indica quando o valor l guardado zero. Para a terceira condio necessrio um comparador normal, ligado a Rx e Ry, e a cujo sinal de sada se atribuiu o nome . Tendo em conta a funcionalidade da unidade de processamento, o uxograma da Figura 9.14 pode ser traduzido em linguagem de transferncia entre registos como indicado na Figura 9.15. Nesta gura, os sinais e controlam a sequncia de execuo das restantes micro-operaes e portanto sero gerados pela unidade de controlo. Como referido na seco anterior, a cada ciclo de relgio qualquer das microoperaes das linhas da Figura 9.15 pode ocorrer. O que dene quais as que de facto ocorrem so as condies indicadas na linha. Neste exemplo, para um funcionamento correcto, apenas um dos sinais da unidade de controlo, e , estar activo. Com =1, apenas as operaes das linhas 2 e 3 podero ocorrer. Com =1, podero ocorrer as das trs ltimas linhas. No entanto, fcil ver que as condies destas trs linhas, geradas pelos sinais e , so disjuntas, pelo que de facto apenas as micro-operaes de uma das trs ltimas linhas da Figura 9.15 podem ocorrer em cada ciclo de relgio. Examinando linha a linha este cdigo, pode-se observar que na linha 1 os e so gerados em todos os ciclos de relgio. A linha 2 sinais de teste indica que o sinal se mantm activo no estado . A linha 3 s ocorre se o sistema estiver no estado e o sinal de car activo, passando o controlo para o estado . Portanto, com o sistema no estado e a linha desactiva, o sistema mantm-se indenidamente neste estado e nada mais acontece. A linha 4 corresponde ao oposto, que detectar que o registo Ry chegou a zero e que portanto o clculo terminou. A aco correspondente passar para o estado , que por sua vez ir activar a sada . As linhas 5 e 6 podero ser activadas durante o decorrer do clculo, em que o estado . A linha 5 ca

 

, , , Rx Ry Ry, Ry Rx

  

: : : : :

 

     

1. 2. 3. 4. 5. 6.

 

128

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

1 Sel

MUX
n

LDx

LD

Rx

LDy

LD

Ry
n

Zy

n
A B A B

A>=B

A-B
n

xMy

Figura 9.16: Unidade de processamento para o mximo divisor comum. activa quando Rx Ry, subtraindo-se Ry a Rx. A linha 6 ca activa quando Rx Ry, activando-se a troca dos valores de Ry e Rx. Traduzindo para circuito lgico a descrio a nvel de transferncia entre registos da Figura 9.15, apresenta-se na Figura 9.16 a unidade de processamento para este problema. Os sinais e formam a palavra de controlo da unidade de controlo, indicando em que ciclos de relgio os registos so actualizados. Os sinais e so os bits de estado da unidade de processamento e so entradas para a unidade de controlo. De notar que o controlo do multiplexador entrada do registo Rx feito directamente pela sada do comparador pois o carregamento para este registo controlado pelo sinal . Enquanto estiver inactivo no importa qual o valor que est entrada de Rx, e sempre que estiver activo a sada do multiplexador ser a correcta. O controlo desta unidade de processamento est indicado na Figura 9.17 e foi obtido a partir do uxograma da Figura 9.14 por simples substituio das operaes pelos sinais de controlo das micro-operaes correspondentes e dos testes pelos bits de estado. Assim, o teste Ry=0 corresponde a testar se =1 e Rx Ry a testar se =1. Por seu lado, para a operao Rx Rx Ry basta activar o sinal de do registo Rx, e para a operao de troca de valores entre os registos activam-se ambos os sinais de . Notar que a seleco do valor entrada de Rx, Rx Ry ou Ry, controlado directamente na unidade de processamento pelo sinal . Esta unidade de controlo to simples que no so necessrias tcnicas sosticadas para a sua construo. Usando a tcnica de sntese de mquinas de estados da Seco 8.3.1, basta usar uma bscula tipo D para guardar o estado, codicando-se os estados da seguinte forma: 0 corresponde a ;e1a . A sntese da lgica trivial, chegando-se ao circuito da Figura 9.18. Os circuitos das Figuras 9.16 e 9.18 juntos, conforme a Figura 9.2, realizam a funcionalidade pretendida de clculo do mximo divisor comum entre dois nmeros. A Figura 9.19 ilustra o funcionamento destes circuitos para o caso de e , em que se assumiu que os registos so actualizados no anco

9.4. UNIDADES LGICAS E ARITMTICAS

129

T0
fim

0 inicio 1

T1

Zy
0

LDx
1

xMy
0

LDy

Figura 9.17: Fluxograma da unidade de controlo para o mximo divisor comum tendo em vista a unidade de processamento da Figura 9.16.
xMy Zy LDy LDx

D Q
inicio

fim

Figura 9.18: Unidade de controlo para o mximo divisor comum. ascendente do sinal de relgio.

9.4 Unidades Lgicas e Aritmticas


No exemplo apresentado acima, a unidade de processamento foi projectada para um m especco. De facto, essa ser sem dvida a abordagem mais eciente para realizar um sistema digital pois assim inclui-se na unidade de processamento todos, e apenas, os mdulos necessrios s micro-operaes a realizar, interligados de forma ptima. No entanto, em muitos casos, tal no possvel por o nmero de micro-operaes ou a complexidade destas ser muito elevado. Nestes casos, projecta-se para a unidade de processamento um circuito com

130

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

Clk

Estado

T0

T1

T1

T1

T1

T1

T1

T0

T0

Rx

54

54

18

36

18

18

18

18

Ry

36

36

36

18

18

18

Inicio

Fim

LDx

LDy

xMy

Zy

Figura 9.19: Diagrama temporal para o clculo do mximo divisor comum entre e . as funcionalidades bsicas, em termos de operaes quer aritmticas quer lgicas, associado a um conjunto de registos genricos. Ao circuito que realiza as operaes chama-se Unidade Lgica e Aritmtica ou ULA (em ingls, Arithmetic and Logic Unit ou ALU). O nmero, tipo e complexidade das micro-operaes includas numa ULA pode variar grandemente dependendo do problema em vista. Aplica-se aqui o princpio referido na Seco 9.2.2 de que possvel simplicar a unidade de processamento por transferncia de alguma complexidade para a unidade de controlo. As operaes mais complexas so assim realizadas por uma sequncia de micro-operaes disponveis numa unidade de processamento mais simples. A ULA trabalha normalmente junto com um banco de registos (ver Seco 7.5.4) para guardar os operandos, resultados das operaes e valores temporrios, necessrios quando uma operao complexa substituda por uma sequncia de operaes mais simples. Tambm aqui pode haver uma grande variao de caso para caso em termos do nmero de registos disponveis neste banco. Uma unidade de processamento deste tipo est representada na Figura 9.20. Assume-se o caso mais geral, em que a ULA aceita 2 operandos e tem um resultado nico. A palavra de controlo conter informao para a seleco de quais os 2 registos que servem como operandos e qual o registo destino para guardar o resultado. A especicao da micro-operao a realizar pela ULA tambm parte da palavra de controlo. Por seu lado, a ULA gera um conjunto de bits de estado que, tal como referido anteriormente, podem ser usados pela unidade de controlo para tomar decises em termos de execuo dependendo

9.4. UNIDADES LGICAS E ARITMTICAS

131

Banco de Registos
Palavra de Controlo Operandos

Bits de Estado

ULA
Resultado

Figura 9.20: Exemplo de unidade de processamento com ULA mais banco de registos. do resultado de uma micro-operao.

9.4.1 Estrutura de uma ULA


Para ilustrar estes conceitos, projecta-se em seguida uma ULA, que ser posteriormente usada na unidade de processamento do processador P3 apresentado no Captulo 12. A ULA deniu-se como um circuito que realiza operaes aritmticas e lgicas bsicas. Uma primeira observao que estes dois tipos de operaes no tm muito em comum. Assim, optou-se aqui por considerar em separado unidades para realizar cada um destes tipos de operaes, a unidade aritmtica e a unidade lgica. Alm destas, considera-se uma terceira unidade para realizar o deslocamento direita e esquerda, funcionalidade semelhante dos registos de deslocamento apresentados na Seco 7.5.2, mas neste caso efectuada por lgica puramente combinatria. Optou-se tambm por considerar esta unidade de deslocamento em separado pois corresponde a uma funcionalidade distinta das outras unidades. As operaes realizadas pela unidade de deslocamento no se classicam em termos de operaes aritmticas e lgicas pois, dependendo do tipo de deslocamento efectuado, a operao pode ser considerada como de um tipo ou do outro, como se ver adiante. A Figura 9.21 apresenta a estrutura da ULA em construo. Escolheu-se uma arquitectura em que as trs unidades referidas trabalham em paralelo, entrando os operandos directamente em cada uma delas. De notar que esta opo uma entre outras possibilidades de organizao. Uma alternativa possvel, com vantagens e desvantagens em relao escolhida, seria colocar a unidade de deslocamento sada do multiplexador, portanto em srie com as unidades aritmtica e lgica, o que permitiria executar micro-operaes mais complexas. A micro-operao realizada por qualquer destas unidades especicada pela palavra de controlo. O nmero de bits de controlo que entra em cada unidade, , e , depende do nmero de operaes disponveis em cada unidade.

132

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS


A
n

B
n

Unidade Aritmtica
p n q

Unidade Lgica
n r

Unidade de Deslocamento
n

Palavra de Controlo

0 1 2 3 Sel MUX n

Resultado

Figura 9.21: Estrutura da ULA. Esta palavra de controlo controla tambm o multiplexador sada, que escolhe de qual das unidades que se pretende o resultado. De notar que s o resultado de uma vai ser usado na sada. Isto permite que os bits de controlo que entram em cada unidade possam ser partilhados, pois s importante especicar os bits de controlo para a unidade que vai ter o seu resultado seleccionado sada, sendo irrelevante qual a operao realizada pelas outras duas unidades. Notar tambm que, embora para no sobrecarregar a gura no esteja l representado, existe tambm um multiplexador para seleccionar os bits de estado da unidade activa.

9.4.2 Bits de Estado


Sendo uma ULA uma unidade de processamento com micro-operaes aritmticas e lgicas simples, os bits de estado passados para a unidade de controlo so tambm simples, e comuns a muitas destas micro-operaes. Para a ULA em estudo, consideram-se 4 bits de estado, presentes na esmagadora maioria das ULAs. Zero ( ): este bit ca a 1 quando o resultado da micro-operao foi 0. Este bit actualizado em qualquer micro-operao da ULA. Em termos de realizao, este bit pode ser gerado por uma porta lgica NOR entre todos os bits do resultado. Transporte ( ) (ou carry): este bit usado pelas micro-operaes aritmticas (como soma e subtraco) para indicar que h um bit de transporte para l do bit mais signicativo do resultado. tambm usado nas microoperaes de deslocamento para guardar o bit que se perderia por sair para fora do resultado. Sinal ( ): para o bit de sinal usado o bit mais signicativo do resultado. Em notao de complemento para 2 ou sinal-magnitude, este bit indica quando o resultado deu negativo.

9.4. UNIDADES LGICAS E ARITMTICAS


A
n

133

B
n

SelB Y
n

2 2
Cin

+ Cout Cout
n

Cin

SelC

Figura 9.22: Esquema de uma unidade aritmtica.

Excesso ( ) (ou overow): este bit s tem sentido para micro-operaes aritmticas e ca a 1 quando o resultado tem uma magnitude que excede o valor mximo que possvel de representar com o nmero de bits disponveis para o resultado. Indica portanto que o valor de resposta est incorrecto. Este conceito de bit de excesso foi apresentado na Seco 6.2, onde se explicou como pode ser calculado pelo hardware. Algumas ULAs podem apresentar um maior nmero de bits de estado, dependendo da aplicao em vista. Por exemplo, nalguns casos pode facilitar muito a existncia de um bit de estado paridade que indique que o nmero de bits a 1 no resultado par. A regra normalmente a ULA fornecer informao que til aplicao e que apenas possvel, ou substancialmente mais fcil, de obter directamente pelo hardware do que com (micro-)programao. Para a ULA em estudo, consideram-se apenas os 4 bits de estado descritos atrs.

9.4.3 Unidade Aritmtica


Quando se pensa em operaes aritmticas bsicas natural pensar-se na adio, subtraco, multiplicao e diviso. De facto, a adio e a subtraco so quase que obrigatrias para as unidades aritmticas. A multiplicao, embora muito comum, no includa em todas devido sua realizao em hardware ser bastante mais complexa, conforme foi referido atrs. A implicao desta opo que uma multiplicao ter que ser realizada por uma sequncia de micro-operaes mais elementares, como somas sucessivas, e portanto demorar bastante mais tempo a executar. A diviso tambm no realizada directamente por muitas unidades aritmticas pois a sua realizao to complexa como a multiplicao e uma operao bastante menos utilizada. Assim, a penalizao que advm da sua execuo ser mais demorada no tem tanto peso no desempenho do sistema. A Figura 9.22 apresenta um exemplo de uma unidade aritmtica. Aqui, para simplicar, optou-se por no incluir as micro-operaes de multiplicao e diviso. Assim, esta unidade aritmtica contruda em torno de um somador, que com a adio de blocos combinatrios simples que manipulam o operando

134

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS


B
n

Bn-1
...

B1

B0

00 01 10 11

Figura 9.23: Bloco combinatrio SelB (a) Descrio funcional. (b) Circuito lgico.

Figura 9.24: Bloco combinatrio SelC (a) Descrio funcional. (b) Circuito lgico.

e a entrada do sinal de transporte, permite utilizar o somador para executar um conjunto interessante de micro-operaes. Como foi discutido na Seco 6.2.2, um somador pode ser facilmente convertido num subtractor por aplicao do complemento para 2 de um dos operandos. Este complemento para 2 pode ser obtido por complementao lgica bit a bit desse operando e por colocao do bit de transporte entrada a 1. Os blocos combinatrios SelB e SelC, apresentados nas Figuras 9.23 e 9.24 respectivamente, foram denidos de forma a que, com os sinais de controlo e , o sinal seleccione se a operao uma soma ou uma subtraco. Como j referido, uma porta EXOR pode ser vista como um inversor controlado. Se o sinal estiver a 0, ento . Com tambm a 0, esta unidade realiza uma soma normal. Se o sinal estiver a 1, ento cada bit de o complemento do bit correspondente de . Como , ento tem-se o complemento para 2 de e esta unidade realiza a subtraco . Por vezes, pretende-se fazer uma soma entre operandos com um nmero de bits superior aos permitidos pela unidade aritmtica, . Uma forma simples de conseguir este objectivo comear por somar os bits menos signicativos dos operandos e guardar o bit de transporte. Depois somam-se os bits seguintes, tendo agora em conta o bit de transporte anterior. Este procedimento pode-se repetir indenidamente, permitindo a soma de operandos com

00 01 10 11


1 0
(a)

G2

G0
...

Yn-1
n

Y1

Y0

(b)

0 1

G0 Cin G1 C

(a)

(b)

9.4. UNIDADES LGICAS E ARITMTICAS

135

Tabela 9.1: Conjunto de micro-operaes da unidade aritmtica. um nmero arbitrrio de bits. O mesmo raciocnio funciona para a subtraco. De maneira a acomodar esta situao, a unidade aritmtica tem que poder aceitar um bit de transporte. Na unidade em questo, isto conseguido com o sinal de controlo a 1, em que se tm as operaes ou dependendo do valor de . Por m, outras operaes muito comuns so simples incrementos e decrementos de um operando. Para incrementar o operando , basta colocar a entrada correspondente ao operando a 0 e o bit de transporte a 1, o que conseguido com as entradas de controlo =1, =0 e =1. De forma semelhante, para decrementar o operando faz-se a sua soma com =-1 e =0. Como o complemento para 2 de 1 um valor com todos os bits a 1, a diferena para esta operao o sinal de controlo =0. A Tabela 9.1 resume as micro-operaes possveis de realizar pela unidade aritmtica apresentada na Figura 9.22, para cada combinao das entradas de controlo . Note-se que as duas ltimas micro-operaes no foram projectadas, mas surjem como efeitos secundrios das restantes operaes. Embora primeira vista no paream to teis como as seis que foram projectadas, esto disponveis e podem ser usadas se necessrio.

9.4.4 Unidade Lgica


A diferena fundamental entre as operaes lgicas e as operaes aritmticas que as primeiras so operaes binrias e as segundas operam sobre valores numricos. Assim, para as operaes lgicas os bits so tratados de forma independente enquanto que para as aritmticas so os bits no seu conjunto que tm signicado, de acordo com a notao usada em cada caso para a representao de valores numricos. As micro-operaes fornecidas pelas unidades lgicas aplicam-se individualmente a cada bit dos operandos de entradas. Por exemplo, a micro-operao signica um AND entre cada bit dos operandos e : . Qualquer operao lgica pode ser includa numa unidade lgica. Para a ULA em projecto, consideram-se as micro-operaes NOT, AND, OR e XOR. A Figura 9.25 ilustra como estas micro-operaes so realizadas para um bit . Naturalmente, a unidade lgica necessitar de tantos blocos iguais ao da Figu-



1 0 1 0

0 1

000 001 010 011 100 101 110 111

0 1

    

Micro-Operao soma subtraco soma com bit de transporte subtraco com bit de transporte decremento incremento decremento, se incremento, se

136

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS


Ai Ai Bi Ai Bi Ai Bi H0 H 1 0 1 2

MUX

Ri

3 SS 0 1

Figura 9.25: Esquema da unidade lgica.

Tabela 9.2: Conjunto de micro-operaes da unidade lgica.

ra 9.25 quanto o nmero de bits dos operandos. Os sinais de controlo e escolhem qual das micro-operaes tem o seu resultado seleccionado sada. A Tabela 9.2 indica qual a correspondncia entre a combinao destes sinais e a micro-operao seleccionada.

(a)
C 0

C
(b)

C
(c)

(d)

Figura 9.26: Tipos de deslocamento: (a) Deslocamento lgico; (b) Deslocamento aritmtico; (c) Rotao; (d) Rotao com transporte.

00 01 10 11

Micro-Operao complemento conjuno disjuno ou exclusivo

9.4. UNIDADES LGICAS E ARITMTICAS

137

9.4.5 Unidade de Deslocamento


A unidade de deslocamento apenas admite um operando de entrada e permite deslocar todos os bits deste operando uma posio esquerda ou direita. Existem vrios tipos de deslocamento possveis, indicados na Figura 9.26. Uma primeira observao que em qualquer das formas de deslocamento o bit de estado transporte ( ) recebe o bit que se perde com o deslocamento, o bit mais signicativo do operando no caso de deslocamentos esquerda, ou o bit menos signicativo nos deslocamentos direita. Deslocamento lgico (Figura 9.26(a)): o deslocamento mais simples em que cada bit passa para a posio seguinte, consoante seja deslocamento esquerda ou direita. O bit que sai do operando copiado para o bit de estado transporte ( ) e o bit que entra sempre 0. Os bits de estado transporte ( ), zero ( ) e sinal ( ) so actualizados. Se se considerar o operando de entrada como um nmero sem sinal, um deslocamento de uma posio esquerda ou direita o mesmo do que uma multiplicao ou diviso por 2, respectivamente. Deslocamento aritmtico (Figura 9.26(b)): este tipo de deslocamento tem em vista a utilizao de um operando em formato de complemento para 2. O objectivo manter a regra da multiplicao e diviso por 2, agora em nmeros com sinal. No deslocamento esquerda, o movimento dos bits exactamente o mesmo do deslocamento lgico. A diferena est em que se o bit de sinal mudar de valor, isso signica que o resultado excedeu a capacidade para o nmero de bits do operando (uma multiplicao por 2 no pode trocar o sinal) e portanto o bit de estado excesso ( ) car a 1. No deslocamento direita, a diferena est tambm na forma como o bit mais signicativo tratado. Como o sinal numa diviso por 2 se tem que manter, em vez de entrar sempre 0 no bit de maior peso, este bit mantm o valor anterior. Sendo uma operao aritmtica, todos os bits de estado so actualizados. Rotao (Figura 9.26(c)): nesta micro-operao o movimento dos bits o mesmo do deslocamento lgico, mas o bit que entra no 0 e sim igual ao bit que sai, fechando-se assim o crculo. Numa rotao esquerda, o bit de maior peso entra no bit de menor peso. Numa rotao direita, o bit de menor peso entra no bit de maior peso. Os bits de estado transporte ( ), zero ( ) e sinal ( ) so actualizados. Rotao com transporte (Figura 9.26(d)): este tipo de rotao igual ao anterior, com a diferena que o bit de estado transporte includo no crculo de rotao. O bit que entra , portanto, o bit que estava anteriormente no bit de estado transporte. Tambm aqui os bits de estado transporte ( ), zero ( ) e sinal ( ) so actualizados. Um circuito que realiza estas micro-operaes de deslocamento est representado na Figura 9.27. Existem 8 micro-operaes possveis, portanto so necessrios 3 sinais de controlo, , e . Neste circuito, indica se o deslocamento direita (0) ou esquerda (1). Para os bits intermdios do operando, este o nico sinal de controlo relevante, pois simplesmente se vai buscar o bit de peso imediatamente maior ou menor. Por outras palavras, o bit de sada

138
C

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS


0 A
n

An-2
3 2

A0 An-1
1 0

An-3

An-1

A0

A2
3 2

An-1
1 0

A1

J2 J1 J0
1

S1 S0

MUX

S 1 S 0

MUX

S MUX

S MUX

...

A n-1

A0

S MUX

S MUX
1 0

S MUX Rn-1 Rn-2


n

R1

R0 C

Figura 9.27: Esquema da unidade de deslocamento.

SHRA SHLA ROR ROL

RORC ROLC

Tabela 9.3: Micro-operaes possveis na unidade de deslocamento. ca igual ao bit de entrada ou consoante 0 ou 1. Este tambm o nico sinal de controlo para a gerao do bit de estado transporte, que se carrega com o bit mais ou menos signicativo dependendo se o deslocamento esquerda ou direita, respectivamente. Os sinais e servem para denir qual o tipo de deslocamento a executar, o que se consegue pelo controlo do bit que entra, o bit mais signicativo nos deslocamentos direita e o bit menos signicativo nos deslocamentos esquerda. No caso de um deslocamento direita, para um: deslocamento lgico: entra sempre um 0. deslocamento aritmtico: o bit mantm-se, pois um bit de sinal. rotao: entra o bit de menor peso do operando. rotao com transporte: entra o bit de estado transporte.

De forma semelhante para um deslocamento esquerda: deslocamento lgico: entra sempre um 0. deslocamento aritmtico: entra sempre um 0. rotao: entra o bit de maior peso do operando. rotao com transporte: entra o bit de estado transporte.

000 001 010 011 100 101 110 111

SHR SHL

Micro-Operao deslocamento lgico direita deslocamento lgico esquerda deslocamento aritmtico direita deslocamento aritmtico esquerda rotao direita rotao esquerda rotao direita com transporte rotao esquerda com transporte

9.4. UNIDADES LGICAS E ARITMTICAS

139

SHR SHL

SHRA SHLA ROR ROL

RORC ROLC

Tabela 9.4: Tabela das micro-operaes da ULA. A micro-operao realizada pela unidade de deslocamento para cada combinao dos sinais de controlo encontra-se discriminada na Tabela 9.3.

9.4.6 Tabela de Controlo da ULA


Tendo-se estabelecido o funcionamento de cada uma das suas unidades internas, pode-se denir o funcionamento global da ULA representada na Figura 9.21. Assim, a unidade aritmtica disponibiliza 8 micro-operaes seleccionadas pelos sinais , a unidade lgica disponibiliza 4 micro-operaes seleccionadas pelos sinais e , e a unidade de deslocamento 8 microoperaes seleccionadas pelos sinais , e . Observe-se que o multiplexador sada da ULA escolhe o resultado de uma destas unidades, e portanto para cada micro-operao apenas se tem que garantir que a unidade responsvel pela sua execuo tem os bits de controlo certos. Ou seja, para cada micro-operao de facto s existe a preocupao de controlar uma destas trs unidades. Isto signica que os sinais de controlo destas unidades podem ser partilhados: , e . A nvel da ULA, a referncia a estes sinais ser , e , respectivamente. Para alm destes 3 sinais de controlo, so necessrios mais 2 sinais, e ,

00000 00001 00010 00011 00100 00101 00110 00111 01-00 01-01 01-10 01-11 10000 10001 10010 10011 10100 10101 10110 10111 11- - -

    

Micro-Operao soma subtraco soma com bit transporte subtraco com bit transporte decremento incremento decremento, se incremento, se complemento conjuno disjuno ou exclusivo deslocamento lgico direita deslocamento lgico esquerda deslocamento aritmtico direita deslocamento aritmtico esquerda rotao direita rotao esquerda rotao direita com transporte rotao esquerda com transporte transferncia

140

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

para controlar os sinais de seleco do multiplexador. Arbitrariamente denese que a combinao 00 selecciona a unidade aritmtica, a combinao 01 a unidade lgica e 10 a unidade de deslocamento. A combinao 11 ca disponvel, tendo-se optado por fazer seleccionar a entrada de forma a se fornecer uma micro-operao que se limita a copiar um operando directamente para a sada. A Tabela 9.4 apresenta as micro-operaes disponibilizadas por esta ULA e qual a palavra de controlo que as dene. A forma como os bits de estado so actualizados depende de qual das unidades da ULA usada. Os bits zero ( ) e sinal ( ) so calculados de igual forma para todas as unidades, de acordo com o denido na Seco 9.4.2. O bit zero um NOR de todos os bits do resultado. Apesar de no ter muito signicado para as micro-operaes lgicas, o bit de sinal sempre calculado devido a ser simplesmente igual ao bit mais signicativo do resultado. J o bit de transporte ( ) calculado para as unidades aritmtica e de deslocamento, e de forma diferente para estas. No caso da unidade aritmtica, este bit o bit de transporte sada do somador, o sinal da Figura 9.22. A forma de clculo deste bit na unidade de deslocamento foi denida na Seco 9.4.5. Tipicamente o bit que sai do operando devido operao de deslocamento. Por ltimo, o bit excesso ( ) s tem sentido nas micro-operaes da unidade aritmtica e nas micro-operaes de deslocamento aritmtico da unidade de deslocamento. Nesta ltima, foi tambm explicado na Seco 9.4.5 que o bit excesso ca a 1 quando uma operao de deslocamento aritmtico provoca uma mudana do bit de sinal. Para a unidade aritmtica, este bit calculado atravs de um EXOR entre os dois bits de transporte mais signicativos do somador da Figura 9.22, como explicado no Captulo 6. Assume-se que os bits de transporte e excesso no so denidos quando a micro-operao executada utiliza uma unidade em que eles no so calculados. Naturalmente, est aqui includa a micro-operao de transferncia, , pois no utiliza nenhuma destas unidades. Na prtica, uma possibilidade, to boa como qualquer outra, assumir que estes cam a zero. O hardware necessrio gerao destes bits de estado e sua seleco sada da ALU no est representado explicitamente nas guras desta seco apenas para as no sobrecarregar.

9.4.7 Exemplo Revisitado: Mximo Divisor Comum


Considerando novamente o exemplo da Seco 9.3.2, ilustra-se agora como seria a realizao de um sistema que calcula o Mximo Divisor Comum entre dois operandos utilizando como unidade de processamento a ULA denida nesta seco. A descrio deste sistema utilizando apenas as micro-operaes que a ULA fornece encontra-se na Figura 9.28. Aqui assumiu-se que a ULA tem associado um banco de registos com pelo menos 3 registos, em que R1 e e , e R3 serve R2 tm inicialmente os dados de entrada, respectivamente como registo temporrio. O resultado nal ca em R2. Pode-se observar que esta descrio um pouco mais complexa do que na verso original. Como mencionado atrs, ao utilizar-se uma unidade de processamento genrica como esta ULA, em oposio a uma unidade de processamento especicamente desenhada para um dado problema, so necessrias mais micro-operaes para atingir um dado objectivo. Neste caso particular, na verso original era possvel no estado fazer uma comparao e efectuar


9.4. UNIDADES LGICAS E ARITMTICAS


141

R1

R3 R1 R2

, R1 , , R1 R2, R3,

R2,

R2,

Figura 9.28: Descrio a nvel de transferncia entre registos do algoritmo para o clculo do mximo divisor comum. ainda no mesmo ciclo uma subtraco ou uma troca de registos, dependendo do resultado desta comparao. Com a ULA, a comparao tem que ser feita primeiro e s no ciclo seguinte se pode fazer uma nova operao. No cdigo da Figura 9.28 foi feita uma optimizao trivial pois como a comparao tem que ser realizada atravs de uma subtraco, caso o resultado ainda seja positivo a subtraco j est feita. Repare-se que caso o resultado seja negativo, h que somar a R3 o valor de R2 para recuperar o valor inicial de R1. A outra diferena est em que na ULA no possvel fazer uma troca de valores entre dois registos. Assim, so necessrios trs ciclos de relgio e um registo temporrio para efectuar esta operao. A sequncia de operaes a realizar est descrita no uxograma da Figura 9.29. Ainda um uxograma simples, pelo que qualquer das tcnicas de projecto de mquinas de estados pode ser utilizada para a unidade de controlo. Opta-se aqui por recorrer a um controlo micro-programado (ver Seco 8.3.3). A palavra de controlo ter que seleccionar a operao da ULA, os dois registos com os operandos e o registo destino. Para a ULA so necessrios 5 bits para a escolha da micro-operao, conforme indicado na Figura 9.21. Assumindo os 3 registos do banco de registos (R1, R2 e R3), bastam 2 bits para seleccionar cada um dos registos de cada operando e do registo para guardar o resultado. No total, a palavra de controlo ser composta por 11 bits:
10 9 8 7 6 5 4 3 2 1 0

operao ULA

reg A

reg B

O nmero de estados no uxograma da Figura 9.29 cinco, o que corresponde ao nmero de posies na ROM de controlo, pelo que o nmero de bits para os endereos de controlo ser trs. Pode-se vericar neste uxograma pode ter 3 estados seguintes diferentes. Portanto, na microque o estado instruo tero de existir pelo menos dois endereos seguintes (assumindo que o terceiro pode ser obtido por incremento do CAR). Outra consequncia desta observao que para decidir entre 3 endereos so necessrios 2 bits para a escolha do endereo seguinte a carregar no CAR. Por ltimo, as condies de salto so: o sinal de controlo no estado ; os bits de estado e em ; o estado seguinte em e (sem salto); salto incondicional em . Para cobrir estas quatro hipteses so necessrios 2 bits de controlo para seleccionar a condio de salto. Finalmente, ter que existir um bit para a sada de controlo .

1. 2. 3. 4. 5. 6. 7. 8.

: : : . : . : : : :

          

, ,

, ,

dest

 

142

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS

T0 fim

0 inicio 1 T1 R1 R1-R2

1 Z 0 0 N 1 R3

T2 R1+R2 T3

R1

R2 T4

R2

R3

Figura 9.29: Fluxograma da unidade de controlo para o mximo divisor comum. Adicionando palavra de controlo os dois endereos seguintes para o CAR ( e ), os dois bits para a seleco da condio de salto ( ) e o bit da sada de controlo, tem-se o formato completo da micro-instruo para a unidade de controlo:
19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3

A Figura 9.30 apresenta um controlador micro-programvel ajustado s condies deste problema. sada da ROM de controlo tem-se a micro-instruo com a palavra de controlo que enviada directamente para a unidade de processamento, com os campos e que guardam 2 possveis endereos seguintes para o CAR e com o campo SEL que indica qual a condio de salto. Para este campo foi escolhido arbitrariamente que: 00 - corresponde a um salto incondicional. A sada do multiplexador MUXS tem sempre o valor 00, combinao que selecciona o campo da microinstruo.

ES0

ES1

SEL

operao ULA

reg A

reg B

dest

9.4. UNIDADES LGICAS E ARITMTICAS


destino reg B reg A 2 Op ULA 5 fim SEL 2 3 3 2 2 3 +1 2 1

143

MUX C

C A R

ROM de Controlo

19

0 Sel ES0 ES1 N Z inicio 0 1 0 0 0 3 2 1 0

MUX S
Sel

Figura 9.30: Unidade de controlo micro-programada para o mximo divisor comum. 01 - corresponde a no haver salto. O CAR simplesmente incrementado, porque o MUXS apresenta sempre o valor 10 sada, o que leva a que a entrada CAR+1 seja seleccionada no MUXC. 10 - corresponde a testar a entrada de controlo . Quando =0 seleccionado no MUXC a entrada e portanto d-se o salto. Se =1, o CAR incrementado.

, o salto feito para o endereo no campo , combinao impossvel.

, no h salto e o CAR simplesmente incrementado.

Falta agora denir o micro-programa que realiza o uxograma da Figura 9.29 (as posies sublinhadas indicam valores que so de facto indiferenas):
Posio
ROM

ES0

ES1

SEL

op ULA

reg A

01

Neste micro-programa existe uma correspondncia entre a posio de endereo da ROM de controlo e o ndice do estado do uxograma. Assim: Posio 0: 1, : CAR 0, : CAR CAR+1 Neste estado a unidade de controlo est constantemente a carregar o CAR com 0 at que a entrada venha a 1, altura em que se deixa incrementar o CAR. Para isso, o campo SEL tem que ter o valor 10 de forma
 

0: 1: 2: 3: 4:

00 01

00

10 11 01 01 00

1 0 0 0 0

00001 00000 11000 11000

01 01 10 11

10 10

, o salto feito para o endereo no campo

reg B


. .

11 - corresponde a testar simultaneamente os bits de estado


. Se:
reg dest

00 01 11 01 10

144

CAPTULO 9. CIRCUITOS PARA TRANSFERNCIA DE DADOS


a permitir que o sinal passe no multiplexador MUXS para servir de seleco no MUXC. Enquanto for 0, o multiplexador MUXC selecciona a entrada 0, campo ES0 da micro-instruo que contm o endereo 0. Se vier a 1, ento a entrada 3 do MUXC que seleccionada. Nesta espera activa, a sada de controlo mantida a 1 e a unidade de processamento no faz nenhuma operao, o que se consegue especicando como registo destino um registo no existente, neste caso utilizou-se o ndice 0.

Posio 1: R1 R1 R2, : CAR 0, : CAR 1, : CAR CAR+1 Aqui a ULA faz a subtraco entre R1 e R2, guardando-se o resultado em R1. Caso o resultado seja 0, o algoritmo terminou e portanto carregao endereo 0 para voltar ao incio (no se no CAR atravs do campo multiplexador MUXS seleccionada a entrada 3 e no MUXC a entrada 1). Enquanto o resultado for positivo (bit de estado ), a unidade de controlo mantm-se no endereo 1 por carregamento do campo no CAR. Se o resultado for negativo, em vez da subtraco deve-se trocar os valores de R1 e R2, o que feito a partir do endereo 2, ou seja, por incremento do CAR. O teste que determina qual destes trs endereos seguintes usado conseguido por SEL=11. Posio 2: R3 R1 R2, CAR CAR+1 Neste estado, colocado em R3 o valor que R1 tinha antes da subtraco, somando-lhe R2. O CAR simplesmente incrementado, o que se consegue xando a entrada 1 do multiplexador MUXS. Posio 3: R1 R2, CAR CAR+1 Aqui h uma simples transferncia entre registos, o valor de R2 copiado para R1. Novamente incrementa-se o CAR. Posio 4: R2 R3, CAR 1 Finalmente neste estado, efectua-se outra simples transferncia entre registos, copiando-se o valor de R3 para R2. Executa-se um salto incondicional para o estado no endereo 1, o que se consegue seleccionando a entrada 0 do multiplexador MUXS, obrigando seleco do campo ES0 da micro-instruo.

 

Captulo 10

Arquitectura de um Computador
Embora um sistema digital para qualquer funo especca possa ser concebido de raiz interligando registos e blocos funcionais, usando as tcnicas estudadas no Captulo 9, por razes de exibilidade prefervel dispor de um sistema adaptvel e facilmente reprogramvel. Um computador exactamente isso, um sistema digital cujo funcionamento especicado por um programa guardado em memria. Este captulo descreve de uma maneira resumida a evoluo dos computadores e a sua organizao interna. Um computador um sistema digital programvel atravs de uma sequncia de instrues guardadas em memria. Atravs desta sequncia de instrues, o computador instrudo para executar operaes elementares de manipulao de dados. Um elemento crucial num computador a sua unidade central de processamento, ou processador. O processador, em si mesmo, um sistema digital constitudo por um circuito de dados e um circuito de controlo, tal como os sistemas estudados no captulo anterior. A sua exibilidade resulta do facto de estes circuitos serem projectados por forma a poderem executar todas as operaes bsicas de manipulao de dados que so necessrias para a execuo de tarefas de processamento de dados, por mais complexas que estas sejam.

10.1 Perspectiva Histrica


A ideia de um sistema de processamento de informao que seja recongurvel atravs de um programa guardado em alguma forma de memria muito antiga, remontando aos princpios do sculo XIX. Charles Babbage projectou o primeiro computador mecnico capaz de desempenhar sequncias de operaes automaticamente. Este computador, conhecido como o difference engine, usava uma tecnologia totalmente baseada em elementos mecnicos. O sistema podia ser programado para construir tabelas matemticas, de acordo com instrues especicadas pelo programador. A complexidade dos sistemas mecnicos necessrios realizao de funes matemticas fez com que computadores mais poderosos no viessem a ser fabricados at existncia de tecnologias 145

146

CAPTULO 10. ARQUITECTURA DE UM COMPUTADOR

baseadas em circuitos electrnicos, embora tenham sido feitos planos para um computador mecnico ainda mais poderoso, denominado analytical engine. Embora tenham existido diversas tentativas de construo de computadores electrnicos digitais, a primeira mquina a funcionar efectivamente foi o ENIAC, que cou operacional em 1946 e podia ser programado para calcular tabelas matemticas relacionadas com aplicaes militares. Este computador usava uma tecnologia baseada em vlvulas electrnicas e era programado atravs de um conjunto de cabos que, conforme estivessem ligados ou desligados, especicavam o contedo da memria do programa. Os seus resultados eram escritos em cartes perfurados ou numa mquina de escrever elctrica. O ENIAC guardava o programa e os dados numa memria, que, para a poca, era de alta velocidade. Este conceito de usar a memria para guardar tanto o programa como os dados atribuda a John von Neumann, que trabalhou no projecto. Por essa razo, chama-se a este tipo de arquitectura, em que uma s memria guarda tanto os dados como os programas, uma arquitectura de von Neumann. Esta arquitectura veio a impr-se alternativa de ter duas memrias separadas para os dados e para o cdigo, que conhecida como arquitectura de Harvard. Um nmero de outros computadores, cada vez mais avanados, mas ainda pertencentes ao que se convencionou designar por primeira gerao, vieram a ser projectados e construdos, mas a utilizao de vlvulas de vcuo impunha limites srios abilidade e ao tamanho mnimo com que podiam ser construdos. Estes computadores ocupavam tipicamente uma sala de grandes dimenses e podiam funcionar continuamente apenas durante poucas horas, at que um dos sub-sistemas deixasse de funcionar por falha de uma vlvula. A utilizao de transstores como tecnologia de base veio permitir a evoluo para a segunda gerao de computadores, que j usavam tecnologias de discos magnticos para guardar a informao de forma no voltil e tinham memrias baseadas em ferrites. A terceira gerao de computadores apareceu com o advento dos circuitos integrados, em 1961, permitindo uma grande reduo no tamanho dos computadores e o consequente aumento do nmero de portas lgicas que era possvel empacotar num dado volume. Um dos computadores que mais sucesso alcanou foi o IBM/360. Com este computador, a IBM introduziu o conceito de separar o conjunto de instrues da implementao fsica de um computador, criando assim a primeira de uma srie de famlias que executavam o mesmo conjunto de instrues em processadores com diferentes organizaes internas. A introduo deste conceito permitiu uma muito maior reutilizao do esforo de programao de sistemas, uma vez que um programa codicado para um computador de uma dada famlia passou a poder ser executado por outros computadores da mesma famlia. O desenvolvimento da tecnologia e a criao do circuito integrado com grande escala de integrao (VLSI1 ) veio permitir a criao de processadores inteiramente contidos num s circuito integrado, o que fez baixar o preo de um computador por forma a permitir o seu uso como um computador pessoal. Embora o primeiro processador disponvel num nico circuito integrado tenha sido o 4004, da Intel, e o primeiro computador pessoal tenha sido baseado no processador 8080, do mesmo fabricante, o passo mais importante para
1 Very

Large Scale Integration.

10.2. TIPOS DE COMPUTADORES

147

a divulgao deste tipo de computadores ter sido a denio, pela IBM, de um modelo padro para computadores pessoais, ou PCs2 , baseados no processador 8086. O sucesso deste tipo de computadores, baseados em diversos processadores desta famlia da Intel (80286, 80386, 80486, Pentium, Pentium II, Pentium III e Pentium IV), conhecido.

10.2 Tipos de Computadores


Apesar da dominncia, em termos numricos, dos computadores pessoais baseados em processadores da Intel, continuam a existir alternativas baseadas noutros tipos de processadores. Entre estas contam-se os computadores da Apple, baseados inicialmente nos processadores da srie 680X0 da Motorola e, mais recentemente, na famlia de processadores PowerPC, tambm da Motorola. Com os computadores pessoais coexistem outros tipos de computadores, tais como servidores baseados em processadores MIPS e Compaq (antes Digital), embora, neste momento, a diferena entre servidores e computadores pessoais tenha mais a ver com o sistema operativo que executam do que com as capacidades intrnsecas do processador. A criao dos circuitos integrados veio tambm possibilitar a utilizao de processadores para controlar sistemas electrnicos autnomos. Estes processadores, geralmente conhecidos como micro-controladores, so tipicamente mais simples, menos dispendiosos e mais exveis no que respeita aos sistemas de entrada/sada, o que permite o seu uso em aplicaes tais como o controlo de electrodomsticos, onde o baixo preo um importante factor. Processadores como o 8051, tambm da Intel, so de facto computadores feitos num nico circuito integrado, uma vez que incluem num nico circuito o processador, a memria e os meios de comunicao com o exterior. Um outro tipo de processadores dedicados so os processadores de sinal, que so projectados por forma a serem extremamente ecientes em aplicaes de processamento de sinal, e so comummente usados em sistemas para telecomunicaes tais como telefones e televises.

10.3 Organizao Interna de um Computador


Como foi referido acima, um computador um sistema digital programvel atravs de um sequncia de instrues guardada em memria. Estas instrues especicam qual a sequncia de operaes de manipulao de dados que deve ser executada. Cada instruo especica, de forma nica, qual a operao que deve ser efectuada e quais os operandos aos quais a mesma deve ser aplicada. Por exemplo, uma dada instruo poder especicar que o contedo da posio 10FAh da memria deve ser somado ao contedo do registo R3, devendo o resultado ser guardado na mesma posio de memria, 10FAh. A unidade que processa a sequncia de instrues a unidade central de processamento, UCP (em ingls, Central Processing Unit ou CPU). As unidades centrais de processamento tm capacidade para executar um conjunto de instrues que, embora variando fortemente de computador para computador,
2 Personal

Computer.

148

CAPTULO 10. ARQUITECTURA DE UM COMPUTADOR

tem um certo nmero de caractersticas comuns. A UCP constituda por circuitos combinatrios que permitem efectuar operaes lgicas e aritmticas, e por registos que permitem guardar os dados e os resultados dessas operaes. Nos computadores modernos, a sequncia de instrues a executar guardada em memria. Segundo o modelo de Von Neumann, esta memria serve tambm para guardar os dados, quer os de entrada no programa quer os que resultam da execuo do mesmo. As instrues esto guardadas sequencialmente em memria, e so, de uma forma geral, executadas pelo ordem em que se encontram. No entanto, existem tambm instrues que alteram a ordem de execuo. Por exemplo, uma dada instruo poder especicar que a prxima instruo a ser executada a instruo guardada na posio de memria AAF0h. A memria encontra-se ligada unidade central de processamento atravs de dois barramentos, tal como est descrito na Figura 10.1.
UNIDADE CENTRAL DE PROCESSAMENTO ENDEREOS E CONTROLO DADOS

MEMORIA

Figura 10.1: Interligao da unidade central de processamento com a memria. Esquematicamente, a execuo de uma instruo guardada em memria passa pelas seguintes fases: A UCP envia para a memria o endereo da prxima instruo a executar e recebe uma palavra de memria que guarda a codicao da instruo a executar. A UCP descodica a instruo, identicando quais os operandos e qual o tipo de operao. A UCP faz um ou mais acessos memria para carregar os operandos especicados pela instruo para registos internos. Na posse de todos os operandos, a unidade central de processamento executa a operao especicada na instruo. Aps obter o resultado, a UCP escreve o mesmo em memria, caso seja necessrio, ou num registo interno.

Esta descrio deve ser vista como uma descrio do princpio geral do funcionamento, podendo no se aplicar directamente a processadores modernos, que so extremamente complexos e que usam um nmero de diferentes tcnicas para acelerar a velocidade de processamento.

10.4. INTERACO COM O EXTERIOR

149

Existem, no entanto, algumas alternativas a esta organizao simples que importante referir nesta fase e que so tipicamente utilizadas em processadores comerciais. Em primeiro lugar, no geralmente verdade que cada posio de memria seja suciente para guardar a totalidade de uma instruo ou de cada operando. Assim, por vezes necessrio fazer vrios acessos a memria para carregar uma instruo ou um operando. Em segundo lugar, existem numerosos casos em que o uxo normal de funcionamento descrito acima tambm no respeitado. Existem muitos processadores que, por razes de ecincia, tentam executar mais que uma operao em paralelo. Nestes casos, descritos em mais detalhe no Captulo 15, a unidade central de processamento pode intercalar as diversas fases de execuo de diferentes instrues, podendo, por exemplo, carregar a prxima instruo a executar antes de escrever o resultado da anterior. Uma outra alterao signicativa organizao descrita acima a no utilizao de uma nica memria para guardar os dados e o programa. comum, especialmente em micro-controladores, utilizar a arquitectura de Harvard descrita atrs, ou seja, duas memrias diferentes, uma para os dados e outra para o programa. Em alguns casos isto justica-se pelo facto de o programa ser xo e poder ser guardado em memria no voltil, enquanto que os dados tm de ser guardados em memria de leitura e escrita.

10.4 Interaco com o Exterior


A unidade central de processamento e a memria, ilustradas na Figura 10.1 so o ncleo central de um computador, mas, por si s, no podem desempenhar qualquer funo til. Para comunicar com os utilizadores, o computador usa diversos dispositivos perifricos tais como teclados, ratos, monitores e impressoras. Usa tambm discos e tas magnticas para armazenar dados de forma permanente e interfaces de rede para comunicar com outros computadores. Estes dispositivos encontram-se ligados a portos de entrada/sada (em ingls, Input/Output ports ou IO ports). Os portos de entrada e sada controlam estes perifricos usando protocolos que variam de perifrico para perifrico. Do ponto de vista da UCP, os portos de entrada/sada so acedidos, quer para leitura quer para escrita, de uma forma semelhante memria. Conceptualmente, a cada porto de entrada/sada est atribudo um ou mais endereos, usados pela UCP quando pretende ler dados desse porto ou escrever dados para o mesmo. A UCP, a memria e os portos de entrada/sada so tipicamente acondicionados numa nica unidade fsica, para que possam comunicar atravs de barramentos curtos e de alta velocidade, tal como est ilustrado na Figura 10.2. A distino entre um acesso a memria e um acesso a um porto de entrada/sada feita, quer pelo endereo utilizado, quer pelo valor das linhas de controlo, como se ver no Captulo 14. O tratamento que cada porto de entrada/sada d aos dados depende do perifrico que lhe est ligado. Por exemplo, um porto de entrada/sada que corresponda a uma porta srie envia os dados recebidos para uma linha srie. Esses dados so depois interpretados por um perifrico que entenda o protocolo srie, como, por exemplo, um modem. Por seu lado, os dados enviados

150

CAPTULO 10. ARQUITECTURA DE UM COMPUTADOR

UNIDADE CENTRAL DE PROCESSAMENTO


ENDEREOS E CONTROLO

MEMRIA
DADOS

PORTO SRIE

PORTO PARALELO

PLACA GRFICA

Figura 10.2: Processador, memria e portos de entrada/sada. pelo rato pela linha srie so lidos do porto de entrada/sada pela UCP quando faz um acesso ao porto correspondente. Outros portos de entrada/sada tratam os dados de forma diferente. Um porto paralelo pode ser usado para comunicar com uma impressora, atravs de um conjunto de linhas. Outros portos correspondem a perifricos mais complexos, como, por exemplo, placas grcas e controladores de disco. Uma placa grca interpreta os dados recebidos como comandos para desenhar pontos no monitor e gera o sinal vdeo que faz aparecer no mesmo a imagem correspondente, enquanto que um controlador de disco escreve os dados recebidos em localizaes especcas do disco magntico ou l os dados guardados nas localizaes especicadas pela UCP. Na prtica, por razes de desempenho e de modularidade do sistema, existem diversas alternativas para a leitura e escrita de dados em portos de entrada/sada, que sero estudadas em detalhe no Captulo 14. A Figura 10.3 descreve a forma como os perifricos exteriores so ligados ao computador. Note-se que, embora os perifricos sejam por vezes ligados unidade central atravs de cabos, existem diversos perifricos que se encontram sicamente dentro da unidade que alberga a UCP. Em geral, discos magnticos, leitores de discos compactos e unidades de discos exveis esto alojadas dentro da unidade onde se encontra a unidade central de processamento, embora sejam perifricos ligados da mesma forma que um rato ou uma impressora, que so externos.

10.5. NVEIS DE ABSTRACO DE UM COMPUTADOR

151

CABO VDEO

LINHA PARALELA

LINHA SRIE

Figura 10.3: Computador e perifricos.

10.5 Nveis de Abstraco de um Computador


Um computador geralmente utilizado a um nvel de abstraco muito elevado. A maioria dos utilizadores de um computador no conhece, nem deseja conhecer, qualquer detalhe da sua organizao interna ou da sua arquitectura. Tipicamente, um utilizador de um computador faz uso do mesmo executando uma aplicao, como, por exemplo, um editor, um processador de texto ou uma folha de clculo. Estas aplicaes foram desenvolvidas com o objectivo de tornar os computadores acessveis a utilizadores que no saibam, ou no queiram, programar, e, atravs da utilizao das mais recentes tecnologias de interaco com o utilizador, conseguiram de facto tornar a utilizao dos computadores acessvel a todos. Porm, um computador , de facto, um sistema digital programvel, e, como tal, pode ser utilizado, programado ou congurado a diversos nveis de abstraco. A Figura 10.4 ilustra os diversos nveis de abstraco a que um computador pode ser visto. O nvel superior, o da aplicao, j foi referido. Um utilizador que utilize o computador a este nvel interage com uma aplicao, tipicamente utilizando metforas da vida real, tais como pastas, reas de trabalho, folhas, etc. Na maior parte dos casos, esta aplicao foi programada usando uma linguagem de alto nvel, tal como Java ou C. da responsabilidade dos programadores interpretarem as especicaes que denem o funcionamento de uma aplicao e escreverem o cdigo em linguagem de alto nvel que as realiza. Este cdigo de alto nvel no directamente executado pelo computador,

152
NVEL 5

CAPTULO 10. ARQUITECTURA DE UM COMPUTADOR


APLICAO PROGRAMADOR NVEL 4 PROGRAMA EM LINGUAGEM DE ALTO NVEL COMPILADOR NVEL 3 PROGRAMA EM LINGUAGEM ASSEMBLY ASSEMBLER NVEL 2 PROGRAMA EM LINGUAGEM MQUINA PROJECTISTAS DO PROCESSADOR

NVEL 1

MICRO-PROGRAMA EM LINGUAGEM DE TRANSFERNCIA DE REGISTOS

PROJECTISTAS DE SISTEMAS DIGITAIS

NVEL 0

SISTEMA DIGITAL

Figura 10.4: Nveis de abstraco a que um computador pode ser utilizado. sendo primeiro traduzido, por um outro programa, chamado compilador, para uma linguagem muito mais simples, a linguagem assembly. Esta linguagem permite apenas especicar operaes muito simples, tais como uma soma de duas posies de memria ou a cpia de uma posio de memria para outra. Apesar da sua simplicidade, a linguagem assembly no ainda directamente executada pelo processador. Tem de ser traduzida para linguagem mquina, que, essa sim, executada directamente pelo processador. Esta linguagem mquina , normalmente, guardada em memria e representa um programa que executado directamente pelo processador. A traduo de linguagem assembly para linguagem mquina realizada por um outro programa, o assembler. Existem ainda nveis de abstraco mais baixos que a linguagem mquina. Os bits de um programa em linguagem mquina no so, em geral, usados directamente para controlar os registos e circuitos de dados do processador. Na maioria dos casos, a cada instruo em linguagem mquina correspondem diversas operaes elementares de manipulao de dados e de transferncia entre registos. Estas operaes constituem o micro-programa, e so denidas pelos projectistas do processador. Finalmente, denidas as micro-operaes que tm de ser suportadas pelo hardware, h que projectar o sistema digital que as realiza. Este projecto tipicamente efectuado por engenheiros especializados no projecto de sistemas digitais, que podem ou no ser os mesmos que projectaram e deniram o processador a um nvel superior de abstraco. Esta descrio simplicada do funcionamento de um computador omite diversos aspectos de maior ou menor importncia, existindo, no entanto, um deles que no pode ser ignorado, mesmo numa descrio supercial como a que foi feita. Quase todos os computadores executam diversos programas, quer em simultneo quer em sequncia. A execuo dos diversos programas controlada por um programa especial, o sistema operativo do computador. O sistema operativo ele mesmo um programa que tem como misso agendar

10.6. COMPONENTES DE UM COMPUTADOR

153

e gerir as diversas tarefas que o processador tem de executar. O estudo dos sistemas operativos merece, por si s, um livro, pelo que este assunto no abordado com qualquer profundidade neste contexto. Porm, de um ponto de vista simplista, o sistema operativo simplesmente um programa que distribui o tempo do processador entre as diversas tarefas que ele tem de efectuar. Estas tarefas incluem no s a execuo de aplicaes, mas tambm o atendimento de pedidos de dispositivos perifricos, a gesto do sistema de memria e a gesto de recursos partilhados entre as diversas aplicaes e/ou utilizadores. Conceptualmente, um processador pode ser utilizado ou programado a qualquer dos nveis superiores ao nvel 0. Este nvel , tradicionalmente, xo e inaltervel. No entanto, existem tecnologias recentes que permitem recongurar as ligaes entre os componentes digitais por forma a conseguir alterar a funcionalidade dos mesmos. A programao ou utilizao a nveis superiores requer, tipicamente, menos esforo por parte do utilizador ou programador, mas o uso destas tcnicas de baixo nvel permite atingir grande ecincia.

10.6 Componentes de um Computador


Os captulos que se seguem a este so dedicados ao estudo da arquitectura de computadores. Comea-se por analisar o funcionamento das unidades centrais de processamento do ponto de vista do programador em linguagem assembly. Para tal, o Captulo 11 descreve a forma como uma tpica unidade central de processamento programada a este nvel, usando para tal um hipottico microprocessador, o processador P33 . O processador P3 semelhante a processadores comerciais, exibindo muitas das suas caractersticas, evitando, no entanto, as idiossincrasias inerentes a estes. Alm de se apresentar a linguagem assembly deste processador, descreve-se tambm a forma como uma instruo assembly traduzida para linguagem mquina, sendo assim abordados os nveis 2 e 3 da Figura 10.4. A opo de usar um processador no comercial para ilustrar o funcionamento das unidades centrais de processamento foi tomada com a conscincia que uma soluo que tem vantagens e desvantagens. A desvantagem mais signicativa a de o leitor no obter o valor acrescentado de conhecer profundamente um processador real, o que poderia ser de grande utilidade no futuro. Entenderam os autores que esta desvantagem seria mais do que compensada pelas vantagens pedaggicas de no ter de lidar, durante o processo de aprendizagem, com as complexidades inerentes ao uso de um processador comercial, muitas delas motivadas por razes puramente histricas. Optou-se assim por denir este processador, utilizando uma abordagem em que os critrios de desempenho, realismo ou elegncia assumiram uma posio secundria face aos critrios de clareza pedaggica e simplicidade. Na opinio dos autores, esta opo foi justicada pelo resultado nal obtido, um processador simples, fcil de programar e com uma arquitectura de grande regularidade, o que permite simplicar grandemente o processo de aprendizagem. Uma unidade central de processamento, tal como o processador P3, um sistema digital complexo, que, embora sendo projectado usando as tcnicas
3 P3

= PPP = Pequeno Processador Pedaggico.

154

CAPTULO 10. ARQUITECTURA DE UM COMPUTADOR

descritas em captulos anteriores, merece um estudo mais detalhado. Assim, a estrutura interna do processador P3, ou seja, a sua micro-arquitectura, descrita no Captulo 12, sendo este captulo usado no s para descrever este processador em particular, mas tambm para introduzir um nmero de tcnicas de projecto de processadores que so utilizadas num grande nmero de sistemas. Este captulo cobre assim os nveis 0 e 1 da Figura 10.4. O Captulo 13 descreve a forma como o sistema de memria de um processador moderno se encontra estruturado. De facto, a descrio feita acima apresenta uma viso excessivamente simplicada do sistema de memria de um computador moderno. O Captulo 14 descreve, com algum detalhe, a forma como a unidade central de processamento se interliga com os perifricos e quais os mtodos e protocolos de comunicao mais utilizados. Descreve tambm, de forma necessariamente breve, alguns perifricos que so especialmente importantes, tais como discos e teclados. Finalmente, o Captulo 15 serve de breve introduo a tpicos mais avanados da rea da arquitectura de computadores. Neste captulo, sero abordados, muito brevemente, tpicos importantes para o desempenho de computadores, como pipelining, as losoas CISC e RISC, assim como diversas tcnicas que so usadas no projecto dos processadores actuais.

10.7 Sumrio
Este captulo introduz o conceito de computador como um sistema digital programvel e descreve, de forma breve, a evoluo histrica dos computadores. Descreveu-se brevemente a arquitectura de um computador em termos dos seus diversos componentes, entre os quais se contam necessariamente a unidade central de processamento (UCP, ou processador), a memria e os portos de entrada/sada ligados a dispositivos perifricos. Finalmente, foram referidos os diversos nveis de abstraco a que um computador pode ser conceptualizado, nveis estes que vo desde o nvel da aplicao at ao nvel da transferncia de dados entre registos de um sistema digital.

Captulo 11

Conjuntos de Instrues
Este captulo dedicado ao estudo de algumas alternativas possveis para a arquitectura do conjunto de instrues de um processador. Como caso de estudo concreto, utiliza-se o conjunto de instrues do processador P3, um processador de 16 bits, micro-programado, concebido unicamente com ns didcticos, mas que exibe muitas das caractersticas de processadores comerciais simples. Para cada processador ou famlia de processadores denido um conjunto de instrues. A escolha de quais as instrues que devem ser includas no conjunto de instrues de um processador representa um problema complexo e intimamente relacionado com as funcionalidades pretendidas e a tecnologia utilizada. Este problema resolvido por equipas de projectistas, os arquitectos do conjunto de instrues, aps efectuarem uma anlise das alternativas existentes e das limitaes impostas pelas especicaes.

11.1 Linguagens de Programao


Como foi visto no captulo anterior, um computador pode ser programado usando linguagens com nveis de abstraco muito diversas. O nvel de abstraco mais baixo que se considera neste captulo o da linguagem mquina. Cada instruo de linguagem mquina constituda por um conjunto de bits, directamente interpretvel pelo processador. Considere-se, a ttulo de exemplo, a sequncia de instrues de linguagem mquina do processador P3, representada na Tabela 11.1, que soma trs nmeros inteiros guardados nas posies de memria N1=00A0h, N2=00B0h, N3=00B1h, e guarda o complemento do resultado na posio N4=F000h. Esta sequncia de bits no parece ter qualquer signicado para um programador, embora especique de forma no ambgua as operaes a efectuar. Com efeito, um programa em linguagem mquina tem a desvantagem de ser muito difcil de entender por seres humanos. Por essa razo, programar directamente em linguagem mquina exige dos programadores um esforo muito grande de memorizao e de consulta de documentao, revelando-se muito ineciente em termos do tempo que necessrio investir. No nvel de abstraco imediatamente superior encontra-se a linguagem assembly. Cada instruo nesta linguagem corresponde a uma instruo de linguagem mquina, mas, em vez de ser especicada em termos de zeros e 155

156 Endereo Base 2 0001000000000000 0001000000000001 0001000000000010 0001000000000011 0001000000000100 0001000000000101 0001000000000110 0001000000000111 0001000000001000

CAPTULO 11. CONJUNTOS DE INSTRUES


Valor Base 2 1010111001110000 0000000010100000 1000011001110000 0000000010110000 1000011001110000 0000000010110001 0100000000000001 1010110001110000 1111000000000000

Base 16 1000 1001 1002 1003 1004 1005 1006 1007 1008

Base 16 AE70 00A0 8670 00B0 8670 00B1 4001 AC70 F000

Tabela 11.1: Instrues em linguagem mquina do processador P3. uns, especicada utilizando mnemnicas e nomes simblicos. Por exemplo, a instruo de somar dois nmeros guardados nos registos R1 e R2 e depositar o resultado em R1 poder ser codicada como ADD R1,R2. Para o programador, muito mais fcil memorizar esta instruo do que o seu equivalente em linguagem mquina que , no caso do P3, 1000011001000010, ou seja, 8642h. Ao programa descrito em linguagem mquina na Tabela 11.1 corresponde o programa em assembly descrito na segunda coluna da Tabela 11.2. Em Endereo 1000h 1001h 1002h 1003h 1004h 1005h 1006h 1007h 1008h Cdigo assembly MOV R1, M[00A0h] ADD ADD NEG MOV R1, M[00B0h] R1, M[00B1h] R1 M[F000h], R1 Cdigo mquina AE70 00A0 8670 00B0 8670 00B1 4070 AC70 F000

Tabela 11.2: Correspondncia entre as instrues assembly e mquina. geral, alm do uso de mnemnicas para as instrues, as linguagens assembly permitem denir nomes simblicos para endereos de memria, constantes numricas, constantes alfa-numricas e endereos. Neste exemplo, usaramse directamente os endereos pretendidos, mas teria sido possvel denir nomes simblicos N1, N2, N3 e N4 para representarem os valores N1=00A0h, N2=00B0h, N3=00B1h e N4=F000h usando a directiva EQU da linguagem assembly. Admitiu-se, no exemplo anterior, que o programa comeava na posio 1000h, o que em assembly se especica usando a directiva ORIG. Se se usarem estas directivas, a seguinte sequncia de instrues assembly corresponde exactamente sequncia de instrues mquina da Tabela 11.1. Por anlise e comparao entre o cdigo do Programa 11.1 e as instrues mquina da Tabela 11.1, possvel vericar que, embora ambos descrevam exactamente a mesma sequncia de instrues, o cdigo em assembly muito mais compreen-

11.1. LINGUAGENS DE PROGRAMAO


ORIG N1 N2 N3 N4 1000h EQU EQU EQU EQU MOV ADD ADD NEG MOV

157

00A0h 00B0h 00B1h F000h R1, M[N1] R1, M[N2] R1, M[N3] R1 M[N4], R1

Programa 11.1: Programa em assembly que soma trs nmeros em memria.

svel e fcil de editar, depurar ou modicar. Note-se que a cada instruo pode corresponder uma ou mais palavras de memria, dependendo do tipo de instruo e dos seus operandos. Pode tambm observar-se que as directivas no se traduzem directamente para instrues de linguagem mquina, mas podem traduzir-se na ocupao de uma ou mais posies de memria. Quando programa em assembly, o programador continua a ter de conhecer a arquitectura e os recursos do processador de forma detalhada, uma vez que as instrues assembly s fazem sentido para aquele processador. Embora semelhantes entre si, as linguagens assembly so diferentes de processador para processador. A traduo de um programa escrito em assembly para um programa escrito em linguagem mquina um processo relativamente simples, uma vez que a cada instruo assembly corresponde uma e uma s instruo em linguagem mquina. Esta traduo pode ser feita manualmente, mas geralmente efectuada por um programa chamado assembler. O assembler aceita um programa escrito em assembly e gera um programa em linguagem mquina, processando as directivas e traduzindo as instrues descritas no cheiro fonte. A Seco 11.8 descreve em detalhe o funcionamento de um assembler para o processador P3. Como foi referido no captulo anterior, a programao de um computador pode ser feita utilizando nveis de abstraco superiores usando linguagens de alto nvel que so, na maior parte dos casos, independentes do processador. Exemplos de linguagens deste tipo so as linguagens C, Pascal e Java. Programas escritos nestas linguagens tm de ser traduzidos para linguagem assembly e da para linguagem mquina, antes de serem executados pelo processador. Este processo de traduo muito mais complexo que o referido anteriormente, e efectuado por programas chamados compiladores. Em geral, a cada instruo de uma linguagem de alto nvel correspondem vrias instrues assembly. Em alguns casos, uma linguagem de alto nvel poder ser interpretada directamente por um programa, o interpretador, no havendo assim necessidade de compilao, mas conduzindo a uma execuo do programa consideravelmente mais lenta. Linguagens que, embora possam ser compiladas, so muitas vezes utilizadas desta forma so o LISP e o Scheme, para as quais existem interpretadores muito ecientes. Tambm o Java por vezes usado com um interpretador, embora o programa original seja, neste caso, traduzido para

158

CAPTULO 11. CONJUNTOS DE INSTRUES

uma linguagem intermdia que se aproxima de linguagem mquina.

11.2 Instrues Assembly


Uma vez que existe uma correspondncia directa entre uma instruo assembly e uma instruo em linguagem mquina, usar-se- a partir de agora o termo instruo para designar qualquer uma das duas. Tipicamente, o contexto ser suciente para indicar se a referncia a uma instruo de linguagem mquina ou a uma instruo assembly. Uma instruo guardada em memria como uma combinao de bits que especica, de forma nica, uma sequncia de operaes de transferncias entre registos que deve ser executada pelo processador. De um modo geral, as instrues so executadas pela ordem em que esto ordenadas em memria. Em diversos casos, porm, esta sequncia de execuo alterada, quer porque executada uma instruo de controlo, quer porque o processador recebe um pedido externo e tem de alterar a ordem de execuo das instrues. Existem trs grandes classes de instrues: As instrues de transferncia de dados transferem informao de um local (registo, posio de memria ou porto de entrada/sada) para outro, sem alterar a informao original. As instrues de manipulao de dados aplicam um operador aritmtico ou lgico ao operando ou operandos, especicados pela sua localizao, e guardam o resultado da mesma. As instrues de controlo permitem alterar a sequncia normal de instrues e denir qual a prxima instruo a ser executada.

As instrues de transferncia de dados so usadas para copiar ou salvaguardar dados. So tipicamente usadas para copiar valores para registos ou posies de memria onde possam ser manipulados, para criar diversos tipos de estruturas de dados como, por exemplo, arrays e listas, e, ainda, para efectuar operaes de entrada e sada. No processador P3, a instruo de transferncia de dados mais simples a instruo MOV. Por exemplo, a instruo MOV R1, M[00A0h] copia o contedo da posio de memria 00A0h para o registo R1. As instrues de manipulao de dados so as que efectivamente executam as operaes teis num programa. Todos os processadores suportam instrues aritmticas bsicas tais como adio e subtraco. So tambm suportadas por todos os processadores operaes lgicas bsicas, como a disjuno e a conjuno, e operaes de deslocamento. Muitos processadores executam tambm operaes aritmticas mais complexas como multiplicao, diviso e outras funes matemticas sobre nmeros inteiros ou reais. Entre estas instrues encontram-se, tipicamente, instrues como ADD, SUB, INC, MULT, AND, OR e XOR. Por exemplo, no processador P3, a instruo ADD R1,M[00B0h] soma o contedo do registo R1 ao contedo da posio de memria 00B0h, guardando o resultado no registo R1. A sequncia de instrues a executar controlada por um registo especial, o contador de programa. Na maioria dos processadores, este registo designado por PC (program counter). Este registo contm o endereo de memria

11.2. INSTRUES ASSEMBLY

159

onde se encontra a prxima instruo a ser executada. Tipicamente, as instrues de transferncia e de manipulao de dados incrementam o contador de programa para o valor correspondente posio de memria onde se inicia a instruo que se segue na sequncia normal de execuo, o que faz com que essa instruo seja a prxima a ser executada. As instrues de controlo permitem alterar a ordem de execuo de instrues, incondicionalmente ou, em alternativa, apenas se a operao anterior produzir um resultado que satisfaa certas condies. Mais especicamente, as instrues de controlo permitem especicar qual o endereo da prxima instruo a executar, atravs da alterao do registo contador de programa, PC. Estas instrues so estudadas em mais detalhe na Seco 11.5. Este tipo de instrues permite tomar decises em funo dos resultados de clculos anteriores ou de acontecimentos externos, sendo portanto fundamentais para o funcionamento correcto de qualquer programa. Um exemplo de uma instruo de controlo no processador P3 a instruo JMP. Por exemplo, a instruo JMP 00CCh faz com que a prxima instruo a ser executada seja a instruo na posio de memria 00CCh. A combinao de bits que corresponde a cada instruo codica, de forma nica, quais as operaes a executar, quais os operandos e qual a localizao onde deve ser guardado o resultado. Assim, cada instruo mquina contm, necessariamente, trs componentes, que se reectem na estrutura da instruo: O cdigo de operao (operation code ou opcode), que especica qual a operao a executar. Por exemplo, no processador P3, o cdigo para somar dois nmeros representado pela combinao de bits . A especicao dos operandos aos quais deve ser aplicada a operao. Por exemplo, se num processador com 8 registos se pretender somar o registo R1 com o registo R2, seria possvel usar 6 bits (3 + 3) para representar os dois operandos, o que corresponderia sequncia . O nmero de operandos de cada instruo varia com o tipo de instruo e com o processador, desde processadores em que as instrues no tm operandos explcitos (todos os operandos so guardados em localizaes pr-estabelecidas) at processadores em que as instrues aceitam um, dois ou trs operandos. A especicao da localizao (registo ou memria) onde dever ser guardado o resultado da operao. Por exemplo, se se pretender guardar o resultado no registo R1, num processador com 8 registos, a sequncia de bits poder ser usada para o indicar.

A ttulo de exemplo, no processador P3, a instruo ADD R1,M[N2], usada no exemplo da Seco 11.1, codicada com duas palavras de 16 bits. A primeira palavra contm o cdigo de operao ( ) nos bits mais signicativos. Contm ainda, nos trs bits menos signicativos, o nmero do registo que deve ser usado como primeiro operando e como destino do resultado ( ). Os restantes bits indicam, usando uma codicao que ser discutida na Seco 11.7.3, que o segundo operando deve ser obtido a partir da posio de memria cujo endereo est guardado na segunda palavra desta instruo. Assim, esta instruo codicada com as palavras 8670h e 00B0h, que correspondem aos valores em binrio 1000011001110000 e 0000000010110000.

160

CAPTULO 11. CONJUNTOS DE INSTRUES

Na prtica, a especicao dos operandos e da localizao do resultado pode ser consideravelmente complexa. Isto deve-se ao facto de que as instrues de manipulao de dados e as instrues de transferncia operarem sobre valores localizados numa das seguintes possveis posies: Registos internos do processador Constante, especicada na prpria instruo Localizaes de memria Portos de entrada/sada

Para que seja possvel especicar de forma exvel qualquer uma destas localizaes so geralmente utilizadas formas mais complexas de codicao. A Seco 11.7 descreve o mecanismo de codicao das instrues no processador P3. Muitos processadores comerciais possuem a possibilidade de executar instrues mais complexas. Por exemplo, o processador 8086 dispe de uma instruo que copia um determinado nmero de posies de memria para uma outra zona de memria. Uma instruo deste tipo requer pelo menos trs operandos: dois para especicar os endereos de origem e destino, e um para especicar o nmero de posies de memria a copiar. Para instrues complexas deste tipo, muitas vezes um ou mais operandos so xos e pr-denidos, para evitar a necessidade de codicar todos os operandos na instruo. Este tipo de endereamento, chamado endereamento implcito, tambm usado em instrues mais simples mas muito comummente utilizadas, como por exemplo as instrues de manipulao da pilha descritas na Seco 11.3.5. Existem tambm processadores, chamados processadores de pilha, em que todos os operandos so guardados numa pilha, e todas as operaes aritmticas operam sobre os dois operandos guardados no topo da pilha. Estes operandos so, assim, especicados de forma implcita. Noutras mquinas, um dos operandos sempre um registo especial, denominado o acumulador, pelo que uma operao aritmtica apenas necessita ter um operando denido explicitamente.

11.3 Especicao dos Operandos


Existem quatro origens possveis para os operandos de uma instruo: registos internos do processador, constante especicada na prpria instruo, uma localizao em memria, e portos de entrada/sada.

11.3.1 Registos Internos


A utilizao de operandos em registos vantajosa por duas razes. Em primeiro lugar, o acesso a dados guardados num registo interno muito mais rpido do que o acesso a dados em memria. Em segundo lugar, existem menos registos internos do que posies de memria, o que permite utilizar menos bits para especicar um registo do que uma posio de memria. Isto leva a que as instrues que utilizam apenas registos necessitem de menos bits para

11.3. ESPECIFICAO DOS OPERANDOS

161

a sua codicao, ocupando menos memria e sendo lidas e executadas mais rapidamente. Os registos internos podem estar organizados de diversas formas. Na sua forma mais simples, os registos internos so simplesmente um conjunto de registos, com igual funcionalidade, organizados num banco de registos e especicados pelo seu nmero. Este tipo de organizao foi usado no banco de registos descrito na Seco 7.5.4, e ser utilizado no processador P3. Outros processadores tm organizaes mais complexas. Podem existir registos com funes especcas, que so sempre usados em determinadas operaes. Em processadores que tenham um registo especial denominado acumulador, este guarda o resultado das operaes e tambm muitas vezes usado para especicar o endereo de acesso memria. Processadores complexos, como, por exemplo, a famlia x86 da Intel, tm diversos registos com funes especcas, como a manipulao de cadeias de caracteres em memria e a gesto da memria do processador. Mesmo os processadores simples e com organizaes muito regulares dos registos possuem, geralmente, dois registos de uso especco, que podem ou no ser acessveis directamente ao programador. Estes dois registos so o contador de programa (PC), cuja funcionalidade descrita em mais detalhe na Seco 11.5 e o apontador para a pilha (em ingls, stack pointer, SP), cuja utilidade ser estudada na Seco 11.3.5.

11.3.2 Constantes Especicadas na Prpria Instruo


Quase todos os processadores podem executar instrues em que um ou mais operandos so valores constantes, especicados na prpria instruo. Por exemplo, a instruo ADD R1,0005h soma ao contedo do registo R1 o valor 5, valor este que se encontra especicado na prpria instruo. Embora este mtodo possa parecer tanto ou mais eciente que a utilizao de um valor em registo, isso no , geralmente, verdade. De facto, a especicao de uma constante na prpria instruo obriga, na prtica, a utilizar mais uma palavra de memria para codicar a instruo, onde guardada a constante. Assim, para carregar este valor, geralmente necessrio fazer um acesso extra a memria1 o que se revela muito mais lento que um acesso a um registo interno. Desta forma, em termos de velocidade, o uso de uma constante especicada na prpria instruo , na prtica, equivalente, em termos de velocidade de execuo, ao uso de um operando guardado em memria.

11.3.3 Memria e Portos de Entrada/Sada


Existem duas formas possveis de tratar os dados provenientes de portos de entrada/sada. Uma losoa, adoptada em muitas famlias de processadores, consiste em disponibilizar um conjunto de instrues especiais para a entrada e sada de dados. Esta soluo que equivale a ter entradas/sadas independentes do sistema de memria (independent IO) foi adoptada em muitos processadores, e, nomeadamente, na famlia x86 da Intel. Neste caso, existe um espao de
1 O carregamento da constante pode ser mais rpido se a constante for especicada de uma forma que no exija uma palavra extra na instruo.

162

CAPTULO 11. CONJUNTOS DE INSTRUES

endereamento especco para operaes de entrada sada. Um acesso a um dado porto de entrada/sada especicado colocando um dado valor nos bits de endereo do processador (ou em parte deles) e controlando uma ou mais linhas adicionais que especicam que a operao uma operao de entrada ou sada e no um acesso a memria. Em alternativa, possvel considerar que os portos de entrada/sada so mapeados para o espao de memria do processador (memory-mapped IO), sendo os dados disponveis nestes portos manipulados atravs das mesmas operaes que manipulam os dados em memria. Esta soluo permite reduzir a complexidade do conjunto de instrues, tendo como desvantagem principal a reduo do espao de memria enderevel pelo processador. Quando esta soluo adoptada, a leitura de dados de um porto de entrada executada como se tratasse de uma leitura de determinadas posies de memria, enquanto que a escrita de dados em portos de sada executada como se se tratasse de uma escrita em determinadas posies de memria. Compete aos dispositivos exteriores ao processador distinguir, atravs da correcta descodicao dos endereos, acessos feitos a portos de entrada/sada e acessos feitos a memria. menor complexidade do conjunto de instrues vai corresponder uma maior sosticao da arquitectura do sistema de memria, como ser estudado no Captulo 13. Quando esta soluo adoptada as instrues de entrada/sada podem usar todos os modos de endereamento disponveis, sendo os portos tratados pelo programador como se fossem posies de memria. Esta abordagem tem ainda a vantagem adicional de se poder processar dados directamente a partir de (ou com destino a) portos de entrada/sada. Esta foi a soluo adoptada no processador P3, onde todos os acessos a portos de entrada e sada so feitos usando as operaes normais de transferncia de dados. Para aceder a operandos em memria ou a portos de entrada/sada, necessrio especicar o endereo da memria ou o porto onde o operando se encontra, o que pode ser feito de diversas formas. As diferentes alternativas existentes para a especicao da localizao de um operando, ou seja, os possveis modos de endereamento, so estudadas em detalhe na seco seguinte.

11.3.4 Modos de Endereamento


A escolha dos modos de endereamento suportados por um processador tem um grande impacto na sua estrutura interna e na exibilidade do conjunto de instrues. Considere-se um acesso a memria em que o valor do registo RX e/ou o valor de uma palavra W so usados para especicar a localizao do operando. Existem diversas formas de usar o valor de RX e de W para denir o valor do operando ou a localizao do mesmo. Caso o operando se encontre numa posio de memria, o endereo onde ele se encontra chamado de endereo efectivo. A Tabela 11.3 sumaria alguns modos de endereamento comummente utilizados. No endereamento por registo, o operando o valor guardado num registo interno. Este modo de endereamento eciente, uma vez que, como foi atrs referido, obter um operando a partir de um registo mais eciente que obter um operando a partir de memria. No modo de endereamento indirecto por registo, o contedo do registo especicado indica o endereo efectivo de memria onde os dados se encontram, no caso de uma leitura, ou onde devem ser guardados, no caso de uma escrita.

11.3. ESPECIFICAO DOS OPERANDOS


Modo de endereamento Por registo Indirecto por registo Imediato Directo Indexado Relativo Baseado Indirecto Duplamente indirecto por registo Implcito Operao RX M[RX] W M[W] M[RX+W] M[PC+W] M[SP+W] M[M[W]] M[M[RX]]

163

Tabela 11.3: Principais modos de endereamento utilizados. No modo de endereamento imediato, o valor do operando encontra-se codicado na prpria instruo, usando, se necessrio, palavras de memria adicionais. Este modo de endereamento s pode ser usado em operaes de leitura de operandos, uma vez que o uso deste modo de endereamento para denir a localizao do resultado implicaria uma escrita na zona de memria onde est guardado o cdigo mquina, com a consequente alterao do mesmo. No modo de endereamento indexado, o contedo do registo indicado adicionado a um valor codicado na prpria instruo para obter o endereo efectivo que deve ser usado pela operao para ler o operando e/ou guardar o resultado na memria. No modo de endereamento directo, o endereo efectivo de memria que deve ser usado pela operao para ler o operando e/ou guardar o resultado especicado na prpria instruo. Os modos de endereamento relativo e endereamento baseado so casos especiais do endereamento indexado, em que o registo RX toma um valor particular. No endereamento relativo o registo RX o contador de programa, PC, e no endereo baseado, o registo RX o apontador para a pilha do processador, SP. Os dois ltimos modos descritos na Tabela 11.3 so menos utilizados e so suportados apenas por um pequeno nmero de processadores. No endereamento indirecto, o valor especicado na instruo indica a posio de memria que guarda o endereo efectivo. No endereamento duplamente indirecto por registo, o contedo do registo indica, de forma similar, a posio de memria que guarda o endereo efectivo onde se encontra o operando. Estes dois modos de endereamento requerem assim dois acessos a memria, um para obter o endereo efectivo e outro para obter o operando (ou guardar o resultado) pelo que so consideravelmente menos utilizados que os anteriormente descritos. No modo de endereamento implcito, diversos registos, no especicados na instruo, so utilizados para especicar a posio dos operandos. Uma vez que a utilizao particular que feita deste modo de endereamento varia de acordo com a instruo em que utilizado, no possvel sistematizar a sua utilizao da mesma forma que para os outros modos de endereamento referidos. As instrues do processador P3 podem especicar operandos usando qualquer um dos modos de endereamento da Tabela 11.3, com excepo dos dois

op op op op op op op op op

164

CAPTULO 11. CONJUNTOS DE INSTRUES

ltimos, que no so suportados por este processador. No entanto, no processador P3, apenas um dos operandos pode usar um dos modos mais complexos, enquanto que o outro operando deve usar necessariamente o modo de endereamento por registo, opo esta muito comum em processadores comerciais. Diferentes processadores comerciais exibem diferentes losoas no que respeita aos modos de endereamento suportados e forma como o endereo dos operandos da instruo obtido a partir dos dados codicados na mesma. Em particular, a utilizao do conceito de memria segmentada, utilizada, por exemplo, nos processadores da Intel, implica a existncia de registos que so usados implicitamente no processo de endereamento. Estes e outros mecanismos de endereamento sero estudados em mais detalhe no Captulo 13.

11.3.5 Utilizao de Pilhas


Uma opo muito utilizada para aceder e guardar operandos em memria consiste no uso de uma pilha (em ingls, stack.). Uma pilha um conjunto contguo de posies de memria cujo acesso gerido por um registo especial, o apontador de pilha, geralmente denominado SP (em ingls, stack pointer). Conceptualmente, a pilha consiste num conjunto de posies de memria sobrepostas umas s outras, e s quais apenas possvel aceder uma a uma, a partir do topo, quer para colocar um dado (operao de PUSH) quer para o retirar (operao de POP). A pilha tem uma base que corresponde posio inferior, que no deve ser ultrapassada, o que signica que no devem ser retirados dados que no foram l colocados. Em alguns processadores, a base da pilha especicamente considerada e acessos para l desse limite so impedidos, mas, no caso do P3, esta vericao no efectuada pelo processador. A forma mais simples de utilizao permite apenas aceder ao valor guardado no topo da pilha, e que corresponde ao ltimo valor l colocado. Assim, possvel guardarse um valor no topo da pilha usando a operao de PUSH (ou semelhante) ou recuperar o valor guardado no topo da pilha atravs da operao de POP (ou semelhante). Quando um novo valor guardado na pilha, o valor do registo SP incrementado e quando um valor retirado da pilha, o valor do apontador decrementado, conforme exemplicado na Figura 11.1. Desta forma, o valor
PUSH R1 POP R3

FF03h FF02h FF01h FF00h 00CCh 00BBh 00AAh

0055h 00CCh 00BBh 00AAh 00CCh 00BBh 00AAh

FF02h SP

FF03h SP

FF02h SP

Figura 11.1: Exemplo de uso da pilha do processador.

11.3. ESPECIFICAO DOS OPERANDOS

165

do apontador de pilha indica sempre a posio de memria que representa o topo da pilha. Considere a sequncia de operaes exemplicada nesta gura. Inicialmente, o registo R1 tem o valor 0055h, e o apontador de pilha (SP) o valor FF02h. Aps a instruo de PUSH R1, o valor do registo SP incrementado para FF03h que a posio de memria onde ca guardado o ltimo valor colocado na pilha. A instruo POP R3 tem como resultado carregar em R3 o valor que se encontrava no topo da pilha (0055h) e decrementar o valor do registo SP. Note-se que, embora tal no se encontre representado na gura, o valor da posio de memria FF03h mantm o valor 0055h aps a operao de POP. No entanto, este valor j no est, de um ponto de vista lgico, na pilha, pelo que no representado. Existem numerosas utilizaes para a pilha do processador. Uma das mais comuns consiste em utilizar a pilha como um espao temporrio para guardar o valor de registos que so momentaneamente necessrios para outras operaes. Assim, o programador pode decidir colocar os contedos do registos R1, R2 e R3 na pilha, com o objectivo de libertar estes registos para alguma operao. Quando esta operao estiver terminada, pode retirar os valores da pilha, pela ordem inversa, repondo assim os valores originais nos registos. Uma outra aplicao comum para a pilha a passagem de parmetros para subrotinas. Esta aplicao ser descrita em detalhe na Seco 11.5.2. Dado que a pilha tem numerosas aplicaes, alguns processadores podem possuir diversas pilhas, que podem ou no ser acessveis ao programador. Neste caso, existir mais do que um registo apontador de pilha. Embora o mecanismo bsico de utilizao de uma pilha seja muito simples, necessrio tomar algumas precaues para que a mesma seja correctamente utilizada e no interra com o funcionamento correcto do processador. Em primeiro lugar, a pilha deve utilizar uma zona de memria que no seja utilizada por mais nenhum programa ou subrotina. Para garantir que a zona de memria usada pela pilha no entra em conito com as zonas de memria utilizadas por outros mdulos, importante inicializar o valor do registo SP (denindo assim implicitamente a base da pilha) com um valor tal que garanta que, dentro das condies normais de utilizao, o topo da pilha nunca atingir a zona onde o cdigo se encontra nem a zona reservada para dados. tambm necessrio garantir que existe uma operao de remoo de dados do topo da pilha para cada operao de insero de dados na mesma. Se no existir esta correspondncia, o valor do apontador de pilha crescer (ou decrescer) sem parar, acabando as operaes de escrita por corromper zonas de memria reservadas para outras utilizaes. de notar tambm que o funcionamento lgico das operaes de PUSH e POP no se altera se a pilha crescer na direco inversa ilustrada na Figura 11.1, isto , se o registo SP for decrementado quando se insere um valor na pilha, ao invs de ser incrementado. De igual forma, o valor do registo SP pode ser alterado antes ou depois da escrita em memria propriamente dita. No primeiro caso, o registo SP aponta para a primeira posio livre, enquanto que no segundo caso, aponta para a valor no topo da pilha. No processador P3, o valor do registo SP decrementado aps uma operao de PUSH. Este decremento efectuado aps a escrita do valor, pelo que o registo SP aponta sempre para a prxima posio livre.

166

CAPTULO 11. CONJUNTOS DE INSTRUES

11.4 Codicao das Instrues


Na maioria dos processadores, as instrues bsicas de manipulao de dados actuam sobre um mximo de dois operandos. Por exemplo, uma instruo de adio poder calcular = + . Para especicar completamente uma instruo deste tipo, necessrio especicar qual o tipo de operao, quais e e qual a localizao de destino do resultado. os operandos Para analisar as diversas possibilidades de codicao das instrues de um processador, considere-se um processador com a seguinte congurao: Registos: o processador possui 8 registos internos de 16 bits cada um, numerados de 0 a 7. Memria: o processador acede a uma memria de palavras de 16 bits cada, o que signica que cada posio de memria acedida com um endereo de 16 bits. Isto corresponde a uma capacidade total de endereamento de 64K palavras ou 128K octetos. Portos de entrada/sada: os portos de entrada sada so mapeados em memria, fazendo-se o acesso aos mesmos atravs de instrues normais de transferncia de dados. Instrues: o conjunto de instrues contm 40 instrues.

Suponha-se que, para este hipottico processador, se pretende que cada instruo de dois operandos possa ter como origem e destino qualquer das possveis localizaes, e observe-se qual o impacto que esta opo tem na codicao das instrues. Analise-se, assim, quantos bits so necessrios para codicar cada instruo: Cdigo de operao: uma vez que existem 40 instrues diferentes, sero necessrios 6 bits para codicar a operao a realizar. Operandos: cada um dos operandos pode ser especicado usando um dos 4 primeiros modos de endereamento especicados na Tabela 11.3. Podem ser utilizados dois bits para indicar qual o modo de endereamento. Para alguns modos de endereamento, necessrio especicar um registo e um endereo.

Com estas opes, e se se pretender uma codicao uniforme para todas as instrues, obtm-se a codicao ilustrada na Figura 11.2. A vantagem de
Cdigo 6 Resultado Modo Reg Ender 2 3 16 Operando 1 Modo Reg Ender 2 3 16 Operando 2 Modo Reg Ender 2 3 16

Figura 11.2: Codicao de uma instruo com trs operandos especicados com qualquer um dos quatro modos de endereamento permitidos. um formato uniforme deste tipo clara, uma vez que esta abordagem permite uma total exibilidade na especicao dos operandos, que podem estar em qualquer localizao. Note-se, porm, que esta codicao exige um total de

11.4. CODIFICAO DAS INSTRUES

167

69 bits por cada instruo o que implica que cada instruo ocupe 5 palavras de memria, ou seja, 10 octetos. Considere-se, por exemplo, o Programa 11.2, que, utilizando instrues deste hipottico processador, soma o contedo das posies de memria N1, N2 e N3, e guarda o resultado, complementado, na posio de memria N4: ADD ADD NEG R1, M[N1], M[N2] R1, R1, M[N3] M[N4], R1

Programa 11.2: Programa em assembly que soma trs nmeros em memria, para um processador que permite modos de endereamento complexos para todos os operandos. Note-se que, embora este cdigo contenha apenas trs instrues, o cdigo mquina correspondente utiliza 15 palavras de memria. Em termos de desempenho, esta opo revela-se, em geral, desvantajosa, uma vez que, no s os programas em linguagem mquina ocupam mais memria do que seria realmente necessria, como acabam por se tornar mais lentos. Com efeito, a superior exibilidade dos modos de endereamento permitidos contrabalanada pelo tempo que demora a carregar da memria e a executar uma instruo. assim vantajoso restringir o nmero de operandos e os modos de endereamento permitidos, ou, pelo menos, permitir a existncia de instrues com modos de endereamento mais limitados. Uma restrio comummente adoptada consiste em obrigar a que o resultado da operao seja guardado na mesma localizao que o primeiro operando. Embora isto implique a destruio do valor guardado neste operando, esta restrio reduz consideravelmente o nmero de bits necessrio para codicar cada instruo. Adicionalmente, possvel obrigar a que pelo menos um dos operandos esteja disponvel em registo. Novamente, isto reduz fortemente o nmero de bits necessrio para codicar a instruo, embora implique uma considervel restrio no tipo de operaes que podem ser efectuadas. Com estas duas restries, possvel usar um formato mais compacto para representar cada instruo. necessrio utilizar um bit de direco que indicar se o modo de endereamento sem restries aplicado ao primeiro ou ao segundo operando. Por exemplo, a instruo ADD M[R1+N1],R2 ter o valor deste bit igual a para indicar que o modo de endereamento genrico se aplica ao primeiro operando e, consequentemente, localizao do resultado. Com esta abordagem, agora possvel utilizar o formato descrito na Figura 11.3. Com esta codicao, cada instruo gasta agora apenas duas palavras
Cdigo 6

Direco 1

Modo 2

Reg 3

Reg 3

Ender 16

Figura 11.3: Codicao de uma instruo em que um dos operandos deve ser endereado por registo. de memria. Como contrapartida, j no possvel representar uma instru-

168

CAPTULO 11. CONJUNTOS DE INSTRUES

o como ADD R1,M[N1],M[N2]. No entanto, possvel representar todas as instrues utilizadas no exemplo da pgina 156, conduzindo ao Programa 11.3 que ocupa apenas 10 palavras de memria para realizar a mesma tarefa, contra 15 na verso anterior. Na prtica, geralmente necessrio utilizar mais do que MOV ADD ADD NEG MOV R1, M[N1] R1, M[N2] R1, M[N3] R1 M[N4], R1

Programa 11.3: Programa em assembly que soma trs nmeros em memria, para um processador que permite um modo de endereamento complexo apenas para um operando. um formato para codicar instrues. Assim, uma instruo em que os dois operandos sejam registos pode ser codicada numa nica palavra de memria, enquanto que uma instruo que use um modo de endereamento indexado ou imediato (entre outros) pode necessitar de duas palavras de memria. Nestes casos, o valor de um bit ou combinao de bits na primeira palavra especica o modo de endereamento e a existncia ou no de uma segunda palavra. Em alguns processadores onde se dene como um dos objectivo fundamentais que as instrues mais frequentes sejam codicadas o mais uniformemente possvel e em pouco espao, ainda que perdendo exibilidade, impe-se mesmo que todas as operaes lgicas e aritmticas sejam realizadas entre registos. Neste caso, todos os acessos a memria so realizados atravs de operaes de transferncia de dados (LOAD e STORE), pelo que a arquitectura destes processadores geralmente referida como do tipo load/store. Num processador deste tipo, poder-se-ia utilizar o seguinte formato para as instrues que especicam operaes aritmticas, sendo neste caso possvel codicar instrues como ADD R1,R2,R3 numa s palavra de memria. J as
Cdigo 6 Reg 3 Reg 3 Reg 3

Figura 11.4: Codicao de uma instruo com trs operandos em registos. instrues de LOAD e STORE necessitam de usar um outro formato, dado que especicam apenas um registo, mas necessitam de especicar um endereo:
Cdigo 6 Reg 3 Ender 16

Figura 11.5: Codicao de instrues de LOAD e STORE. A maior ecincia com que so codicadas as instrues aritmticas tem um custo elevado, uma vez que passa a existir a necessidade de carregar todos os operandos em registos (usando instrues de LOAD, ou similares) antes de

11.5. CONTROLO DA SEQUNCIA DE EXECUO

169

efectuar qualquer operao. Da mesma forma, quando necessrio guardar o resultado em memria tem de se executar explicitamente uma operao de STORE. A tarefa de somar as trs posies de memria e complementar o resultado que tem sido usada como exemplo seria implementada pelo Programa 11.4, num processador deste tipo: LOAD LOAD LOAD ADD ADD NEG STORE R1, M[N1] R2, M[N2] R3, M[N3] R4, R1, R2 R4, R4, R3 R4, R4 M[N4], R4

Programa 11.4: Programa em assembly que soma trs nmeros em memria para um processador do tipo load/store. Dado que as instrues de LOAD e STORE usam duas palavras de memria, enquanto que as operaes aritmticas usam apenas uma, este cdigo ocuparia 11 palavras de memria. Como se pode depreender destes exemplos, a escolha da losoa a adoptar no que respeita codicao das instrues obedece a muitas restries e compromissos, tendo tipicamente um grande impacto no desempenho nal do processador. Na Seco 11.7 sero estudados em detalhe os formatos de codicao de instrues do processador P3.

11.5 Controlo da Sequncia de Execuo


Normalmente, os processadores executam sequencialmente instrues que se encontram em endereos consecutivos de memria. Porm, este uxo de execuo pode ser interrompido em duas condies: quando executada uma instruo de controlo e quando atendida uma interrupo.

11.5.1 Instrues de Salto


As instrues de controlo mais simples so os saltos incondicionais, normalmente designados em linguagem assembly por JUMP ou BRANCH. Estas instrues especicam qual o endereo da prxima instruo a ser executada, atravs da manipulao do valor do PC. Em linguagem assembly, este endereo normalmente especicado atravs da utilizao de um nome simblico. Assim, por exemplo a sequncia de instrues do processador P3 representada no Programa 11.5 representa um ciclo innito que incrementa continuamente o valor do registo R1. Em muitos casos, necessrio transferir o controlo apenas quando uma dada condio se verica. Por exemplo, pode-se querer terminar um ciclo quando o valor de um contador guardado num dado registo atinge o valor . Nestes casos, utilizam-se instrues de salto condicional, que apenas transferem controlo para o endereo especicado quando uma dada condio se

170

CAPTULO 11. CONJUNTOS DE INSTRUES


Etiq1: INC BR R1 Etiq1

Programa 11.5: Exemplo de utilizao do salto incondicional. verica. Por exemplo, no processador P3, a instruo BR.Z Etiq transfere controlo para a instruo com rtulo Etiq apenas se a ltima operao aritmtica ou lgica executada teve como resultado o valor . O troo de cdigo representado no Programa 11.6 ilustra a utilizao das instrues de salto condicional. Quando a instruo DEC executada, o valor DEC BR.Z MOV ADD R1 Etiq R1, 55AAh R2,R1

Etiq:

Programa 11.6: Exemplo de utilizao do salto condicional. de R1 decrementado, ou seja, reduzido de uma unidade. Caso o valor que resulta desta operao seja igual a 0, a instruo BR.Z Etiq transfere o controlo para a instruo com rtulo Etiq. Caso contrrio, a instruo seguinte executada. Neste caso, a instruo que carrega o registo R1 com o valor 55AAh. comum fazer com que a condio de salto dependa da ltima operao efectuada, uma vez que isso evita que seja necessrio especicar qual a localizao do valor que deve ser testado. Assim, necessrio guardar num registo bits que mantenham o valor das condies que podem ser testadas por instrues de controlo. Alguns processadores, porm, adoptam outra estratgia e permitem que a condio seja obtida por teste de um valor de um registo. Porm, mesmo neste caso, til guardar o resultado de condies que podem ser testadas em instrues posteriores. Este resultado guardado num registo chamado registo de estado do processador. A cada condio corresponde, em princpio, um bit de estado. Entre as condies que podem ser testadas por instrues deste tipo encontram-se, tipicamente, as seguintes: Zero (Z): a condio verdadeira se o resultado da ltima operao foi zero. Negativo (N): a condio verdadeira se o resultado da ltima operao foi negativo. Transporte (C): esta condio (carry) verdadeira se o resultado da ltima operao aritmtica teve transporte. Excesso (O): esta condio (overow) verdadeira se o resultado da ltima operao excede a capacidade de representao do processador. Positivo (P): esta condio verdadeira se o resultado da ltima operao foi estritamente positivo.

11.5. CONTROLO DA SEQUNCIA DE EXECUO

171

Considere-se, a ttulo de exemplo, a sequncia de instrues do Programa 11.7. A instruo SUB R1,0004h tem como resultado o valor , que guardado MOV SUB BR.Z BR.N NOP NOP R1, 0003h R1, 0004h Etiq1 Etiq2


Etiq1: Etiq2:

Programa 11.7: Efeitos da instruo SUB nos valores dos bits de estado. no registo R1. Esta operao activa os bits de estado negativo, N, uma vez que o valor obtido negativo, e o bit de transporte, C, uma vez que a subtraco conseguida somando o complemento aritmtico de . Ao mesmo tempo, coloca os bits de estado Z, P e O a , uma vez que o resultado no foi zero, no positivo, nem resultou num valor no representvel. Desta forma, a instruo BR.Z Etiq1 no vai transferir controlo para a instruo com rtulo Etiq1, uma vez que o bit de estado Z est inactivo. J a instruo BR.N Etiq2 vai transferir controlo para a instruo com rtulo Etiq2, dado que o bit de estado N est activo. Note-se que, de uma forma geral, s as instrues de manipulao de dados que envolvem a unidade lgica e aritmtica (Seco 9.4) alteram os valores dos bits de estado. Muitos processadores permitem tambm condies de salto que testam diversos bits de estado do processador, para alm dos referidos acima. Pode, por exemplo, testar-se se o resultado de uma operao foi par, ou se uma dada condio interna ao processador se verica. Existem duas possibilidades para a especicao do endereo de salto. A primeira possibilidade especicar o endereo de forma absoluta, dando directamente um endereo em memria que contm a prxima instruo a ser executada. A segunda possibilidade consiste em especicar este endereo de forma relativa, sendo que a constante usada representa um valor que deve ser adicionado ao PC. Quando esta possibilidade utilizada, so muitas vezes usados menos bits que os necessrios para descrever um endereo arbitrrio em memria, uma vez que muitos saltos so para posies de memria relativamente prximas da instruo que est a ser executada. A vantagem da primeira abordagem permitir que qualquer endereo em memria seja especicado, independentemente da sua proximidade da instruo que est a ser executada. A segunda abordagem, alm de permitir poupar espao na codicao das instrues, permite que o programa seja realojvel. Isto signica que o programa continua a funcionar mesmo que seja copiado para posies de memria diferentes daquela onde foi inicialmente localizado. Na prtica, muitos processadores suportam ambos os mtodos de especicao, cabendo ao assembler escolher, de forma transparente para o programador, qual o tipo de salto que resulta da codicao de uma dada instruo. No processador P3, existem os dois tipos de instrues de salto. Quando o salto especicado com a instruo de BR, trata-se de uma salto relativo, e o valor especicado adicionado ao contedo do PC. Quando o salto espe-

172

CAPTULO 11. CONJUNTOS DE INSTRUES

cicado com a instruo de JMP, trata-se de um salto absoluto, sendo o valor especicado carregado directamente no registo PC. Muitas vezes os saltos relativos podem ser codicados usando menos bits, uma vez que muitos dos endereos de salto so prximos do endereo actual do PC. Note-se que, do ponto de vista do programador, estas duas instrues so praticamente indistinguveis, uma vez que o assembler tem a responsabilidade de codicar a instruo. Porm, em alguns casos particulares, pode existir interesse em utilizar um dos tipos de salto, especialmente nos casos em que haja interesse em realojar cdigo mquina, sem utilizar o assembler.

11.5.2 Chamadas a Subrotinas


Um programa bem estruturado tipicamente constitudo por blocos de programa que desempenham uma tarefa bem denida e que so executadas repetidas vezes num programa. Em assembly esta estruturao de um programa em mdulos conseguida atravs do uso de subrotinas. Uma subrotina chamada atravs de uma instruo CALL, que, tal como faria uma instruo de JMP, transfere controlo para a instruo inicial da subrotina. Adicionalmente, porm, a instruo CALL causa o armazenamento do endereo de onde a subrotina foi chamada para que, quando esta terminar, seja possvel continuar a execuo com a instruo seguinte instruo CALL. Uma subrotina terminada com uma instruo de retorno, (RET ou RETURN), que transfere controlo para a instruo seguinte quela que chamou a subrotina. Embora diferentes processadores adoptem diferentes alternativas, uma soluo muito comum guardar o endereo de retorno no topo da pilha. Assim, a instruo de retorno tem simplesmente de repr no contador de programa o valor guardado no topo da pilha para que seja retomada a sequncia normal de execuo. Outros processadores utilizam mecanismos mais complexos que permitem melhorar o desempenho, mas um estudo destas alternativas est fora do mbito deste texto. A Figura 11.6 ilustra a sequncia de execuo de instrues durante o processo de chamada e retorno de uma subrotina, tal como ela acontece no processador P3. Neste exemplo, a instruo CALL Etiq1 transfere o controlo para a instruo cujo rtulo Etiq1, carregando este valor no registo PC. O topo da pilha ca com o valor do endereo da instruo ADD R1,R2, que a instruo que se segue instruo de CALL e o valor do registo SP decrementado para apontar para a prxima posio de memria2 . Quando, aps a execuo de todas as instrues da subrotina, a instruo RET nalmente executada, o endereo de retorno encontra-se no topo da pilha, pelo que basta carregar o valor do PC com este valor. Para um funcionamento correcto, importante que a instruo RET encontre a pilha no mesmo estado em que ela se encontrava quando a subrotina foi chamada, para que o endereo de retorno seja correctamente recuperado. Isto signica que na execuo da subrotina o nmero de instrues de PUSH e de POP tem de ser igual. As subrotinas podem ter parmetros, cujos valores so denidos pelo programa principal na altura da chamada da subrotina. A passagem de parmetros para subrotinas pode ser feita de diversas formas. Uma forma comum de
2 No processador P3, a pilha do processador invertida, sendo o valor do apontador de pilha decrementado quando executada uma instruo de PUSH

11.5. CONTROLO DA SEQUNCIA DE EXECUO

173

CALL Etiq1 ADD R1,R2

... ...

Etiq1 : MOV R3,R4

...
RET

Figura 11.6: Ilustrao do processo de chamada a uma subrotina. passar parmetros atravs da pilha do processador. Neste caso, dene-se a conveno de que se uma subrotina aceita um certo nmero de parmetros, estes parmetros se encontram no topo da pilha quando a rotina se inicia. Naturalmente, isto implica que o programa que chamou a subrotina coloque os parmetros na pilha antes de a chamar. Em relao passagem de parmetros por registos, esta soluo tem a vantagem de permitir subrotinas recursivas e de no limitar o nmero de parmetros ao nmero de registos disponveis. O modo de endereamento baseado permite o acesso a valores que se encontram na pilha, mas no no topo da mesma. Este modo de endereamento especialmente til para aceder directamente aos parmetros de uma subrotina, sem que seja necessrio executar explicitamente operaes de POP.

11.5.3 Interrupes
Uma outra situao em que a sequncia normal de execuo das instrues alterada acontece quando o processador recebe e atende um pedido de interrupo. Em muitos sistemas, o processador tem de reagir a sinais vindos do exterior, que sinalizam a necessidade de efectuar algum processamento especco ou operaes de entrada/sada. Por exemplo, um perifrico pode querer sinalizar o processador que uma tecla foi premida, ou que uma palavra foi recebida num porto srie. Uma alternativa ao uso de interrupes garantir que o processador amostra, a intervalos regulares, o valor de alguma linha, ou linhas, de entrada/sada. A esta amostragem regular chama-se, em ingls, polling. O uso de polling impe uma sobrecarga grande ao processador, uma vez que necessrio garantir que um ou mais portos de entrada/sada so lidos a intervalos de tempo que no podem ser demasiado longos, conforme discusso na Seco 14.5.1. Por esta razo, a esmagadora maioria dos processadores permite que um dispositivo exterior sinalize, de alguma forma, que a sequncia normal de instrues deve ser interrompida e que o controlo deve ser transferido para uma

174

CAPTULO 11. CONJUNTOS DE INSTRUES

subrotina de atendimento. Em sistemas complexos, este dispositivo geralmente um controlador de interrupes, que centraliza os pedidos provenientes de diversas fontes, os codica, e os envia para o processador, de acordo com as suas prioridades. Embora o mecanismo exacto atravs do qual as interrupes so sinalizadas, identicadas e atendidas varie de processador para processador, a seguinte descrio de alto nvel aplica-se maioria dos processadores comerciais e ao P3. Em primeiro lugar, cada processador disponibiliza uma ou mais linhas de interrupo, que so activadas pelos dispositivos exteriores. O nmero de linhas no corresponde, porm, ao nmero total de origens de interrupes possveis que , em geral, muito superior. Isto possvel porque, aps ter recebido indicao que a interrupo vai ser atendida, o dispositivo utiliza um dos barramentos exteriores para identicar qual a interrupo que foi activada. Desta forma possvel, por exemplo, usar apenas uma linha de interrupo e 8 linhas do barramento de dados para assinalar 256 tipos diferentes de interrupo. Aps receber a interrupo e o nmero que a identica, o processador acede a uma tabela que indica qual o endereo da subrotina que deve ser usada para atender o pedido. O controlo de execuo ento transferido para esta subrotina, aps salvaguarda do contedo do contador do programa e de outra informao sobre o estado do processador. Esta informao inclui necessariamente o valor dos bits de estado do processador, mas pode tambm incluir o valor de outros registos internos cujo contedo possa ser destrudo pela subrotina de interrupo. A salvaguarda desta informao necessria para que a execuo possa continuar, sem alteraes, na instruo seguinte que estava a ser executada quando a interrupo foi recebida. Repare-se que, ao contrrio das chamadas a subrotinas, as interrupes externas ocorrem em qualquer momento sem que o programador o possa prever. Assim, as interrupes podem surgir em qualquer instante, por exemplo entre a execuo de uma instruo aritmtica e uma instruo de salto condicional que testa o resultado dessa instruo. No processador P3, como na maioria dos outros processadores, o programador pode actuar um bit de estado por forma a impedir que as interrupes sejam atendidas. Isto pode ser necessrio em zonas de cdigo onde a ocorrncia de uma interrupo pudesse causar comportamentos indesejados. Existem numerosas variaes a este modo de operao e diversos detalhes de funcionamento que variam de processador para processador, mas o princpio geral de funcionamento comum a todos eles. O mecanismo de interrupes do processador P3 ser estudado em mais detalhe quando forem descritas as instrues que controlam o atendimento das mesmas. Uma funcionalidade tambm existente em muitos processadores consiste em disponibilizar uma instruo (por exemplo, INT ou TRAP) que aceita um argumento (o nmero da interrupo) e que faz com que o processador se comporte exactamente como se tivesse recebido uma interrupo. Embora esta instruo possa, em princpio, ser substituda por uma instruo de chamada a subrotina, algumas diferenas nos detalhes de funcionamento so sucientes para justicar a sua existncia como uma instruo separada. Este tipo de instrues tambm til na fase de depurao de um programa, em que as rotinas de interrupo podem ser usadas para analisar o valor de diversos registos e variveis internas que podem no ser acessveis de outra forma.

11.6. CONJUNTO DE INSTRUES DO PROCESSADOR P3

175

Em geral, as interrupes podem ter 3 origens distintas: podem ser externas, causadas pelo hardware; podem ser internas, despoletadas por uma instruo de TRAP; ou, em processadores mais complexos que o P3, podem ser causadas por excepes, como por exemplo um acesso incorrecto a memria ou a execuo de uma diviso por zero.

11.6 Conjunto de Instrues do Processador P3


O processador P3 dispe internamente de 16 registos, R0 a R15, dos quais apenas 8 (R0 a R7) podem ser usados directamente por instrues assembly. O processador P3 um processador de 16 bits, o que signica que manipula, em cada instruo, dados de 16 bits. Neste processador tanto os registos de dados como a memria tambm se encontram organizados em palavras de 16 bits, pelo que uma operao de transferncia de dados manipula sempre um valor de 16 bits. Noutros processadores, o nmero de bits transferido em operaes de manipulao de dados e acessos a memria nem sempre igual ao nmero de bits dos registos. Por exemplo, no processador Intel 8088, os registos internos so de 16 bits, mas as transferncias de memria so feitas em blocos de 8 bits, para simplicar a organizao da memria exterior. No entanto, e de uma forma geral, quando um processador designado como sendo de bits, isto signica que tem capacidade para transferir e manipular dados em blocos de bits. No processador P3, o registo R0 um registo ctcio, e contm sempre o valor 0. Isto revela-se muito til uma vez que a constante muitas vezes utilizada e um acesso a um registo mais rpido que o acesso a uma constante guardada em memria. Os registos com nmeros entre 8 e 15 so registos de uso especial cuja utilidade ser estudada no captulo seguinte. Estes registos desempenham funes especcas, no podendo ser manipulados directamente por instrues assembly genricas. Dois destes registos so os registos PC e SP que podem ser usados em acessos a memria efectuados com os modos de endereamento relativo e baseado. Para uso geral, o programador tem acesso aos registos R1 a R7. Existe ainda um registo de estado que guarda os bits de estado do processador. O processador P3 disponibiliza todas as instrues bsicas de transferncia de dados, manipulao e controlo que so comuns em processadores comerciais simples. Estas instrues podem classicar-se nas seguintes classes: Instrues aritmticas: aplicam um operador aritmtico ao operando ou operandos. Exemplos de operaes aritmticas de dois operandos so a soma, a subtraco e a multiplicao. Entre as operaes aritmticas de um operando encontram-se as operaes de incremento e decremento. Instrues lgicas: aplicam um operador lgico ao operando ou operandos. Exemplos de operaes lgicas de dois operandos so a disjuno e conjuno, enquanto que o complemento Booleano uma operao lgica de um s operando. Instrues de deslocamento: aplicam uma operao de deslocamento a um registo. Os deslocamentos podem ser direita, esquerda, circulares ou no, aritmticos ou lgicos.

176

CAPTULO 11. CONJUNTOS DE INSTRUES


Instrues de controlo: controlam a sequncia de instrues executada pelo processador, eventualmente com base no resultado de operaes anteriores. Instrues de transferncia: copiam ou movimentam dados de uma localizao para outra. Instrues genricas: agrupam-se nesta categoria um conjunto de instrues que executam diversas operaes sobre o estado do processador, e que sero analisadas detalhadamente mais tarde.

A Tabela 11.4 contm as mnemnicas das instrues disponveis no processador P3.


Aritmticas Lgicas Deslocamento Controlo Transferncia Genricas

NEG INC DEC ADD ADDC SUB SUBB CMP MUL DIV

COM AND OR XOR TEST

SHR SHL SHRA SHLA ROR ROL RORC ROLC

BR BR.cond JMP JMP.cond CALL CALL.cond RET RETN RTI INT

MOV MVBH MVBL XCH PUSH POP

NOP ENI DSI STC CLC CMC

Tabela 11.4: Conjunto de instrues do processador P3.

11.6.1 Instrues Aritmticas


O processador P3 disponibiliza as operaes aritmticas descritas na Tabela 11.5. Todas as operaes aritmticas disponveis actuam sobre operandos Instruo Complemento aritmtico Incrementar Decrementar Adicionar Adicionar com transporte Subtrair Subtrair com transporte Comparar Multiplicar Dividir Mnemnica NEG INC DEC ADD ADDC SUB SUBB CMP MUL DIV Exemplo NEG R1 INC M[R2] DEC M[R3+A5A5h] ADD R3, M[R5+4] ADD R3, M[R6] SUB R3, M[R5+4] SUBB R1, R2 CMP R1,R2 MUL R3,R4 DIV R3,R4

Tabela 11.5: Instrues aritmticas do processador P3. de 16 bits, que, quando representam nmeros com sinal, so descritos em notao de complemento para dois. Em todas as operaes, com excepo da

11.6. CONJUNTO DE INSTRUES DO PROCESSADOR P3

177

multiplicao e diviso, o resultado tambm de 16 e guardado no primeiro operando, destruindo o valor que se encontrava no mesmo. Por exemplo, a instruo ADD R1,R2 executa a operao R1 R1 + R2. No caso da multiplicao, o resultado que tem, naturalmente, 32 bits, guardado nas localizaes que foram usadas para especicar os operandos, cando a parte mais signicativa guardada no primeiro operando. No caso da diviso, o resultado guardado no primeiro operando enquanto que o resto da mesma guardado no segundo operando. Esta opo de projecto leva a que as operaes de multiplicao e diviso no possam ser usadas com operandos do tipo imediato. Por outro lado, o algoritmo utilizado para estas operaes leva a que o seu resultado s faa sentido quando os operandos so nmeros sem sinal. Pelas mesmas razes, os operandos no podem estar colocados sicamente no mesmo local, o que signica que uma instruo MUL R1,R1, se utilizada, resultar num valor incorrecto. Para simplicar as operaes aritmticas com operandos de mais de 16 bits, operaes de soma e subtraco com transporte esto tambm disponveis. O bit de transporte, C, um bit de estado gerado pela unidade lgica e aritmtica, cujo valor colocado a quando existe um transporte numa operao aritmtica ou de deslocamento. Uma operao de adio com transporte, como por exemplo, ADDC R1,R2 calcula o resultado de R1+R2+C, onde C o valor guardado no bit de transporte. De forma idntica, a subtraco com transporte, SUBB R1,R2 calcula R1-R2-C. Para exemplicar o funcionamento destas operaes, considere-se um caso simplicado em que se pretendem somar dois nmeros sem sinal, de 8 bits, mas utilizando apenas registos de 4 bits e utilizando uma unidade lgica e aritmtica de 4 bits. Mais concretamente, suponha-se que se pretende somar , guardado nos registos R1 e R2, com o valor , guaro valor dado nos registos R3 e R4. Quando se soma o valor com o valor , o resultado , que no cabe num registo de 4 bits. O bit mais signicativo corresponde ao valor do bit de transporte, e utilizado pela prxima instruo de adio ou subtraco com transporte. Isso signica que quando se somarem os valores com adicionando o bit de transporte se obtm o valor , sendo assim obtido o valor nal correcto de . Assim, no processador P3 a sequncia de instrues do Programa 11.8 calcula correctamente uma soma de dois valores de 32 bits, sem sinal, guardados, respectivamente, nos registos R1, R2 e R3, R4, cando o valor resultante guardado no par de registos R1 e R2. ADD ADDC R2, R4 R1, R3

Programa 11.8: Soma de dois nmeros de 32 bits. Existem tambm instrues aritmticas unrias. A instruo NEG calcula o complemento aritmtico do seu operando, enquanto que as instrues INC e DEC incrementam e decrementam, respectivamente, o seu operando. Finalmente, a instruo de comparao CMP efectua uma subtraco, mas

178

CAPTULO 11. CONJUNTOS DE INSTRUES

sem guardar o resultado. til quando se pretende actualizar os bits de estado do processador sem alterar nenhum dos operandos envolvidos. Por exemplo, o troo de cdigo descrito no Programa 11.9 determina e guarda em R2 o endereo da primeira posio de memria que contm um valor igual ao do registo R1. MOV INC CMP BR.NZ R2, 0 R2 R1, M[R2] Loop

Loop:

Programa 11.9: Determinao da primeira posio de memria que contm um valor igual ao registo R1. Os operandos de todas as instrues, excepto a diviso e multiplicao, podem ser nmeros inteiros sem sinal ou nmeros com sinal em representao de complemento para 2. A interpretao dos resultados depende apenas do programador, sendo que o bit de estado O (excesso) s tem signicado se se interpretarem os operandos como nmeros com sinal. Todas as instrues aritmticas alteram o valor dos bits de estado do processador, nomeadamente dos bits Z, N, C e O, que indicam, respectivamente, se o resultado foi zero, se foi negativo, se gerou transporte e se gerou um valor maior que o que possvel armazenar.

11.6.2 Instrues Lgicas


A Tabela 11.6 descreve as instrues lgicas do processador P3. As trs primeiras instrues lgicas descritas nesta tabela aplicam aos seus operandos as Instruo Conjuno Disjuno Disjuno exclusiva Complemento lgico Teste Mnemnica AND OR XOR COM TEST Exemplo AND R1, M[R3] OR R1, 00FFh XOR M[R1], R2 COM M[R2+4] TEST R5, M[R4]

Tabela 11.6: Instrues lgicas do processador P3. operaes de conjuno, disjuno e disjuno exclusiva, respectivamente. Estas operaes so aplicadas bit a bit, sendo o resultado guardado na mesma posio do primeiro operando. A instruo lgica COM calcula o complemento, bit a bit, do seu nico operando. Finalmente, a instruo TEST aplica o operador conjuno aos seus dois operandos, no guardando o seu resultado, mas alterando o valor dos bits de estado. As operaes lgicas alteram o valor dos bits de estado Z e N, mas deixam inalterados os bits de estado C e O. Com efeito, uma operao lgica nunca gera transporte nem um valor que no possa ser representado, pelo que estes bits so deixados inalterados.

11.6. CONJUNTO DE INSTRUES DO PROCESSADOR P3

179

11.6.3 Instrues de Deslocamento


As instrues de deslocamento disponveis neste processador esto descritas na Tabela 11.7. O funcionamento das instrues de deslocamento foi explicado Instruo Deslocamento lgico direita Deslocamento lgico esquerda Deslocamento aritmtico direita Deslocamento aritmtico esquerda Rotao para a direita Rotao para a esquerda Rotao para a direita, com transporte Rotao para a esquerda, com transporte Mnemnica SHR SHL SHRA SHLA ROR ROL RORC ROLC Exemplo SHR R1, 4 SHL M[R1], 2 SHRA M[R1], 2 SHLA M[R2], 4 ROR R4, 15 ROL R4, 1 RORC R4, 15 ROLC R2, 15

Tabela 11.7: Instrues de deslocamento do processador P3. na Seco 9.4.5, que deve ser consultada para uma descrio mais detalhada do funcionamento das mesmas. Para todas estas instrues, um deslocamento direita signica um deslocamento na direco dos bits menos signicativos. Estas instrues tm dois operandos. O primeiro necessariamente um registo ou posio de memria que o objecto do deslocamento, enquanto que o segundo uma constante positiva que especica o nmero de bits do deslocamento que deve ser aplicado ao primeiro operando. A constante pode tomar um valor entre 1 e 15. Em todas as operaes de deslocamento, o bit de transporte C ca com o valor que sai do registo. As instrues de SHR e SHL deslocam direita e esquerda, respectivamente, o seu operando. Na operao SHR o bit mais signicativo preenchido com o valor . O mesmo acontece para o bit menos signicativo na operao SHL. O deslocamento aritmtico direita semelhante ao deslocamento lgico, excepto no valor que introduzido no bit mais signicativo. No deslocamento aritmtico, o valor do bit mais signicativo aps o deslocamento igual ao seu valor antes do deslocamento. A diferena entre os deslocamentos lgicos e aritmticos importante quando os mesmos so aplicados a nmeros com sinal. Com efeito, um deslocamento aritmtico direita tem como efeito dividir por dois o nmero deslocado, quer o mesmo seja positivo ou negativo. Pelo contrrio, o deslocamento lgico direita no corresponde a uma diviso por dois quando aplicado a um nmero negativo. Os deslocamentos esquerda lgicos e aritmticos so equivalentes no que respeita ao resultado, mas alteram os bits de estado de forma diferente, uma vez que o primeiro considerado uma operao lgica, alterando apenas os bits de estado Z, N, e C enquanto que o segundo, tal como o deslocamento aritmtico direita, considerado uma operao aritmtica, alterando todos os bits de estado. As operaes de rotao ROR e ROL representam deslocamentos circulares, onde os bits que so deslocados para fora do registo so re-injectados pelo outro extremo do registo. As operaes de rotao com transporte aplicam uma operao de rotao ao conjunto do operando mais o bit de transporte. Assim, numa rotao direita, o bit de transporte injectado na parte alta do

180

CAPTULO 11. CONJUNTOS DE INSTRUES

registo, e o bit menos signicativo passa para o bit de transporte. Numa rotao esquerda passa-se o oposto. Estas operaes afectam os bits de estado Z, N e C.

11.6.4 Instrues de Controlo


As instrues de controlo disponveis neste processador so as descritas na Tabela 11.8. Instruo Salto relativo incondicional Salto relativo condicional Salto incondicional absoluto Salto condicional absoluto Chamada a subrotina Chamada condicional a subrotina Retorno de subrotina Retorno de subrotina com N parmetros Interrupo Retorno de interrupo Mnemnica BR BR.cond JMP JMP.cond CALL CALL.cond RET RETN INT RTI Exemplo BR Pos1 BR.cond R3 JMP M[R3+1] JMP.cond Rot1 CALL Rotina1 CALL.cond Rot2 RET RETN 4 INT 55 RTI

Tabela 11.8: Instrues de controlo do processador P3. A instruo de salto incondicional JMP Pos transfere o controlo da execuo para a instruo guardada na posio Pos. Esta instruo efectivamente carrega o contador de programa com o valor especicado. Normalmente, usado um nome simblico para especicar o endereo de destino, embora possa ser usada qualquer constante numrica ou mesmo um operando especicado com qualquer um dos modos de endereamento suportados pelo processador. A instruo de salto condicional JMP.cond Etiq transfere controlo para a instruo especicada, mas apenas se se vericar a condio cond. possvel especicar qualquer uma das condies descritas na Tabela 11.9. Um teste de condio refere-se sempre ao resultado da ltima operao que afectou os bits de estado. Geralmente, esta uma operao aritmtica, lgica ou de deslocamento, embora tambm possa ser uma instruo de outro tipo, como por exemplo, CMC. Por exemplo, a instruo BR.Z Dest transfere controlo para a instruo no endereo Dest apenas se a ltima operao que alterou o registo de estado deu como resultado zero. A condio C testa o resultado guardado no bit de transporte. A condio N testa se o ltimo resultado foi negativo, o que em representao de complemento para 2 equivalente a testar se o bit mais signicativo do resultado . A condio P testa se o resultado estritamente positivo. Finalmente, um teste condio O (excesso ou, em ingls, overow) d um resultado verdadeiro se a ltima operao aritmtica deu um resultado que, interpretado como um nmero inteiro com sinal, no pde ser adequadamente representado pelo processador. Os bits que denem o valor das condies so guardados no registo de

11.6. CONJUNTO DE INSTRUES DO PROCESSADOR P3


Condio Zero No zero Transporte No transporte Negativo No negativo Excesso No excesso Positivo No positivo Interrupo No interrupo Mnemnica Z NZ C NC N NN O NO P NP I NI

181

Descrio ltima operao deu resultado zero ltima operao deu resultado no zero ltima operao gerou transporte ltima operao no gerou transporte ltima operao deu resultado negativo ltima operao deu resultado no negativo ltima operao gerou excesso (overow) ltima operao no gerou excesso (overow) ltima operao deu resultado positivo ltima operao no deu resultado positivo Existe uma interrupo pendente No existe interrupo pendente

Tabela 11.9: Condies de salto para o processador P3. estado do processador, que, no entanto, no directamente acessvel ao programador. As instrues de chamada a subrotina transferem controlo para a posio do programa especicada, mas apenas depois de guardarem na pilha o contedo do contador de programa. Isto permite que a instruo RET retorne o controlo para a instruo que se segue instruo de chamada, copiando para o contador de programa o valor guardado no topo da pilha. Para que este mecanismo funcione correctamente, importante que, dentro de cada rotina, o nmero de operaes de insero na pilha seja igual ao nmero de remoes. comum usar a pilha para passar parmetros para uma rotina. Assim, existe tambm a instruo RETN que, alm de repr o valor do contador de programa, actualiza o apontador para a pilha por forma a que o nmero de valores especicado deixe de estar no topo da pilha do processador. Assim, por exemplo, a instruo RETN 3 retira 3 valores da pilha do processador, e poder ser usada para retornar de uma rotina que tem 3 parmetros passados atravs da pilha. A instruo RETN 0 equivalente instruo RET. A instruo de INT Intnum comporta-se de forma semelhante a uma chamada a uma subrotina, uma vez que transfere controlo para a posio do programa associada interrupo especicada com Intnum. A execuo desta instruo tem o mesmo efeito que a recepo da interrupo Intnum. Como foi referido na Seco 11.5.3, isso conseguido guardando na pilha no s o valor do contador de programa, mas tambm o registo de estado do processador. Isto permite que a instruo de retorno de interrupo (RTI) reponha o estado completo do processador3 , recuperando o valor do contador do programa e o registo de estado do processador. Esta instruo deve ser sempre e exclusivamente usada para efectuar o retorno de rotinas de interrupo, que podem ser chamadas quer atravs da instruo INT quer atravs do mecanismo de interrupes do processador. As instrues de controlo no alteram o valor dos bits de estado do proces3 No que respeita ao valor do contador do programa e do registo de estado. A rotina de interrupo poder ter alterado o valor de outros registos.

182

CAPTULO 11. CONJUNTOS DE INSTRUES

sador, ao contrrio do que acontece com as operaes aritmticas, lgicas e de deslocamento estudadas nas seces anteriores.

11.6.5 Instrues de Transferncia de Dados


Estas instrues permitem copiar palavras ou octetos entre posies de memria ou registos do processador. Tambm so consideradas instrues de transferncia as instrues de manipulao da pilha do processador. O processador P3 dispe das instrues de transferncia de dados descritas na Tabela 11.10. A Instruo Copiar o contedo Copiar octeto menos signicativo Copiar octeto mais signicativo Trocar o contedo Colocar na pilha Remover da pilha Mnemnica MOV MVBL MVBH XCH PUSH POP Exemplo MOV R1, M[R2] MVBL M[Pos1], R3 MVBL R3, R4 XCH R1, M[R2] PUSH R1 POP M[R5+4]

Tabela 11.10: Instrues de transferncia de dados do processador P3. instruo mais bsica de transferncia de dados a instruo MOV POS1,POS2 que copia a palavra guardada em POS2 para POS1. A instruo MVBH POS1, POS2 copia o octeto mais signicativo da posio POS2 para o octeto mais signicativo da posio POS1, deixando o octeto menos signicativo inalterado. A instruo MVBL funciona de modo semelhante para o octeto menos signicativo. A instruo de XCH troca os contedos das duas localizaes especicadas. Finalmente, as instrues de PUSH e POP so usadas para manipular a pilha. Mais especicamente, a instruo PUSH Val coloca na posio de memria apontada pelo registo SP o valor especicado, e, em seguida, decrementa o valor do registo SP. A instruo POP Loc comea por incrementar o valor do registo SP, e em seguida guarda em Loc (que pode ser um registo ou uma posio de memria) o valor da posio de memria apontada por SP. As instrues de transferncia de dados no alteram o valor dos bits de estado, uma vez que a sua principal funcionalidade copiar dados de uma localizao para outra. Caso seja necessrio alterar o valor dos bits de estado de acordo com um valor manipulado por uma destas instrues necessrio executar uma instruo lgica ou aritmtica que opere sobre o valor copiado. Tipicamente, esta instruo ser a instruo CMP ou TEST.

11.6.6 Outras Instrues


O processador P3 disponibiliza ainda algumas instrues, descritas na Tabela 11.11, que manipulam diversos aspectos do funcionamento do processador. A instruo ENI d ao processador ordem para aceitar interrupes a partir deste momento. A instruo DSI faz com que o processador deixe de aceitar interrupes. Ambas as instrues actuam modicando o valor de um bit do registo de estado, o bit E, que funciona como bit de controlo do sistema de interrupes.

11.6. CONJUNTO DE INSTRUES DO PROCESSADOR P3


Instruo Activar interrupes Desactivar interrupes Activar bit de transporte Desactivar bit de transporte Complementar bit de transporte Operao nula Mnemnica ENI DSI STC CLC CMC NOP

183

Tabela 11.11: Outras instrues do processador P3.

Outras instrues que modicam directamente o valor de bits no registo de estado so as instrues de STC, CLC e CMC que, respectivamente, activam, desactivam e complementam o bit de transporte do processador. Finalmente, a instruo NOP no executa qualquer operao nem altera o estado do processador. Pode ser usada para preencher temporariamente zonas de cdigo que possam vir a ser alteradas mais tarde, mas no geralmente utilizada excepto quando se pretenderem introduzir atrasos de curta durao em programas.

11.6.7 Exemplos de Utilizao


Considere-se, a ttulo de exemplo, que se pretende programar o processador P3 para somar 10 posies de memria consecutivas, com incio na posio Start. O troo de cdigo do Programa 11.10 executa essa operao. MOV MOV ADD DEC BR.NN R1, 9 R2, R0 R2, M[Start+R1] R1 Ciclo

; Limpa o registo R2

Ciclo:

; Continua se R1>=0

Programa 11.10: Soma das 10 posies de memria com incio na posio Start. Inicializando o registo R1 com o valor e iterando at que este registo atinja um valor negativo, este cdigo soma todas as posies de memria entre M[Start] at M[Start+9], comeando com as posies de endereo mais alto. Em alternativa, seria possvel inicializar R1 com o valor e iterar at que se atinja o valor , que j no deve ser adicionado. Neste caso, o cdigo seria o representado no Programa 11.11. A instruo CMP R1, 10 actualiza os registos de estado do processador da mesma maneira que a execuo de uma subtraco. Assim, quando R1 atingir o valor , o bit de estado Z ir car a e o ciclo termina.

184 MOV MOV ADD INC CMP BR.NZ

CAPTULO 11. CONJUNTOS DE INSTRUES


R1, R0 R2, R0 R2, M[Start+R1] R1 R1, 10 Ciclo

; Limpa o registo R2

Ciclo:

; Compara R1 com 10 ; Continua se R1-10 <> 0

Programa 11.11: Soma das 10 posies de memria com incio na posio Start, incrementando o contador.

11.7 Formato das Instrues do Processador P3


As instrues do processador P3 so codicadas em uma ou duas palavras de memria. A segunda palavra de memria s usada quando o modo de endereamento requer a especicao do endereo de uma posio de memria ou de um operando imediato, nomeadamente nos modos de endereamento imediato e indexado. Assim, todas as instrues que usem um destes modos de endereamento usam duas posies de memria, a segunda das quais especica o valor da palavra W usada no endereamento. A Figura 11.7 descreve o formato genrico de uma instruo do processador P3. Nesta gura, os campos marcados com um ponto de interrogao podem ou no estar presentes numa dada instruo. Os primeiros seis bits (bits 15 a 10)
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 Descrio dos Operandos ? 0

OPCODE

W : Operando imediato ? Figura 11.7: Formato genrico das instrues do processador P3. da primeira palavra de cada instruo especicam qual o cdigo da operao a executar (em ingls, operation code, ou mais simplesmente, opcode). A lista completa dos cdigos de operao para o processador P3 encontra-se na Tabela 11.12. As instrues que no tm operandos nem parmetros apenas usam o campo que especica o cdigo de operao. Nas instrues que tm um operando, existe, na descrio dos operandos, um campo com dois bits, que controla o modo de endereamento usado, de acordo com a Tabela 11.13. Nas operaes que tm dois operandos, o campo especica tambm o modo de endereamento de um dos operandos, sendo o outro operando necessariamente um registo. A descrio dos operandos inclui outros campos para alm do campo que especicam os operandos e os parmetros de cada instruo, de uma forma que ser detalhada em seguida. Esta especicao varia conforme o tipo de operao e especicada pelo valor dos trs primeiros bits do cdigo de operao.

11.7. FORMATO DAS INSTRUES DO PROCESSADOR P3


Mnemnica NOP ENI DSI STC CLC CMC RET RTI INT RETN NEG INC DEC COM PUSH POP SHR SHL SHRA SHLA ROR ROL RORC ROLC Cdigo 000000 000001 000010 000011 000100 000101 000110 000111 001000 001001 010000 010001 010010 010011 010100 010101 011000 011001 011010 011011 011100 011101 011110 011111 Mnemnica CMP ADD ADDC SUB SUBB MUL DIV TEST AND OR XOR MOV MVBH MVBL XCH JMP JMP.cond CALL CALL.cond BR BR.cond Cdigo 100000 100001 100010 100011 100100 100101 100110 100111 101000 101001 101010 101011 101100 101101 101110 110000 110001 110010 110011 111000 111001

185

Tabela 11.12: Cdigos de operao do processador P3. 00 01 10 11

Endereamento Por registo Por registo indirecto Imediato Indexado, directo, relativo ou baseado

Operao op = RX op = M[RX] op = W op = M[RX+W]

Tabela 11.13: Modos de endereamento do processador P3.

11.7.1 Instrues sem Operandos


As instrues NOP, ENI, DSI, STC, CLC, CMC, RET e RTI no utilizam qualquer operando e so codicadas como se encontra ilustrado na Figura 11.8. As 0 0 0 X X X
         

Figura 11.8: Codicao de instrues sem operandos. posies denidas com X X X tem um valor diferente para cada uma destas instrues, de acordo com os valores descritos na Tabela 11.12. Para estas operaes, os 10 bits menos signicativos no so usados e o seu valor ignorado.

186

CAPTULO 11. CONJUNTOS DE INSTRUES

As instrues INT e RETN aceitam um parmetro como argumento, que necessariamente um nmero inteiro, entre 0 e 1023. Este argumento codicado no campo ARG, como se ilustra na Figura 11.9. ARG 0 0 1 X X X

Figura 11.9: Codicao de instrues com um parmetro.

11.7.2 Instrues com Um Operando


As instrues NEG, INC, DEC, COM, PUSH e POP aceitam um operando. Para as quatro primeira instrues, este operando especica simultaneamente a origem dos dados aos quais vai ser aplicada a operao e o destino a dar ao resultado da mesma. Para a instruo PUSH, o operando determina o valor que ser escrito na pilha. Para a instruo POP, o operando indica a localizao onde dever ser guardado o valor que se encontra no topo da pilha. Em qualquer dos casos, o operando pode ser especicado usando qualquer dos modos de endereamento descritos na Seco 11.3.4. O modo de endereamento especicado pelos dois bits do campo , de acordo com a Tabela 11.13 e o esquema da Figura 11.10. O valor do campo , de 4 bits, usado para especicar o va  

Figura 11.10: Codicao de instrues com um operando. lor de RX (ver Tabela 11.13), usado de acordo com o modo de endereamento. Isto permite codicar qualquer valor entre e , para os registos de uso geral, e tambm dois outros valores para especicar os registos PC e SP nos modos de endereamento relativo e baseado. Os quatro bits restantes no so utilizados. As instrues SHR, SHL, SHRA, SHLA, ROR, ROL, RORC, ROLC aceitam, alm do operando, um parmetro que pode ser um nmero inteiro entre 1 e 15. Este segundo operando codicado nos bits 6 a 9 da instruo, de acordo com a Figura 11.11. PAR 0 1 1 X X X W? Figura 11.11: Codicao de instrues com um operando e um parmetro.

IR1

W?

IR1

11.7. FORMATO DAS INSTRUES DO PROCESSADOR P3

187

11.7.3 Instrues com Dois Operandos


As instrues CMP, ADD, ADDC, SUB, SUBB, MUL, DIV, TEST, AND, OR, XOR, MOV, MVBL, MVBH e XCH usam dois operandos, sendo que o primeiro operando especica simultaneamente um dos operandos fonte e a localizao onde dever ser guardado o resultado. Estas instrues so codicadas de acordo com o esquema da Figura 11.12. Uma vez que, como foi discutido na Seco 11.4, S 1 0 X X X X W? Figura 11.12: Codicao de instrues com dois operandos. possibilitar a utilizao de um modo arbitrrio de endereamento para ambos os operandos exigiria instrues demasiado longas, neste processador um dos operandos , como foi referido anteriormente, especicado usando endereamento por registo. Assim, o valor do campo serve para especicar o modo de endereamento de apenas um dos operandos. Se o valor de for , o primeiro operando endereado com o registo de acordo com o modo de endereamento especicado e usado para aceder ao segundo operando. Se o valor de for , especica (de acordo com ) qual o segundo operando, e usado para especicar o primeiro operando. Em todos os casos, o registo ao qual se aplica o modo de endereamento especicado pelo campo o registo especicado no campo do registo de instruo. IR2 M IR1

11.7.4 Instrues de Controlo


As instrues de controlo JMP, JMP.cond, CALL e CALL.cond so codicadas de acordo com o esquema da Figura 11.13. COND 1 1 0 X X X W? Figura 11.13: Codicao das instrues de salto absoluto e so interpretados da mesma forma do que nas instruOs campos es de um operando. O campo , quando necessrio, codicado de acordo com a Tabela 11.14. As instrues de controlo BR e BR.cond so codicadas de acordo com o esquema da Figura 11.14. O valor do campo especica um valor, relativo ao PC. Um valor de igual a 0 equivalente instruo de NOP. Como discutido na Seco 11.5.1, esta instruo tem a vantagem de ocupar sempre apenas uma posio de memria. A limitao que, como campo tem apenas 6 bits, os saltos relativos s so possveis at 32 posies de memria atrs e 31 posies de memria frente da posio actual do PC.

IR1

188

CAPTULO 11. CONJUNTOS DE INSTRUES


Condio Zero No zero Transporte No transporte Negativo No negativo Excesso No excesso Positivo No positivo Interrupo No interrupo Mnemnica Z NZ C NC N NN O NO P NP I NI Cdigo 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011

Tabela 11.14: Codicao das condies de teste. COND 1 1 1 X X X OFFSET

Figura 11.14: Codicao das instrues de salto relativo.

11.7.5 Exemplos de Codicao


A ttulo de exemplo, considere-se a instruo JMP.NZ R3 que salta para a posio de memria apontada por R3 se o ltimo resultado na unidade lgica e aritmtica no foi . A codicao desta instruo ser obtida notando que: O cdigo de operao

O modo de endereamento por registo, o que signica que o valor do . campo

O valor do campo COND

O cdigo de operao para a instruo ADD . Note-se que o valor dos dois bits mais signicativos , o que indica que uma instruo de dois operandos. Esta instruo tem dois operandos, dos quais o primeiro endereado por registo (R1) e o segundo obtido atravs do uso de endereamento indexado a partir dos valores do registo R7 e da constante 00A0h. Isto signica que:

Isto conduz a que a codicao desta instruo seja conseguida com uma s palavra que obtida por concatenao destes valores, ou seja, o que equivalente a C443h. Considere-se agora a instruo ADD R1,M[R7+00A0h], ligeiramente mais complexa, que tem dois operandos e usa um modo de endereamento diferente. A codicao desta instruo obtida considerando que:

O valor do campo

(Tabela 11.12).

, por forma a especicar o registo R3. , de acordo com a Tabela 11.14.

11.8. UM ASSEMBLER PARA O PROCESSADOR P3


O valor do campo indexado.

189

O valor do campo , para indicar que o modo de endereamento se aplica ao segundo operando. O valor do campo , que, neste caso, usado na especicao do segundo operando, , uma vez que o registo utilizado R7. O valor do campo , especicando o registo usado na denio do primeiro operando.

Esta instruo assim codicada com duas palavras de memria, que contm os valores e , ou seja, 8677h e 00A0h. Para outros exemplos de codicao, pode consultar-se o exemplo da Seco 11.1, que contm o cdigo em linguagem mquina do P3 e o correspondente cdigo em assembly.

11.8 Um Assembler para o Processador P3


Embora exista uma correspondncia directa entre uma instruo assembly e uma instruo de linguagem mquina, a traduo manual de um programa em assembly para a sequncia de bits que constituem a linguagem mquina um processo penoso e sujeito a erros. Por esta razo, geralmente utilizada uma ferramenta, o assembler, que traduz um programa de linguagem assembly para linguagem mquina. Alm de traduzir as mnemnicas das instrues e os valores dos argumentos e dos operandos, o assembler permite que o programador utilize nomes simblicos em vez de constantes, o que simplica a tarefa de programar e torna mais legveis os programas. A primeira e talvez a mais importante caracterstica de um assembler o facto de permitir ao programador usar mnemnicas para as instrues e nomes simblicos para os endereos das mesmas. O uso de mnemnicas de bvia vantagem para o programador, j que evita a memorizao dos cdigos de operao. Tambm o uso de nomes simblicos para os endereos simplica consideravelmente a tarefa do programador que, na especicao de uma instruo de controlo, pode usar um rtulo que o nome simblico do endereo da instruo para onde pretende transferir controlo. Caso no existisse esta possibilidade, teria de se usar o endereo real da instruo que, por vezes, no ainda conhecido e est, em todo o caso, sujeito a ser alterado no futuro, quando outras partes do programa forem modicadas. Considere-se, por exemplo, o troo de cdigo em assembly descrito no Programa 11.12. Este troo de cdigo tem como objectivo identicar a primeira posio de memria cujo contedo igual ao contedo do registo R1, comeando na posio start=0F00h. Neste troo de cdigo foi usada a directiva ORIG para denir o endereo de memria onde ir iniciar-se a escrita em memria do cdigo mquina do programa e a directiva EQU que dene a constante start com o valor 0F00h.

O valor do campo

, na segunda palavra da instruo, ser 00A0h.

, para indicar modo de endereamento

190 ORIG EQU

CAPTULO 11. CONJUNTOS DE INSTRUES


0A00h 0F00h

start ; Procura: ; ; Entradas: ; Sadas: Procura: CProcura:

Localiza a primeira posio de memria que contm o valor do registo R1 R1 - Valor a procurar R2 - Endereo do resultado MOV CMP BR.Z INC BR RET R2, start R1, M[R2] FimProc R2 CProcura ; ; ; ; ; ; Inicializa R2 Compara os valores Termina se encontrou Incrementa o ponteiro Prxima iterao R2 contm o resultado

FimProc:

Programa 11.12: Programa em Assembly que localiza a primeira posio de memria cujo contedo igual ao do registo R1.

Esta constante pode ser usada mais tarde em qualquer posio onde for necessrio usar o valor 0F00h. As denies de constantes devem vir no incio do programa, para que possam ser facilmente alteradas. Os nomes das constantes permitem tornar a leitura do cdigo mais fcil por serem mais inteligveis que um valor numrico. Para alm disso, se se pretender alterar o valor da constante basta alterar a denio e todo o cdigo ca automaticamente actualizado. Por esta razo, no devem existir constantes numricas dispersas pelo programa, devendo sempre ser usadas denies das mesmas no princpio do programa ou mdulo respectivo. Foram tambm usados comentrios para documentar o programa. Um comentrio comea pelo caracter ;, que indica ao assembler que todo o texto que se segue nessa linha dever ser ignorado no processo de traduo do cdigo assembly. Note-se que as directivas ORIG e EQU no so instrues assembly. Uma anlise da Tabela 11.15, que contm o cdigo mquina resultante deste cdigo assembly, revela que no foram geradas nenhumas instrues que correspondam a estas directivas. O resultado das directivas s visvel quando se analisa a primeira instruo mquina gerada (Tabela 11.15), vericando-se que esta instruo equivalente instruo assembly MOV R2, 0F00h e se localiza na posio de memria 0A00h. De uma forma geral, podem ser usadas constantes tanto como operandos de instrues como para especicar endereos de memria. Em segundo lugar, repare-se que foram usados nomes simblicos para trs endereos de instrues, os rtulos Procura, CProcura e FimProc. Dois destes rtulos foram utilizados no programa, nas instrues com mnemnica BR.Z e BR. Desta forma, o programador no tem de lidar com o valor numrico dos endereos das instrues para onde pretende transferir controlo. O rtulo Procura, por outro lado, no usado dentro da subrotina, mas poder ser usado mais tarde por outra subrotina que pretenda usar esta. A chamada subrotina Procura poder ser efectuada atravs da instruo CALL Procura, no necessitando o programador de conhecer o endereo onde esta rotina ir

11.8. UM ASSEMBLER PARA O PROCESSADOR P3


Endereo 0A00h 0A01h 0A02h 0A03h 0A04h 0A05h 0A06h Instruo 1010111010100000b 0000111100000000b 1000001001010010b 1110010000000010b 0100010000000010b 1110000000111100b 0001100000000000b Mnemnica MOV R2, start CMP R1,M[R2] BR.Z FimProc INC R2 BR CProcura RET

191

AEA0h 0F00h 8252h E402h 4402h E03Ch 1800h

Tabela 11.15: Linguagem mquina da subrotina Procura.

car localizada. O assembler do processador P3 aceita vrias directivas, descritas na Tabela 11.16. Alm das directivas ORIG e EQU, j usadas, o assembler do processador ORIG EQU WORD STR TAB Especica o endereo de origem do cdigo que se segue Dene o valor de uma constante Reserva uma posio de memria para uma varivel Guarda uma cadeia de caracteres em memria Reserva posies de memria

Tabela 11.16: Directivas para o assembler do processador P3. P3 aceita trs outras directivas, cujo uso est exemplicado no Programa 11.13. Abc Xyz Texto1 Tabela1 WORD WORD STR TAB 0055h 0011h Hel,lo 3

Programa 11.13: Exemplo de uso das directivas. A directiva WORD reserva uma posio de memria para conter uma varivel, que pode mais tarde ser referenciada usando um nome simblico. Permite ainda inicializar essa posio de memria. No exemplo acima, reserva uma posio de memria para a varivel Abc, que inicializada a 0055h e uma posio de memria para a varivel Xyz, inicializada a 0011h. A directiva STR permite guardar uma cadeia de caracteres em memria. No caso acima, so reservadas 5 posies de memria, que so preenchidas com os valores ASCII da cadeia de caracteres Hello e o nome simblico Texto1 ca denido com o valor do endereo da posio de memria onde comea a cadeia. O terceiro argumento desta directiva consiste numa lista de elementos, separada por vrgulas, onde cada elemento pode ser uma cadeia de caracteres, comeada e terminada pelo smbolo ou uma constante numrica. As cadeias de caracteres so substitudas pelos seus valores ASCII, concatenadas umas com as outras (ou com argumentos numricos, caso existam) e o resultado guardado em memria.

192

CAPTULO 11. CONJUNTOS DE INSTRUES

Finalmente, a directiva TAB reserva posies de memria, inicializadas a , que podero ser usadas para guardar uma tabela, cujo princpio pode ser referenciado com um nome simblico. No exemplo acima, so guardadas trs posies de memria e denido o nome simblico Tabela1. Se se assumir que as directivas acima apareciam no princpio do programa, antecedidas de uma directiva ORIG 0000h, as primeiras 10 posies de memria cariam preenchida de acordo com a Tabela 11.17. Ficariam ainda de

Endereo 0000h 0001h 0002h 0003h 0004h 0005h 0006h 0007h 0008h 0009h

Instruo 0055h 0011h 0048h 0065h 006Ch 006Ch 006Fh 0000h 0000h 0000h

Tabela 11.17: Contedo das posies de memria, de acordo com as directivas do Programa 11.13. nidas as constantes Abc, Xyz, Texto1 e Tabela1 com os valores 0000h, 0001h, 0002h e 0007h, respectivamente, constantes estas que podem ser utilizadas noutro contexto para referenciar os respectivos endereos.

11.9 Programao em Linguagem Assembly


Como em qualquer linguagem de programao, o uso de tcnicas de programao estruturada fundamental para que seja possvel levar a bom termo um projecto de programao. No entanto, o uso de uma estrutura modular num programa em assembly talvez ainda mais importante do que em linguagens de alto nvel, por duas razes. Em primeiro lugar, quando se usa linguagem assembly so geralmente necessrias mais instrues para realizar uma operao do que numa linguagem de alto nvel, o que torna os programas consideravelmente mais extensos. Em segundo lugar, a legibilidade de um programa escrito em assembly consideravelmente menor, dada as maiores restries impostas ao formato do programa e ao uso de nomes de variveis. assim importante fugir tentao de comear a programar imediatamente, sem passar por uma fase de denio da estrutura do programa. Esta denio, que pode ser feita quer em termos de uxograma quer em termos de pseudo-cdigo, a parte mais importante de qualquer projecto de programao em assembly e deve ser aquela a que se dedica mais tempo. Se este tempo no for usado aqui, a fase de programao detalhada ser, com elevada probabilidade, muito mais extensa, acabando o projecto por demorar mais tempo na sua totalidade. A fase de denio da estrutura do programa permitir denir e perceber bem o problema e dividi-lo em problemas

11.9. PROGRAMAO EM LINGUAGEM ASSEMBLY

193

mais simples, sem a preocupao de conhecer detalhes relacionados com a linguagem de programao.

11.9.1 Programao Estruturada em Assembly


O uso de subrotinas est directamente relacionado com a estruturao do programa. A cada bloco denido na fase de estruturao do programa corresponder uma ou mais subrotinas. Uma subrotina dever ter bem denido: A sua funcionalidade Os parmetros de entrada e sada Registos e posies de memria alterados na subrotina

Com uma boa estruturao do trabalho, cada subrotina pode e deve ser desenvolvida e testada independentemente do resto do cdigo. Isto permitir que a construo do programa nal, obtido atravs da ligao de subrotinas, seja feita com relativa simplicidade e rapidez uma vez que a maioria dos erros de programao j foram detectados na fase de teste de cada mdulo. Pelo contrrio, sempre de evitar o procedimento que consiste em juntar vrias subrotinas ainda no testadas, com o objectivo de depurar o programa na sua totalidade. Verica-se que os erros so extremamente difceis de identicar e resolver nesta fase, mesmo que sejam relativamente simples quando analisados ao nvel de uma subrotina. Dada a relativa ilegibilidade de um programa em assembly, o uso de comentrios que documentem o funcionamento das subrotinas e de partes importantes das mesmas fundamental. Cada subrotina dever, assim, ter um cabealho que documente devidamente cada um dos trs pontos identicados acima. Alm disso, partes complexas ou menos bvias de cada subrotina devero ser comentadas independentemente. A utilizao de constantes numricas embebidas no cdigo diculta a manuteno e alterao posterior do mesmo, alm de ser uma fonte de possveis erros que so difceis de identicar. A metodologia que dever ser adoptada a denio de todos os valores de constantes numricas no incio do programa utilizando a directiva EQU. Embora seja possvel usar os registos ou posies de memria para passar parmetros para subrotinas, esta soluo no permite a utilizao de subrotinas recursivas. Por essa razo, em muitos casos utilizada a pilha para efectuar a passagem de parmetros. Quando se utiliza esta abordagem, os parmetros devero ser colocados na pilha e, dentro da rotina, devero ser acedidos atravs de acessos pilha. O tipo de parmetros aceites e a ordem pela qual eles devem ser passados deve ser documentados no cabealho da subrotina.

11.9.2 Exemplo de Programao em Assembly


Para ilustrar os conceitos descritos acima, projecta-se em seguida um programa em assembly para um problema especco. O programa a desenvolver dever copiar um texto de um porto de entrada e escrev-lo num porto de sada com a primeira letra de todas as palavras em maisculas. Neste problema, o nico

194

CAPTULO 11. CONJUNTOS DE INSTRUES

separador de palavras o espao e o m do texto indicado por um caracter especial, @. A primeira fase consiste em denir a estrutura global do programa. Numa primeira abordagem, o programa pode ser dividido em trs blocos, que correspondem aos blocos do uxograma na Figura 11.15. Este uxograma, embora

L Texto

Processa Texto

Escreve Texto

Figura 11.15: Fluxograma para o programa principal. simples, dene que, numa primeira fase o texto lido do porto de entrada e escrito em memria; na segunda fase, o texto processado em memria; e na terceira fase, o texto modicado em memria escrito para o porto de sada. Nesta fase, deve tambm ser denido que a subrotina que l o texto retorna o nmero de caracteres lidos, para uso dos mdulos seguintes. Os trs passos indicados na gura ainda no so to simples que a sua realizao seja bvia, pelo que cada um desses blocos deve agora ser renado. O bloco que l o texto pode ser realizado de acordo com o uxograma da Figura 11.16. Esta subrotina l o texto, caracter a caracter, e escreve-o em memria, testando cada caracter para ver se o caracter que indica o m do texto e vericando se se atingiu o tamanho mximo permitido para o texto4 . Com este nvel de detalhe j fcil transpor o uxograma para linguagem assembly e criar a subrotina correspondente, descrita no Programa 11.14. Uma vez que o programa em assembly geralmente escrito usando um editor de cheiros que no tem suporte especial para a programao neste ambiente, conveniente utilizar uma formatao que melhore a legibilidade do programa. Em geral, cdigo assembly escrito em quatro colunas: rtulos, mnemnica da instruo assembly, operandos e comentrios. Note-se que no programa no aparecem constantes numricas, mas sim constantes que sero denidas no cabealho do programa. Neste caso, deniram-se: fim_txt, cdigo do caracter que indica o m de texto; Texto, primeira posio de memria reservada para o texto; e max_car, nmero de
4 Nesta soluo simples para o problema no devolvida qualquer indicao se a leitura terminou por ter sido recebido o carcter @ ou por ter sido atingido o nmero mximo de caracteres possvel.

11.9. PROGRAMAO EM LINGUAGEM ASSEMBLY

195

Inicializa Apontador

L Caracter

Sim

Fim Texto ?

No Copia para Memria

Incrementa Apontador

Sim

Max. Car ?

No

Figura 11.16: Fluxograma da subrotina de leitura de caracteres. ; LeTexto: ; ; Entradas: ; Sadas: ; Efeitos: LeTexto: CicloLeit: efectua a leitura caracter a caracter e preenche a zona Texto R2 - numero de caracteres lidos altera o registo R1 MOV R2, R0 ; inicializa R2 CALL LeCaracter ; l um caracter CMP R1, fim_texto BR.Z FimLeTexto MOV M[R2+Texto], R1 INC R2 CMP R2, max_car BR.NZ CicloLeit RET

FimLeTexto:

Programa 11.14: Subrotina de leitura de texto assembly.

caracteres mximo para o texto. A leitura de um caracter feita pela subrotina do Programa 11.18. Esta subrotina espera que exista um caracter no porto de

196

CAPTULO 11. CONJUNTOS DE INSTRUES

entrada, at o retornar. Assumiu-se aqui que uma leitura do porto de controlo devolve caso nenhum caracter tenha sido introduzido desde a ltima leitura do porto de entrada que corresponde ao teclado. necessrio agora especi; LeCaracter: ; Entradas: ; Sadas: ; Efeitos: LeCaracter:

efectua a leitura de um caracter R1 - caracter lido altera o registo R1 CMP R0, M[controlo] BR.Z LeCaracter MOV R1, M[in_port] RET

; Ciclo de espera ; L o caracter

Tabela 11.18: Subrotina de leitura de um caracter. car o bloco que processa o texto. Um possvel uxograma para esse bloco o da Figura 11.17. Neste bloco avana-se caracter a caracter, em memria,

Inicializa Apontador Incrementa Apontador Sim No Sim

Fim Texto ?

Espao ? No

Torna Maiscula Torna Minscula

Incrementa Apontador No Fim Texto ? Sim Espao ? Sim No

Figura 11.17: Fluxograma do bloco de processamento de texto. convertendo cada letra a seguir a um espao numa letra maiscula at que se tenha processado o nmero de caracteres lidos. A converso de minsculas para maisculas pode ser efectuada aplicando a operao AND, que usa o facto

11.9. PROGRAMAO EM LINGUAGEM ASSEMBLY

197

de, no cdigo ASCII, os cdigos para a minscula e maiscula de uma dada letra diferirem apenas no sexto bit, que , respectivamente, para minscula e para maiscula. A operao inversa conseguida com a operao OR. A alterao do valor do sexto bit efectuada com a ajuda de uma mscara, que tem apenas esse bit a 1. Tambm aqui se chegou a uma representao sucientemente simples para que seja possvel escrever o cdigo assembly para esta subrotina, descrito no Programa 11.15. Note-se que existe uma correspondncia entre o uxograma e ; ProcTexto: ; Entradas: ; Sadas: ; Efeitos: ProcTexto: Converte em maiscula o primeiro caracter de cada palavra R2 - numero de caracteres modifica o texto em memria; altera registos R1, R3 e R4 MOV R3, R0 ; inicializa R3 MOV R4, mascara ; Complemento da COM R4 ; mscara CMP R3, R2 BR.Z FimProcTexto MOV R1, M[R3+Texto] CMP R1, BR.Z Incr2 AND R1, R4 ; torna maiscula MOV M[R3+Texto], R1 INC R3 CMP R3, R2 BR.Z FimProcTexto ; Fim de texto MOV R1, M[R3+Texto] CMP R1, BR.Z Incr2 OR R1, mascara ; torna minscula MOV M[R3+Texto], R1 BR Incr1 INC R3 ; prxima palavra BR CicloExt RET

CicloExt:

Incr1:

Incr2: FimProcTexto:

Programa 11.15: Subrotina de processamento do texto. o cdigo. Finalmente, falta especicar o bloco de impresso do texto. Um possvel uxograma para este bloco o da Figura 11.18. Dada a simplicidade deste bloco, possvel fazer uma traduo imediata para linguagem assembly, resultando no cdigo do Programa 11.16. O programa principal, descrito no Programa 11.17, corresponde ao uxograma da Figura 11.15, ser simplesmente uma sequncia de chamadas s subrotinas j denidas, antecedido das directivas necessrias, que denem a origem do programa e os valores das constantes e variveis usadas no programa

198

CAPTULO 11. CONJUNTOS DE INSTRUES

Inicializa Apontador

Imprime Caracter

Incrementa Apontador Sim Fim Texto ? No

Figura 11.18: Fluxograma do bloco de escrita de texto. ; ; ; ; ; Imprime: Entradas: Sadas: Efeitos: escreve o texto no porto de sada. R1 - incio do texto R2 - nmero de caracteres no texto altera os registos R3 e R4 MOV MOV MOV INC INC CMP BR.NZ RET R3, R0 R4, M[R1] M[out_port], R4 R1 R3 R3, R2 CicloImp ; inicializa R3 ; escreve caracter

Imprime: CicloImp:

; verifica terminou

Programa 11.16: Subrotina de escrita do texto modicado.

e subrotinas.

Sumrio
Neste captulo estudaram-se algumas das possveis alternativas para a arquitectura do conjunto de instrues de micro-processadores e apresentou-se o conjunto de instrues do processador didctico P3. Este conjunto de instrues, tpico de processadores simples de segunda gerao, inclui instrues de controlo, transferncia e manipulao de dados. Foi tambm descrita a lin-

11.9. PROGRAMAO EM LINGUAGEM ASSEMBLY


; Definio de constantes fim_texto EQU @ controlo EQU FFFDh max_car EQU 100h in_port EQU FFFFh out_port EQU FFFEh mascara EQU 0020h ; Definio de variveis ORIG 8000h Texto TAB max_car ORIG MOV MOV CALL CALL MOV CALL BR 0000h R1, F000h SP, R1 LeTexto ProcTexto R1, Texto Imprime Inicio

199

Inicio:

; Inicializa a pilha

; Parmetro para Imprime

Programa 11.17: Programa principal.

guagem assembly do processador P3 que permite efectuar a sua programao utilizando um conjunto de mnemnicas em vez de linguagem mquina. Foi tambm estudada a forma como a linguagem assembly traduzida para linguagem mquina, tendo sido descrita a forma como cada instruo codicada. Finalmente, foi apresentado um conjunto de regras e recomendaes que devero ser adoptadas sempre que se desenvolvam programas em linguagem assembly, uma vez que tornam o processo de desenvolvimento mais simples e isento de erros.

200

CAPTULO 11. CONJUNTOS DE INSTRUES

Captulo 12

Estrutura Interna de um Processador


No captulo anterior deniu-se a arquitectura do conjunto de instrues do processador P3. A arquitectura do conjunto de instrues dene a interface visvel para o programador, especicando as instrues que esto disponveis, quais os registos internos, os modos de acesso memria e outras caractersticas relevantes do processador. Para uma dada arquitectura do conjunto de instrues, existem muitas realizaes possveis para a estrutura do processador. As numerosas realizaes possveis resultam do grande nmero de escolhas que esto disponveis ao projectista de sistemas digitais e implicam diferentes compromissos entre o nmero de ciclos de relgio necessrios para executar cada instruo, a frequncia mxima de relgio possvel para o sistema e a rea ocupada em silcio para a realizao fsica do processador. Este captulo descreve em detalhe uma realizao particular do processador P3 e descreve os diversos compromissos que so inerentes s escolhas tomadas, focando, quando tal julgado oportuno, as alternativas mais bvias e as razes pelas quais as mesmas foram preteridas em detrimento da implementao descrita. Como qualquer circuito complexo, til analisar o processador P3 considerando separadamente duas componentes principais, tal como foi estudado no Captulo 9: o circuito de dados e o circuito de controlo. No circuito de dados encontra-se toda a lgica regular que usada para armazenar e processar dados do utilizador, lgica esta que opera, de uma forma geral, sobre conjuntos de dados organizados em octetos e palavras. Fazem parte do circuito de dados o banco de registos, a unidade lgica e aritmtica, os circuitos de acesso a memria e portos de entrada/sada e ainda os barramentos de interligao internos. O circuito de controlo gera os sinais que controlam o circuito de dados, por forma a que este execute a sequncia de operaes que so necessrias para carregar e executar cada instruo assembly, tendo em conta o estado do circuito de dados. 201

202

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

12.1 Circuito de Dados


O circuito de dados do processador P3, esquematizado na Figura 12.1, tem cinco componentes principais: o banco de registos, a unidade lgica e aritmtica, o registo de instruo (RI), o registo de estado (RE), e, por ltimo, os circuitos de interligao e multiplexagem de dados. O banco de registos, cuja estrutura interna foi descrita na Seco 7.5.4, contm 16 registos, R0 a R15 de 16 bits cada e acedido atravs de dois portos de leitura (portos A e B) e um porto de escrita (porto D). Dois destes registos so registos de uso especial, o contador de programa PC e o apontador para a pilha SP. A unidade lgica e aritmtica, descrita em detalhe na Seco 9.4, utilizada para realizar todas as operaes lgicas e aritmticas sobre os operandos que so fornecidos pelo banco de registos. O registo de instruo, RI, um registo de uso especial que no est integrado no banco de registos. Este registo no precisa de ser acedido directamente pelo circuito de dados. No entanto, todos os seus bits so usados pela unidade de controlo. O registo de estado, RE, agrupa os diversos bits de estado do processador, ligados ao circuito de dados atravs de dois barramentos de 5 bits que permitem ler e escrever este registo.
16 WR SelAD SelB Reset 16
0 1

4 4 A

Banco de Registos
B 16 MB

16
0 1

MA

MUXA

MUXB

WM

Memria

Endereo Escrita de dados Leitura de dados 16

16 BUS A BUS B 16 CULA 5 16 FM LF FR 4

16 FIN 5

RE
Registo de Estado FOUT 5 000h 11

ULA
16 MD 2

Estado

4 0000

12 CONST LI RI

MUXD

Figura 12.1: Circuito de dados do processador P3. Os circuitos de acesso memria so constitudos pelo barramento de en-

12.1. CIRCUITO DE DADOS

203

dereos e por dois barramentos de dados, um para escrita, outro para leitura. O barramento de endereos est ligado ao porto do banco de registos, enquanto que o barramento de dados est ligado ao porto . O barramento de leitura de dados est ligado ao porto de escrita do banco de registos. Estas ligaes permitem executar uma leitura de memria para o banco de registos, atravs do controlo dos portos e do banco de registos, ou uma escrita na mesma, atravs do controlo dos portos e . O funcionamento do circuito de dados controlado pela palavra de controlo, sendo o funcionamento de cada um dos blocos descrito em detalhe nas seces seguintes.

12.1.1 Banco de Registos


O banco de registos foi estudado na Seco 7.5.4 e utilizado quase sem modicaes no circuito de dados do processador. A nica alterao que o registo , geR0 toma, neste caso, sempre o valor 0. O sinal de controlo de escrita, rado pela unidade de controlo, assim como os valores nos barramentos e , de 4 bits cada. O valor de especica qual o registo cujo contedo colocado no porto e, simultaneamente, qual o registo em que dever ser escrito o valor contido no porto , se o sinal estiver activo. O valor de especica qual o registo cujo contedo dever ser colocado no porto . Para que seja possvel exibilizar o controlo da unidade lgica e aritmtica, o registo R0 contm sempre o valor 0. Isto permite seleccionar 0 como um dos operandos e efectuar diversas operaes que, doutro modo, necessitariam de uma unidade lgica e aritmtica mais complexa. Na prtica, o registo R0 no um verdadeiro registo, uma vez que implementado ligando as linhas do barramento directamente ao nvel lgico 0, atravs de buffers de trs estados. Com a excepo do registo R0, todos os outros registos podem ser usados para guardar valores. No entanto as funes de alguns dos registos esto prdenidas, de acordo com a Tabela 12.1. Note-se que todos os registos que esto destinados a funes especcas tem nmero superior a 7. Isto impede que um programa codicado ao nvel do assembly tenha acesso aos mesmos e perturbe o funcionamento normal do processador, uma vez que, ao nvel do assembly, o programador apenas pode aceder aos registos com nmeros entre 0 e 7. Entre os registos de uso especial, encontram-se o R14 e o R15. O registo R14 o registo apontador da pilha, SP. este registo que usado para enderear a memria quando se executa uma operao que manipule directa (POP ou PUSH) ou indirectamente (CALL, INT, RET e RTI) a pilha do processador. O registo R15 guarda o valor do contador de programa, PC, que, aps a execuo de cada instruo, aponta sempre para a prxima instruo que o processador ir executar. Alterar o valor de qualquer um destes registos fora do seu contexto normal de utilizao ir interromper o funcionamento normal do processador. Assim, o seu uso para quaisquer outras funes dever ser sempre evitado. Os registos R11 a R13 esto tambm destinados a funes especcas, mas o seu signicado s se tornar claro quando se analisar a forma como so executadas as instrues assembly, na Seco 12.3.

204

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR


Registo R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 Descrio Constante 0 Registo de uso geral Registo de uso geral Registo de uso geral Registo de uso geral Registo de uso geral Registo de uso geral Registo de uso geral Registo de uso restrito Registo de uso restrito Registo de uso restrito Operando (SD) Endereo destino (EA) Resultado (RD) Apontador da pilha (SP) Contador programa (PC)

Tabela 12.1: Banco de registos.

12.1.2 Unidade Lgica e Aritmtica


A unidade lgica e aritmtica (ULA) usada por este processador a que foi estudada na Seco 9.4, e que se reproduz na Figura 12.2.
A
n

B
n

Unidade Aritmtica
p n q

Unidade Lgica
n r

Unidade de Deslocamento
n

Palavra de Controlo

0 1 2 3 Sel MUX n

Resultado

Figura 12.2: Estrutura da unidade lgica e aritmtica. A unidade lgica e aritmtica controlada por 5 bits de controlo, .O valor destes 5 bits especica, de acordo com a Tabela 9.1, qual a operao que a ULA executa sobre os dois operandos na sua entrada. Estes dois operandos so provenientes dos portos e do banco de registos. Os quatro bits de estado gerados pela ULA esto ligados ao registo de estado, cujo funcionamento ser detalhado na Seco 12.1.4.

12.1. CIRCUITO DE DADOS

205

12.1.3 Registo de Instruo


O registo de instruo, RI, encontra-se ligado directamente ao barramento de leitura de dados a partir da memria, utilizado para guardar o cdigo mquina da instruo assembly que est a ser executada. Os 16 bits deste registo codicam, como foi descrito na Seco 11.4, qual a operao que deve ser executada e quais os operandos aos quais a mesma deve ser aplicada. De uma forma geral, o contedo deste registo no passa no circuito de dados, excepto na primeira fase de execuo de uma instruo, em que o registo de instruo carregado a partir de memria. O carregamento deste registo controlado pelo valor do sinal , gerado pela unidade de controlo. Para algumas operaes, necessrio ler um ou mais campos do registo de instruo para o circuito de dados. Assim, possvel seleccionar o contedo do registo de instruo para a entrada no porto da ULA, activando o sinal .

12.1.4 Registo de Estado


O registo de estado, RE, guarda os bits de estado do processador, permitindo ao programador testar o resultado da operao anterior e manter diversos bits de estado, que so actualizados de acordo o resultado das operaes efectuadas pela unidade lgica e aritmtica. est a , o valor dos bits de estado actualiQuando o sinal de controlo zado de acordo com o resultado da ltima operao efectuada pela ULA. Para isso, o correspondente bit na mscara dever estar a , de acordo com a Figura 12.3 denida pela unidade de controlo e no visvel pelo programador ao nvel do assembly. Os bits de micro-estado, e , so actualizados em todos
FM 3 Z FM 2 C FM 1 N FM 0 O

os ciclos de relgio. A unidade de controlo dene, em cada ciclo de relgio, quais os bits de estado que devem ser actualizados, de acordo com o que foi referido na Seco 11.6.1 sobre o modo como cada instruo assembly actualiza os mesmos. Quando o valor de est a , o registo de estado carregado com um valor proveniente do barramento , atravs do barramento . Independentemente do valor dos sinais de controlo, o registo de estado pode ser carregado no banco de registos, atravs do porto , usando para tal o barramento . A Figura 12.4 descreve o esquema interno do registo de estado. O funcionamento do registo de estado controlado por sinais activados pela unidade de controlo e por quatro bits de estado , , , , gerados pela unidade lgica e aritmtica. Quando o sinal activado pela unidade de controlo, o registo de estado carregado a partir do barramento .

Figura 12.3: Bits da mscara

que controla a actualizao dos bits de estado.

206
FIN 5

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR


FR 4 ZR CR NR OR

LF FM 3 LF LD LF E

0 1 MUX LD LF Z

LF FM 2

0 1 MUX LD LF C

LF FM 1

0 1 MUX LD LF N

LF FM 0

0 1 MUX LD

5 FOUT

Figura 12.4: Esquema interno do registo de estado. Alm dos bits Z, C, N e O, cujo signicado foi descrito na Seco 11.6.4, existe ainda o bit E que controla se o processador deve ou no responder a interrupes e cujo valor no vem da ULA, mas sim atravs da entrada . Note-se que o sinal P no corresponde a um bit no registo de estado, uma vez que este bit gerado pela lgica representada a partir dos valores dos bits Z e N.

12.1.5 Barramentos de Interligao


Os dois portos de leitura do banco de registos alimentam a unidade lgica e aritmtica atravs dos multiplexadores MUXA e MUXB, que atacam os barramentos e . contm o endereo Quando efectuado um acesso memria, o que dever ser acedido. No caso de uma operao de escrita (sinal a ), o valor no barramento especica qual o valor que dever ser escrito. No caso de uma leitura (sinal a ), o multiplexador dever ser controlado por forma a seleccionar o valor devolvido pela memria, colocando o valor de a . Neste caso, o valor lido da memria escrito para o registo especicado pelo sinal de controlo , devendo o sinal de escrita no banco de registos, , estar activado.

12.1.6 Controlo do Circuito de Dados


O controlo do circuito de dados feito atravs da palavra de controlo, descritos na Tabela 12.2. Cada um dos sinais descritos nesta tabela controla o funcionamento de um dos elementos do circuito de dados, tal como descrito nas seces anteriores. Para se perceber melhor o funcionamento deste circuito de dados, consideramse em seguida alguns exemplos que permitem ilustrar as operaes de transferncia entre registos possibilitadas pelo mesmo. Suponha-se, por exemplo, que se pretende somar o contedo do registo R3 com o contedo do registo R7 e deixar o resultado no registo R3, alterando os valores dos bits de estado C e Z. Que valores devem tomar as variveis de controlo do circuito de dados?

12.1. CIRCUITO DE DADOS


Sinal # bits 1 4 4 1 1 2 1 1 1 1 4 5 12 Funo Inicializa o contedo dos registos a Controla os portos A e D do banco de registos Controla o porto B do banco de registos Controlo do multiplexador A Controlo do multiplexador B Controlo do multiplexador D Escrita no banco de registos Escrita em memria Carrega os bits de estado Carrega o registo de instruo Controla a actualizao dos bits de estado Controla operao a executar na ULA Valor de constante numrica

207

Em primeiro lugar, para que o banco de registos coloque nos portos e os registos R3 e R7, os sinais e devem tomar os valores e , respectivamente. Adicionalmente, e como se pretende que tenha lugar uma escrita no banco de registos, o valor do sinal dever ser . Para que os valores presentes nos portos e do banco de registos cheguem s entradas da unidade lgica e aritmtica, o valor dos sinais e dever ser . A operao da ULA controlada pelo valor do sinal . Da Tabela 9.1, tira-se que dever tomar o valor para que seja realizada uma operao de adio. Para conseguir que os bits de estado sejam actualizados com os valores desta operao, o sinal dever tomar o valor e o sinal dever tomar o valor . Finalmente, e para que o porto de escrita do banco de registos receba o valor de sada da unidade lgica e aritmtica, necessrio controlar por forma a que o multiplexador seleccione na sua sada o valor da sua entrada , o que consegue colocando a . Resta agora controlar o valor dos sinais ainda no denidos por forma a que no se realizem operaes indesejadas. Uma vez que no se pretende escrever na memria nem no registo de instruo os sinais e devero tomar o valor . O campo constante, no utilizado, pode tomar qualquer valor. Conclu-se assim que a micro-operao R3 R3+R7 executada se os sinais de controlo tomarem os valores da segunda coluna da Tabela 12.3. Para um segundo exemplo, suponha-se agora que se pretende enderear a memria usando o contedo do registo R5 e guardar o valor dessa posio de memria no registo R3, sem mexer no contedo de qualquer dos outros registos. Nestas condies, ser necessrio forar a e a , activando tambm o sinal . O multiplexador MUXA dever agora seleccionar a sua entrada , pelo que o valor do sinal dever ser . Para efectuar uma leitura de memria e seleccionar o valor lido como aquele que entra no porto do banco de registo,

Tabela 12.2: Palavra de controlo do circuito de dados.

208

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR


Sinal

R3

R3+R7 0 0011 0111 0 0 00 1 0 0 0 1100 00000 xxxxxxxxxxxx

R3

M[R5] 0 0011 0101 1 x 01 1 0 0 0 0000 xxxxx xxxxxxxxxxxx R3+R7

Tabela 12.3: Sinais que controlam a execuo das micro-operaes R3 (coluna 2) e R3 M[R5] (coluna 3).

o sinal dever tomar o valor e o sinal o valor . Para que no haja escrita no registo de instruo nem no registo de estado, os sinais e devero tomar o valor . Tambm o sinal dever ter todos os seus bits a . Neste exemplo, como em muitos outros, os valores de alguns dos sinais so irrelevantes, uma vez que controlam partes do circuito de dados que no so lidos nem guardados. o caso dos sinais de controlo , e , que podem tomar qualquer valor sem afectar o funcionamento do circuito. A terceira coluna da Tabela 12.3 descreve os valores que os sinais devem tomar M[R5]. para que seja executada a micro-operao R3

12.2 Unidade de Controlo


Os sinais que controlam o circuito de dados so gerados por uma unidade de controlo micro-programada, descrita nesta seco. Como foi visto na Seco 8.3.3, a utilizao de uma unidade de controlo micro-programada permite uma maior exibilidade da unidade de controlo, e tambm uma organizao mais estruturada que no caso em que a unidade de controlo feita sintetizando uma mquina de estados. A Figura 12.5 descreve a estrutura geral da unidade de controlo do processador P3. O corao da unidade de controlo o micro-sequenciador, que controla a ordem pela quais so executadas as micro-instrues guardadas na memria de controlo. As micro-instrues denem o valor dos sinais utilizados para controlar o circuito de dados, o prprio micro-sequenciador, e diversos aspectos do funcionamento dos outros mdulos que aparecem na Figura 12.5. O funcionamento do micro-sequenciador controlado pela unidade de teste de condies e pela unidade de mapeamento, alm dos sinais de controlo gerados directamente pelas micro-instrues. A unidade de teste de condies permite testar os bits de estado do processador e, tambm, outros bits internos

12.2. UNIDADE DE CONTROLO


REGISTO DE INSTRUO (RI)

209

CIRCUITO DE MAPEAMENTO CONTROLO DO BANCO DE REGISTOS

TESTE DE CONDIES MICRO SEQUENCIADOR

MEMRIA DE CONTROLO

MICRO-INSTRUO

Figura 12.5: Esquema geral da unidade de controlo. unidade de controlo. O controlo do banco de registos feito por um circuito dedicado, controlado directamente por bits do registo de instruo e do registo de micro-instruo.

12.2.1 Formato das Micro-instrues


Tanto o circuito de dados como partes do prprio circuito de controlo so controlados por um conjunto de sinais que constituem a micro-instruo. Numa unidade micro-programada como esta, as micro-instrues que constituem o micro-programa so guardadas na memria de controlo, endereada pelo registo CAR. Uma opo possvel seleccionar uma micro-instruo que tenha um bit por cada um dos sinais de controlo que se pretendem gerar. No entanto, esta opo nem sempre se revela a mais adequada, uma vez que nem todas as combinaes dos sinais de controlo so necessrias ou teis. no A ttulo de exemplo, no circuito da Figura 12.1, o valor do sinal importante quando se pretende carregar o valor de uma constante usando o sinal de controlo . Nesta realizao, optou-se por utilizar dois formatos para a micro-instruo, que se distinguem entre si pelo valor do bit mais signicativo da micro-instruo, . A Figura 12.6 descreve os dois formatos possveis para a micro-instruo.

210

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR


8
W M

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
S R 1 S R 2 I A K M A M B M 2 M R B

7
W R

4
M A D

0
F

M5

FM

CALU

RB

MD

RAD

M5

S R 1

S R 2

L S

MCOND

C C

L I

L F

CONST/NA

W R

MD

M A D

RAD

Figura 12.6: Formato das micro-instrues. O formato correspondente a = corresponde a micro-instrues que controlam fundamentalmente o circuito de dados, enquanto que o formato correspondente a = , prioritariamente, destinado a controlar a unidade de controlo, nomeadamente a unidade de teste de condies e o micro-sequenciador. Muitas outras opes teriam sido possveis, desde um formato nico em que todos os sinais de controlo estivessem sempre disponveis, at uma soluo em que existissem mais do que dois formatos de micro-instruo. A primeira alternativa iria requerer uma micro-instruo com 50 bits, sem, no entanto, ser signicativamente mais rpida, uma vez que raramente necessrio controlar todas as unidades do processador simultaneamente. J a utilizao de uma alternativa com mais formatos de micro-instruo poderia de facto reduzir o nmero de bits nas micro-instrues, mas implicaria uma reduo signicativa da velocidade de execuo, por passarem a existir demasiados sinais que no podem ser controlados simultaneamente. Pode observar-se que, na soluo adoptada, alguns sinais esto presentes em ambos os formatos da micro-instruo, como, por exemplo, o sinal que controla a escrita no banco de registos. Estes sinais podem ser activados quer em micro-instrues do tipo ( = ) quer em micro-instrues do tipo ( = ). Outros sinais esto presentes apenas num dos tipos de micro-instrues, como por exemplo o sinal que controla a escrita em memria, . Estes sinais s podem ser activados em micro-instrues desse tipo, devendo permanecer inactivos nas restantes. Isto signica que, no circuito de dados da Figura 12.1, os sinais que aparecem apenas num dos formatos de micro-instruo devem resultar da conjuno do sinal , negado ou no, com o valor do bit da microinstruo. O circuito de dados, modicado para incluir explicitamente as portas lgicas que executam esta funo, encontra-se representado na Figura 12.7. Notese que a lgica adicionada fora a que o controlo do multiplexador e o sinal de escrita em memria quem activos apenas em micro-instrues do tipo , uma vez que o sinal que controla de facto o circuito de dados a conjuno do sinal original com o complemento do bit . Do mesmo modo, os 4 bits do sinal devem car activos apenas quando = , o que se consegue com 4 portas AND, na gura representadas apenas por uma delas aplicada aos 4 bits do barramento. Os sinais de carregamento do registo de instruo e de carregamento do registo de estado, que s so gerados pela unidade de controlo em microinstrues do tipo , so mascarados de forma anloga, sendo feita a conjuno com o bit .

12.2. UNIDADE DE CONTROLO

211

16 WR SelAD SelB Reset 16 MA F


0 1

4 4 A

Banco de Registos
B 16 MB
0 1

16 WM F 16 W

MUXA

MUXB

Memria

BUS A BUS B 16 CULA 5

FM F LF 16 F

16 FIN 5

Endereo Escrita de dados Leitura de dados 16

RE
FR Registo de Estado FOUT 5 000h 11

ULA
16 MD 2

Estado

12
0 1 2 3

CONST LI F RI

4 0000

MUXD

Figura 12.7: Circuito de dados e sinais de controlo. A mesma regra aplicvel a sinais que controlam diversas partes da unidade de controlo propriamente dita. De uma forma geral, quando um dado sinal gerado pela unidade de controlo apenas no formato = , dever ser feita uma conjuno com o sinal , enquanto que quando esse sinal existe apenas no formato = , feita a conjuno com o complemento do sinal , isto , . Em alguns casos possvel poupar esta lgica se o sinal actuar partes do circuito que que no tm efeitos devido ao valor de outros sinais de controlo. Por exemplo, o sinal de controlo , que controla o multiplexador est activo apenas no formato de micro-instruo que tem = . Assim, embora pudesse existir uma porta AND que zesse a conjuno do sinal com a negao de , esta porta revela-se intil. De facto, uma anlise cuidada do circuito de dados na Figura 12.1 mostra que, quando = , no existe controlo nem sobre a unidade lgica e aritmtica nem sobre o sinal de escrita em memria, que est necessariamente inactivo. Assim, o valor que ca no barramento nunca usado, pelo que no necessrio controlar o multiplexador MUXB, poupando-se uma porta lgica.

12.2.2 Micro-Sequenciador
No centro da unidade de controlo encontra-se o micro-sequenciador, que gera a sequncia de endereos de micro-instrues que deve ser executada. O micro-

212

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

sequenciador pode, em cada ciclo de relgio, executar uma das seguintes operaes, de acordo com os sinais de controlo: Incrementar o endereo da micro-instruo a executar ou saltar para um endereo especicado na micro-instruo, de acordo com o valor do sinal , gerado pela unidade de teste de condies. Retornar de uma micro-rotina. Saltar para um dos endereos fornecidos pela unidade de mapeamento.

A estrutura do micro-sequenciador est descrita na Figura 12.8. O microEND A 9 F LS 9 COND MUX4


1 0

sequenciador usa dois registos. O registo CAR (Control Address Register) contm o endereo da memria de micro-instrues onde est a micro-instruo que est a ser executada. Este registo desempenha para um micro-programa o mesmo papel que o contador de programa desempenha para um programa em assembly e pode tambm ser referido por contador de micro-programa. O registo SBR guarda o endereo de micro-programa para onde dever ser transferido controlo aps terminar a execuo de uma micro-rotina. Uma vez que existe s um registo para guardar o endereo de retorno, apenas possvel utilizar um nvel de profundidade de micro-rotinas, o que signica que uma micro-rotina no pode chamar outra. importante sublinhar que no existe qualquer relao entre uma microrotina e uma subrotina denida ao nvel do assembly. O funcionamento do micro-sequenciador controlado pelos dois bits do sinal que controla o carregamento do registo CAR, da seguinte forma: de

: CAR incrementado se for , e carregado com o valor (o endereo da memria de controlo para onde se deve saltar), se

END B

9 SBR

M5

MUX5

9 +1

CAR 9 ENDEREO DA MEMRIA DE CONTROLO

NA

Figura 12.8: Esquema do micro-sequenciador.

12.2. UNIDADE DE CONTROLO

213

for , permitindo assim a execuo de saltos condicionais dentro de micro-programas. = : CAR carregado com o valor contido em SBR, sendo assim executado um retorno de micro-rotina.

A maioria das micro-instrues so executadas de forma sequencial, pelo que aps a execuo de uma micro-instruo o CAR deve ser incrementado para car a apontar para a prxima posio da memria de controlo. Este comportamento consegue-se colocando o valor de a na micro-instruo, e controlando o bloco de teste de condies por forma a que o valor de seja . Caso se pretenda executar um salto condicional no micro-programa, o dever ser na mesma, e a unidade de teste de condies dever valor de seleccionar a condio de salto desejada. A possibilidade de carregar o registo CAR com o contedo do registo SBR permite a existncia de micro-rotinas. Quando se pretende chamar uma microdeve ser activado e o registo deve ser carregado com rotina, o sinal o valor de , que especica o endereo da micro-rotina que se pretende chamar. Como o sinal s existe nas micro-instrues com = , o sinal de carregamento do registo SBR deve ser inibido quando = . A activao deste sinal faz com que o registo SBR seja carregado com o valor de CAR+1, que representa o endereo da primeira micro-instruo a ser executada quando a execuo da micro-rotina termina. O retorno de micro-rotina executado seleccionado = o que fora o carregamento do registo CAR com o endereo de retorno. O contedo do registo CAR tambm pode ser carregado com os valores (colocando = ) ou (colocando = ), gerados pela unidade de mapeamento, e cuja utilidade ser estudada na Seco 12.2.4.

12.2.3 Teste de Condies


A unidade de teste de condies, descrita na Figura 12.9, tem como funo seleccionar qual a condio que testada pelo micro-sequenciador quando o mesmo executa uma micro-instruo de salto ou chamada a micro-rotina, condicional ou no. , que indica ao Esta unidade tem um nico bit de sada, o sinal micro-sequenciador se deve ou no executar um salto, tal como foi descrito na seco anterior. Esta unidade fundamentalmente constituda por dois multiplexadores, e algumas portas lgicas auxiliares. O multiplexador, MUXCOND, controlado pelo campo da micro-instruo, permite seleccionar um dos seguintes bits: A constante 1, o que permite ao micro-sequenciador incrementar ou executar saltos incondicionais, dependendo do valor do sinal (Complementar Condio).

= : CAR carregado com o valor especicado em unidade de mapeamento.

= : CAR carregado com o valor especicado em unidade de mapeamento.

pela pela

214

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

1 z c INT E RI15 RI14 S Z C N O P INT


0 1 2 3 4 5

0 1 2 3 4 5 6 7

CC

F COND

M0 M1 RI6

MUX6

3 RI97

Figura 12.9: Unidade de teste de condies. Os bits e do registo de estado. Estes bits so tambm conhecidos por bits de micro-estado. O bit est a se a ltima operao na ULA deu resultado zero, enquanto que o bit est a se a ltima operao na ULA gerou transporte. A conjuno do bit E do registo de estado com o sinal que assinala a presena de uma interrupo, indicando se deve atender uma interrupo presente. Os bits do campo do registo de instruo, que codicam o modo de endereamento da instruo assembly que est a ser executada. O bit do registo de instruo, mascarado pela expresso que indica qual o operando ao qual deve ser aplicado o modo de endereamento da instruo, no caso de instrues de dois operandos. Um dos bits do registo de estado, mais os sinais e , escolhido de acordo com o valor dos bits a do registo de instruo.

MUXCOND

EINT

MCOND 3

A entrada do multiplexador MUXCOND controlada pela sada do multiplexador MUX6. Uma vez que os bits a do registo de instruo especicam, conforme Figura 11.13) e de acordo com a Tabela 11.14, qual a condio que testada numa dada instruo, possvel seleccionar directamente qual a condio que dever ser testada pelo micro-sequenciador. Uma anlise da Tabela 11.14 revela que os bits , e do registo de instruo seleccionam qual a condio, enquanto que o bit indica se a condio deve ser complementada. A ligao do multiplexador MUX6 conforme indicado na gura e o uso de uma porta XOR, que funciona como uma negao condicional, permite que, na entrada do multiplexador MUXCOND, esteja j seleccionada a

12.2. UNIDADE DE CONTROLO

215

condio correcta. Isto leva a que o teste de uma destas condies seja efectuado numa s micro-instruo, no sendo necessrio efectuar diversos testes aos valores dos bits de estado e do valor dos bits a do registo de instruo. Quando se pretende que o micro-sequenciador execute as instrues de forma sequencial, dever ser colocado o valor na sada . Isto conseguido colocando o valor no campo da micro-instruo e o valor no campo da micro-instruo. Caso se pretenda que o micro-sequenciador execute um salto incondicional, dever ser colocado o valor na sada , colocando em e em . Finalmente, caso se pretenda que o micro-sequenciador execute um salto na condio de um dado bit tomar um dado valor, o multiplexador MUXCOND dever ser controlado de forma a seleccionar o bit pretendido, enquanto que o sinal dene se a condio dever ser complementada ou no. Tanto o salto incondicional como o salto condicional s podem ser executados pelo micro-sequenciador quando a micro-instruo do tipo = , uma vez que s neste formato esto disponveis os campos , e o endereo de salto . Caso a micro-instruo seja do tipo , o valor de colocado a e o micro-sequenciador incrementa sempre o contador de micro-programa.

12.2.4 Unidade de Mapeamento


A unidade de mapeamento utilizada para gerar, de forma rpida, os endereos das micro-rotinas chamadas durante a execuo de instrues. Com efeito, em diversos passos da execuo de uma instruo assembly torna-se necessrio saltar para uma micro-rotina ou troo de micro-cdigo, de acordo com o valor presente num dado campo do registo de instruo. Por exemplo, o valor contido nos seis bits mais signicativos do registo de instruo representa o cdigo de instruo e dene qual a operao que dever ser executada. Este valor utilizado na fase de descodicao de uma instruo assembly, para gerar o endereo da memria de controlo que corresponde s micro-instrues que implementam a instruo assembly. Noutra fase da execuo da instruo, necessrio saltar para um dado endereo de micro-cdigo, de acordo com o modo de endereamento utilizado, e especicado no campo do registo de instruo. A unidade de mapeamento utilizada em diversas fases da execuo de uma instruo. No processador P3, esta execuo feita nos seguintes passos: 1. Carregamento do registo de instruo. 2. Descodicao do cdigo de operao e carregamento dos operandos. 3. Execuo do micro-programa que implementa a instruo. 4. Escrita do resultado. 5. Teste de pedidos de interrupo. Com esta sequncia de operaes, necessrio descodicar o cdigo de operao para saber quais os operandos a carregar e qual o endereo da memria de micro-programa que contm as micro-instrues a executar. Dado

216

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

que o micro-sequenciador pode testar de cada vez apenas o valor de um bit, seleccionado pela unidade de teste de condies, e que o cdigo de operao tem 6 bits, a escolha da micro-rotina utilizando este mecanismo iria requerer seis micro-instrues s para descobrir qual o endereo da micro-rotina a efectuar. Seriam ainda necessrias mais micro-instrues para decidir quais as micro-rotinas que deveriam ser chamadas para fazer a leitura dos operandos e a escrita do resultado, o que se revelaria muito ineciente. A unidade
S SR1 OPCODE SR2 6
0 1

MUX1 2

MEMRIA A
9 END A

MEMRIA B
9 END B

Figura 12.10: Unidade de mapeamento. de mapeamento, esquematizada na Figura 12.10, permite que a transferncia de controlo seja feita numa nica micro-instruo. Isso consegue-se utilizando duas memrias de mapeamento, que so endereadas de acordo com o cdigo da operao, o modo de endereamento e o valor do bit de direco presentes no registo de instruo. A unidade de mapeamento pode gerar dois endereos, qualquer um dos quais pode ser seleccionado pelo micro-sequenciador como o prximo endereo de micro-instruo a executar (ver Figura 12.8). A memria A endereada directamente pelo cdigo de operao (campo da instruo assembly) e implementa uma tabela que contm os endereos das micro-rotinas que executam as operaes de transferncia entre registos que realizam cada uma das instrues. As linhas de endereo da memria de mapeamento B so controladas pelo valor dos bits e da micro-instruo e tambm pelo valor dos bits e do registo de instruo. De acordo com os valores dos bits e , esta memria gera o endereo das micro-rotinas de carregamento de operandos ou de escrita do resultado. Isto permite que, atravs do controlo dos bits e , seja possvel gerar quatro endereos diferentes. Estes endereos so usados para especicar diversas micro-rotinas de leitura e escrita, conforme especicado na Tabela 12.4. Assim, caso se pretenda que a memria de mapeamento B gere o endereo da micro-rotina de leitura de um operando, a micro-instruo dever colocar e a . Neste caso, o valor de ser ignorado, o que correcto uma vez que este campo no tem signicado quando a instruo de um operando. Caso se pretenda o endereo da micro-rotina de leitura de dois operandos, basta forar a , sendo nestas condies o valor de usado para enderear a memria, atravs do multiplexador MUX1.

12.2. UNIDADE DE CONTROLO


SR2 0 0 1 1 SR1 0 1 S 0 1 Endereo seleccionado Micro-rotina de leitura de um operando Micro-rotina de escrita do resultado Micro-rotina de leitura de dois operandos para S=0 Micro-rotina de leitura de dois operandos para S=1

217

Tabela 12.4: Funcionamento da memria de mapeamento B.

Para que o circuito de controlo funcione de acordo com o especicado, a memria B dever ser carregada com os endereos das micro-rotinas correspondentes a cada uma das operaes desejadas, de acordo com o esquema da Figura 12.11.

0000 0100 1000 1100

0000 Rotinas de leitura de um operando Rotinas de escrita do resultado Rotinas de leitura de dois operandos para S=0 Rotinas de leitura de dois operandos para S=1 0001 0010 0011

Leitura de um operando para M=00 Leitura de um operando para M=01 Leitura de um operando para M=10 Leitura de um operando para M=11

Figura 12.11: Preenchimento da memria de mapeamento B.

Para se analisar o funcionamento da unidade de mapeamento, suponha-se que se pretende controlar o micro-sequenciador por forma a transferir controlo para a primeira micro-instruo que implementa a instruo assembly guardada no registo de instruo. O endereo desta micro-instruo est guardado na memria de mapeamento A, que endereada pelos 6 bits mais signicativos (campo ) do registo de instruo. necessrio agora assegurar que este valor carregado no registo CAR no prximo anco do relgio. Por anlise da Figura 12.8, verica-se que o sinal de controlo dever tomar o valor , por forma a que o multiplexador seleccione o valor gerado pela memria de mapeamento como o prximo valor do registo CAR. O controlo da memria de mapeamento B ligeiramente mais complexo, mas tambm fcil de perceber. Suponha-se que se pretende transferir o controlo para a sequncia de micro-instrues que carrega um operando. Por anlise da Tabela 12.4, verica-se que necessrio colocar os bits de controlo e a para que a memria de mapeamento B gere o endereo dessa microrotina. Dado que valor do campo do registo de instruo enderea directamente esta memria, basta agora colocar o sinal a para que a prxima micro-instruo a ser executada seja a desejada.

218

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

12.2.5 Controlo do Banco de Registos


A unidade de controlo controla o banco de registos atravs do circuito de controlo do banco de registos, descrita na Figura 12.12. Controlando o valor do
IR1
0

4 4 M2 RB 4
0

RI15 M2 S

IR2 3 RAD 4 MAD


1 1 0 1 0

MUX3 4 WBR

MUX2 4
1 0

MRB

MUXAD 4 SelAD

MUXRB 4 SelB

Figura 12.12: Circuito de controlo do banco de registos. sinal , disponvel na micro-instruo, a unidade de controlo escolhe se o endereo do porto B do banco de registos igual a (especicado na microinstruo) ou aos valores especicados no registo de instruo. A situao idntica para o controlo dos portos A e D do banco de registos, sendo desta vez a escolha controlada pelo sinal . Quando o endereo do porto B especicado directamente pelo registo de instruo, o valor do sinal de controlo escolhe qual dos campos do registo de instruo dever controlar este endereo. No caso dos portos A e D, esta escolha feita directamente por lgica que usa os valores do bit e do bit mais signicativo do cdigo de operao. Esta lgica permite escolher o valor de como sendo igual a ou , de acordo com a Tabela 12.5. Apesar da aparente complexidade desta tabela, a RI 0 1 1 1 1 S 0 0 1 1 M2 0 1 0 1 WBR IR1 IR1 IR2 IR2 IR1

Tabela 12.5: Controlo do multiplexador MUX3. sua utilizao muito simples, e descrita na Tabela 12.6. A lgica descrita na Figura 12.12 necessria porque, nas instrues com dois operandos, o campo do registo de instrues que contm o registo ao qual aplicado o modo de endereamento pode ser ou , de acordo com o valor de . Estas instrues tm todas o bit mais signicativo do registo de instruo a , conforme descrito na Seco 11.7.3. Todas as instrues que tm

12.2. UNIDADE DE CONTROLO


M2 0 1 Valor seleccionado Registo usado pelo primeiro ou nico operando Registo usado pelo segundo operando, quando exista

219

Tabela 12.6: Valor seleccionado pelo multiplexador MUX3.

o bit mais signicativo do registo de instruo a devem escrever o resultado no registo especicado pelo campo , o que conseguido com a porta AND da gura. Para ilustrar o funcionamento desta unidade do micro-controlador, suponhase que se pretende operar com registos denidos pelos valores dos campos da micro-instruo (RAD e RB), sem ter em ateno quais os registos denidos pela instruo assembly propriamente dita. Neste caso, h que enderear o banco de registos com o valor denido pelos campos e da micro-instruo, e devero ser colocados a . pelo que os sinais Para uma utilizao mais complexa, suponha-se que se est na fase nal de execuo da instruo assembly ADD R1, M[R7+00A0h]. A codicao desta instruo j foi estudada na Seco 11.7.5, onde se viu que esta instruo representada pela sequncia de duas palavras 1000011001110111b (8677h) e 0000000010100000b (00A0h). Uma vez que se est na fase nal de execuo da instruo, o resultado da adio, j calculado, est guardado no registo R13. Pretende-se carregar este resultado no registo de destino especicado pela instruo assembly. Como se viu na Seco 11.7.5, o registo de destino encontra-se especicado no campo do registo de instruo. Isto acontece porque, na codicao desta instruo, o modo de endereamento indexado se aplica ao segundo operando da instruo, o que indicado pelo valor = . Para conseguir executar esta operao, h, em primeiro lugar, que garantir que o valor presente no porto do banco de registos se propague at ao porto de escrita do mesmo. Por anlise da Figura 12.1 e da Tabela 9.1, verica-se que necessrio colocar os valores no campos da micro-instruo de acordo com a Tabela 12.7. Sinal MB MD WR WM LF LI FM CULA Valor 0 00 1 0 0 0 0000 11XXX R13.

Tabela 12.7: Sinais que controlam a execuo da micro-operao R1

agora necessrio controlar o circuito da Figura 12.12 por forma a conseguir que o registo usado como primeiro operando da instruo assembly seja escrito com o resultado. O valor de dever ser , para que o campo da micro-instruo possa especicar o registo R13. J o valor de dever

220

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

ser 0, para que o valor seleccionado pelo multiplexador seja o que provm do multiplexador . Para controlar adequadamente o multiplexador , basta colocar a , como descrito na Tabela 12.6. Pode vericar-se que o valor do bit do registo de instruo toma o valor necessrio para que o controlo do multiplexador que com o valor adequado, que, neste caso, .

12.2.6 Circuito de Controlo


O circuito completo de controlo do processador P3, descrito na Figura 12.13 resulta da ligao dos diversos blocos descritos nas seces anteriores. NoteLI OP SR1 SR2 6
0 1

REGISTO DE INSTRUO
S M IR1 0 MUX1 2
1

IR2 3
0

MUX2

MUXRB MUXAD

SelB 4

MEMRIA A
1 z c INT E RI15 RI14 S Z C N O P INT
0 1 2 3 4 5 0 1 2

MEMRIA B
END B

4 M2

RB MRB WBR
0

CC

END A

MUX3

4
1

SelAD 4

MUXCOND

EINT M0 M1 RI6

F F LS 9

3 4 5 6 7

9 SBR

RAD

MAD RI15

COND

MUX4
1 0

M5

MUX6

MUX5 M2 S

MCOND 3

9 +1

CAR 9

NA 3 RI97

MEMRIA Controlo

32

MICROINSTRUO

Figura 12.13: Circuito de controlo do processador P3. se que o controlo do multiplexador MUX5 permite seleccionar, como prximo endereo da micro-instruo a ser executada, quer o que vem do multiplexador MUX4, controlado pela unidade de teste de condies, quer o contedo do registo SBR, quer qualquer um dos endereos especicados pela unidade de mapeamento. O sinal permite carregar o registo de instruo, que se encontra duplicado nesta gura e na Figura 12.1, que ilustra o circuito de dados. O registo CAR carregado em todos os ciclos de relgio, pelo que no so necessrios sinais para controlar o seu carregamento.

12.3. MICRO-PROGRAMAO

221

12.3 Micro-Programao
Uma vez percebido o funcionamento da unidade de controlo, a programao da memria de controlo relativamente simples. Com efeito, por anlise do circuito de controlo, possvel identicar o valor que cada bit da micro-instruo deve tomar para se obtenha o funcionamento desejado do circuito de dados, assim como um comportamento correcto do prprio circuito de controlo. O primeiro passo para a denio do contedo da memria de controlo a denio da estrutura de alto nvel dos micro-programas. Esta estrutura , em grande parte, imposta pelas caractersticas do circuito de controlo e pelos tipos de operaes que podem ser efectuados por este. A sequncia de operaes efectuada quando uma instruo assembly executada foi descrita na Seco 12.2.4. A esta sequncia de operaes corresponde o uxograma da Figura 12.14. A execuo de uma instruo do processador

Carregamento da Instruo

OPCODE

OPCODE=00...

OPCODE=01... Carregamento do Operando

OPCODE=10...

OPCODE=11... Carregamento do Operando

Carregamento dos Operandos

Execuo da Instruo

Execuo da Instruo

Execuo da Instruo

Execuo da Instruo

(PUSH)

Escrita Resultado

(TEST, CMP)

Teste de Interrupes

Figura 12.14: Fluxograma da execuo de uma instruo assembly. comea com o carregamento da instruo, da memria para o registo de instruo. Com base no cdigo da operao, efectuado um salto para o endereo da primeira micro-instruo que executa essa operao, usando para tal a me-

222

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

mria A do circuito de mapeamento. Para as instrues que tm um ou dois operandos, a execuo prossegue com o carregamento dos mesmos. Este carregamento conseguido chamando uma micro-rotina, cujo endereo fornecido pela memria B do circuito de mapeamento. A fase seguinte consiste na execuo da instruo propriamente dita, usando uma sequncia de micro-instrues que so especcas para cada instruo. Aps a execuo da instruo, o controlo transferido para a seco de micro-cdigo que escreve o resultado, nos casos em que a instruo requer esta operao1 . Para isto, novamente utilizada a memria B do circuito de mapeamento, uma vez que a micro-rotina de escrita do resultado varia com o modo de endereamento utilizado na instruo. Finalmente, aps a escrita do resultado (ou aps a execuo, no caso de instrues que no necessitam desse passo), o controlo transferido para uma sequncia de micro-instrues que vericam se existe uma interrupo pendente. Em caso armativo, o controlo transferido para a micro-rotina de tratamento de interrupo. A excepo a instruo INT, que no necessita de vericar se existem interrupes pendentes uma vez que faz a desactivao do bit do registo de estado que permite o atendimento de interrupes.

12.3.1 Carregamento do Registo de Instruo


Como foi visto atrs, a primeira fase da execuo de uma instruo o carregamento do registo de instruo, RI (em Ingls, esta fase chama-se instruction fetch, ou, abreviadamente, IF). Nesta fase, necessrio carregar o registo de instruo com o contedo da posio de memria apontada pelo contador de programa, PC. Em seguida, deve ser incrementado o valor do contador de programa, para que o mesmo que a apontar para a prxima instruo a ser executada. A ltima operao consiste em transferir controlo para o troo de micro-programa que executa as operaes necessrias execuo da instruo assembly. Ao contrrio do assembly que apenas permite que uma e uma s operao seja feita em cada ciclo de relgio, um passo de micro-programa pode executar mais do que uma operao de transferncia entre registos, desde que os circuitos de dados e controlo assim o permitam. A Tabela 12.1 descreve a sequncia de operaes de transferncia entre registos que implementam esta fase da execuo de uma micro-instruo. Como se pode observar, esta sequn

Programa 12.1: Micro-programa da fase de carregamento do registo de instruo. cia de operaes descrita utilizando uma sequncia de micro-instrues descritas na linguagem de transferncia entre registos que foi descrita no Captulo 9.
1 Algumas instrues, como por exemplo, as instruo de JMP, TEST e CMP no geram qualquer resultado que necessite de ser escrito no operando da instruo.

IF0: IF1:

RI PC

M[PC] PC+1, CAR

ROMA[OPCODE]

; Carrega RI ; Incrementa PC

12.3. MICRO-PROGRAMAO

223

Cada micro-instruo corresponde a uma ou mais operaes de transferncia entre registos, que so executadas sempre os que sinais de controlo correspondentes a essa micro-instruo esto activos. Para evitar a listagem exaustiva de todos os sinais de controlo que se encontram activos em cada microinstruo, cada micro-instruo precedida de um rtulo simblico. Este rtulo corresponde aos valores dos sinais de controlo que se encontram activos durante a execuo dessa micro-instruo. Embora cada micro-instruo seja descrita como um conjunto de transferncias de valores entre registos, a programao da memria de controlo feita com uma sequncia de zeros e uns que especicam o valor de cada microinstruo, de acordo com o formato descrito na Figura 12.6. Os valores de cada bit da micro-instruo devero ser tal que causem as transferncias entre registos indicadas. A transformao do micro-programa, descrito ao nvel de transferncia entre registos, na combinao de bits que controla adequadamente os circuitos do processador pode ser feita manualmente ou com o auxlio de um programa, que, neste caso, se chama micro-assembler. Na prtica, e dado que a programao a este nvel requer um conhecimento profundo dos sinais e circuitos envolvidos, a utilidade de um micro-assembler consideravelmente mais reduzida que a de um assembler, pelo que esta transformao feita, na maior parte dos casos, manualmente. No caso presente, ilustra-se o funcionamento das micro-rotinas usando a linguagem de transferncia entre registos, sendo a Seco 12.3.6 dedicada ao estudo do processo de traduo entre a micro-instruo e o micro-cdigo em formato binrio.

12.3.2 Carregamento dos Operandos


A fase seguinte da execuo de uma instruo consiste no carregamento dos operandos, de acordo com o nmero dos mesmos e o seu modo de endereamento. A micro-rotina a chamar depende da instruo assembly que est a ser executada, embora o procedimento seja similar em todas elas. Como foi descrito na Figura 12.10 da Seco 12.2.4, a memria de mapeamento B deve conter o endereo das micro-rotinas de leitura de operandos, quer para os casos em que existe apenas um operando, quer para os casos em que existem dois operandos. Assim, uma instruo assembly que necessite apenas de um operando dever chamar a micro-rotina correspondente usando a memria B da unidade de mapeamento, com os bits de controlo e a . Uma instruo que necessite de dois operandos dever enderear a memria B da unidade de maa . Neste caso, o segundo bit de endereo desta peamento com o sinal memria o bit do registo de instruo, de acordo com o circuito da Figura 12.10. Por forma a comunicarem facilmente entre si, os diversos passos de execuo de uma instruo assembly usam os registos temporrios de uma forma regular, de acordo com a seguinte conveno e a Tabela 12.1. O registo EA (R12) usado para guardar o endereo efectivo de um operando sempre que este operando provenha de memria (do ingls, effective address).

224

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR


O valor do primeiro operando deve ser copiado para o registo RD (R13). Aps os clculos, o resultado da operao deve ser guardado nesse mesmo registo. O valor do segundo operando deve ser copiado para o registo SD (R11), sempre que a instruo use dois operandos.

As instrues de carregamento de operandos devero funcionar de forma a deixar o endereo do operando no registo EA (R12). O valor do primeiro ou nico operando dever ser guardado no registo de destino, RD (R13). Em alguns modos de endereamento (por exemplo, no modo imediato), no necessrio o endereo do operando e, nestes casos, o registo EA no carregado. Quando as instrues tm dois operandos, o segundo operando deve ser deixado no registo SD (R11). Pode-se agora examinar as micro-rotinas de carregamento de operandos, comeando pelas que carregam apenas um operando. De acordo com o modo de endereamento, o operando pode estar em vrias localizaes: Endereamento por registo: o operando encontra-se num registo. Deve ser copiado desse registo para o registo RD. No existe necessidade de actualizar o registo EA. Endereamento indirecto por registo: o operando encontra-se na posio de memria cujo endereo est contido no registo. O valor do registo deve ser copiado para o registo EA e o valor da memria apontado por este registo deve ser copiado para o registo RD. Endereamento imediato: o operando encontra-se na prpria instruo, ou, mais exactamente, na posio de memria apontada pelo contador de programa, que j foi incrementado na micro-instruo com rtulo IF1. Esta posio de memria deve ser copiada para o registo RD, no havendo necessidade de actualizar o registo EA. Endereamento indexado: o operando encontra-se numa posio de memria cujo endereo obtido somando o contedo de um registo com o valor da posio de memria apontada pelo contador de programa. Este endereo deve ser carregado no registo EA e o seu contedo dever ser copiado para o registo RD.

Em todos os casos, o registo ao qual se aplica o modo de endereamento o registo especicado no campo do registo de instruo. Aps a execuo das micro-instrues que carregam o operando, o controlo deve ser retornado para o cdigo que chamou a micro-rotina de carregamento de operando. Torna-se agora simples especicar os micro-programas para cada uma das micro-rotinas de carregamento de um operando, descritas no Programa 12.2. A mais complexa desta micro-rotinas a que trata do carregamento de operandos quando o modo de endereamento indexado, caso em que h que somar a palavra W ao valor do registo especicado em e enderear a memria com o valor resultante. As micro-rotinas de carregamento de dois operandos funcionam de forma semelhante s de carregamento de um operando. Porm, neste caso, o valor

12.3. MICRO-PROGRAMAO

225 SBR ; Copia operando ; Carrega o endereo ; Copia operando ; Carrega o operando ; Incrementa o PC ; ; ; ; Carrega a constante W Incrementa PC Guarda o endereo Carrega o operando

F1R0: F1RI0: F1RI1: F1IM0: F1IM1: F1IN0: F1IN1: F1IN2: F1IN3:

RD EA RD RD PC EA PC EA RD

R[IR1], CAR R[IR1] M[EA], CAR M[PC] PC+1, CAR

SBR

Programa 12.2: Micro-rotinas de carregamento de um operando. do bit do registo de instruo indica se o modo de endereamento aplicado ao primeiro operando ou ao segundo operando. Quando o modo de endereamento aplicado ao primeiro operando, tambm se aplica ao destino da operao, uma vez que o primeiro operando especica simultaneamente um dos operandos e o destino a dar ao resultado. Em ambos os casos, o modo de endereamento aplica-se ao registo especicado no campo do registo de instruo. O outro operando, especicado pelo campo do registo de instruo, sempre um registo. F2R0: F2R1: F2RI0: F2RI1: F2RI2: F2IM0: F2IM1: F2IM2: F2IN0: F2IN1: F2IN2: F2IN3: F2IN4: RD SD EA RD SD RD PC SD EA PC EA RD SD R[IR1] R[IR2], CAR R[IR1] M[EA] R[IR2], CAR M[PC] PC+1 R[IR2], CAR M[PC] PC+1 EA+R[IR1] M[EA] R[IR2], CAR ; Copia primeiro operando ; Copia segundo operando ; Guarda endereo ; Copia primeiro operando ; Copia segundo operando ; Copia primeiro operando ; Incrementa o PC ; Copia segundo operando ; ; ; ; ; Carrega a constante W Incrementa o PC Guarda o endereo Copia primeiro operando Copia segundo operando

SBR

SBR

SBR

SBR

Programa 12.3: Micro-rotinas de carregamento de dois operandos para

O primeiro conjunto de micro-rotinas, descrito no Programa 12.3, utilizado quando o valor de . Neste caso, o modo de endereamento aplica-se ao primeiro operando, como, por exemplo, na instruo ADD M[R1+30],R3. O procedimento a adoptar semelhante ao que foi utilizado nas instrues de um operando, existindo, tal como antes, quatro casos distintos: endereamento por registo, indirecto, imediato e indexado. A diferena consiste fundamentalmente em copiar para o registo SD o valor do segundo operando, por forma

M[PC] PC+1 EA+R[IR1] M[EA], CAR

SBR

SBR

226 F2RS0: F2RS1:

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR


Programa 12.4: Micro-rotinas de carregamento de dois operandos para

a que as instrues passem a dispor dos dois operandos nos registos RD e SD. Nos casos em que tal se aplique, o registo EA deve, tal como anteriormente, ser carregado com o valor do endereo onde se encontrava o primeiro operando. Este valor ser mais tarde utilizado pelo micro-cdigo de escrita do resultado, descrito no Programa 12.8. Quando o valor do bit do registo de instruo , o tratamento algo diferente. Neste caso, o modo de endereamento aplica-se ao segundo operando, como, por exemplo, na instruo ADD R3,M[R4+30]. Neste caso, o papel dos registos RD e SD deve ser trocado, e no h necessidade de guardar o endereo do operando no registo EA. Note-se que o modo de endereamento continua a , s que, neste caso, o campo coaplicar-se ao registo especicado em dica o segundo operando, no o primeiro. Estas micro-rotinas esto descritas no Programa 12.4.

12.3.3 Execuo das Instrues


Aps a execuo das micro-rotinas de carregamento de operandos, o processador pode operar sobre os dados, de acordo com a operao especicada no cdigo de instruo. Uma vez que os operandos esto j disponibilizados nos registos RD e SD, a operao propriamente dita , de uma forma geral, relativamente simples. No caso vertente, ilustra-se a execuo de instrues usando para tal alguns exemplos que so representativos do conjunto de instrues do processador. Como exemplo de uma instruo aritmtica, considere-se a instruo ADD. Aps chamar a micro-rotina de carregamento de operandos, usando a unidade de mapeamento, esta instruo dever somar o contedo dos registos RD e SD e deixar o resultado no registo RD. Dever tambm actualizar os bits do registo de estado, actuando para tal os bits do campo . Aps ter o resultado guardado no registo RD, o controlo deve ser transferido para a micro-rotina de escrita do resultado. Uma vez que o endereo destas

F2INS0: F2INS1: F2INS2: F2INS3: F2INS4:

EA PC EA SD RD

M[PC] PC+1 EA+R[IR1] M[EA] R[IR2], CAR

F2IMS0: F2IMS1: F2IMS2:

SD PC RD

M[PC] PC+1 R[IR2], CAR

F2RIS0: F2RIS1: F2RIS2:

EA SD RD

R[IR1] M[EA] R[IR2], CAR

SD RD

R[IR1] R[IR2], CAR

SBR

; Copia segundo operando ; Copia primeiro operando ; End. do seg. operando ; Copia segundo operando ; Copia primeiro operando ; Copia segundo operando ; Incrementa PC ; Copia primeiro operando ; ; ; ; ; Carrega a constante W Incrementa PC Guarda endereo Copia segundo operando Copia primeiro operando .

SBR

SBR

SBR

12.3. MICRO-PROGRAMAO

227

micro-rotinas est guardado nas posies a da memria B (ver Tabela 12.4) da unidade de mapeamento, esta transferncia faz-se carregando o registo CAR com o contedo desta memria, endereada com os bits mais signicativos ( e )a .

Programa 12.5: Micro-programa da fase de execuo da instruo ADD. Dada a simplicidade da operao de soma, a execuo da instruo propriamente dita resume-se operao RD RD+SD e actualizao dos bits de estado, sendo as outras duas instrues as chamadas s micro-rotinas de carregamento de operandos e de escrita do resultado. Um exemplo ligeiramente mais complexo o da instruo de PUSH, descrito no Programa 12.6. Esta instruo dever guardar o seu operando na posio de memria apontada pelo registo SP e, em seguida, decrementar o mesmo. Esta instruo no tem de escrever o resultado no seu operando, uma vez que o valor do mesmo no deve ser alterado. Desta forma, o controlo transferido directamente para a micro-rotina de tratamento de interrupes.

Programa 12.6: Micro-programa da fase de execuo da instruo PUSH. As instrues de controlo so programadas utilizando a mesma estrutura. Neste caso, porm, estas instrues actuam directamente sobre o valor do registo PC. Por exemplo, o micro-programa que executa a instruo CALL o do Programa 12.7.

Programa 12.7: Execuo da instruo CALL.

12.3.4 Escrita do Resultado


Aps a execuo da instruo, o resultado deve ser escrito, em registo ou em memria, de acordo com o modo de endereamento usado. As micro-rotinas de escrita do resultado (Programa 12.8) recebem o resultado no registo RD e escrevem-no na localizao especicada pelos bits e do registo de instruo. Caso o bit seja , a escrita deve sempre ter lugar para um registo. O endereo deste registo especicado directamente pela unidade de controlo do banco de registos, descrita na Figura 12.12. Caso o bit seja , o valor dever

CALL0: CALL1: CALL2: CALL3:

CAR ROMB[0|0|M], SBR M[SP] PC, SP SP-1 PC RD CAR IH0

PUSH0: PUSH1: PUSH2:

CAR ROMB[0|0|M], SBR M[SP] RD, SP SP-1 CAR IH0

ADD0: ADD1:

CAR ROMB[1|S|M], SBR CAR+1 RD RD+SD, FM Fh, CAR ROMB[0|1|M]

; Copia Ops ; Adio

CAR+1

; Copia operando ; Escrita ; Salto para IH

CAR+1

; ; ; ;

Carregar endereo Push do PC Carregamento do PC Salto para IH

228

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

ser escrito na posio de memria apontada pelo registo EA, caso o modo de endereamento seja indirecto ( = ) ou indexado ( = ). Uma vez que s

Programa 12.8: Micro-rotina de escrita do resultado. existem duas micro-rotinas de escrita do resultado, a tabela correspondente na memria de mapeamento B deve ser construda de tal forma que as entradas correspondentes aos modos de mapeamento indexado e indirecto por registo apontem para o micro-cdigo com rtulo WBM0. A entrada nesta tabela correspondente ao modo de endereamento imediato nunca usado, uma vez que este modo de endereamento no pode ser utilizado para especicar o destino de uma operao. No caso em que o primeiro operando especicado utilizando o modo de endereamento por registo, a escrita do resultado mais simples, bastando copiar o contedo do registo RD para o registo especicado na instruo assembly. O endereo deste registo seleccionado directamente pelo circuito, de acordo com a Figura 12.12.

12.3.5 Teste de Interrupes


A fase nal da execuo de uma instruo o teste existncia de interrupes est activo, o que signica pendentes. Nesta fase, verica-se se o sinal que existe uma interrupo pendente e que o bit que assinala a disponibilidade para atender interrupes est activo. Em caso negativo, o controlo dever ser transferido para a primeira micro-instruo da micro-rotina de carregamento de instrues, , o que desencadear a execuo da prxima instruo. Note-se que possvel realizar a primeira linha do Programa 12.9 numa s micro-instruo. A operao de transferncia de registos, sempre executada, enquanto que a operao de carregamento do CAR s executada quando o teste ao complemento do sinal d resultado verdadeiro. Se se der incio ao tratamento de uma interrupo, o registo de bits de estado e contador de programa devero ser guardados na pilha. O bit do registo de estado que indica a disponibilidade do processador para receber interrupes dever ser desactivado, o que se consegue carregando o registo de estado com o valor . Finalmente, dever ser activado o bit , indicando externamente que se vai dar incio ao tratamento da ltima interrupo gerada. Em resposta activao deste sinal, o controlador de interrupes dever colocar o vector de interrupo no barramento de dados, identicando assim o perifrico responsvel pela interrupo. As rotinas de tratamento s interrupes de cada perifrico do sistema, para onde o processador deve passar o controlo da execuo aps uma interrupo de um perifrico, tm os seus endereos guardados numa tabela de interrupes, com incio no endereo FE00h.

WBM0: WBM1: WBM2:

S: CAR WBR0 M[EA] RD CAR IH0

; Escrita em registo se = 1 ; Escrita do resultado ; Tratamento de interrupes

WBR0: WBR1:

R[WBR] RD CAR IH0

; Escrita em registo ; Tratamento de interrupes

12.3. MICRO-PROGRAMAO

229

O vector de interrupo serve como ndice para esta tabela. Assim, este valor dever ser somado a FE00h para se obter o endereo de memria onde se encontra o endereo com que dever ser carregado no contador de programa (notar que +FE00h= -0200h e este estratagema utilizado por, ao contrrio de FE00h, o valor 0200h ser possvel de representar no campo de 12 bits). Finalmente, dever ser transferido controlo para a primeira micro-instruo da micro-rotina de carregamento de instruo, que, neste caso, executar a primeira instruo da subrotina de interrupo.

Programa 12.9: Micro-rotina de tratamento de interrupes.

12.3.6 Gerao do Micro-cdigo


Denida a estrutura dos micro-programas e conhecidos os detalhes de cada um dos blocos, basta agora denir o valor dos bits de cada micro-instruo. Considere-se, por exemplo, a primeira micro-instruo a ser executada durante a fase de carregamento de instruo:

IF0:

RI

M[PC]

Em primeiro lugar, h que identicar o tipo de micro-instruo que poder ser utilizado para efectuar as transferncias entre registos indicadas. Neste caso, pretende-se carregar o registo de instruo com o valor da posio de memria apontada pelo contador de programa. O sinal que controla o carregamento do registo de instruo, , s est disponvel no formato , o que dene imediatamente o tipo de micro-instruo a utilizar. Analisando agora o circuito de dados na Figura 12.1, pode-se observar que, para conseguir o funcionamento pretendido, necessrio garantir que: 1. O porto do banco de registos seja endereado com o nmero do registo que guarda o PC, ou seja, . 2. O multiplexador MUXA seleccione a entrada , colocando o valor do PC no barramento de endereos da memria.

3. O sinal

esteja activo.

4. Os sinais de controlo de escrita em memria e no banco de registos estejam inactivos.

6. O sinal que controla a escrita no registo SBR,

, esteja inactivo.

5. O sinal que controla a escrita no registo de estado,

, esteja inactivo.

IH0: IH1: IH2: IH3: IH4: IH5: IH6: IH7:

R8 RE, : CAR IF0 M[SP] R8, SP SP-1 M[SP] PC, SP SP-1, IAK R9 VECTINT R8 0200h R9 R9-R8 PC M[R9] RE R0, CAR IF0

; Carrega RI

; Guarda RE 1

230

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

Uma vez que o formato da micro-instruo o formato , isso fora automaticamente os valores pretendidos nos sinais que controlam a escrita na memria e o multiplexador MUXA. Analisando o circuito de controlo, na Figura 12.13, verica-se que necessrio garantir que: 1. O registo CAR seja incrementado. Para tal, necessrio: Controlar o multiplexador MUX5 com o valor

Colocar no controlo do multiplexador MUX4, seleccionando a entrada 0 do multiplexador MUXCOND e colocando o sinal a , por seja . forma a que

2. O multiplexador MUXAD dever seleccionar a sua entrada , que dever tomar o valor , uma vez que se pretende este valor em . Chega-se assim concluso que, nesta micro-instruo, os seguintes valores devero estar denidos: = = = = = = = = = = Estes valores denem a micro-instruo ilustrada na Figura 12.15, onde os valores que no so relevantes foram deixados em branco. Arbitrando agora
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
S R 1 S R 2 L S C C L I L F

7
W R

4
M A D

M5

MCOND

CONST/NA

MD

00

000

que os valores no relevantes so colocados a , obtm-se nalmente o valor que os bits devero ter para esta micro-instruo: 8060001Fh. Um exemplo ligeiramente mais complexo permite-nos ilustrar a utilizao de uma micro-instruo do tipo = e o uso das memrias de mapeamento. Considere-se ento a micro-instruo:

IF1:

PC

PC+1, CAR

ROMA[OPCODE]

No circuito de dados, necessrio controlar a unidade aritmtica por forma a que esta efectue um incremento, o que signica colocar igual a e seleccionar o PC no porto do banco de registos. tambm necessrio seleccionar a entrada do multiplexador MUXA e a entrada 0 do multiplexador MUXD.

Figura 12.15: Codicao da micro-instruo RI

M[PC].

RAD

1111

1 0

12.3. MICRO-PROGRAMAO

231

Finalmente, necessrio activar o sinal de escrita nos registos e garantir que todos os outros sinais de escrita em registos esto desactivados. Na unidade de controlo necessrio seleccionar o valor no sinal assim como forar a , por forma a que a sada da memria de mapeamento seja seleccionada. ainda necessrio garantir que o sinal ca a . Estas consideraes conduzem denio dos valores dos bits descritos na Figura 12.16. Arbitrando, como anteriormente, que os campos no denidos
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9
S R 1 S R 2 I A K M A M B M 2 M R B

8
W M

7
W R

4
M A D

M5

FM

CALU

RB

MD

10

0000

00101

00

so preenchidos com o valor , obtm-se o valor nal para esta micro-instruo, 400A009Fh.

Sumrio
Este captulo descreveu a estrutura interna do processador P3, um processador micro-programado de 16 bits, cujo conjunto de instrues tinha sido estudado no captulo anterior. As duas componentes mais importantes deste processador so o circuito de dados e a unidade de controlo. O circuito de dados constitudo por um banco de registos e uma unidade lgica e aritmtica, j estudadas em captulos anteriores, alm dos registos de instruo e de estado e dos diversos barramentos de interligao. A unidade de controlo baseada num micro-sequenciador que gera a sequncia de sinais que controlam o funcionamento do circuito de dados. O micro-sequenciador usa uma unidade de teste de condies, uma unidade de mapeamento e uma unidade que controla o banco de registos. A parte nal do captulo foi dedicada a estudar a forma como se denem os micro-programas que controlam o funcionamento deste micro-processador e a forma como realizada cada uma das suas instrues.

Figura 12.16: Micro-instruo PC

PC+1, CAR

ROMA[OPCODE].


1 0
RAD

1111

232

CAPTULO 12. ESTRUTURA INTERNA DE UM PROCESSADOR

Captulo 13

Sistemas de Memria
Nos captulos anteriores, foi examinado o funcionamento de um processador, sendo a memria encarada como um conjunto uniforme de registos, cada um dos quais enderevel individualmente. Esta viso simplista no corresponde realidade excepto em sistemas muito simples mas permitiu descrever o funcionamento do processador sem entrar em linha de conta com as complexidades do sistema de memria. Em particular, qualquer computador actual, quer seja um sistema embarcado, um computador pessoal ou um servidor, utiliza numerosos dispositivos para armazenamento de dados. Estes dispositivos consideram-se usualmente divididos em duas grandes classes: memria primria e memria secundria. A memria primria, tambm referida como memria principal, construda com base em circuitos integrados, tem um tempo de acesso mais curto, mas mais cara (por bit) e de menor dimenso, no tendo a capacidade de guardar os dados quando o sistema se encontra desligado. A memria secundria, tambm conhecida como memria auxiliar, que recorre a dispositivos baseados em tecnologia magntica (discos e tas magnticas) ou pticas (CDROMs e DVDs) mais lenta, mas tem um custo por bit menor, maior capacidade e a possibilidade de conservar os dados mesmo sem o computador estar ligado. Esta memria, alm de poder ser utilizada pelo processador na execuo de programas, atravs do uso de memria virtual, tambm usada para guardar dados em sistemas de cheiros. Esta utilizao da memria secundria no ser estudada neste captulo, uma vez que implica um conhecimento de sistemas operativos que vai para alm do mbito de um livro introdutrio. Neste captulo, ser analisado o sistema de memria de um computador, comeando pela organizao da memria primria, que, em alguns sistemas simples, representa a nica forma de armazenamento de dados. Sistemas mais complexos exibem outras componentes, que sero estudados nas seces seguintes. Em particular, sero estudados os sistemas de cache, que tm como objectivo acelerar os acessos a memria primria, e os sistemas de memria virtual, que permitem utilizar a memria secundria de forma transparente para o processador. 233

234

CAPTULO 13. SISTEMAS DE MEMRIA

13.1 Organizao de Sistemas de Memria


No Captulo 7 foi analisada a forma como um conjunto de registos pode ser organizado em bancos e em mdulos de memria. Um mdulo de memria constitudo por um conjunto de registos (de um ou mais bits) e um sistema de descodicao que permite seleccionar um e apenas um dos registos, para operaes de leitura ou escrita. Estes registos so, em geral, constitudos por dispositivos com comportamentos anlogos aos das bsculas actuadas por nvel. A memria principal de um computador, na sua verso mais simples, consiste num conjunto (ou banco) de mdulos de memria, organizados por forma a serem visveis pelo processador como um conjunto de posies onde dados podem ser escritos ou lidos. Na prtica, a organizao do sistema de memria pode ser relativamente complexa, dado que, tipicamente, o espao de endereos utilizado por diversos dispositivos de memria, e tambm, em alguns processadores, como o caso do P3, pelo sistema de entradas/sadas. A seco seguinte descreve a forma como a memria de um computador construda atravs da interligao de diversos mdulos e como diversos tipos de memrias podem ser interligados entre si por forma a partilharem o espao de endereamento do processador.

13.1.1 Planos de Memria


Em geral, no possvel encontrar um nico circuito integrado de memria que satisfaa, s por si, as necessidades de um dado sistema computacional que se pretende projectar. Assim, necessrio utilizar diversos mdulos de memria ligados entre si, por forma a oferecer a funcionalidade e capacidade desejada. Mdulos de memria comerciais tm, para alm das linhas de endereo, uma ou mais linhas que permitem seleccionar esse mdulo, tipicamente denominadas (chip select) ou (chip enable). Quando este sinal no est activo, as sadas de dados do mdulo de memria esto no estado de alta impedncia, no sendo possvel aceder s memrias. Isto permite ligar, de forma muito simples, diversos mdulos de memria por forma a conseguir criar memrias de capacidade e conguraes arbitrrias. A Figura 13.1 ilustra as interligaes disponibilizadas por um mdulo de memria simples, com uma entrada de seleco . As linhas de endereo permitem enderear uma das posies de memria do mdulo, e as linhas de dados so ligadas ao barramento de dados do processador. A entrada de selecciona o modo desejado de funcionamento. Quando esta linha est activa, a memria est em modo de leitura e disponibiliza para o exterior os dados da posio especicada nas linhas de endereos. Quanto esta linha est a 0, a memria colocada em modo de escrita e escreve na posio especicada o valor que se encontra nas linhas de dados. Mdulos de memria deste tipo podem ser interligados por forma a conseguir uma variedade de conguraes de memria. Existem fundamentalmente dois tipos de interligao de mdulos de memria: uma interligao que aumenta o nmero de bits de cada posio de memria e uma interligao que aumenta o nmero de posies de memria.

13.1. ORGANIZAO DE SISTEMAS DE MEMRIA


Mem Read Mem Enable R/W CS m n

235

Dados Endereos

DATA ADDR

Figura 13.1: Esquema de um mdulo de memria. O primeiro tipo de ligao, ilustrado na Figura 13.2, permite compor diversos mdulos de memria, por forma a conseguir um nmero de bits em cada posio superior ao que disponibilizado por cada mdulo de memria isoladamente. Neste tipo de ligao, as palavras devolvidas por cada um dos mdulos so concatenadas numa palavra de maior dimenso.
Endereos

2m

Mem Read Mem Enable

Dados

R/W CS DATA ADDR

R/W CS DATA ADDR

D 2m1 m D A n1A0

D m1 0 D A n1A0

Figura 13.2: Ligao de mdulos de memria por forma a aumentar o nmero de bits em cada posio de memria. O segundo tipo de ligao, ilustrado na Figura 13.3, permite ligar dois mdulos de memria, por forma a conseguir um nmero de posies de memria superior ao que fornecido por cada mdulo individualmente. Neste caso, o barramento de endereos constitudo pelas linhas que entram directamente nos mdulos e pela linha que usada para seleccionar o mdulo activo. Os esquemas anteriores de interligao podem ser combinados entre si, por forma a obter um sistema de memria com as caractersticas desejadas. A utilizao de um exemplo concreto ilustra este mecanismo com maior clareza. Suponha-se que existem disponveis mdulos de memria de 16k octetos (ou seja, posies de memria com 8 bits cada) e que se pretende construir um sistema de memria com 64k octetos, organizado em posies de memria de bits cada uma. Neste caso, a interligao de quatro mdulos, tal como est exemplicado na Figura 13.4 disponibiliza a funcionalidade pretendida. Note-se que uma interligao do mesmo tipo que a da Figura 13.3, onde, portanto, as linhas de dados so interligadas entre si e usado um des-

236

CAPTULO 13. SISTEMAS DE MEMRIA


Endereos

Dados

R/W CS DATA ADDR

Mem Read A n1 Mem Enable

R/W CS DATA A n2A0 ADDR

Figura 13.3: Ligao de mdulos de memria por forma a aumentar o nmero de posies de memria disponveis. codicador para seleccionar qual dos mdulos de memria dever responder a um dado endereo. De referir que esta interligao das linhas de dados possvel por estar garantido partida, pelo prprio funcionamento do descodicador, que apenas um dos circuitos de memria est activo em cada acesso memria. Na Figura 13.5 esto ilustradas as interligaes necessrias para combinar 8 mdulos de memria do mesmo tipo do utilizado no exemplo anterior por forma a obter uma memria de 128k octetos, organizada em 64k palavras de 16 bits cada. Neste caso, aos 14 bits de endereo que so enviados directamente para as memrias, juntam-se os dois bits que controlam o descodicador, o que conduz a um total de 16 linhas de endereo.

13.1.2 Mapas de Memria


Foi analisado na seco anterior como diversos mdulos de memria podem ser interligados entre si por forma a formarem uma memria da dimenso desejada. Nesta seco, ser estudada a forma como as memrias so interligadas com o processador, por forma a disponibilizarem o espao de endereamento desejado pelo projectista. Admita-se uma situao muito simples, em que se pretende utilizar o mdulo de memria da Figura 13.4 para disponibilizar um espao de endereamento de 64k octetos num processador que tem 20 bits de endereo e tem um barramento de dados de 8 bits. Note-se que, embora a memria possa ter uma estrutura interna complexa, ela apresenta-se para o processador de uma forma semelhante ao do mdulo simples da Figura 13.1, neste caso com 16 linhas de endereo e 8 de dados. Uma vez que o processador tem um espao de endereamento total de

13.1. ORGANIZAO DE SISTEMAS DE MEMRIA


Mem Read A13A0

237

A15

A14

Mem Enable

S1

S0

EN Descodificador
0 1 2 3

14 8 R/W CS DATA ADDR

D7D0

R/W CS DATA ADDR

R/W CS DATA ADDR

R/W CS DATA ADDR

Figura 13.4: Esquema de uma memria de 64k octetos, construda com quatro mdulos de 16k octetos cada. octetos, de 00000h a FFFFFh (superior capacidade do mdulo de memria), o projectista tem, em primeiro lugar, de decidir o espao de endereamento que dever corresponder memria. Suponha-se que a opo do projectista a de que as posies de memria devero estar localizadas nas posies F0000h a FFFFFh, isto , no topo do espao de endereamento utilizvel pelo processador. correspondncia que necessrio realizar entre endereos de memria e mdulos habitual chamar-se o mapa de memria. Muitas vezes, este mapa ilustrado de forma grca, como o caso da Figura 13.6, que corresponde ao exemplo em estudo. Para conseguir que a memria que visvel nesta zona do espao de endereamento, h que criar um circuito de descodicao, ilustrado na Figura 13.7. A porta lgica utilizada faz com que apenas os endereos que tm os 4 bits mais signicativos a 1 activem a memria. Em geral, os mapas de memria de um processador so mais complexos e no so usadas portas lgicas individuais, mas sim descodicadores ou ROMs para seleccionar mdulos individuais. Quando se projecta o circuito que faz a descodicao dos endereos e a

238
A13A0

CAPTULO 13. SISTEMAS DE MEMRIA


Mem Read D15D8

A15

A14

Mem Enable

EN
0

S1

S0

Descodificador
1 2 3

14 8 R/W CS DATA ADDR 8 R/W CS DATA ADDR

R/W CS DATA ADDR

D7D0

R/W CS DATA ADDR

R/W CS DATA ADDR

R/W CS DATA ADDR

R/W CS DATA ADDR

R/W CS DATA ADDR

Figura 13.5: Esquema de uma memria de 128k octetos, organizada como 64k palavras de 2 octetos cada. gerao dos sinais de controlo dos mdulos de memria, h que garantir que: 1. Cada mdulo de memria seleccionado quando o endereo corresponde a uma posio de memria guardada nesse mdulo e existe uma operao de acesso memria. 2. Os bits que so usados para enderear as palavras dentro do mdulo so adequadamente controlados pelas linhas correspondentes do barramento de endereos. Considere-se, por exemplo, um sistema baseado no mesmo processador do exemplo anterior, em que se pretende realizar o mapa de memria da Figura 13.8. Neste mapa de memria, existe uma memria ROM de 32k octetos na parte baixa da memria, e duas reas de RAM no contguas, ambas de 64k octetos. A realizao da descodicao deste sistema de memria poderia tambm ser feita com portas lgicas discretas, mas isso resultaria num circuito relativamente complexo.

13.1. ORGANIZAO DE SISTEMAS DE MEMRIA


FFFFFh

239

RAM
F0000h EFFFFh

00000h

Figura 13.6: Mapa de memria de um processador um espao de endereamento de octetos, mas com apenas 64k octetos de memria RAM instalada entre as posies F0000h e FFFFFh.

UCP
20 Endereos Dados

Figura 13.7: Circuito correspondente ao mapa de memria da Figura 13.6. Se se utilizar um descodicador, controlado pelos 4 bits mais signicativos do endereo, possvel utilizar as suas sadas para controlar, directamente, os bits de seleco das memrias RAM. O controlo da ROM ligeiramente mais complexo, uma vez que preciso assegurar que a ROM seleccionada apenas quando os 5 bits mais signicativos so 0 e a operao uma operao de leitura. A Figura 13.9 ilustra a realizao do circuito de descodicao que corresponde ao mapa de memria da Figura 13.8.

13.1.3 Gerao dos Sinais de Controlo


At agora, assumiu-se que uma memria, logo que seleccionada em modo de leitura, coloca na sua sada o valor das posies de memria desejadas. Na prtica, o funcionamento de uma memria ligeiramente mais complexo, uma vez que h que adaptar o funcionamento da memria a diversas velocidades de funcionamento dos processadores e dos barramentos de controlo.

Mem Read Mem Enable A19 A18 A17 A16 A15A0 8 16

R/W

CS

ADDR DATA

240

CAPTULO 13. SISTEMAS DE MEMRIA


FFFFFh

RAM
F0000h

...
1FFFFh

RAM
10000h

...
07FFFh

ROM
00000h

Figura 13.8: Mapa de memria de um processador com RAM e ROM.


Mem Read Mem Enable R/W CS

UCP

Dados Endereos 20 A15A0 16

8 16

RAM
DATA ADDR

R/W A19A16 4 8 A15 EN


15 .

CS

RAM
DATA ADDR

Descodificador

. .

16

1 0

CS 8 15

ROM
DATA ADDR

Figura 13.9: Circuito correspondente ao mapa de memria da Figura 13.8.

13.1. ORGANIZAO DE SISTEMAS DE MEMRIA

241

Com efeito, enquanto que um processador pode funcionar com ciclos de relgio de cerca de 1ns, os tempos de acesso a memria variam, conforme os tipos de memria, entre poucos nano-segundos para as RAMs estticas e as dezenas de nano-segundos, para as RAMs dinmicas, de maior capacidade. Isso signica que um mdulo de memria tipicamente no consegue disponibilizar os dados num ciclo de relgio do processador, o que obriga existncia de um protocolo para transferncia dos dados. A forma mais simples de garantir que os dados so lidos correctamente consiste em projectar o sistema de forma que o processador espere o tempo suciente para que a operao de leitura ou escrita se conclua com sucesso. Suponha-se, a ttulo de exemplo, que um processador que trabalha a 100 MHz (o que corresponde um ciclo de relgio de 10ns) deve comunicar com uma memria que tem um tempo de acesso, medido a partir da activao do sinal , de 25ns. Neste caso, h que garantir que, numa operao de leitura, o processador espera trs ciclos de relgio antes de ler os dados provenientes da memria. De igual forma, numa operao de escrita, dever manter os dados vlidos durante trs perodos de relgio, a partir do momento em que seleccionou a memria. A Figura 13.10 ilustra as formas de onda de uma operao de escrita num sistema com esta congurao. Aps activao do sinal que selecciona o mdulo de memria respectivo, os dados devero manter-se vlidos no barramento durante 3 ciclos de relgio do processador.

Relgio Mem Enable Read / Write Endereos Dados Endereos vlidos Dados Tempo de acesso = 25ns

Figura 13.10: Formas de onda para uma operao de escrita em memria. A operao de leitura funciona de forma similar. Neste caso, os dados apenas cam garantidamente vlidos no barramento depois de passar um tempo igual ao tempo de acesso memria, pelo que o processador s pode ler os dados ao m do terceiro ciclo de relgio. As formas de ondas das Figuras 13.10 e 13.11 ilustram os acessos efectuados por um processador a memrias estticas, que, tipicamente, tm apenas as linhas de controlo e . A realidade de um computador actual , no entanto, bastante mais sosticada.

10ns T1 T2 T3 T0 T1

242
10ns T1 Relgio Mem Enable Read / Write Endereos Dados

CAPTULO 13. SISTEMAS DE MEMRIA

T2

T3

T0

T1

Endereos vlidos Vlidos Tempo de acesso = 25ns

Figura 13.11: Formas de onda para uma operao de leitura de memria. Por um lado, as memrias utilizadas como memria primria so, na maioria dos casos, memrias dinmicas, cujo controlo signicativamente mais complexo do que o das memrias estticas. Estas memrias so mais baratas (por bit) e exibem diversos modos de acesso, que permitem, entre outras coisas, a transferncia rpida de blocos de dados. O estudo detalhado das formas de controlo de memrias est fora do mbito de um texto introdutrio, pelo que no ser prosseguido aqui. Por outro lado, o acesso de um processador no feito a uma memria simples, mas a uma hierarquia de memrias, como se descreve em seguida.

13.2 Hierarquia de Memria


Por razes que se prendem com o desempenho do sistema, a estudar nesta seco, a memria de um computador tem, na maior parte dos casos, diversos nveis, ilustrados na Figura 13.12.

UCP

Cache L1

Cache L2

Memria Primria

Memria Secundria

Figura 13.12: Hierarquia de memria num computador.

13.2. HIERARQUIA DE MEMRIA

243

Do ponto de vista do desempenho do processador, a situao ideal corresponde a ter a maior quantidade de memria disponvel possvel a funcionar velocidade mais rpida possvel. Porm, como o custo por bit e a velocidade de funcionamento esto inversamente relacionados, a soluo adoptada passa, geralmente, pelo uso de diversos tipos de memria, com diferentes velocidades de acesso. O sistema de memria est estruturado por forma a que os dados e instrues mais comummente utilizados, em cada passo da execuo de um programa, estejam em memrias mais rpidas, enquanto que os menos frequentemente acedidos estejam em memrias mais lentas. Na sequncia, ir ser analisada uma hierarquia de memria simples, onde existe apenas um nvel de cache, uma memria principal de grande capacidade e uma memria secundria que usada como memria virtual. No caso geral, podem existir vrios nveis de cache, mas isso no altera o mecanismo de funcionamento. Quando feito um acesso a uma posio de memria, quer para leitura quer para escrita, o sistema comea por vericar se essa posio est disponvel na memria mais rpida, que denominada de cache. Se essa posio no estiver disponvel na cache, consultada a memria principal, que geralmente do tipo RAM dinmica. Se a posio tambm no estiver disponvel na memria principal, feito um acesso memria secundria, maior e mais lenta, e geralmente a funcionar com base em discos magnticos. Se o sistema de memria estiver bem estruturado, este sistema hierrquico apenas ligeiramente mais lento, em mdia, que um sistema de memria em que a totalidade da memria funcionasse velocidade da cache. O custo total, porm, muito menor, uma vez que as memrias mais lentas tm um custo por bit muito inferior ao das memrias mais rpidas. Como possvel conseguir um objectivo prximo do original (memria muito grande e muito rpida) investindo apenas uma fraco do montante que seria necessrio se toda a memria fosse rpida? A possibilidade de obter este resultado prende-se com um facto que se verica em praticamente todos os programas, e que conhecido pelo princpio da localidade. Este princpio baseia-se na vericao emprica de que os acessos a memria feitos por um processador so altamente correlacionados entre si, e no so distribudos uniformemente pela memria disponvel. Existem dois tipos de localidade: Localidade temporal: se feito um acesso a um determinado endereo de memria, muito provvel que haja um novo acesso a este mesmo endereo num futuro prximo. Localidade espacial: se feito um acesso a um determinado endereo de memria, muito provvel que haja um novo acesso a um endereo prximo deste.

A localidade temporal pode ser utilizada para acelerar os acessos a dados e instrues, mantendo nas memrias mais rpidas as posies de memria que foram utilizadas mais recentemente. Com efeito, uma fraco muito signicativa do tempo de execuo de um programa gasta em ciclos de dimenso relativamente pequena, onde so executadas repetidamente as mesmas instrues e re-utilizadas as mesmas variveis. A localidade espacial pode ser utilizada com o mesmo m, copiando para memrias mais rpidas posies que esto, espacialmente, prximas daqueles

244

CAPTULO 13. SISTEMAS DE MEMRIA

que foram recentemente utilizados. A localidade espacial nos dados resulta do uso de estruturas de dados, como, por exemplo, arrays, onde os valores so acedidos em sequncia. A localidade espacial nas instrues deriva do modo de funcionamento de um microprocessador, que executa as instrues de uma forma essencialmente sequencial. O aproveitamento da localidade (espacial e temporal) est na base do uso de caches, que tm como objectivo reduzir os tempos de acesso do processador memria primria. A maioria dos computadores actuais utilizam tambm um sistema de gesto de memria denominado memria virtual, que utiliza o princpio da localidade para permitir a utilizao pelos programas de uma quantidade de memria superior quela que existe, sicamente, no computador. A conjugao destas duas tcnicas, caches e memria virtual, cuja realizao ser estudada em detalhe na Seco 13.3 e Seco 13.4, respectivamente, leva a que, do ponto de vista da unidade central de processamento, esteja disponvel virtualmente uma memria muito rpida, de capacidade muito superior memria fsica presente no computador.

13.2.1 Caches
A funo de uma cache num sistema de memria permitir que a maioria dos acessos a memria sejam feitos mais rapidamente do que possvel utilizando directamente a memria primria do computador. Este conceito de uma memria pequena e mais rpida pode ser generalizado para incluir vrios nveis de cache, como descrito na Figura 13.12. Os nveis de cache mais prximos do processador so feitos com memrias mais rpidas, mas de menor capacidade. Os nveis mais exteriores so realizados com memrias progressivamente mais lentas. A memria primria do computador , tipicamente, realizada com memrias dinmicas, cujos tempos de acesso se encontram tipicamente na gama dos 60ns a 70ns. As memrias de cache encontram-se muitas vezes no mesmo circuito integrado que o processador, e tm assim tempos de acesso compatveis com a velocidade do processador. Em processadores modernos, comum existirem diversos nveis de cache internos ao processador, que podem ser ou no complementados com caches exteriores. Estas caches podem ter tempos de acesso da ordem da durao do ciclo de relgio do processador, que, com a presente tecnologia, menor que 1ns. Numa operao de leitura, a funo da cache disponibilizar dados e/ou instrues num perodo de tempo mais curto do que o que possvel quando o acesso feito memria principal. Numa operao de escrita, a cache deve poder ser acedida rapidamente para guardar os dados, devendo os mesmos ser posteriormente escritos em memria. Uma vez que a cache tem menor dimenso que a memria principal, s uma pequena fraco da totalidade do contedo da memria est presente, em cada momento, na cache. Assim, necessrio substituir frequentemente dados e instrues presentes na cache por outros, que esto a ser mais recentemente acedidos. Para quanticar a acelerao que possvel conseguir atravs do uso de uma cache, considere-se um exemplo simplicado de um sistema computacional que tem apenas um nvel de cache e uma memria primria.

13.2. HIERARQUIA DE MEMRIA

245

Para usar um exemplo concreto, admita-se que um dado processador funciona a 500 MHz, que faz um acesso memria de dados em cada instruo e que cada instruo demora 4 ciclos de relgio a ser executada. Nestas condies, o processador faz um acesso memria de dados em cada 8ns1 . Admita-se que a memria primria tem um tempo de acesso mdio de 70ns, enquanto que a cache, realizada com uma tecnologia semelhante do processador, disponibiliza os dados em 2ns, o que corresponde ao perodo de relgio do processador. Admita-se ainda que, neste sistema, os acessos a memria tm um padro tal que 95% dos acessos feitos a memria podem ser substitudos por um acesso cache, ou seja, que a cache exibe um taxa de sucesso (em ingls, hit-rate) de 95%. Nestas condies, possvel calcular o nmero de ciclos de relgio que demora, em mdia, a executar cada instruo, neste sistema e num sistema semelhante mas em que no fosse utilizada a cache. Cada instruo demora 4 ciclos de relgio a ser executada, dos quais um ciclo de acesso memria. O tempo mdio para um acesso memria dado por (13.1) O nmero mdio de ciclos de relgio por cada instruo executada assim , ou seja, (esta medida de desempenho denominada de de CPI, ciclos por instruo, ou, em ingls, cicles per instruction). Signica isto que este processador executa uma instruo a cada ciclos de relgio, ou seja, a cada ns. Este processador executa assim milhes de instrues por segundo (ou MIPS, outra medida de desempenho de processadores - em ingls, millions of instructions per second). Se no existisse uma cache, cada acesso a memria teria de ser feito memria primria. Isto signica que o processador demoraria, para executar cada instruo, ciclos de relgio, ou seja, ciclos de relgio. O processador executaria assim apenas MIPS, o que signica que caria aproximadamente 7 vezes mais lento. Este exemplo ilustra bem a importncia das caches no desempenho de um sistema computacional, e mostra como a incluso de uma memria pequena e rpida entre o processador e a memria principal aumenta signicativamente a velocidade com que as instrues so executadas. Nestas anlises, no foi focado o aspecto crtico da dimenso das caches, mas apenas a sua velocidade. A dimenso das caches, no entanto, crtica para um bom funcionamento do sistema de memria. O impacto da dimenso aparece, indirectamente, no valor da taxa de sucesso, que maior para caches de maior dimenso, e menor para caches mais pequenas. Em geral, no dimensionamento de uma cache para um sistema de memria, necessrio considerar dois factores fundamentais: A velocidade da cache, que condiciona a velocidade mxima de funcionamento do sistema. A dimenso da cache, que condiciona a taxa de sucesso da mesma, e, consequentemente, o nmero de acessos memria principal.

1 Ignore-se, por agora, que o processador precisa tambm de aceder s instrues, que tambm esto guardadas em memria.

 

246

CAPTULO 13. SISTEMAS DE MEMRIA

A melhor soluo provm de um compromisso entre estes dois factores. No caso do processador estudado no captulo Captulo 12, admitiu-se que possvel executar um acesso a memria em cada ciclo de relgio. Assim, a memria representada na Figura 12.1 representa, numa arquitectura tpica, a cache mais interna do processador, que se assumiu ter um tempo de acesso no superior ao ciclo de relgio do processador. Por questes de clareza na exposio, foram omitidos na descrio do processador, as linhas de controlo necessrias para fazer a interface com o controlador de cache. Destas, a mais importante um sinal de , que dever ser testado em cada leitura da cache. Este sinal, gerado pelo controlador da cache, indica que a leitura se encontra concluda e que os dados pretendidos se encontram disponveis no barramento de dados. No caso em que os dados no se encontram presentes na cache, o processador dever esperar antes de prosseguir o processamento. No caso particular da arquitectura estudada no Captulo 12, o processador dever continuar a executar a mesma micro-instruo at que o sinal de que activo. A utilizao de um linha de , geralmente, necessria quando so usadas caches um acesso cache, pois este muito mais demorado quando os dados no esto disponveis na mesma e tm de ser recuperados da memria principal. Numa operao de escrita, a situao um pouco mais simples. Neste caso o processador pode prosseguir imediatamente, desde que seja possvel guardar os dados em cache ou o controlador disponha de um registo que guarde os dados temporariamente. Esse geralmente o caso, embora os detalhes de funcionamento do controlador possam ser complexos. Este assunto ser estudado com algum detalhe na Seco 13.3.4.

13.2.2 Memria Virtual


De forma a que o processador no que com um espao de endereamento limitado quantidade de memria instalada no sistema, denido um espao de endereamento virtual com uma dimenso tipicamente muito superior memria primria. Assim, todo o processamento da UCP feito utilizando endereos virtuais, em oposio aos endereos fsicos que permitem o acesso memria primria e cache. Sempre que o processador faz um acesso memria, o endereo que coloca no barramento de endereos ser portanto um endereo virtual. Para efectuar esta leitura ou escrita da memria, ser necessrio primeiro traduzir este endereo virtual para um endereo fsico. Esta tarefa est a cargo de uma unidade especial no computador, a Unidade de Gesto de Memria, UGM (em ingls, Memory Management Unit, ou MMU). Logo, a sequncia de operaes no acesso memria ser2 : 1. a UCP coloca no barramento de endereos o endereo virtual onde pretende aceder; 2. a UGM traduz este endereo para um endereo fsico;
2 Em certos sistemas, a cache funciona directamente com os endereos virtuais, situao em que os pontos 2 e 3 esto invertidos

13.2. HIERARQUIA DE MEMRIA

247

3. realizado um acesso cache para testar se este endereo fsico l se encontra; caso se encontre na cache, o acesso de leitura ou escrita termina aqui; 4. caso contrrio, realizado um acesso memria primria. Naturalmente, como o espao virtual muito maior que o espao fsico, nem todas as posies de memria virtuais tero um correspondente endereo fsico. Neste caso, no possvel realizar a traduo pela UGM, sendo necessrio fazer um acesso ao disco, local onde se encontra armazenado o espao de endereamento virtual que no cabe em memria primria. Neste acesso ao disco, transferem-se para memria primria os dados correspondentes aos endereos virtuais acedidos. De facto, uma forma de olhar para este sistema pensar na memria primria como uma cache para o espao de endereamento virtual, sendo vlidas as observaes feitas na seco anterior. O tempo de acesso ao disco, da ordem das dezenas de milisegundos, muito superior ao tempo de acesso memria primria, que, como se viu, da ordem das dezenas de nanosegundos. Portanto, existe um factor de 1 milho de diferena entre os tempos de acesso memria primria e secundria. Assim, sempre que um dado endereo virtual no se encontra em memria primria h uma grande penalidade em termos de desempenho do processador. Felizmente, este impacto reduzido pois, devido aos princpios da localidade temporal e espacial, a taxa de faltas nos acessos a posies de memria virtuais muito baixa. Um valor tpico para a taxa de faltas da ordem de 0,0001%, ou seja, apenas um em cada um milho de acessos no se encontra em memria primria. Com os valores utilizados na Equao 13.1, tempos de acessos memria e cache de 70ns e 2ns, respectivamente, e uma taxa de sucesso na cache de 95%, e assumindo que o acesso ao disco demora 10ms (ou ns), com uma taxa de faltas de endereos virtuais de 0,0001% (ou ), o tempo de acesso memria passa a ser3 : Portanto, 95% das vezes o acesso continua a ser resolvido pela cache. Dos restantes 5% dos casos, em que necessrio fazer um acesso memria primria, 99,9999% das vezes o acesso feito apenas memria primria, e em apenas 0,0001% dos casos necessrio fazer um acesso ao disco. Como se pode observar, a grande penalidade dos acessos ao disco diluda pelo baixo nmero de acessos a este. De qualquer forma, sempre que acontece uma falta a UCP no ca, em geral, bloqueada espera da leitura do disco, o que poderia signicar o desperdcio de milhes de instrues. Nos computadores actuais, existem em geral vrios processos a executar-se concorrentemente. Isto signica que, embora a cada instante s se esteja a executar um destes processos, existe um conjunto de outros processos espera da sua vez. O tempo de processamento assim dividido, de forma controlada pelo sistema operativo, entre estes diferentes processos. Se o processo que se est a executar encontrar uma falta de endereo virtual, este processo bloqueado e colocado em execuo um dos processos em espera. Desta forma, o carregamento da informao do disco ocorre
3 Para simplicar, foi aqui propositadamente ignorado o tempo de traduo do endereo virtual para fsico por parte da UGM.

(13.2)

248

CAPTULO 13. SISTEMAS DE MEMRIA

durante a execuo til de outro processo, diminuindo-se signicativamente o despedcio do tempo de processamento.

13.3 Organizao de Sistemas de Cache


Como foi visto atrs, existem dois tipos de localidade de acessos: localidade temporal e localidade espacial. Para aproveitar a localidade temporal, a cache deve guardar dados que foram recentemente acedidos. Para aproveitar a localidade espacial, a cache dever guardar dados que se encontram prximos, em termos de endereo, de dados recentemente acedidos. As diversas alternativas que existem para arquitecturas de cache empregam diferentes solues para conseguir aproveitar, da melhor forma, cada uma destas caractersticas dos acessos. Para tornar mais clara a discusso que se segue, assuma-se um sistema com uma hierarquia de memria que consiste em apenas dois nveis: um primeiro nvel, a cache, e um segundo nvel, a memria primria. Na prtica, o nvel seguinte poder no corresponder efectivamente memria primria mas apenas a um segundo nvel de cache. Isso, no entanto, no afecta o comportamento do primeiro nvel de cache, que ser analisado em seguida. Ignore-se tambm para j a memria secundria, assumindo-se portanto que todos os endereos so endereos fsicos. Existem fundamentalmente quatro graus de liberdade que afectam a escolha de uma arquitectura para o sistema de cache. O primeiro a forma como o espao de endereamento da memria principal mapeado para o espao mais reduzido de endereamento da cache. Uma vez que a cache tem necessariamente um menor nmero de posies que a memria, h que denir um processo atravs do qual se possa mapear cada posio de memria primria para uma posio da cache. O segundo aspecto prende-se com o dimensionamento dos blocos de cache, que tem como objectivo fazer o melhor uso possvel da localidade espacial dos acessos a dados. Um bloco de cache representa a quantidade mnima de octetos que so carregados da memria principal para a cache, quando necessrio efectuar um carregamento. O terceiro aspecto a forma como so substitudos dados na cache, por forma a maximizar a explorao que feita das localidades temporais. O quarto aspecto est relacionado com a forma como as operaes de escrita so tratadas. Uma operao de escrita fundamentalmente diferente de uma operao de leitura porque o processador pode prosseguir a execuo de um programa sem que a operao de escrita tenha terminado e porque afecta dados em memria que podem ser acedidos por outros dispositivos.

13.3.1 Mapeamento de Dados em Caches


De uma forma geral, o mapeamento de um espao de endereamento de maior dimenso (que corresponde memria principal) para um espao de endereamento mais pequeno (a cache) baseia-se em considerar apenas um subconjunto dos bits de endereo. Um endereo de 32 bits dever assim ser visto como partido em duas partes: o ndice (index) e a etiqueta (tag). A Figura 13.13 ilustra a partio de um endereo de 32 bits em duas partes, para uma cache que disponibilize 1024 posies.

13.3. ORGANIZAO DE SISTEMAS DE CACHE

249

A dimenso da etiqueta depende do tamanho mximo de memria disponvel, e s corresponde aos restantes 22 bits porque se assumiu que o espao total de endereamento , como foi referido, de octetos. Quando feita uma leitura
31 Etiqueta

Figura 13.13: Campos etiqueta e ndice. a um dado endereo, o subconjunto de bits que corresponde ao ndice usado para enderear a cache. Nessa posio da cache estar guardado o valor que se encontra guardado na posio de memria pretendida. Porm, uma vez que um nmero de endereos diferentes ir corresponder a uma mesma posio na cache, importante poder distinguir se o dado guardado nessa posio da cache corresponde efectivamente posio de memria pretendida. Isso consegue-se guardando na cache no s os dados, mas tambm o campo etiqueta do endereo correspondente aos dados que l esto. Quando feito o acesso cache, usando apenas os bits de ndice, basta comparar o campo etiqueta da posio de memria a que se quer aceder com a etiqueta que est guardada na cache. Se as etiquetas forem iguais, o contedo dessa posio de cache o contedo pretendido. A Figura 13.14 ilustra de forma esquemtica o mecanismo de funcionamento de uma cache deste tipo.
Etiqueta ndice Etiquetas Dados

Figura 13.14: Esquema de funcionamento de uma cache de mapeamento directo. Se as etiquetas forem diferentes, os dados que esto na cache no so os pretendidos e ser necessrio efectuar uma leitura da memria principal para obter os dados correctos. Uma vez que, por causa da localidade temporal, estes

10 9 ndice

= Sucesso Dados

250

CAPTULO 13. SISTEMAS DE MEMRIA

dados tem grande probabilidade de vir a ser usados dentro de pouco tempo, h que enviar os dados no s para o processador, mas tambm para esta posio da cache, e actualizar o valor da etiqueta. Este tipo de mapeamento, a que se chama mapeamento directo, no representa a nica possibilidade de mapear o espao total de endereamento para um conjunto mais reduzido de posies de cache. As caches de mapeamento directo so as mais simples. No entanto, so as mais restritivas pois, como cada posio de memria s pode estar numa dada posio da cache, o desempenho ser muito mau se o programa aceder consecutivamente a duas posies de memria que, por azar, calhem na mesma posio da cache. Uma alternativa s caches de mapeamento directo so as caches completamente associativas. As caches associativas so uma consequncia da seguinte observao: o ideal, de um ponto de vista de exibilidade da cache, que uma dada posio de memria possa ser colocada em qualquer posio da cache. Neste caso, o endereo interpretado na totalidade como uma etiqueta, no existindo o campo ndice. A identicao da posio correcta da cache faz-se, unicamente atravs da comparao das etiquetas. Se existir uma posio da cache que contenha uma etiqueta com valor igual etiqueta do endereo que est a ser acedido, ento essa posio de cache contm o valor pretendido. Para realizar estas caches usam-se memrias associativas, cujo funcionamento diferente das habituais. Numa memria associativa o valor que usado para enderear a memria no corresponde a uma posio, mas sim ao contedo de uma posio de memria. Cada posio nas memrias associativas tem no s os dados, mas tambm uma etiqueta. O endereo que colocado entrada de uma memria associativa comparado simultaneamente com as etiquetas de todas as posies de memria, sendo disponibilizados os dados que correspondem posio onde a etiqueta coincide com o valor usado para enderear a memria. A Figura 13.15 ilustra o esquema interno de uma memria totalmente associativa.
Etiqueta

Etiquetas

Dados

Etiquetas

Dados

...

Etiquetas

Dados

= Dados

= Dados

= Dados

Sucesso

Dados

Figura 13.15: Esquema de uma memria totalmente associativa. Apesar de mais exveis, estas caches so mais lentas e mais complexas do que as de mapeamento directo devido necessidade de ser feita uma comparao simultnea de todas as posies da memria com a etiqueta do endereo.

13.3. ORGANIZAO DE SISTEMAS DE CACHE

251

Por essa razo, caches de dimenso signicativa no so, geralmente, completamente associativas. Existe, no entanto, uma forma de obter muitas das vantagens do mapeamento totalmente associativo mantendo a velocidade de acesso e o custo de uma cache de mapeamento directo. Uma cache de mapeamento associativo por conjuntos consiste num conjunto de caches de mapeamento directo, endereadas em paralelo. Todas elas so acedidas, em simultneo, com o campo ndice do endereo, mas apenas aquela que tiver a etiqueta correcta disponibiliza os dados. Se existirem caches de mapeamento directo em paralelo, uma dada posio de memria pode ser mapeada para qualquer uma caches, na posio que corresponde ao valor do ndice. A este tipo de cache chama-se cache de mapeamento associativo de vias. Estes trs tipos de caches podem ser vistos como pertencendo todas ao mesmo tipo, variando apenas o nmero de vias de associatividade. Numa cache de mapeamento directo, o nmero de vias de associatividade . Numa cache totalmente associativa, o nmero de vias de associatividade , onde o nmero de posies da cache. O endereo partido em dois campos, cuja dimenso varia com o tamanho das caches e o nmero de vias de associa, onde tividade. Em particular, o nmero de bits no ndice igual a a dimenso da cache e o nmero de vias de associatividade. Em caches que tenham diversas vias de associatividade, a escrita de novos dados em cache tem de ser antecedida da escolha da via que ir conter esses dados. Com efeito, qualquer das vias poder ser escolhida, dependendo a deciso da poltica de substituio, que ir ser estudada na Seco 13.3.3. Por exemplo, uma cache de 4096 posies usar 12 bits de ndice se for de mapeamento directo, 10 bits de ndice se for associativa de 4 vias e nenhum bit de ndice se for totalmente associativa. Neste ltimo caso, o nmero de vias de associatividade igual ao nmero de posies na cache.

13.3.2 Blocos de Cache


Uma cache em que apenas seja carregada uma posio de memria de cada vez no faz uso da localidade espacial. Com efeito, se, imediatamente a seguir for acedida pela primeira vez a posio de memria seguinte, esta no se encontrar em cache. No entanto, pelo princpio da localidade espacial, muito provvel que a posio de memria seja acedida em breve se acabou de ser feito um acesso posio de memria . As caches fazem uso desta caracterstica dos padres de acesso mapeando para a cache blocos de posies consecutivas de memria, e no posies individuais. Estes conjuntos de posies de memria, cuja dimenso varia de cache para cache, chamam-se blocos de cache ou linhas de cache. O uso de blocos de cache est tambm relacionado com uma maior ecincia nos acessos a memria primria, que, tipicamente, disponibilizam mecanismos de acesso mais rpidos para conjuntos de posies consecutivas. Quando uma cache funciona por blocos, que o caso mais comum, o endereo deve ser visto como dividido em trs partes: a etiqueta, o ndice e o deslocamento dentro do bloco. O campo deslocamento tem um nmero de bits suciente para enderear uma posio individual dentro de um bloco e usado para seleccionar qual das posies do bloco dever ser transferida para o processador.

252

CAPTULO 13. SISTEMAS DE MEMRIA

Tal como anteriormente, os bits do ndice so usados para seleccionar qual dos blocos poder conter a posio de memria pretendida. O nmero de blocos na cache passa a ser igual dimenso da cache dividida pela dimenso de cada bloco. O nmero de bits no ndice passa assim a ser igual a , onde a dimenso de cada bloco, e, tal como anteriormente, a dimenso da cache e o nmero de vias de associatividade. Uma cache com a mesma dimenso do exemplo anterior, com 4096 posies, que use blocos de 16 posies, usar apenas 8 bits de ndice se for de mapeamento directo. Com efeito, as 4096 posies correspondem a 256 blocos de 16 posies cada, sendo cada um dos blocos endereado pelo campo de 8 bits do ndice. A partio do endereo nos campos de etiqueta, ndice e deslocamento para este exemplo est ilustrada na Figura 13.16.
31 Etiqueta 12 11 ndice Deslocamento 4 3 0

Figura 13.16: Campos etiqueta, ndice e deslocamento para o exemplo do texto. A Figura 13.17 ilustra a correspondncia que existe entre as posies de uma memria primria de 64M e os blocos de uma cache com estas caractersticas. Note-se que a dimenso das etiquetas no se altera com o uso de blocos na
Etiqueta ndice Deslocamento

0000000h 0000001h 0000002h 0000003h

Cache Etiqueta
0 1

Dados
2 E F 00h 01h 02h

1FC0FE1h

0000h

Memria

1FC0FE2h 1FC0FE3h

3FFFFF9h 3FFFFFAh 3FFFFFBh 3FFFFFCh 3FFFFFDh 3FFFFFEh 3FFFFFFh 1FC0h 3FFFh FDh FEh FFh

Figura 13.17: Exemplo de mapeamento de uma memria de 64M octetos para uma cache de mapeamento directo de 4k octetos com blocos de 16 octetos.

256 blocos

13.3. ORGANIZAO DE SISTEMAS DE CACHE

253

cache, uma vez que o nmero de bits de ndice menor, mas os bits retirados ao ndice so utilizados para enderear dentro do bloco de cache. Porm, passa a ser necessria apenas uma etiqueta para cada conjunto de posies na cache, o que signica que existe uma penalizao mais pequena pela necessidade de guardar as etiquetas, alm dos dados propriamente ditos. agora possvel perceber a estrutura interna de uma cache de mapeamento directo, que se encontra representada na Figura 13.18. A cache consiste num conjunto de blocos, cada um dos quais contm diversas posies de memria e um conjunto de bits que guarda a etiqueta que corresponde ao referido bloco.
Etiqueta ndice Deslocamento Etiquetas Dados

Descodificador

= Multiplexador Sucesso Dados

Figura 13.18: Estrutura de uma cache de mapeamento directo. Os bit de endereo so usados de forma diferente, conforme o campo a que pertencem. Numa primeira fase, os bits de ndice so usados para enderear, atravs de um descodicador, o bloco de cache que poder conter os dados. Numa segunda fase, a etiqueta guardada junto ao bloco seleccionado comparada com a etiqueta do endereo pretendido. Se a comparao der um resultado positivo, a posio de memria pretendida reside no bloco escolhido, sendo seleccionada pelo campo deslocamento do endereo e enviada para o processador. Caches com mais vias de associatividade funcionam de forma semelhante. A Figura 13.19 descreve a estrutura de uma cache com duas vias de associatividade. Neste caso, os bits de ndice seleccionam dois blocos, um de cada um dos dois conjuntos de blocos. A comparao com as etiquetas feita em paralelo para cada uma das etiquetas nas posies indicadas pelo campo ndice. Apenas uma destas comparaes poder dar um resultado positivo, uma vez que a gesto da cache garante que uma posio de memria nunca est presente simultaneamente em mais do que uma posio da cache. O uso de buffers de trs-estados simplica a lgica que escolhe qual das vias dever enviar os

254
Etiqueta ndice

CAPTULO 13. SISTEMAS DE MEMRIA

Deslocamento

Etiquetas

Dados

Etiquetas

Dados

Descodificador

Multiplexador

Multiplexador

Codificador

Multiplexador

Hit

Dados

Figura 13.19: Estrutura de uma cache com duas vias de associatividade. dados para a cache. Se no for usada lgica trs-estados, ser necessrio usar um codicador cuja sada controla um multiplexador que selecciona a via que dever estar activa, como representado na Figura 13.19.

13.3.3 Polticas de Substituio


Nas caches de mapeamento directo no existe necessidade de tomar qualquer deciso quando uma dada posio de memria no est presente na cache. Com efeito, uma vez que se pretendem guardar na cache os dados mais recentemente acedidos, necessrio fazer uma substituio dos dados na cache sempre que existe uma falta na cache. Uma vez que os dados pretendidos s podem ir para uma posio na cache, o contedo dessa posio ter de ser substitudo. Nas caches que tm duas ou mais vias de associatividade, h que decidir em qual das vias iro ser guardados os novos dados, j que isso implica deitar fora dados que j esto na cache. Em geral, a melhor soluo consiste em substituir os dados que foram acedidos h mais tempo, pois de acordo com o princpio da localidade temporal, estes sero os que tm menos probabilidade de virem a ser acedidos num futuro prximo. Esta poltica de substituio denominada de LRU (do ingls, least recently used). No entanto, em caches com muitas vias de associatividade, esta poltica difcil de implementar em hardware, uma vez que obrigaria a manter informao sobre a altura em que foi acedido cada um dos blocos de memria e a determinar, de forma muito rpida, qual a via usada h mais tempo. Existem diversas alternativas para resoluo deste problema. Uma possibilidade, que na prtica tem um comportamento bom, simplesmente selec-

13.3. ORGANIZAO DE SISTEMAS DE CACHE

255

cionar de forma aleatria uma das vias como aquela que contm o bloco que dever ser substitudo. Uma outra soluo bastante ecaz, mas ligeiramente mais complexa, consiste em manter um contador, para cada conjunto de blocos de cache, que incrementado sempre que o seu contedo igual ao nmero do bloco que acedido. Desta forma, blocos frequentemente acedidos tm menos probabilidade de serem substitudos, uma vez que o contador permanece pouco tempo a apontar para eles.

13.3.4 Polticas de Escrita


At agora analisou-se o comportamento de uma cache quando o processador executa instrues de leitura. Nas operaes de escrita, os compromissos so signicativamente diferentes. Existem, fundamentalmente, dois graus de liberdade no que respeita s operaes de escrita. O primeiro grau de liberdade prende-se com a forma como tratada uma operao de escrita quando a posio de memria que escrita se encontra em cache. Nas caches write-back, a escrita feita somente para a cache. Nas caches write-through, a escrita feita simultaneamente na cache e na memria. Uma vantagem das caches write-back que a escrita executada velocidade da cache, no havendo necessidade de esperar pela escrita em memria. Esta vantagem, no entanto, no to grande como possa parecer, uma vez que o processador no precisa de car parado espera que termine a operao de escrita, ao contrrio do que acontece com uma operao de leitura. Uma outra vantagem das caches write-back a possvel reduo do trfego no barramento causado por escritas na memria, uma vez que duas escritas para uma posio na cache no geram escritas separadas na memria. Porm, a esta vantagem corresponde uma desvantagem na altura em que necessrio substituir o bloco de cache, uma vez que a memria tem de ser actualizada com os dados alterados que esto na cache. Isto pode atrasar signicativamente a operao de leitura que causa a substituio do bloco, ou, em alternativa, torna a estrutura da cache consideravelmente mais complicada. O segundo grau de liberdade est relacionado com a aco a tomar quando existe uma escrita para um bloco que no est em cache. Pode ter-se como poltica que o bloco dever ser copiado de memria para cache (caches writeallocate) ou, pelo contrrio, que os dados devero ser escritos directamente em memria, sem que o bloco seja copiado para cache. Geralmente, as caches write-back so do tipo write-allocate, enquanto que muitas das caches write-through so do tipo no-write-allocate. No entanto, outras opes so possveis, sendo necessrio analisar o impacto no desempenho de cada uma das opes, face ao perl tpico de execuo dos programas.

13.3.5 Bits de Controlo


Num bloco de cache, para alm dos dados propriamente ditos e da etiqueta, existe necessariamente um conjunto de bits de controlo que mantm informao diversa. No caso de caches write-back, um desses bits necessariamente o dirty bit. Este bit indica se os dados nesse bloco de cache foram alterados e devero ser escritos para a memria quando esse bloco de cache for necessrio para outros dados.

256

CAPTULO 13. SISTEMAS DE MEMRIA

Outro bit de controlo presente em todas as caches o valid bit, que indica se os dados que esto nessa posio da cache so vlidos ou no. Existem diversas razes pelas quais os dados podem deixar de estar vlidos. O computador pode estar a comear a executar um programa, situao em que todos os dados esto invlidos. Podem tambm existir outros dispositivos que alterem posies de memria, situao em que a cpia em cache ca invlida. Em sistemas operativos que possam executar mais de um programa de cada vez (multi-tasking), os blocos de cache podero tambm ser marcados como invlidos quando existe uma mudana de contexto. Podero existir outros bits de controlo, que controlam o funcionamento da cache em outros aspectos. Por exemplo, podero existir bits de controlo que permitem realizar a poltica de substituio, ou bits que permitam implementar mecanismos de proteco de memria. O nmero e a funo desses bits varia de sistema para sistema.

13.4 Memria Virtual


As caches, que so os elementos da hierarquia de memria mais perto do processador, tm como objectivo primrio acelerar a velocidade de acesso a dados por parte do processador. No outro extremo da hierarquia existe a memria secundria, tipicamente constituda por discos magnticos, cuja funo aumentar a dimenso da memria vista pelo processador para alm da dimenso da memria primria instalada no computador. A memria principal e o disco so dispositivos bastante diferentes. No entanto, em muitos sistemas, transparente para o processador (e para o programador) qual a localizao fsica dos dados que so utilizados. Um programa pode aceder a dados guardados num espao de endereamento que muito maior que a memria primria disponvel. A disponibilizao de um espao virtual de endereamento maior que o sicamente disponvel conseguida utilizando endereos virtuais. Quando um sistema disponibiliza memria virtual, todos os acessos feitos pelo processador memria so feitos com endereos virtuais. Este sistemas dispem de uma Unidade de Gesto de Memria, UGM (em ingls, Memory Management Unit, ou MMU) que traduz o endereo virtual para um endereo fsico de memria, caso o endereo virtual corresponda a uma posio de memria. Se o endereo virtual corresponder a uma posio que se encontra, nesse momento, guardada em disco, o sistema vai buscar essa posio de memria ao disco e copia-o para a memria principal. Para facilitar esta traduo de endereos, e para optimizar a transferncia de dados de e para memria secundria, os espaos virtual e fsico so divididos em grupos contguos de endereos, a que se chamam, nesta caso, pginas. A dimenso de uma pgina, naturalmente igual nos espaos virtuais e fsicos, , tipicamente, signicativamente maior que a dimenso de um bloco de cache, uma vez que a transferncia de dados entre memria secundria e primria incorre numa penalizao muito maior do que a transferncia entre memria principal e cache. A dimenso de uma pgina de memria virtual varia, tipicamente, entre 1k octetos e 16k octetos, dependendo do sistema. Sempre que feito um acesso a um endereo virtual, a UGM verica se a pgina correspondente a esse endereo est em memria ou no. Se no es-

13.4. MEMRIA VIRTUAL

257

tiver, diz-se que houve uma falta de pgina (em ingls, page fault) e a pgina carregada para memria. O carregamento de uma pgina, desencadeado atravs da execuo de uma rotina especca para o efeito, pode demorar diversos milisegundos, tempo suciente para executar milhes de instrues num processador moderno. Isto signica que o processador ca livre para outras tarefas, tais como executar outros programas (em sistemas multi-tarefa) ou atender a pedidos pendentes. O processo de traduo de endereos virtuais para endereos fsicos usa diversas estruturas fsicas e lgicas no seu funcionamento. As mais importantes so a tabela de pginas e a TLB (do ingls, Translation Look-Aside Buffer).

13.4.1 Tabelas de Pginas


Um dado endereo virtual especica uma posio no espao de endereamento virtual. Tal como nas caches, este endereo pode ser decomposto em diversos campos, que, no caso de memria virtual, so dois: o nmero da pgina e o deslocamento dentro da pgina. O endereo fsico pode tambm ser visto como repartido nestes dois campos. Uma vez que as pginas tm a mesma dimenso, o deslocamento dentro da pgina igual no endereo fsico e no endereo virtual. J o nmero de pgina pode exigir um nmero de bits diferente, uma vez que as dimenses do espao de endereamento fsico e virtual so, tipicamente, bastante diferentes. Desta forma, a traduo de endereos virtuais para fsicos consiste, fundamentalmente, em traduzir o nmero da pgina virtual para um nmero de pgina fsica. Tabela de Pginas Plana O esquema mais simples de traduo baseia-se no uso de uma tabela (ver Figura 13.20), com um nmero de entradas igual ao nmero de pginas virtuais. Em cada entrada dessa tabela encontra-se guardado um descritor de pgina (em ingls, Page Table Entries ou PTE) que inclui informao sobre o endereo fsico da pgina, ou informao que permite localizar a referida pgina em disco, possivelmente atravs do uso de tabelas auxiliares. Quando feito um acesso a uma pgina de memria virtual, a tabela consultada para vericar se a referida pgina existe em memria fsica. Em caso armativo, o endereo fsico construdo atravs da concatenao da entrada correspondente na tabela com o deslocamento dentro de pgina. Em caso negativo, existe uma falta de pgina, e chamada uma sub-rotina do sistema operativo para copiar a pgina para memria principal. Este esquema simples funciona bem apenas quando o espao de endereamento virtual no demasiado grande. Considere-se, por exemplo, um sistema que disponha de um espao de endereamento virtual de octetos e uma memria fsica de 256M octetos. Assuma-se ainda que a dimenso das pginas de k octetos. Este sistema dispe de um total de ( ) pginas virtuais, o que signica que a tabela de pginas tem de ter entradas, qualquer que seja a quantidade de memria virtual que esteja a ser utilizada por um programa. Cada entrada na tabela de pginas ter de ter a dimenso suciente para identicar qual das pginas em memria fsica corresponde pgina virtual

258
Nmero da pgina virtual

CAPTULO 13. SISTEMAS DE MEMRIA


Deslocamento

Tabela de pginas
00000h 00001h 00002h 00003h 0001h 0003h 0000h 0002h

Memria Primria
0000 000h 0001 000h 0002 000h

. . .

+
NULL

0003 000h

...

0003 FFFh FFFE 000h FFFF 000h

FFFFEh FFFFFh

FFFFh FFFEh

Figura 13.20: Tabela para traduo de endereos virtuais. que se pretende aceder. A memria fsica tem capacidade para pginas ( ). Por simplicidade, admita-se que todas as pginas so alinhadas em memria, o que signica que o primeiro endereo de cada pgina tem os ltimos bits a . Neste caso, basta guardar os bits mais signicativos do endereo na tabela de pginas, logo cada descritor de pgina necessita de, pelo menos, dois octetos. Isto signica que uma tabela desta dimenso ir ocupar um espao de memria pelo menos igual a M octetos, qualquer que seja a dimenso do programa que est a ser executado. Isto representa um uso muito ineciente de recursos, especialmente no caso em que o programa que est a ser executado usa pouca memria. Tabela de Pginas Hierrquica A utilizao de tabelas hierrquicas elimina a inecincia que foi apontada nas tabelas planas, tornando, no entanto, o acesso aos dados um pouco mais lento. Numa tabela de pginas hierrquica de dois nveis, o primeiro nvel da tabela de pginas constitudo por uma nica tabela, denominada de directrio. O directrio contm referncias para tabelas do segundo nvel que contm, essas sim, os endereos fsicos das pginas. Este esquema, ilustrado na Figura 13.21, obriga a que sejam feitos dois acessos memria para recuperar o endereo fsico das pginas. Em compensao, as tabelas do segundo nvel apenas precisam de estar presentes quando as correspondentes pginas de memria esto efectivamente a ser utilizadas. Considere-se o mesmo caso do exemplo anterior. Numa tabela plana, a ta

13.4. MEMRIA VIRTUAL


Nmero da pgina virtual ndice no directrio
31 22 21

259

ndice na tabela

Deslocamento
12 11 0

Tabelas 000h 001h 002h Directrio 000h 001h 002h 3FEh 3FFh 0002h 0001h 0003h

Memria Primria
0000 000h 0001 000h 0002 000h

3FEh 3FFh 000h 001h 002h

. . .
FFFEh FFFFh

0003 000h 0003 FFFh

...
FFFE 000h FFFF 000h

3FEh 3FFh

NULL NULL

Figura 13.21: Tabela hierrquica de dois nveis para traduo de endereos virtuais. bela de pginas para qualquer programa ocuparia, como se viu, M octetos. No caso de uma tabela hierrquica, os bits de endereo virtual da pgina seriam divididos em dois grupos de 10 bits cada. Os primeiros 10 bits, mais signicativos, endereariam a tabela do primeiro nvel, onde estariam guardados os endereos (fsicos) das tabelas do segundo nvel. Estas seriam endereadas com os 10 bits menos signicativos do nmero de pgina virtual. Cada uma destas tabelas teria entradas, cada uma das quais com o descritor de pgina que, como se observou atrs, ocuparia pelo menos dois octetos para o nmero de pgina fsica. Para ilustrar a vantagem das tabelas hierrquicas, considere um hipottico programa que use apenas 6M octetos, contguos em memria virtual, a partir do endereo 00000000h. Este programa iria utilizar apenas pginas de memria. Os endereos de todas estas pginas encontramse nas duas primeiras tabela do segundo nvel. Isto signica que apenas necessrio guardar a tabela de nvel (o directrio) e duas tabelas de nvel , ocupando um total de octetos, ou seja, k octetos, em vez dos M octetos necessrios quando se usa uma tabela de pginas plana. O conceito de tabelas de pginas hierrquicas pode ser generalizado para tabelas hierrquicas com mais nveis, o que permite espaos de endereamento virtual de grande dimenso. Neste caso, o directrio funciona como anteriormente, enquanto que o ltimo nvel continua a manter os endereos fsicos das pginas. Os nveis intermdios permitem aceder s tabelas do nvel seguinte.

260

CAPTULO 13. SISTEMAS DE MEMRIA

Em geral, trs nveis de tabelas so sucientes para todos os sistemas, independentemente da dimenso da memria virtual e fsica do sistema, embora existam arquitecturas que disponibilizam j, para futuras realizaes, a utilizao de quatro nveis de tabelas. Regra geral, com a excepo do directrio, as tabelas de pginas tm a mesma dimenso de uma pgina. Esta situao permite que tabelas de traduo que no estejam a ser utilizadas possam ser guardadas em disco, tal como as pginas de dados e cdigo, reduzindo a fraco de memria ocupada pelas tabelas de traduo. Existem tambm sistemas que utilizam outras formas de mapeamento de tabelas de pginas, denominadas de tabelas invertidas. No entanto, esta tcnica, pouco utilizada em sistemas recentes, no ser estudada neste texto.

13.4.2 Poltica de Substituio


Tal como no projecto de caches, existem diversas opes a tomar quando se projecta um sistema de memria virtual. As opes a tomar esto relacionadas com as questes que j foram estudadas no projecto de sistemas de caches: polticas de substituio, mecanismos de proteco, e manuteno da coerncia entre memria e disco em operaes de escrita. A gesto destes mecanismos , em geral, da responsabilidade do sistema operativo. Sempre que h um acesso que no encontra a pgina desejada em memria primria, ou seja, sempre que ocorre uma falta de pgina, chamada uma rotina do sistema operativo que copia do disco essa pgina para uma dada zona da memria primria. Esta operao implica muitas vezes copiar para disco a pgina que l se encontra. Uma vez que copiar uma pgina entre disco e memria uma operao demorada, justica-se utilizar uma poltica de substituio de pginas muito mais sosticada do que em caches. O facto desta deciso ser realizada pelo sistema operativo, portanto, em software, permite manter para cada pgina de memria informao detalhada sobre os acessos mais recentes, e decidir qual pgina deve ser substituda usando um algoritmo mais complexo. Em particular, possvel utilizar o algoritmo LRU, que envia para disco a pgina menos recentemente acedida, um mtodo que tipicamente no utilizvel para gerir a substituio de blocos de cache. O uso continuado e intenso de uma quantidade de memria muito superior ao disponvel em memria primria leva a uma situao em que necessrio enviar continuamente pginas de memria para disco e vice-versa, conhecida como thrashing. Nesta situao, o computador continua a executar o programa pretendido, mas passa a maior parte do tempo (por vezes, mais de 99% do tempo) a gerir o sistema de memria virtual, levando a um aparente bloqueio do sistema. Esta situao , em geral, de evitar.

13.4.3 Poltica de Escrita


Devido tambm ao elevado tempo de acesso ao disco, um sistema de memria virtual com uma poltica de escrita write-through no tipicamente realizvel. Assim, todas as escritas so feitas na memria primria, numa abordagem semelhante poltica write-back write-allocate das caches. Esta poltica implica a

13.4. MEMRIA VIRTUAL

261

existncia de um bit nos descritores de pgina das tabelas de traduo que indica se essa pgina foi alterada em memria ou no, chamado aqui tambm de dirty bit. Na substituio de uma dada pgina, este bit testado. Se estiver a 0, isso indica que a pgina no foi alterada desde que foi trazida para memria primria. Neste caso, a cpia em disco continua vlida, signicando que se pode simplesmente escrever por cima da cpia da pgina em memria primria. Se, pelo contrrio, esse bit estiver a 1, ento antes de escrever por cima da pgina necessrio escrev-la para disco.

13.4.4 Bits de Controlo


Alm do endereo fsico da pgina, os descritores de pgina incluem um conjunto de bits que indicam diversas propriedades da pgina. Embora a informao extra que guardada varie de sistema para sistema, os seguintes bits esto, tipicamente, sempre presentes: Um bit que indica se o endereo fsico vlido. Caso no seja, isso signica que a pgina est em disco e que ter de ser carregada para memria principal antes de o seu contedo ser utilizado pelo processador. Um bit que indica se a pgina foi alterada enquanto em memria, o que implica que dever ser modicada em disco, quando for substituda. Bits de proteco, que indicam se a pgina acessvel para escrita, leitura e execuo, em modo utilizador. Bits de proteco, que indicam se a pgina acessvel para escrita, leitura e execuo, em modo sistema. Um bit que indica que a pgina foi acedida recentemente.

Outros campos associados a cada pgina de memria existem e so utilizados pelo sistema operativo para operaes especcas. Note-se o paralelismo que existe entre a informao que guardada para pginas de memria virtual e para blocos de cache. Em ambos os casos, uma memria mais rpida funciona como armazenamento temporrio de uma memria mais vasta mas mais lenta, e, em ambos os casos, necessrio guardar informao que permita decidir quais so os dados que devem ser substitudos ou copiados para a memria mais lenta.

13.4.5 Translation Lookaside Buffers


Se cada acesso a memria passasse por um processo de traduo que envolvesse acessos aos diversos nveis da tabela de pginas, o impacto no desempenho do sistema seria demasiado grande, fazendo com que um acesso a memria num sistema de memria virtual fosse trs ou quatro vezes mais lento que num sistema sem memria virtual. Para contornar esta diculdade, usa-se uma pequena memria cache, chamada Translation Lookaside Buffer, que devolve ao processador o endereo fsico que corresponde a uma dada pgina virtual. Dado que cada pgina corresponde a um nmero elevado de posies de memria, mesmo uma pequena

262

CAPTULO 13. SISTEMAS DE MEMRIA

cache ir ter uma taxa de sucesso muito elevada, pois o nmero de pginas diferentes que so usadas num dado troo de programa tipicamente pequeno, dada a propriedade da localidade dos acessos. A existncia desta cache permite evitar, na maior parte das tradues, os acessos tabela de pginas que so necessariamente mais lentos.

13.4.6 Interligao da Memria Virtual com as Caches


Em geral, o sistema de memria virtual co-existe com as caches, pelo que o carregamento dos dados a partir de um dado endereo desencadeia, efectivamente dois processos: a procura desses dados numa das caches, e a traduo dos endereos virtuais para endereos fsicos. Existem fundamentalmente duas possibilidades de interligar o sistema de cache com o sistema de memria virtual. A primeira alternativa enderea as caches com endereos virtuais enquanto que a segunda utiliza endereos fsicos. No primeiro caso, os endereos que so enviados para as caches so os endereos emitidos pelo processador, antes de qualquer processo de traduo. Esta alternativa tem a vantagem de tornar mais rpido o acesso aos dados, uma vez que no necessrio traduzir os endereos antes de enderear as caches. Uma vez que as caches contm os dados que correspondem a um dado endereo virtual, o seu contedo tem de ser invalidado sempre que exista uma alterao do mapeamento de memria virtual, por exemplo, quando muda o processo que est a ser executado. No segundo caso, o endereo virtual , em primeiro lugar, traduzido para um endereo fsico, que usado para enderear as caches. O acesso s caches mais lento, mas, em compensao, existe um mapeamento mais directo entre os dados que se encontram em cache e os dados que se encontram em memria. Se as pginas de memria se encontrarem alinhadas em endereos mltiplos do tamanho da pgina, os bits que correspondem ao deslocamento dentro da pgina no so alterados no processo de traduo. As somas que se encontram indicadas nos esquemas de traduo so, assim, realizadas como concatenaes dos bits devolvidos pela TLB e dos bits de deslocamento. A Figura 13.22 ilustra o esquema de interligao entre a TLB e uma cache, endereada sicamente, numa situao em que as pginas se encontram alinhadas em memria. Uma vez que a primeira fase de acesso a uma cache que no seja totalmente associativa utiliza apenas os bits de ndice para escolher o bloco onde esto os dados, poder ser possvel iniciar o acesso cache antes de o ndice da tabela ter sido traduzido pela TLB. Para tal, basta que o nmero de bits de ndice e de deslocamento usados pela cache no seja superior ao nmero de bits necessrios para especicar o deslocamento dentro de cada pgina de memria virtual. A Figura 13.23 representa, de forma muito simplicada, o sistema de memria de um processador de 32 bits, com memria virtual, TLB e um nvel de cache endereada sicamente. Neste exemplo, o processador tem um espao de endereamento virtual de 4G octetos ( octetos) com pginas de 4k octetos. O endereo de pgina enviado para uma TLB de mapeamento directo, com 16 entradas, que envia o endereo fsico da pgina para uma cache de 4k octetos. Este endereo separado em 4 componentes: 20 bits ( ) para a etiqueta, 8 bits ( ) para

13.4. MEMRIA VIRTUAL


Nmero de pgina Deslocamento Dados

263

TLB
ndice

CACHE

Etiqueta

Figura 13.22: Interligao entre a TLB e a cache. o ndice e 2 bits ( ) para o deslocamento dentro do bloco. Os dois bits menos signicativos ( e ) no so utilizados, sendo apenas usados para seleccionar o octeto dentro da palavra, o que no foi considerado neste esquema. Como o nmero de bits necessrios para especicar o deslocamento dentro de cada pgina de 12, e as pginas se encontram alinhadas em memria, a seleco do bloco de cache pode ser iniciada (usando as linhas de endereo a ) ainda antes da TLB traduzir o endereo da pgina de virtual para fsico. Se os dados estiverem presentes em cache, estes so enviados directamente para o processador. Caso contrrio, o controlador da memria primria verica que a no foi activada, e desencadeia um acesso memria primria de linha de 64M octetos. Este acesso feito activando as linhas de controlo das memrias dinmicas e os respectivos endereos de linhas e colunas. Neste esquema muito simplicado, no esto ilustrados os circuitos utilizados para as operaes de escrita na cache de dados e na TLB, nem os diversos sinais de controlo necessrios para controlo das memrias dinmicas (DIMM). O leitor poder no entanto observar que a complexidade de um sistema de memria rivaliza com a do prprio processador, especialmente se se considerar que, em sistemas reais, existem diversos nveis de caches, caches separadas para endereos e dados, arquitecturas complexas de memria primria e interligao dos barramentos de dados com dispositivos de entrada/sada.

Sumrio
Neste captulo, estudaram-se os diversos componentes do sistema de memria de um processador tpico. Foi analisada a forma como a memria primria constituda a partir de mdulos simples, interligados entre si por forma a permitir a construo da estrutura de memria desejada. Cada um destes mdulos corresponde a uma dada parte da memria visvel pelo processador, podendo a organizao lgica dos mdulos ser descrita pelo mapa de memria do processador.

264

CAPTULO 13. SISTEMAS DE MEMRIA

UCP

Pgina 20

Deslocamento

TLB Hit

Ready

12 16 = 32 32 8 Indice v d Etiqueta Dados 20

CACHE

20 2 Etiqueta Deslocamento =
En Sel MUX

32 Hit

MEMRIA
Controlo Controlador 12 Endereos DIMM DIMM DIMM DIMM

32 32 32 32

Figura 13.23: Sistema de memria de um processador de 32 bits.

Foi tambm estudada a forma como memrias de diversas velocidades e capacidades so interligadas entre si numa hierarquia de memria, sendo as memrias mais rpidas e de menor capacidade acedidas em primeiro lugar, por forma a diminuir o tempo mdio de acesso a memria. Finalmente, foram estudados os sistemas de memria virtual, que permi-

Dados

TLB

v w e d Etiq Pgina

Cache Hit

13.4. MEMRIA VIRTUAL

265

tem usar a memria secundria para alargar o espao de endereamento utilizvel para alm do que seria possvel se apenas se usasse a memria primria.

266

CAPTULO 13. SISTEMAS DE MEMRIA

Captulo 14

Entradas, Sadas e Comunicaes


Nos captulos anteriores deniram-se dois dos componentes principais de um computador, a unidade central de processamento e o sistema de memria. Embora todo o processamento se efectue entre estas duas unidades, tal seria de utilidade reduzida caso no existisse alguma forma de interaco com o mundo exterior, que por um lado permita introduzir os dados a processar e por outro lado torne acessvel os resultados. Nos primeiros computadores, esta interface era rudimentar. As entradas eram especicadas por interruptores que deniam o seu valor bit a bit e o resultado era visualizado em lmpadas que indicavam o seu valor tambm ao nvel do bit. Desde ento houve grande evoluo no s nas interfaces pessoamquina como nas interfaces entre diferentes mquinas. O desenvolvimento de novas formas de interaco com os computadores cada vez mais um assunto de intensa investigao. O termo perifricos normalmente utilizado para designar de forma genrica os dispositivos de entrada e sada de um computador. Hoje em dia existe uma grande diversidade de perifricos, com caractersticas muito diferentes a variados nveis. Para simplicar a interface do lado da UCP o acesso aos diferentes perifricos denido como tendo o mesmo protocolo de um acesso a uma posio de memria (Seco 13.1.3). Devido ao protocolo de acesso ser o mesmo, indiferente para o processador aceder a uma posio de memria ou a um perifrico, possibilitando, portanto, o mapear no espao de memria dos diferentes perifricos (Seco 14.1). Esta simplicao do lado do processador implica a existncia do lado de cada perifrico de um circuito de interface que converta a informao proveniente do perifrico para o protocolo utilizado no acesso memria. Neste captulo comea-se por descrever o funcionamento de alguns dos perifricos mais conhecidos. Em seguida, apresentam-se diferentes modos de comunicao entre o computador e os perifricos. Finalmente, discutem-se as formas como se transfere a informao para perifricos com diferentes ritmos de transmisso de informao. 267

268

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

14.1 Arquitectura de Entradas/Sadas


A organizao do sistema de entradas e sadas num computador um aspecto de central importncia na denio da sua arquitectura. Como j foi anteriormente referido, um computador est organizado em torno de um sistema de barramentos que permite ao processador trocar informao com a memria e com todos os perifricos do sistema. Globalmente essa arquitectura est representada na Figura 14.1.
Barramento de Endereos Barramento de Dados Processador Barramento de Controlo

Interface Memria

Interface

...

Interface

Perifrico

Perifrico

Perifrico

Figura 14.1: Representao geral da arquitectura de um computador. O barramento de endereos permite ao processador indicar a posio de memria ou o perifrico com que pretende interagir. Trata-se, numa abordagem inicial, de um barramento unidireccional em que a origem sempre o processador. O barramento de dados permite a circulao dos dados a transferir entre o processador e a memria ou os perifricos. Trata-se de um barramento bidireccional em que o processador pode ser a origem dos dados, quando se pretende escrever dados na memria ou transferi-los para perifricos de sada, ou o destino dos dados com origem na memria ou nos perifricos de entrada. O barramento de controlo inclui todas as linhas que permitem gerir e coordenar a transferncia. Nesse barramento esto presentes linhas que permitem indicar a direco da transferncia, sincronizar a transferncia, denir a dimenso dos dados a transferir, determinar se se trata de transferncias de dados envolvendo a memria ou os perifricos, sinalizar pedidos de ateno dos perifricos e outras funes de controlo. As linhas efectivamente presentes so, contudo, muito dependentes das solues arquitecturais utilizadas.

14.1.1 Interfaces
A ligao dos perifricos , na maior parte dos casos, assegurada por um mdulo que pode assumir diversos graus de complexidade, denominado interface. A interface existe para isolar o processador das particularidades dos perifricos. De entre as funcionalidades pedidas interface, podem ser referidas, nesta fase, as seguintes: Promover as adaptaes necessrias do ponto de vista fsico, nomeadamente ao nvel das tenses e correntes envolvidas na comunicao entre o processador e os perifricos.

14.1. ARQUITECTURA DE ENTRADAS/SADAS


269

Permitir esconder ao processador a velocidade dos perifricos, tipicamente mais baixa que a do processador. Descodicar os endereos presentes no respectivo barramento por forma a identicar uma transferncia de dados que envolve o perifrico a que est ligada. Controlar o perifrico nos casos em que podem existir vrios modos de funcionamento. Controlar a comunicao fsica com o perifrico atravs de lgica adequada, diminuindo, assim as tarefas a desempenhar pelo processador. Sinalizar ao processador, atravs do barramento de controlo, a presena de dados provenientes do perifrico ou a disponibilidade deste para receber dados atravs do sistema de interrupes do computador. Este tema ser tratado adiante na Seco 14.5.2 Permitir ao perifrico participar em modos de transferncia mais avanados com envolvimento reduzido do processador como o caso do acesso directo memria que ser analisado na Seco 14.5.3.

A estrutura de uma interface est ilustrada na Figura 14.2.


Barramento de Endereos Barramento de Dados Barramento de Controlo

Descodificao de endereos

...
Registos

Controlo

Comunicao com o Perifrico

Figura 14.2: Representao geral da arquitectura de uma interface. No caso de perifricos uni-direccionais, isto , s de sada ou entrada, como uma impressora, ou um rato, a interface possui um registo onde o processador escreve os dados a enviar para o perifrico ou onde l os dados provenientes do perifrico. Como bvio em perifricos bi-direccionais, como por exemplo, um modem, de esperar a existncia de dois registos, um em que o processador escreve os dados a enviar e outro em que o processador l os dados recebidos. Estes registos, a unidade mais simples de entrada/sada enderevel pelo processador, tm o nome de portos.

270

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

O facto dos dados serem escritos nestes portos e deles lidos, em vez de tal ser feito no perifrico propriamente dito permite que a operao seja feita velocidade possvel por parte do processador. Se, de facto, a escrita ou a leitura fossem feitas envolvendo directamente o perifrico, o processador teria que realizar o seu ciclo de leitura ou escrita velocidade permitida pelo perifrico, tipicamente algumas ordens de grandeza abaixo da velocidade possvel nos barramentos internos. Muitas interfaces, possuem, para alm dos portos de dados, isto , os portos destinados a transferir dados, alguns outros portos onde o processador pode escrever informaes de controlo que permitem congurar determinados aspectos do funcionamento do perifrico ou da comunicao com ele, bem como ler informao sobre o estado do perifrico, da ligao ou da prpria interface. Trata-se, respectivamente, de portos de controlo e portos de estado. Cada um destes portos naturalmente acedido atravs de endereos diferentes. Conceptualmente o mdulo de descodicao de endereos responsvel por identicar a presena no barramento de dados do endereo correspondente a cada um dos registos presentes na interface por forma a que o porto seleccionado seja escrito ou lido conforme a aco especicada no barramento de controlo. Na prtica, as interfaces s descodicam os bits menos signicativos do barramento de endereos em nmero necessrio para enderear os diversos portos internos da interface, sejam portos de dados, controlo ou estado. Estes portos tm, em geral, endereos seguidos. Tal como no caso da descodicao de endereos de memria parte da descodicao realizada exteriormente s interfaces e em comum para todas elas. O mdulo de controlo da interface coordena as diversas aces desta com relevo para a gesto da comunicao com o perifrico e, nos casos em que isso relevante, nas transferncias implicando o sistema de interrupes (Seco 14.5.2) ou o acesso directo memria (Seco 14.5.3).

14.1.2 Tipos de Endereamento dos Portos


Como se referiu, o endereamento , de forma geral, uma funo dividida entre um bloco de descodicao de endereos externo s interfaces, muitas vezes partilhado com a descodicao de memria, e alguma descodicao interna interface. Na Figura 14.3 exemplica-se este tipo de estrutura. Repare-se que a descodicao feita primariamente por um circuito de descodicao externo interface que actuar uma linha de enable do descodicador dentro da interface. Desse modo possvel conseguir que a interface s possa estar activa num determinado leque de endereos. Internamente, para enderear cada um dos portos, existe um segundo circuito de descodicao que descodica bits de endereo, sendo . Em geral, esses bits correspondem aos bits menos signicativos do barramento de endereos. Na Figura 14.3 representa-se uma interface com portos dos quais so representados o porto e o porto , sendo o primeiro um porto de sada e o segundo um porto de entrada. H trs formas fundamentais de organizar o endereamento dos perifricos. Nas consideraes anteriores tem sido assumido que as interfaces dos perifricos partilham com a memria os barramentos de endereos, dados e controlo. Tal no estritamente necessrio. De facto, seria at conceptualmente interessante considerar a existncia de um segundo conjunto de barramentos

14.1. ARQUITECTURA DE ENTRADAS/SADAS


Barramento de Endereos Barramento de Dados Barramento de Controlo Ai a An-1 Descodificao Externa A0 a Ai-1

271

...
Interface A En Descodificao Interna 0 n-1 Interface X

...
Controlo Escrita Leitura

...

Perifrico X Porto 0

...

OEn Porto n-1

Perifrico A

Figura 14.3: Descodicao de endereos para acesso aos portos de uma interface. para as interfaces de entrada/sada sicamente separado dos barramentos de memria. Essa opo permitiria um aumento do desempenho do computador, uma vez que, simultaneamente com uma comunicao com um perifrico possvel manter os acessos memria, quer para transferir dados, quer para ler instrues. Esta opo, obriga, porm, para ser til, a uma nova concepo do processador que passaria a ter uma capacidade de processamento paralelo que muito complicaria a sua arquitectura. Essa no uma soluo frequente. No entanto, o uso de um processador dedicado apenas s entradas/sadas, partilhando a memria com o processador principal, permite levar prtica esta soluo com menor complicao e de uma forma perfeitamente satisfatria do ponto de vista do desempenho global. Este tipo de arquitectura ser referida com um pouco mais de detalhe no Seco 14.5.4. Assumindo, portanto, uma arquitectura com um nico conjunto de barramentos partilhados entre a memria e as interfaces de entrada/sada, podem ainda ser conceptualizadas duas formas de organizao. Em muitas arquitecturas, como tambm o caso do P3, assume-se a existncia de um nico espao de endereamento que, tal como os barramentos, partilhado por memria e perifricos. Nesse tipo de arquitectura haver endereos atribudos a posies de memria e outros atribudos a portos. Trata-se, como j se referiu no Seco 11.3.3 de uma arquitectura com os portos mapeados em memria (em ingls, memory mapped). Em arquitecturas deste tipo o endereamento de um porto faz-se colocando no barramento de endereos o respectivo endereo e actuando no barramento de controlo uma linha que indique a direco da transferncia pretendida. Isso conseguido habitualmente pela utilizao de uma linha de escrita/leitura que estar a , ou me

272

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

lhor, em H, quando se pretende uma leitura de um porto e em , ou melhor, em L, quando se pretende uma escrita. Do ponto de vista do conjunto de instrues de um processador deste tipo, no h, como bvio, necessidade de instrues de entrada/sada especcas, uma vez que todas as transferncias se fazem como se de posies de memria se tratasse. , portanto, utilizado para entradas/sadas todo o conjunto de instrues que permitem o acesso memria. Esta arquitectura tem a desvantagem de ter de ser necessrio reservar, no espao de endereamento de memria, um conjunto de endereos para portos de entrada ou sada. Para alm da diminuio consequente da dimenso da memria utilizvel, isso obriga, por vezes, a solues menos elegantes para obstar a que certos endereos atribudos a portos provoquem simultaneamente o acesso a posies de memria. A soluo est em utilizar espaos de endereamento separados para a memria e para os portos de entrada/sada, embora partilhando os mesmos barramentos. Para conseguir isso, ter o barramento de controlo de fornecer informao indicando se um determinado endereo um endereo de memria ou de um porto. Isso consegue-se, por exemplo, atravs de uma linha que distinga os dois tipos de acesso. Uma linha desse tipo pode assumir o valor quando se trata de um acesso memria e um valor quando se trata de um acesso a um porto. Uma designao adequada seria, por exemplo, . Uma soluo alternativa a utilizao de linhas separadas de escrita e leitura para memria e portos de entrada/sada. Ter-se-ia, ento, linhas com designaes do tipo , , e , por exemplo. Este tipo de arquitectura referido como de entradas/sadas isoladas ou entradas/sadas separadas (em ingls, independent IO). Neste tipo de arquitectura o conjunto de instrues tem de incluir instrues explcitas de entrada/sada. Essas instrues, quando executadas, provocam a activao das linhas adequadas ou do nvel adequado da linha para que a transferncia se d envolvendo os portos e no a memria. Tipicamente essas instrues so mais limitadas na sua operatividade que as instrues de acesso memria, limitando-se, por vezes, a uma instruo de entrada de dados e outra de sada.

14.2 Perifricos
Nas seces seguintes descreve-se o funcionamento bsico de alguns dos perifricos mais importantes nos computadores de uso genrico. De sublinhar que, apesar da importncia que estes tm nos computadores com que a maioria das pessoas trabalha diariamente, existem muitos outros sistemas computacionais em que estes perifricos nem sequer existem. o caso dos sistemas computacionais existentes em muitos dos electrodomsticos. Para estes, a entrada e sada de dados processa-se atravs de perifricos especcos ao sistema em que esto integrados.

14.2.1 Teclados
O teclado o perifrico de entrada de dados mais importante nos computadores de uso genrico, ao ponto de ser normal os computadores no arrancarem caso

14.2. PERIFRICOS
Interface
interrupo
3
M M M

273

x
Mux
M M M M M

scan code
8 3

D e s c o d

Figura 14.4: Esquema interno de um teclado. no detectem um teclado ligado. A Figura 14.4 apresenta o esquema interno de um teclado. Uma matriz de linhas e colunas de interligaes elctricas constitui o elemento bsico de um teclado. Em cada cruzamento linha/coluna est colocado um interruptor correspondente a uma tecla. Ao premir-se a tecla, fecha-se um circuito entre uma linha e uma coluna. Para fazer a leitura desta matriz, o circuito de interface do teclado inclui um controlador que contm dois contadores. Como mostra a gura, um dos contadores, , faz o varrimento das linhas, colocando de cada vez uma, e s uma, ao valor lgico 1. Por cada contagem do contador , o segundo contador, , faz o varrimento das colunas, lendo o valor lgico destas. A deteco de uma coluna a 1 indica que a tecla na posio da matriz est premida. A partir desta coordenada, o controlador identica univocamente a tecla. O controlador no teclado tem um conjunto de outras funes. Uma delas resolver um problema associado aos interruptores mecnicos. Ao fechar-se um interruptor, antes da linha estabilizar no novo nvel elctrico, esta apresenta uma oscilao de sinal, o que pode erroneamente indicar uma sequncia repetida de premir e libertar da tecla. O controlador ltra estes picos, esperando um tempo razovel entre uma alterao do estado de uma tecla e a leitura do seu estado denitivo. Esta operao tem o nome de debounce. Para reduzir a quantidade de informao a transmitir UCP, em vez deste controlador enviar constantemente o estado das diferentes teclas, so apenas enviadas alteraes do estado das teclas. Por exemplo, se se premir a tecla M, enviado ao processador o cdigo M_premida. Ao se libertar a tecla, enviado o cdigo M_liberta. A estes cdigos d-se o nome de make code e break code, respectivamente. Este funcionamento aplica-se tambm s silent keys, como as teclas shift e control. Para poder detectar a mudana de estado de uma tecla, o controlador ter que manter numa memria local o estado actual de todas as teclas. Estes cdigos so chamados de scan codes. Associado ao teclado (como a qualquer outro perifrico) existe um programa chamado device driver, responsvel por fornecer a nvel de software uma interface para o perifrico. No caso do teclado, ser o device driver que converter as coordenadas para um

274

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES


Placa Grfica
Memria Modo Texto ROM Caracteres ASCII Gerador Varrimento Monitor

Monitor

UCP

Memria Modo Grfico

RGB

. . .

Figura 14.5: Esquema interno de uma placa grca e ligao a monitor. dado scan code. esta operao que permite que um teclado com a mesma disposio de teclas possa ter disposies diferentes de smbolos e assim adaptarse facilmente a diferentes lnguas. Por exemplo, o smbolo - no teclado portugus est na mesma tecla do smbolo /no teclado ingls. A congurao do device driver permitir associar essa tecla ao scan code correspondente para a lngua para a qual o sistema est congurado. Outro aspecto dos scan codes que no indicam se a letra pretendida pelo utilizador maiscula ou minscula. Ser o device driver que ter que vericar se o make code de uma letra ocorre entre um shift_premida e um shift_liberta. Se sim, ento a letra ser maiscula, caso contrrio ser minscula. A converso de scan codes para cdigo ASCII normalmente da responsabilidade da aplicao. Sempre que existe uma alterao do estado de uma tecla, o controlador do teclado envia uma interrupo para a UCP indicando que tem dados para enviar. Por vezes, a UCP est ocupada com outras actividades e no consegue dar ateno imediata. Para evitar a perda de dados, o controlador do teclado possui um buffer capaz de armazenar uma sequncia de eventos do teclado. Esta soluo no resolve completamente o problema, pois este buffer tem tipicamente uma capacidade reduzida. Nos casos em que a UCP demora um pouco mais a ler os dados do teclado, pode acontecer que o buffer encha, fazendo com que todos os eventos posteriores sejam descartados. comum o controlador do teclado fazer soar um aviso sonoro para indicar que essas teclas esto a ser ignoradas.

14.2.2 Monitores
semelhana do teclado, o monitor ocupa o lugar principal na classe dos perifricos de sada de dados. A interface entre o monitor e a UCP realizada pela placa grca. Um diagrama da organizao interna de uma placa grca e sua ligao a um monitor est apresentada na Figura 14.5. As placas grcas tm, em geral, dois modos de funcionamento, programveis pela UCP: modo texto e modo grco. Em qualquer dos modos de funcionamento, do ponto de vista da UCP o monitor uma matriz (linha,coluna). No caso do modo texto, os elementos desta matriz so caracteres ASCII. No modo

14.2. PERIFRICOS

275

grco, os elementos da matriz so pontos no monitor, o elemento de menor tamanho manipulvel pela placa grca e a que se d o nome de pixel. Os primeiros monitores s funcionavam em modo texto. Chama-se a este tipo de monitores de monitores alfanumricos. Hoje em dia o modo texto existe no s para manter compatibilidade com monitores antigos, como tambm para servir como o denominador comum mais simples que qualquer sistema consegue reconhecer, evitando-se assim potenciais problemas de incompatibilidade entre diferentes interfaces grcas. Neste modo, para se ecoar um caracter no monitor basta enviar para a placa grca o seu cdigo ASCII. O local onde esse caracter ir aparecer no monitor determinada pela posio do cursor, uma referncia (linha,coluna) mantida pela placa grca. O funcionamento tpico o valor da coluna do cursor ser incrementado por cada caracter escrito, sendo portanto os caracteres escritos em sequncia. Se se exceder o nmero mximo de colunas, ento o valor da linha do cursor incrementado e o valor da coluna colocado a zero, fazendo com que a prxima escrita seja no incio da linha seguinte. Se se exceder o nmero mximo de linhas, o texto no monitor todo movido uma linha para cima (em ingls, scroll up), perdendo-se a linha de cima do monitor e ganhando-se uma linha em branco em baixo. O prprio cdigo ASCII inclui alguns comandos para controlar o cursor dos monitores alfanumricos, pois eram estes os monitores disponveis na altura da denio deste cdigo. Por exemplo, o cdigo: BS (backspace) permite recuar o cursor uma posio, ou seja, decrementa o valor da coluna. LF (linefeed) passa o cursor para a linha seguinte, ou seja, incrementa o valor da linha. CR (carridge return) coloca o cursor no incio da linha, ou seja, coloca o valor da coluna a zero.

Existem tambm cdigos para colocar o cursor numa dada posio do monitor. No entanto, estes so especcos para cada sistema. Para que seja possvel a utilizao dos monitores grcos actuais, as placas grcas, quando em modo texto, utilizam uma ROM para obter a descrio dos caracteres em termos de pixels. Em modo grco, a UCP dene ponto a ponto, isto , pixel a pixel, o que deve aparecer no monitor. A denio grca o nmero total de pixels no monitor, distribudos por um nmero total de linhas e um nmero total de colunas. Em monitores a preto e branco (ou monocolores), basta um bit por posio (linha,coluna) para indicar se o pixel nessa posio est aceso (branco) ou apagado (preto). Para monitores a cores, necessrio denir para cada pixel qual a cor que este deve assumir. Assim, para cada posio (linha,coluna) denese um valor que indica uma entrada dentro de uma palete de cores (em ingls, colormap). O nmero de bits necessrios por pixel depende portanto do tamanho desta palete de cores. Por exemplo, se a palete de cores tiver 256 entradas cada pixel ca denido por 8 bits. O tamanho da palete de cores determina o nmero mximo de cores diferentes que se podem utilizar em simultneo. No entanto, cada aplicao pode denir as entradas na palete de cores de forma a que diferentes aplicaes possam utilizar um conjunto de cores diferente. A placa grca mantm o estado de cada pixel numa memria interna. A capacidade desta memria determina a denio mxima da placa grca. Por

276

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

exemplo, para uma denio de (1280 colunas por 1024 linhas) com uma palete de 256 cores (8 bits) necessrio que a placa grca tenha uma memria de pelo menos bits, ou seja, 1,25M octetos. Se com esta memria se pretender uma maior quantidade de cores, ser necessrio reduzir a denio. Supondo que se pretende aumentar o tamanho da palete para 64k cores (16 bits), no possvel usar a denio padro abaixo da anterior, , pois exigiria bits, ou seja, 1,5M octetos. Assim, terse-ia que optar pela denio padro seguinte, , a que corresponde a memria bits, portanto, 0,9M octetos. A UCP dene a cor de cada pixel escrevendo na correspondente posio de memria grca. Para facilitar a tarefa aos programadores, existem normalmente bibliotecas grcas que fornecem rotinas de alto nvel para denir objectos complexos no monitor. Estas rotinas so especcas para cada sistema. A ligao entre a placa grca e o monitor depende do tipo de monitor. Ainda hoje, a maioria dos monitores so baseados num tubo de raios catdicos ( semelhana das televises). Nestes monitores, um feixe de electres emitido contra uma tela de fsforo, elemento que tem a propriedade de se tornar luminoso ao ser atingido pelo feixe. Por controlo do varrimento do feixe, e da intensidade deste durante o varrimento, possvel denir padres na tela. Tipicamente, este feixe de electres varre o monitor por linhas da esquerda para a direita, desligando-se quando faz o retorno da direita para a esquerda, avanando para a linha seguinte, como apresentado na Figura 14.5. Durante o varrimento de uma linha, o feixe modulado de forma a acender ou apagar cada pixel dessa linha. Esta descrio aplica-se a monitores monocolores. Nos monitores a cores, para cada pixel existem trs telas de fsforo, correspondentes s trs cores elementares: vermelho, verde e azul. Trs feixes de electres permitem controlar independentemente cada uma destas telas, atravs da intensidade do feixe correspondente. Assim, possvel denir para cada pixel um valor diferente de luminosidade para cada uma das trs cores elementares, permitindo assim denir, em princpio, qualquer cor. Para controlar o monitor, a placa grca l em sequncia as posies de memria interna e gera um sinal analgico para o monitor com os valores para as componentes vermelho, verde e azul de cada pixel. Este sinal tem o nome RGB, pois estas trs cores elementares em ingls tm os nomes Red, Green e Blue, respectivamente. Em geral, a intensidade de cada uma destas cores elementares denida com um octeto. Por esta razo, a utilizao de uma palete de cores com entradas chamada de cor verdadeira (em ingls, true color), pois dene univocamente cada cor possvel no monitor. De forma a que uma pessoa no se aperceba do varrimento, o monitor deve ser completamente escrito pelo menos 24 vezes por segundo. Caso contrrio o utilizador ter uma sensao de piscar do monitor. Esta exigncia implica uma grande largura de banda entre a placa grca e o monitor, pois necessrio enviar 24 vezes por segundo trs octetos para todos os pixels. Por exemplo, para uma denio , transferem-se 90M octetos/s. Hoje em dia, comeam a car populares os monitores baseados em LCD (do ingls, Light Coupled Device). Nestes monitores, cada pixel um elemento activo cuja cor pode ser controlada independentemente. A interface com estes monitores diferente em dois aspectos. Por um lado, em princpio no necessrio a placa grca ter memria, pois os valores denidos para os pixels do

14.2. PERIFRICOS

277

Disco Rgido

Cilindro

Pista

Sector

Figura 14.6: Diagrama da organizao interna de um disco rgido. monitor LCD so mantidos indenidamente, ou seja, a memria grca poder estar do lado do monitor. Por outro lado, cada pixel endereado individualmente, permitindo que a interface seja completamente digital. As tarefas da placa grca cariam assim reduzidas a fazer a converso para possveis denies diferentes e converso entre modo texto e modo grco. No entanto, para manter a compatibilidade com placas grcas anteriores, os monitores LCD em geral aceitam como entrada o sinal RGB tradicional. Alm disso, hoje em dia as prprias placas grcas possuem algum processamento de imagens grcas.

14.2.3 Discos Magnticos


Por ltimo, analisa-se nesta seco o funcionamento de um perifrico de entrada e sada de dados, o disco rgido. Este perifrico tambm ubquo nos computadores de uso geral. A sua utilizao primria no armazenamento de dados de forma permanente, pois os valores nos registos do processador, na cache ou na memria principal so perdidos quando a fonte de alimentao desligada. Para alm desta funo, os discos foram j estudados no Captulo 13 como o elemento de mais alto nvel na hierarquia de memria. Qualquer destas duas funes controlada pelo sistema operativo. A primeira gerida pelo sistema de cheiros e a segunda pelo sistema de memria. Assim, o espao de armazenamento dos discos est normalmente dividido em pelo menos duas parties, uma para o sistema de cheiros, e outra para o sistema de memria, ou espao de swap. Poder haver mais parties, pois os sistemas operativos em geral suportam mais do que uma partio para cada uma destas funes. A Figura 14.6 apresenta um diagrama da organizao interna de um disco rgido. Um disco rgido de facto constitudo por uma pilha concntrica de discos magnticos. Estes discos encontram-se permanentemente em rotao, a uma velocidade elevada e constante. Cada um destes discos est organizado em pistas, como mostra a gura. s pistas d-se tambm o nome de cilindros, signicando de facto o conjunto de pistas com o mesmo raio de todos os discos. Cada um destes discos tem uma cabea magntica que se pode deslocar radialmente e assim posicionar-se sobre qualquer das pistas desse disco. Cada pista, por seu lado, est dividida em sectores, que so o elemento mnimo de informao num disco. Quando o sistema operativo acede ao disco, para escrita ou leitura, f-lo sempre em termos de um, ou mais, sectores. Cada sector tem uma referncia nica que utilizada pelo sistema operativo. Para fazer a interface entre a UCP

278

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

e a parte mecnica do disco, estes incluem internamente um controlador. A partir da referncia indicada pela UCP, o controlador do disco determina qual dos cilindros contm o sector pretendido, e em qual das pistas deste cilindro esse sector se encontra. O controlador faz deslocar a cabea desse cilindro de forma a coloc-la sobre essa pista e espera at que o sector em causa passe por baixo da cabea magntica, altura em que este lido ou escrito. Assim, existem trs componentes no tempo de acesso a um sector do disco: o tempo de procura (em ingls, seek time), que o tempo que a cabea magntica demora at chegar pista onde o sector se encontra. Apesar das distncias serem curtas e das cabeas magnticas serem muito leves, e portanto demorarem pouco tempo a deslocarem-se para a pista correcta, o tempo de procura mesmo assim uma componente importante no tempo total de acesso ao disco. Um valor mximo tpico para esta componente para os discos de hoje 8ms, correspondendo ao trajecto maior da cabea. Naturalmente, em mdia este valor ser menor e perto de metade deste. o tempo rotacional (em ingls, rotational latency), que o tempo que demora desde que a cabea magntica se encontra em posio at que o sector desejado passe por baixo desta. Actualmente, um valor tpico para a velocidade de rotao de um disco rgido de 10.000 rotaes por minuto. Isto signica que uma rotao completa de um cilindro demora 6ms. Como em mdia se tem que esperar meia volta do cilindro para que o sector certo passe por baixo da cabea, o tempo rotacional mdio ser de 3ms. o tempo de leitura/escrita (em ingls, access time), que o tempo que demora a leitura ou a escrita de um sector. Para estimar o tempo de leitura/escrita necessrio saber o nmero de sectores por pista. Para um valor tpico de 64 sectores por pista, e assumindo as mesmas 10.000 rotaes por minuto, o tempo de leitura/escrita ser 6ms/64=0,09ms. Pelos valores apresentados, conclui-se que o tempo mdio de acesso a um sector do disco perto de 7,1ms. Duas observaes em relao a este valor. Primeiro, quando comparado com o tempo de acesso memria principal, que hoje em dia inferior a 100ns, o acesso ao disco cerca de 100.000 vezes mais lento! Portanto, os acessos ao disco fazem degradar muito o desempenho do sistema e devem ser minimizados. A segunda observao que o tempo de leitura/escrita desprezvel face aos tempos de procura e rotacional. Por esta razo, seria desejvel aumentar o tamanho do sector. H aqui um compromisso, pois embora se ganhe em ecincia, poder haver um grande desperdcio de espao se os sectores forem muito grandes pois, nos casos em que se pretendam guardar pequenas quantidades de informao, o resto do sector car desaproveitado. Actualmente, valores tpicos para os sectores so entre 512 octetos e 4k octetos. Uma forma de aumentar a ecincia no acesso ao disco manter o mximo possvel a estrutura lgica dos dados em sectores contnuos. Para isso, muitos sistemas operativos permitem a desfragmentao do disco, o que no mais do

14.3. COMUNICAO PARALELA

279

que colocar os cheiros em sectores consecutivos. Desta maneira, apenas se perde uma vez o tempo de procura e rotacional para a leitura/escrita de vrios sectores. De referir que a leitura/escrita dos dados no se faz directamente para a UCP, pois isso exigiria uma largura de banda muito grande. Por exemplo, se o tamanho do sector for de 1k octetos, ento a leitura de um sector gera 1k/0,09ms=11M octetos/s. Assim, o controlador de disco possui um buffer para onde so copiados os sectores e s depois sero lidos pela UCP, ao ritmo de transmisso permitido por esta. Para as escritas o processo semelhante. O sector a escrever primeiro escrito para este buffer e s quando est completo o mesmo copiado para o disco.

14.3 Comunicao Paralela


Do ponto de vista da comunicao entre o processador e a interface de um perifrico, a comunicao faz-se, como se viu, atravs dos barramentos do computador. Este um caso de comunicao paralela, isto , uma comunicao envolvendo vrios bits simultaneamente, tipicamente uma palavra do computador ou, em algumas arquitecturas, opcionalmente um octeto. A comunicao entre a interface e o perifrico, por sua vez, pode decorrer em paralelo, da mesma forma, ou em srie. Na Seco 14.4 ser estudada a comunicao srie. Nesta seco ir-se- analisar a comunicao paralela. Um aspecto a ter em conta o de que, por vezes, a largura da palavra do processador desadaptada comunicao com o perifrico. Em muitos casos, por exemplo, o barramento de interface com o perifrico assume a transferncia de um octeto e o barramento interno pode ter 16 bits, como no caso do P3, ou mais, o que acontece em muitos dos microprocessadores comerciais disponveis. Essa circunstncia no cria qualquer problema. No caso de perifricos de sada, a interface ignora simplesmente os bits que no vo ser transmitidos e o programa ter que ter em conta que a informao deve ser formatada de acordo com esse facto. No caso dos perifricos de entrada, a interface no actua as linhas no utilizadas, uma vez que o barramento construdo de forma a que as linhas no actuadas assumam um valor por omisso. Do mesmo modo, o programa ter que ter em conta que a informao til de entrada ocupa um subconjunto dos bits da palavra. A complexidade da comunicao entre a interface e o perifrico depende da complexidade do prprio perifrico e do grau de funcionalidade pedido interface. Um aspecto particular a ter em conta o grau de sincronizao necessrio entre a interface e o perifrico. A sincronizao, a este nvel, permite coordenar a transferncia de informao, garantindo que a entidade que recebe informao sinalizada de que a entidade que a envia tem informao disponvel no barramento de interligao. Pode ainda ser necessrio garantir que a entidade que envia receba uma conrmao explcita de que essa informao foi recebida. Em perifricos muito simples no necessria qualquer sincronizao entre a interface e o perifrico. Noutros tipos de perifricos, estes tm de ser sinalizados sempre que a interface possui dados para enviar ou, em alternativa, em perifricos de entrada, a interface tem de aceitar sinalizao do perifrico indicando que um dado est a ser enviado. Em perifricos mais complexos,

280

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

necessrio sincronizar completamente a comunicao entre a interface e o perifrico de modo a, para alm de sinalizar o envio, garantir que os dados so recebidos. Por outro lado, a comunicao entre o processador e a interface pode, igualmente, necessitar de algum grau de sincronizao. Os exemplos apresentados em seguida permitem ter uma viso de interfaces com diferentes complexidades. No se pretende ser exaustivo nesta questo, mas antes ilustrar alguns tipos de problemas encontrados neste contexto e solues comuns para esses problemas.

14.3.1 Interfaces sem Sincronizao


O primeiro exemplo refere-se a um tipo muito simples de perifricos sem qualquer necessidade de sincronizao. Ir-se- considerar um perifrico de entrada constitudo por um conjunto de interruptores e um perifrico de sada constitudo por um conjunto de dodos emissores de luz (LEDs). Quer os interruptores, quer os leds, permitem uma comunicao muito bsica entre o utilizador de um sistema e o processador. A entrada de dados faz-se atravs de uma instruo de entrada de dados dirigida ao porto ligado aos interruptores. O programa poder, por exemplo, estar a executar um ciclo que inclui essa instruo, de forma que, em cada ciclo, tem em conta o estado de cada um dos interruptores. Neste caso, no necessria qualquer sincronizao, no sendo sequer necessrio um registo de entrada. Este pode ser substitudo simplesmente por um conjunto de buffers de trs estados que realizam a interface elctrica. esta entidade que, neste caso, assume o papel de porto. A Figura 14.7 ilustra a estrutura de uma interface com um porto de entrada deste tipo. Repare-se que, neste caso, dada a simplicidade da interface, no necessrio existir descodicao interna, uma vez que h apenas um porto. Quando a instruo de leitura do porto executada, os valores assumidos pelos interruptores so directamente introduzidos no barramento de dados. Embora seja conceptualmente possvel conceber interfaces com portos de sada desprovidos de registos, tal no , em geral, uma opo til. Estar-seia na presena de um porto de sada que assumiria os valores a ele enviados apenas durante um ciclo de escrita do processador o que, em geral, no suciente. Na Figura 14.8 est representada uma interface de sada que permite ao processador escrever um octeto num conjunto de leds. Mais uma vez a simplicidade da interface dispensa descodicao interna. A instruo de escrita provoca a escrita no porto de um octeto que se manter visvel nos leds at prxima escrita.

14.3.2 Protocolos de Sincronizao


Sincronizao por Impulso Considere-se agora uma interface que est ligada a um conversor digital/analgico (D/A) e a um conversor analgico/digital (A/D). Um dispositivo do primeiro tipo permite converter uma sequncia de palavras de valores binrios num sinal analgico. Uma aplicao bvia a gerao de audio num com-

14.3. COMUNICAO PARALELA


Barramento de Endereos Barramento de Dados Barramento de Controlo

281

Descodificao Externa

...

Controlo

Enable da Interface

Leitura OEn

Figura 14.7: Interface de entrada de um conjunto de interruptores. putador. Trata-se de um perifrico de sada. Um conversor analgico/digital permite, por seu turno, converter um sinal analgico varivel no tempo, num conjunto de valores numricos que o representam. Uma aplicao bvia um sistema de digitalizao de audio. Trata-se de um perifrico de entrada. Em ambos os casos necessrio garantir a transferncia peridica de valores binrios que permita gerar o sinal pretendido ou amostrar um sinal a digitalizar e guardar os valores sucessivamente obtidos em memria. A responsabilidade dessa gerao pode ser atribuda, por exemplo, ao processador com auxlio do sistema de interrupes e de um temporizador, como se ver adiante. No caso da entrada de dados, pode tambm ser dada a funo de gerir essa periodicidade ao circuito do prprio perifrico. Na Figura 14.9 ilustra-se uma hiptese de interface e a sua ligao aos dois conversores. Neste exemplo, a gerao dos sinais peridicos para o conversor analgico/digital feita localmente pelo perifrico. Nesta interface existe um ip-op D que gera um impulso de cada vez que o processador escreve uma palavra no registo da interface. Esse impulso

282

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES


Barramento de Endereos Barramento de Dados Barramento de Controlo

Descodificao Externa

...

Controlo

Enable da Interface

Escrita

Figura 14.8: Interface de sada para um conjunto de leds.

temporizado a partir do relgio do barramento de controlo e controlado pela linha de escrita no registo. Desse modo, sempre que h uma escrita (no endereo interno , correspondente ao registo de sada), o conversor D/A avisado atravs da linha DOUTVAL que sinaliza a existncia de um novo dado no barramento de ligao ao conversor. Inversamente, sempre que o conversor A/D gera um novo dado, coloca-o no barramento de ligao com a interface e actua a linha DINVAL com um impulso. Esse impulso, por um lado, procede ao carregamento do dado no registo de entrada da interface e, por outro, permite actuar uma bscula. Essa bscula pode ser lida (com o endereo interno ) pelo processador. Desse modo, o processador pode inquirir se h dados novos no registo de entrada. No caso de haver, o processador l-os (actuando o endereo interno ) o que simultaneamente desactiva a linha que indica a existncia de dados disponveis. A opo usada de sincronizao entre a interface e o processador, atravs de um registo de estado de um bit com o endereo interno , no a nica. Como ser posteriormente abordado, poderia ter sido usada a sada da bscula para actuar directamente a linha de interrupo do processador. Em interfaces reais existem, como natural, mquinas de estado mais complexas (e seguras) para garantir os processos de sincronizao com os perifri

14.3. COMUNICAO PARALELA


Barramento de Endereos Barramento de Dados Barramento de Controlo A0 a An-1 Descodificao Externa A0 A1

283

...

Interface A En Descodificao Interna 0 1 2 3

Controlo D0 Escrita Leitura

Porto 0 S 1D C1 R

OEn Porto 2

Clock DOUTVAL DINVAL

Conversor D/A

Conversor A/D

Figura 14.9: Interface bidireccional com um conversor A/D e um conversor D/A. cos e com o processador. A nvel da troca de sinais entre a interface e o conversor D/A, o diagrama temporal da Figura 14.10 ilustra o funcionamento do protocolo. No instante 1 novos dados so escritos no registo. No instante 2, o facto assinalado ao perifrico. Em 3 no h qualquer sinalizao especca, mas o perifrico ca a aguardar nova escrita. O perifrico deve ter j, nesta fase, guardado a palavra presente no barramento. Em 4, o ciclo recomea. Esta forma de sincronizao habitualmente designada por sincronizao por impulso. Este impulso muitas vezes designado em ingls, por strobe.
Dados DOUTVAL

Figura 14.10: Sincronizao por impulso. A forma de sincronizao da comunicao entre o conversor A/D e a interface semelhante. No caso, porm, de, como se referiu atrs, a sincronizao poder estar a cargo do processador, o protocolo seria ligeiramente diferente,

284

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

uma vez que, agora, o impulso funcionaria, no como conrmao da presena de dados, mas como pedido do seu envio. Na Figura 14.11 ilustra-se essa variante. Agora em 1, o destinatrio dos dados pede que eles sejam enviados. Em 2, a fonte dos dados coloca-os no barramento. Em 3, o destinatrio assumiu que os dados estavam presentes e armazenou-os. Em 4 o ciclo recomea.
Dados SendData

Figura 14.11: Variante da sincronizao por impulso.

Protocolos de Handshaking H, como se pode ver, vrias formas de sincronizao entre a interface e o perifrico. Nas formas apresentadas tem de haver, implcito nas interfaces um conhecimento das temporizaes dos interlocutores, uma vez que no h, por parte destes, nenhuma conrmao explcita de que a comunicao se realizou com xito. Isto quer dizer que da responsabilidade da entidade que gera os dados saber que o receptor j est pronto para receber novos dados. Em algumas aplicaes impossvel, porm, ter esse conhecimento porque no se conhece as caractersticas temporais do perifrico a que uma interface pode ser ligada. Para resolver este problema tem de existir, na comunicao entre a interface e o perifrico, no s a indicao da entidade geradora de dados que estes se encontram disponveis, mas tambm, por parte da entidade destinatria, a indicao de que os dados foram aceites. Isso conduz a um tipo de protocolo de comunicao entre a interface e perifrico que tem por designao handshake. Nesse protocolo, a entidade geradora de dados (por exemplo, a interface, numa comunicao com um perifrico de sada) sinaliza que os dados esto disponveis por uma linha , por exemplo, e a entidade receptora (no exemplo referido, o perifrico) sinaliza que os dados foram aceites por uma linha reconhecimento, (do ingls, acknowledge). A forma concreta como a sinalizao feita pode variar. Podemos considerar impulsos ou mudanas de nvel de uma linha. Na Figura 14.12 ilustra-se o protocolo utilizando mudanas de nvel das linhas.
Dados DADVAL ACK Dados a enviar

12

Figura 14.12: Exemplo de um protocolo de aperto de mo.

Dados a enviar

45

14.3. COMUNICAO PARALELA

285

Na gura os dados a enviar so colocados no barramento no instante e isso assinalado pela mudana de nvel da linha no instante marcado com . A entidade receptora reconhece a recepo no instante alterando o nvel da linha . Assumiu-se que os dados deixavam de estar estveis a partir do instante assinalado com . Nos instantes a , repete-se o processo de envio com novos dados. O nvel das linhas associadas ao protocolo, neste caso, no tem signicado e so apenas as suas transies que suportam a informao. Como j referido podiam ter sido usados impulsos para garantir a sinalizao. Um caso mais interessante um protocolo que garante uma dupla sincronizao: para alm da capacidade de dar entidade geradora de dados a conrmao de que a entidade receptora, de facto, recebeu os dados, como acontece no caso anterior, garante-se ainda, que a entidade receptora sinalizada de que a entidade emissora recebeu aquela conrmao. Este protocolo habitualmente designado por duplo handshaking e uma das suas possveis variantes est representada na Figura 14.13.
Dados DADVAL ACK Dados a enviar

12

56

Figura 14.13: Exemplo de um protocolo de duplo aperto de mo. Na gura os dados so disponibilizados em e o facto assinalado no ins. A entidade receptora tante marcado com pelo activar da linha pode agora ler e registar os dados, respondendo com a activao da linha no instante marcado com . A entidade emissora pode, a partir de agora, desactivar a linha (instante ) indicando, assim ao receptor que tomou conhecimento da sua conrmao. Este responde em desactivando a linha , terminando o ciclo e repondo a situao inicial. Na gura os dados foram retirados pela entidade emissora no instante , mas podiam ter sido retirados em qualquer momento a partir de , por coerncia com o signicado do nome da linha , ou mantidos at ocorrncia de novo ciclo. Repare-se que, neste tipo de protocolo, no h nenhuma necessidade por parte de qualquer das entidades intervenientes de conhecer as caractersticas temporais da outra. De facto, se, por exemplo, uma interface estiver ligada a um perifrico lento, isso signica apenas que o ciclo mais longo do que seria com um perifrico rpido. Se se tratasse de uma sada de dados, o que aconteceria seria que a linha caria um tempo longo activada com a interface espera da activao do sinal e, provavelmente mais tarde, seria necessrio esperar de novo pela sua desactivao. No caso inverso de se tratar de uma interface de entrada, seria a linha a exibir aquele tipo de lentido. Em qualquer caso, o ciclo seria longo, mas os dados seriam trocados com toda a segurana. Nos protocolos de handshake ilustrados a iniciativa de realizar a transferncia de dados est do lado da entidade emissora. Nada impede que a iniciativa

286

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

seja da entidade receptora. No caso do duplo handshake, por exemplo, ilustra-se na Figura 14.14 uma situao desse tipo.
Dados DADVAL PEDDAD Dados a enviar

23

Figura 14.14: Exemplo de um protocolo de duplo aperto de mo com a iniciativa na unidade receptora. Na gura, a entidade receptora inicia o ciclo no instante , pedindo dados entidade emissora activando a linha . A entidade emissora coloca dados vlidos no barramento no instante e activa a linha no instante marcado com , avisando o receptor que os dados presentes no barramento so dados vlidos. O instante corresponde ao momento em que a entidade receptora terminou a leitura dos dados e informa o emissor que j no precisa deles. A entidade emissora conrma isso em , desactivando a linha que indicava que os dados estavam vlidos. A partir daqui o emissor pode retirar os dados do barramento a qualquer momento. No exemplo, os dados foram alterados no instante . A estrutura interna de interfaces capazes de comunicar segundo estes protocolos , evidentemente, mais complexa que as anteriormente apresentadas. Com os conhecimentos obtidos nos captulos anteriores, porm, o leitor dever ser capaz de projectar qualquer delas. habitual, neste tipo de interfaces, dispor, para leitura pelo processador, de um registo de estado que permite ao processador saber em que fase se encontra a transferncia e se pode, no caso de sadas, colocar mais dados na interface ou, no de entradas, se j existem dados disponveis na interface. Tal como no caso anteriormente estudado, possvel recorrer ao sistema de interrupes para sinalizar o processador que deve interactuar com a interface.

14.3.3 Interfaces Sncronas


Na arquitectura de interfaces apresentada at aqui, assumiu-se que no existia transferncia de relgio entre a interface e o perifrico, o que leva necessidade de estabelecer um processo de sincronizao. esse o caso geral quando um computador interage com um perifrico atravs de uma interface assncrona, mas no a nica possibilidade. Pode-se conceber, em alternativa, um protocolo de comunicao em que haja um relgio comum interface e ao perifrico. Esse tipo de comunicao tem, naturalmente, a designao de comunicao paralela sncrona. A comunicao paralela sncrona coloca, ao nvel dos perifricos, o mesmo tipo de problemas que os barramentos internos dos processadores, ainda que, em geral, o relgio seja mais lento. Em qualquer caso, algumas interfaces deste tipo permitem a vrios perifricos partilhar a mesma interface, reforando os aspectos comuns aos dois tipos de barramento.

14.4. COMUNICAO SRIE

287

Um aspecto importante a ter em conta neste tipo de interfaces o que resulta do facto da interface ser interligada a dois barramentos, o barramento interno do computador e o barramento de ligao aos perifricos que tm, em geral, relgios de diferentes frequncias. Isso conduz a uma maior complexidade interna deste tipo de interfaces, em relao s interfaces simples anteriormente descritas. No cabe dentro dos objectivos deste livro explorar este tema em mais detalhe.

14.4 Comunicao Srie


Na seco anterior analisou-se a estrutura das interfaces e dos protocolos de entrada e sada, assumindo que a comunicao entre a interface e o perifrico se realiza em paralelo, isto , sendo os vrios bits de um octeto ou de uma palavra transferidos simultaneamente. Nesta seco analisar-se- outro tipo de comunicao que assenta na transferncia da informao bit a bit, sendo, por isso denominada comunicao srie. As vantagens deste tipo de comunicao sobre a comunicao paralela so as seguintes: So necessrios menos os para estabelecer a ligao, conseguindo-se, no s alguma economia, como tambm, cabos sicamente mais exveis ocupando menos espao. No h problemas de sincronizao entre os sinais das vrias linhas existentes na comunicao paralela, o que pode ser um problema em alta velocidade com distncias signicativas. economicamente vivel, porque reduzida a menos linhas, a utilizao de drivers elctricos de maior potncia ou sensibilidade que permitam a comunicao a maiores distncias que as conseguidas com electrnica digital simples. A utilizao de comunicao srie permite a utilizao de ligaes atravs de redes de comunicao (inicialmente atravs de linhas telefnicas) que seriam de mais complexa utilizao com comunicao paralela. A comunicao srie facilita a utilizao de redes locais de comunicao permitindo a relativamente fcil partilha de um canal fsico de comunicao por um conjunto de equipamentos. Este tipo de comunicao potencia, tambm, a utilizao de canais de comunicao sem os, por razes semelhantes s j anteriormente referidas.

As interfaces destinadas a comunicao srie so estruturadas em torno de um registo de deslocamento. No caso de interfaces de sada, o registo um registo de carregamento paralelo e sada srie. No caso de interfaces de entrada, pelo contrrio, trata-se de um registo de entrada srie e sada paralela. Obviamente que a estrutura da interface mais complexa, mas estes registos permitem conciliar a necessidade de comunicao com um perifrico com a comunicao em paralelo com o processador atravs do barramento de dados.

288

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

A comunicao srie apresenta a vantagem, como foi atrs sugerido, de facilitar a ligao entre dois processadores atravs de linhas srie que interligam interfaces de entrada/sada dos dois computadores. Se bem que uma ligao deste tipo seja concebvel com interfaces de comunicao paralela, a utilizao de comunicao srie facilita muito a tarefa. Quanto aos sentidos de comunicao entre duas entidades que comunicam em srie, sejam uma interface e um perifrico, sejam dois computadores, h trs tipos de ligao. Quando a comunicao se faz apenas numa direco, por exemplo, de uma interface para um perifrico de sada, chama-se comunicao simplex. No , actualmente, comum excepto em aplicaes muito especcas. A comunicao half-duplex, por sua vez, realiza-se nos dois sentidos, mas separadamente, isto , com a entidade A a enviar dados para a entidade B e, posteriormente, com a entidade B a enviar dados para a entidade A. Neste caso nunca h comunicao simultaneamente nos dois sentidos. Embora em comunicaes envolvendo computadores de uso geral seja j pouco usado, este tipo de comunicao frequente em aplicaes de controlo e automao. Por m, quando entre duas entidades se permite a troca simultnea de comunicao nos dois sentidos, trata-se de comunicao full-duplex. a mais frequente hoje em dia. Repare-se que uma comunicao full-duplex do ponto de vista lgico, pode ser sicamente suportada em comunicaes simplex, como acontece, por exemplo, na comunicao entre um processador e um terminal (incluindo monitor e teclado) ou com um modem. Na comunicao srie surge, tal como sucede com a comunicao paralela, a necessidade de sincronizar as duas entidades que trocam informao entre si. H dois modos fundamentais de o fazer: na comunicao sncrona, para alm de se transmitirem os sucessivos bits de informao igualmente transmitido uma sequncia de impulsos de relgio que permitem ao receptor extrair os bits de informao do sinal recebido; na comunicao assncrona, pelo contrrio, no transmitido qualquer sinal de relgio e tm de ser assumidos pelas duas entidades envolvidas certos pressupostos no que diz respeito s caractersticas temporais do sinal transmitido.

14.4.1 Comunicao Assncrona


A comunicao assncrona a forma de comunicao srie que assume mais baixa complexidade e , historicamente, a primeira a ser utilizada. Na comunicao assncrona entre duas entidades, como foi j referido, no transmitido o relgio. A necessria sincronizao garantida pela existncia de relgios do lado emissor e do lado receptor com frequncias to prximas quanto possvel. Se ambas as entidades estiverem de acordo quanto frequncia de transmisso, o receptor, usando o relgio local, vai amostrar o nvel da linha em intervalos sucessivos, separados pela durao do bit. No entanto, como os dois relgios no so exactamente iguais, ao m de alguns bits corre-se o risco de que um dos bits recebidos no seja lido ou seja lido duas vezes. Para evitar isso, na comunicao assncrona o nmero de bits a enviar de cada vez reduzido. habitual enviar um caracter de cada vez ou, quando a informao a enviar no textual, um octeto. Como vo ser enviadas sucessivas sequncias de bits, passa a ser necessrio um segundo nvel de sincronizao que consiste em identicar perante a entidade receptora quando se inicia uma nova sequncia. Enquanto que a anterior

14.4. COMUNICAO SRIE

289

se pode designar por sincronizao de bit, esta nova forma pode ser designada por sincronizao de caracter ou sincronizao de octeto. Uma forma clssica de resolver os problemas apontados est ilustrada na Figura 14.15.
Pontos de amostragem Durao de um bit

Bit de arranque

Bits de informao

Figura 14.15: Exemplo de envio de um octeto em comunicao assncrona. A linha de transmisso permanece num nvel determinado quando no esto a ser transmitidos dados. Normalmente opta-se pelo nvel H, o nvel elevado de tenso. Quando surgem dados para transmisso (no caso do exemplo, um octeto), a transmisso inicia-se obrigatoriamente com a passagem da linha ao nvel oposto do nvel de repouso durante a durao de um bit. A este intervalo chamado bit de arranque (em ingls, start bit). Ao receber este bit de arranque, isto , ao vericar a existncia de uma transio do nvel de repouso para o inverso, a entidade receptora calcula os instantes correspondentes ao meio do tempo de durao dos bits transmitidos e, nesses instantes, l o nvel da linha. Desse modo so recebidos os sucessivos valores dos bits transmitidos. No exemplo da gura, recebido o octeto assumindo que, como usual, se envia o octeto com os bits menos signicativos em primeiro lugar. Para este esquema funcionar, a linha ter de car no estado de repouso por um tempo mnimo entre cada par de octetos ou de caracteres. Esse intervalo , normalmente, o correspondente durao de um a dois bits. H, deste modo, a garantia que, mesmo que o ltimo bit transmitido seja um , haver um intervalo com uma durao garantida em que a linha permanece em repouso. A esse intervalo habitual chamar bits de guarda (em ingls, stop bits). Por outro lado, a provvel ocorrncia de erros de transmisso levou a juntar a todo este esquema, um mecanismo que permita detectar a eventual existncia de um erro deste tipo. Para isso usa-se um bit suplementar que indica a paridade do conjunto dos bits. usual designar esse bit por bit de paridade (em ingls, parity bit). Na emisso, verica-se se o nmero de bits de informao a par ou mpar e determina-se o valor do bit suplementar, de modo a que a paridade do conjunto total, incluindo-o, seja do tipo desejado. Por exemplo, se se estiver a transmitir octetos e o octeto a transmitir for , a paridade dos oito bits par, uma vez que o nmero de bits a quatro. Se se pretender paridade par, o bit suplementar ser . Se se pretender paridade mpar, o bit ser . Na recepo verica-se de novo a paridade. Se no ocorreu qualquer erro na transmisso, a paridade testada na entidade receptora estar correcta. Se ocorrer um erro num bit, haver um bit que tem o valor trocado e, portanto, a deteco da paridade vai indicar que houve um erro. Nessas circunstncias a entidade receptora tem a informao que houve um erro de transmisso e, consequentemente, pode desencadear as aces adequadas, nomeadamente possibilitando entidade receptora pedir a retransmisso do caracter ou octeto

290

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

com erro. Repare-se, contudo, que este mtodo tem uma limitao: se ocorrerem dois erros, ou mais geralmente, um nmero par de erros, a determinao da paridade no indica qualquer erro. A utilizao do bit de paridade , em geral, deixada como opcional numa transmisso assncrona. Na Figura 14.16 est ilustrada a estrutura da informao transmitida incluindo j o bit de paridade (com paridade par) e dois bits de guarda.
Pontos de amostragem Durao de um bit Aqui pode iniciar-se outra transmisso

Bit de arranque

Bits de informao

Bits de guarda Bit de paridade

Figura 14.16: Exemplo de envio de um octeto em comunicao assncrona com bit de paridade e bits de guarda. Se o relgio de recepo fosse igual ao de emisso, a amostragem dos bits far-se-ia sempre no meio do intervalo de tempo correspondente a cada bit. Na realidade no isso que se passa porque os relgios no tm exactamente a mesma frequncia. Considere-se, por exemplo, o que acontece se o relgio de recepo for ligeiramente mais lento que o de emisso. Observe-se a Figura 14.17. Inicialmente, o aparecimento do bit de arranque permite iniciar a leitura por amostragem dos bits seguintes. Como o relgio , porm, mais lento que o de emisso, cada bit vai sendo amostrado um pouco mais tarde que o anterior em relao ao meio do perodo de durao do bit. Resulta bvio da gura que, por causa deste efeito, o nmero de bits transmitidos de cada vez tem de ser limitado.
Pontos de amostragem

Bit de arranque

Figura 14.17: Recepo de um octeto com relgio de recepo de frequncia ligeiramente inferior ao de recepo. Como evidente, nem todos os bits transmitidos numa comunicao assncrona so bits teis de informao. De facto, o bit de arranque, o bit de paridade e o intervalo denominado de bits de guarda, so necessrios comunicao, mas no transportam informao til. A velocidade de transmisso usualmente referida em bits por segundo ( ) e refere-se quantidade de bits transmitidos por segundo. Note-se que se consideram todos os bits transmitidos, incluindo os de informao til e os bits de arranque, de paridade e de guarda. Esta velocidade de transmisso , por

14.4. COMUNICAO SRIE

291

vezes, designada por baud rate, embora esta designao seja incorrecta. O baud corresponde mais simples quantidade de informao transmitida. Sempre que baud equivale a bit, a designao est correcta. No entanto, certas formas de transmitir informao transmitem vrios bits simultaneamente levando a que baud corresponde a vrios bits.

14.4.2 Comunicao Sncrona


Na comunicao sncrona o relgio que existe na entidade receptora tem exactamente a mesma frequncia do usado na emissora. Desse modo, o fenmeno de escorregamento do momento de amostragem dos bits no existe. H duas formas de garantir que o relgio o mesmo nas duas entidades: ou ele transmitido, do mesmo modo que os bits, ou, em alternativa, transmitida suciente informao para garantir que reconstitudo na recepo um relgio sincronizado com o relgio de emisso. Adiante se far uma breve referncia forma de o conseguir. De qualquer modo, a existncia de um relgio sincronizado leva a dispensar a segmentao de informao em entidades de pequena durao, como acontece na comunicao assncrona. Em princpio, pode agora transmitirse informao de forma contnua. Claro que isso coloca novas exigncias do ponto de vista das interfaces e do nvel de prioridade que o processador d a essa comunicao. Haver que garantir que a emisso no travada por falta de dados para transmitir e que, na recepo, no se perde informao por falta de recolha de informao da interface pelo processador. Persistem, contudo, razes para segmentar a informao ainda que em blocos de maior dimenso do que era usual na comunicao assncrona. Por um lado, isso resulta da necessidade de permitir que o processador controle a comunicao, gerindo a quantidade de informao que est disponvel para enviar ou receber de cada vez. Por outro lado, h que ter em conta que os erros de transmisso existem. Enviar um longo bloco de informao sem o segmentar implica que um simples erro de transmisso comprometa todo o bloco, levando necessidade de o retransmitir. Por outro lado, blocos demasiado pequenos tm o inconveniente de levar, como se ver adiante, a baixos rendimentos de transmisso. H, portanto, que encontrar uma dimenso ptima. Actualmente as dimenses envolvidas nas normas mais correntes vo de algumas centenas a muitos milhares de bits. Nas implementaes correntes de comunicao sncrona, normal o contnuo envio de relgio, mesmo quando no h informao til a transmitir. Isso coloca o problema de diferenciar a ausncia de dados da transmisso de dados teis, uma vez que o receptor est permanentemente a amostrar a linha. O desenvolvimento deste tipo de comunicao foi relevante para a implementao de redes de computadores de todos os tipos. Isso implica a necessidade, quando enviada uma sequncia de dados, de explicitar qual o seu destino, isto , a que receptor, de entre um conjunto de receptores possveis, se destina a informao. Por todas as razes apontadas foi necessrio desenvolver protocolos de comunicao que dessem suporte a todas as funcionalidades requeridas. Faz-se seguidamente uma breve introduo a essa problemtica, mas recomenda-se a consulta de textos sobre comunicao de dados ou redes de computadores

292

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

a quem pretenda aprofundar o assunto. Inicialmente desenvolveram-se protocolos orientados ao caracter, protocolos em que se assume que a informao a transmitir constituda por caracteres de texto. Com o desenvolvimento da necessidade de transmitir outro tipo de informao, foram desenvolvidos protocolos orientados ao bit. Protocolos Orientados ao Caracter Protocolos deste tipo so j pouco usados, mas so aqui referidos por serem um passo importante que faz a ponte da comunicao assncrona para os modernos protocolos orientados ao bit. Neste tipo de protocolos assume-se que a informao til constituda por texto sob a forma de um cdigo e, eventualmente, por alguns caracteres de controlo como os que constam da Tabela 2.13 do cdigo ASCII apresentada na Seco 2.3.3. Na ausncia de dados transmitido sucessivamente o caracter SYN (synchronization), que mantm a sincronizao entre a entidade emissora e a receptora. Quando h dados para transmitir, que no caso destes protocolos , normalmente, texto, a transmisso inicia-se por um cabealho com informao liagada ao controlo de transmisso. O cabealho precedido pelo caracter SOH (Start Of Header), incio de cabealho. O texto , por sua vez, precedido do caracter STX (Start of TExt), incio de texto e seguido do caracter ETX (End of TExt), m de texto. O m do pacote de informao um caracter BCC (Block Check Character), caracer de vericao do bloco. Este no um caracter especco mas sim um caracter calculado de forma a servir de deteco de erros de transmisso. A informao a transmitir segmentada em blocos com um comprimento mximo denido. Na Figura 14.18 ilustra-se a estrutura de um pacote de informao neste tipo de protocolo.
1 caracter

...

SYN SOH

Cabealho h caracteres

STX

Texto t caracteres

ETX

BCC SYN

...

Figura 14.18: Estrutura de um pacote num protocolo de comunicaao sncrona orientado ao caracter.

Protocolos Orientados ao Bit Na transmisso de informao no textual h o problema de no se poder transmitir conguraes aleatrias de bits porque podem ser interpretados como caracteres de controlo (STX, SOH, etc.). De facto s caracteres (de texto ou controlo) podem ser transmitidos. Acontece que muitas vezes h necessidade de transmitir informao que no caracterizvel", por exemplo, programas. Os protocolos orientados ao bit permitem resolver este problema. Nos protocolos orientados ao bit perde-se a noo de caracter. Passa a haver uma sequncia de bits. Quando no h informao til a transmitir a entidade emissora transmite continuamente uma sequncia de bits chamada ag e que , em muitos dos protocolos correntes, . Quando surgem dados para

14.5. MODOS DE TRANSFERNCIA DE DADOS

293

transmitir, transmite-se um cabealho e, aps este (que tem um comprimento xo) transmitem-se os dados. Aps os dados transmitido um bloco de vericao de erro, aps o que se seguem ags. O aparecimento da ag marca, portanto, o m da transmisso. A Figura 14.19 ilustra a estrutura de um pacote de informao neste tipo de protocolo.
1 octeto

... Flag

Cabealho h bits

Informao n bits

CRC Flag 2 octetos

...

Figura 14.19: Estrutura de um pacote num protocolo de comunicaao sncrona orientado ao bit. H um problema com este procedimento. Trata-se do eventual aparecimento da sequncia , correspondente ag no meio da informao a transmitir. Se essa sequncia de bits for transmitida, o protocolo assume que o pacote acabou. Desenvolveu-se, por isso, um procedimento adicional chamado bit stufng. Com excepo das ags, sempre que o emissor constata a existncia de cinco s seguidos, acrescenta um . Na recepo, sempre que se encontram cinco s seguidos, verica-se o bit seguinte. Se um retira-se. Se for um , est-se perante uma ag. Se, por exemplo, a sequncia a transmitir for ,

a sequncia efectivamente transmitida, por efeito do bit stufng


em que os s sublinhados correspondem aos bits inseridos.

14.5 Modos de Transferncia de Dados


Em geral, o processamento dos dados vindos de (ou destinados a) perifricos no realizado imediatamente na altura da transferncia. O normal o processamento desses dados ser realizado em memria. Assim, existe uma fase de transferncia de dados de ou para um bloco de memria, e uma outra fase de processamento destes dados em memria. A fase de transferncia de informao entre o computador e os perifricos destina-se a colocar no perifrico informao que est na memria do computador ou, no sentido inverso, a transferir para a memria informao que chega do perifrico. Nestas circunstncias, a participao do processador puramente instrumental, lendo de um lado para um registo interno e em seguida escrevendo esse registo no outro lado. Analisam-se em seguida as diferentes alternativas para a fase de transferncia de dados entre o computador e os perifricos.

294

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

14.5.1 Transferncia Controlada por Programa


Neste modo de transferncia de informao, o programa a ser executado pela UCP controla toda a fase de transferncia. Para alm de realizar a transferncia propriamente dita, quer entre a UCP e o perifrico quer entre a UCP e a memria, tem tambm a seu cargo a monitorizao da interface do perifrico para saber quando pode enviar dados ou quando novos dados esto prontos para serem lidos. Para transferir um bloco de informao, por exemplo, da memria para um perifrico, necessrio que o programa tenha um ciclo que lhe permita estar constantemente a testar o porto de estado da interface desse perifrico para analisar se ela est pronta a receber dados e, quando isso acontecer, tem de fazer uma leitura de uma posio da memria para um registo seguida de uma escrita desse registo para o porto de dados da interface do perifrico, recomeando o ciclo at toda a informao do bloco ter sido transferida. Este mtodo chamado de polling, no sentido em que a iniciativa de vericar se um dado perifrico est pronto da UCP. Um uxograma de um programa deste tipo est ilustrado na Figura 14.20. Uma transferncia no sentido inverso ter um programa semelhante, em que no ciclo de espera se testa se o perifrico tem dados prontos para enviar para a memria. Esta a abordagem mais simples em termos de hardware, uma vez que tudo resolvido pelo software. A grande desvantagem naturalmente que a UCP ca completamente monopolizada por esta tarefa que , em geral, uma tarefa lenta. Para muitos casos, a maior parte do tempo a UCP estar no ciclo de espera em que se testa se o perifrico est novamente disponvel.

14.5.2 Transferncia Controlada por Interrupes


Uma forma mais optimizada de realizar a transferncia de dados usar o sistema de interrupes do processador. Assim, mantm-se a transferncia de informao a cargo da UCP, mas esta deixa de ter que car em ciclo lendo o bit de estado da interface espera que esta indique a possibilidade de fazer uma nova transferncia. Em vez disso, quando o perifrico estiver de novo disponvel, a sua interface coloca um sinal activo que provocar uma interrupo do processador. A interface dever manter o sinal de interrupo activo at que a UCP a informe que vai tratar a sua interrupo, normalmente atravs de um sinal de conrmao de interrupo (em ingls, interrupt acknowledge no caso do processador P3 do Captulo 12, o sinal ). Este modo de transferncia permite, no contexto do exemplo anterior, que o processador esteja a executar qualquer actividade e, quando interrompido, corra a rotina que procede transferncia de dados. A rotina ter a estrutura da Figura 14.21. Pode-se observar que esta rotina corresponde simplesmente fase de transferncia de dados entre a memria e o perifrico do programa anterior. Com esta implementao, a UCP deixa de ter ciclos desperdiados espera que o perifrico que disponvel. A UCP continua, no entanto, a ter algum tempo de processamento dedicado transferncia, mas este um tempo til no sentido em que se est de facto a realizar a cpia dos dados. Para alm disso, esta implementao permite que existam vrias transferncias a decorrer em simultneo com diferentes perifricos. Na situao anterior,

14.5. MODOS DE TRANSFERNCIA DE DADOS

295

L o porto de estado da interface

Isola bit de estado de perifrico pronto

pronto? sim

no

L posio de memria para um registo

Escreve registo no porto de escrita da interface

Incrementa posio de memria e total de transferncias

fim? sim

no

Figura 14.20: Fluxograma de um programa de controlo da transferncia de dados por software.

tal no era possvel pois a UCP estava dedicada transferncia de um bloco com um perifrico, no dando ateno a mais nada, nomeadamente outros perifricos. Com transferncias controladas atravs de interrupes, depois de se lanar a transferncia de um bloco para um dado perifrico, a UCP ca liberta para iniciar em paralelo uma nova transferncia com outro perifrico. Esta possibilidade levanta trs problemas. O primeiro problema que, tal como referido na Seco 11.5.3, durante a execuo de uma rotina de tratamento a uma interrupo, as interrupes so automaticamente inibidas de forma a que esta rotina no possa ser interrompida. Em muitos processadores, este problema minimizado permitindo que

296

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

L posio de memria para um registo

Escreve registo no porto de escrita da interface

Incrementa posio de memria e total de transferncias

Figura 14.21: Fluxograma de rotina de tratamento de interrupo numa transferncia de dados por interrupo. perifricos mais prioritrios possam interromper rotinas de interrupo com menor prioridade. De qualquer forma, pode acontecer a UCP no responder de imediato interrupo de um perifrico caso tenha sido interrompida por outro h pouco tempo e assim ainda esteja a tratar dessa transferncia. Em geral, cada dispositivo tem um tempo de resposta mximo (em ingls, timeout). O comportamento caso esse tempo seja excedido especco a cada dispositivo, desde o abortar a comunicao com um cdigo de erro, passando pelos que fazem uma nova tentativa de comunicao (at se atingir um nmero mximo de tentativas), at ao ignorar puro e simples deste erro de transmisso e passagem imediata aos dados seguintes. Como as rotinas de tratamento interrupo utilizadas nas transferncia de dados so extremamente simples (conforme Figura 14.21), logo com um tempo de execuo muito baixo, este no normalmente um problema srio. Portanto, mesmo em caso de conito, os tempos de resposta a uma interrupo no excedem, em geral, os tempos de resposta mximos dos dispositivos. O segundo problema que surge quando existe mais do que uma transferncia a decorrer em simultneo que quando a UCP recebe uma interrupo tem que ter mecanismos para poder identicar qual foi o dispositivo que gerou essa interrupo. Esta identicao tem como nalidade a seleco da rotina de tratamento interrupo que deve ser executada, especca para cada perifrico. Uma soluo simples para este problema a UCP disponibilizar para o exterior um conjunto de linhas de interrupes independentes, atribuindo-se a cada perifrico do sistema uma dessas linhas. Esta soluo pode no ser prtica quando o nmero de perifricos elevado. A alternativa usar uma linha de interrupo nica (como no caso do P3 estudado no Captulo 12), mas nesse caso a UCP ter que passar por um processo para a identicao do perif-

14.5. MODOS DE TRANSFERNCIA DE DADOS


Enderecos Dados m

297

UCP
IntN Int2 Int1 Int0 Disco Rato Teclado

...

Memria

Figura 14.22: Diagrama de processador e perifricos ligados com linhas de interrupo individuais. rico aps a recepo de uma interrupo. Estas alternativas so analisadas em detalhe em seguida. Notar que possvel um processador conjugar as duas alternativas, com um conjunto de linhas de interrupo em que uma ou mais destas partilhem perifricos. Finalmente, um terceiro problema est relacionado com a possibilidade de vrios perifricos gerarem simultaneamente uma interrupo, colocando-se a questo de qual destas interrupes deve ser tratada em primeiro lugar. necessrio, portanto, denir uma ordem de prioridades no atendimento das interrupes. Ao contrrio do que se poderia pensar partida, os dispositivos com maior prioridade no so, em geral, os que interagem com o utilizador. Normalmente, os dipositivos mais rpidos (por exemplo, o disco) tm maior prioridade do que os mais lentos (por exemplo, o teclado), que, como foi observado atrs (ver Seco 14.2), so tipicamente os que fazem a interface com o utilizador. A razo desta ordem de prioridades deve-se a que os dipositivos mais rpidos exigem tempos de resposta mximos menores, pois necessitam que a sua informao seja lida ou escrita rapidamente para que possam car prontos para os prximos dados que chegam a ritmo elevado. A maneira como o tratamento destas prioridades realizado depende da forma de identicao das interrupes e ser discutido dentro de cada uma das seces que segue. Linhas de Interrupo Independentes A soluo conceptualmente mais simples em termos de identicar o dispositivo que gera uma interrupo o processador disponibilizar linhas individuais de interrupo. Nestas condies, basta ligar a linha de interrupo de cada perifrico a uma das linhas de interrupo do processador, como exemplicado na Figura 14.22. Cada linha de interrupo ter associado um endereo de incio da rotina de tratamento interrupo. Este endereo pode ser xo e denido partida. da Figura 14.22 saltar sempre para o Por exemplo, a interrupo da linha endereo h, a da linha no endereo h, etc. Portanto no endereo h dever estar o incio da rotina de tratamento interrupo do perifrico ligado a essa linha. No caso da Figura 14.22 seria a rotina de tratamento das

298

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

interrupes do disco. Uma alternativa mais exvel, e tambm mais comum, atravs da utilizao de uma tabela de rotinas de interrupo. Esta tabela reside numa posio xa em memria e ter tantas entradas quantas as linhas de interrupo do processador. Cada entrada est associada a uma das linhas de interrupo e contm o endereo do incio da rotina de tratamento ao perifrico ligado nessa linha. possvel por software denir as entradas nessa tabela, dando portanto maior exibilidade no posicionamento das rotinas de tratamento s interrupes. Para exemplicar, e voltando Figura 14.22, considere-se que o processador tem 16 linhas de interrupo, de a . Neste caso, a tabela de rotinas de interrupo ocupar 16 posies de memria, estando cada posio desta tabela associada ao ndice da linha de interrupo. Considere-se ainda que foi denido para esta UCP que esta tabela comea no endereo h. Caso surja uma interrupo na linha de interrupo , a execuo da rotina de interrupo ter lugar a partir do valor guardado na posio de memria h , ou seja, . ser realizada a transferncia Com esta organizao, est denida partida uma prioridade xa para as linhas de interrupo. Por exemplo, tm maior prioridade as linhas de interrupo com ndice menor. Assim, caso surja mais do que uma interrupo em simultneo, ser atendida aquela com ndice menor. As restantes caro pendentes e sero tratadas aps a execuo da rotina de interrupo desta. Este funcionamento possvel graas inibio automtica das interrupes quando se entra numa rotina de tratamento a uma interrupo. Portanto, como referido atrs, os dispositivos mais rpidos devero ser ligados s linhas de interrupo com ndice menor. No caso da Figura 14.22, pela forma como os perifricos foram ligados s linhas de interrupo, o disco ser o perifrico com maior prioridade, seguido pelo rato. Linha de Interrupo Partilhada A abordagem apresentada atrs limita o nmero de perifricos capazes de gerar interrupes ao nmero de linhas de interrupo disponveis. Uma alternativa ter uma nica linha de interrupo partilhada por todos os perifricos. Quando esta linha activada, a primeira tarefa da UCP identicar qual o perifrico que a gerou e em seguida executar a rotina de tratamento interrupo correspondente. Este processo pode, por sua vez, ser resolvido por duas formas. As interrupes podem ser vectorizadas ou no. Com interrupes vectorizadas, o perifrico responsvel pela interrupo informa a UCP que foi ele quem a gerou. No caso das interrupes no vectorizadas, ter que ser a UCP a varrer os perifricos at identicar aquele que gerou a interrupo. Analisam-se em seguida estas duas alternativas. Interrupes No Vectorizadas Como referido, com uma linha de interrupo nica e com interrupes no vectorizadas ser necessrio a UCP por software ter um processo de identicar o perifrico que requisitou a sua ateno. A forma de o fazer ler em sequncia o registo de estado na interface de cada um dos perifricos at encontrar um

  

14.5. MODOS DE TRANSFERNCIA DE DADOS

299

Inicializa endereo E/S para o primeiro perifrico

L o porto de estado da interface

Isola bit de estado de perifrico pronto

sim

pronto?

no

Salta para rotina de interrupo desse perifrico

Passa para endereo E/S do perifrico seguinte

Figura 14.23: Fluxograma da fase inicial da rotina de interrupo para interrupes no vectorizadas que identica qual o perifrico que deve ser servido. que esteja pronto a transferir informao. Este procedimento est ilustrado na Figura 14.23. Este processo tambm chamado de polling, apesar de ser uma forma diferente polling da apresentada na Seco 14.5.1. Aqui sabe-se partida que haver um perifrico pronto a transferir informao e o objectivo do polling identidicar qual. Anteriormente, o polling foi usado no contexto de uma espera activa, em que se ca em ciclo at o perifrico com quem se est a realizar a transferncia esteja pronto. Portanto, no caso de interrupes no vectorizadas, a rotina de interrupo nica, sendo o uxograma da sua fase inicial o apresentado na Figura 14.23. No entanto, uma vez identicado o perifrico a servir, esta salta para uma zona de cdigo de tratamento da interrupo especco a esse perifrico. Neste mtodo de interrupes, a maneira de denir prioridades conseguida atravs da ordem com que os perifricos so testados. fcil observar que, caso tenha havido mais do que um perifrico a gerar uma interrupo, ser atendido primeiro o que for testado em primeiro lugar. De facto, nessa altura, o processador nem se chega a aperceber que h mais perifricos a requerer a sua ateno. Depois de ter tratado do primeiro perifrico, como a linha de interrupo continuar activa, haver uma nova chamada rotina de tra-

300

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

tamento da interrupo e desta vez, se entretanto no tiverem chegado novas interrupes de maior prioridade, j se chegar ao perifrico de menor prioridade. Logo, a ordem de teste igual ordem de prioridade do perifricos. Esta uma abordagem simples e exvel, pois o controlo est do lado do software. Porm, tem o problema de, para a maioria das aplicaes, ser demasiado lenta. O ciclo de teste dos perifricos pode demorar bastante tempo, o que altamente indesejvel numa rotina de tratamento a interrupes. Interrupes Vectorizadas O caso mais comum para gerir as interrupes num computador atravs de interrupes vectorizadas. Com esta abordagem, aps a UCP ter activado o sinal de conrmao de interrupo, o dispositivo que gerou a interrupo ter que se identicar, colocando o seu vector de interrupo no barramento de dados. Este vector de interrupo no mais do que um valor numrico nico, atribudo a cada perifrico do sistema. Da mesma forma que com linhas de interrupo independentes, a UCP utiliza este identicador para obter o endereo da rotina a executar a partir de uma tabela de rotinas de interrupo. Para gerir as interrupes e o dilogo com a UCP, utilizam-se normalmente circuitos controladores de interrupes, PIC (em ingls, Programmable Interrupt Controller). As funcionalidades tpicas de um PIC so: aceitar um conjunto de linhas de pedido de interrupo. gerir a interface com o processador. fornecer um vector correspondente interrupo mais prioritria, quando pedido pelo processador. permitir o mascaramento de interrupes.

Uma estrutura interna possvel para um PIC com oito linhas de interrupo est representada na Figura 14.24. As linhas so as linhas provenientes das interfaces dos perifricos, em que dene o vector do perifrico a ligado. A cada valor de est associada a prioridade da linha. Assuma-se, por exemplo, que a um valor menor de est associada uma maior prioridade da linha. Nesta situao, os perifricos de maior prioridade devero estar ligados s linhas de ndice menor. Todas as linhas de interrupo cam memorizadas no registo que mantm as interrupes pendentes. Na forma mais simples, bastaria uma porta OR para a UCP. No enentre todas as sadas deste registo para gerar o sinal tanto, em geral, o PIC permite fazer o mascaramento de interrupes. Para isso, est disponvel um registo de mscara de interrupes que permite ltrar as interrupes e assim impedir que parte das linhas gerem de facto uma interrupo. Para isso, basta colocar a 0 o bit deste registo com peso igual ao vector de interrupo que se pretende inibir. Este registo est mapeado no espao de entradas/sadas da UCP, e portanto, por software, possvel denir a cada passo de um dado programa quais so os perifricos de que se aceitam interrupes. As sadas do registo de interrupes pendentes entram tambm num codicador com prioridades, como o descrito na Seco 5.2.2. Este codicador gera na sua sada o valor binrio correspondente entrada com menor ndice

14.5. MODOS DE TRANSFERNCIA DE DADOS


Interrupes Pendentes Int0 Int1 Int2 Int3 Int4 Int5 Int6 Int7 Codificador com prioridades

301

Vector de interrupo

Linha de interrupo (INT)

Mscara de Interrupes

Figura 14.24: Diagrama da organizao interna de um controlador de interrupes. que est a 1 (caso a ordem das prioridades fosse o contrrio da denida atrs, bastaria trocar a ordem de prioridades deste codicador). A sada deste codicador colocada no barramento de dados quando a UCP envia o sinal indicando que est a responder a um pedido de interrupo e que pretende saber o vector dessa interrupo. At esta altura do texto, assumiu-se sempre que uma rotina de servio a uma interrupo no pode ser interrompida, pois o bit de estado que habilita as interrupes automaticamente colocado a 0 quando se serve uma interrupo. Por vezes, este no o comportamento ideal. Nomeadamente, num sistema com perifricos com diferentes prioridades fcil perceber que pode ser desejvel permitir que um dispositivo de maior prioridade interrompa a rotina de servio interrupo de outro perifrico menos prioritrio. Para este m, o PIC tem, regra geral, um registo extra que mantm informao de qual (ou quais, pois abriu-se agora a porta para uma rotina de interrupo poder ser por sua vez interrompida) o vector de interrupo que est a ser servido, como mostra esquematicamente a Figura 14.25. Este actualizado com o valor do vector de interrupo activo com maior prioridade na altura em

302
Int0 Int1 Int2 Int3 Int4 Int5 Int6 Int7

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

Interrupes Pendentes

8 Vector de interrupo Linha de interrupo (INT)

Mscara de Interrupes

Resolvedor de Interrupes

Interrupo Servida

Figura 14.25: Diagrama da organizao interna de um controlador de interrupes com registo de informao do vector a ser servido. que vez o sinal da UCP. Se entretanto chegar uma nova interrupo com prioridade inferior que est a ser tratada, esta ignorada at que termine o tratamento da interrupo actual. Caso a prioridade seja mais elevada, ento a linha de interrupo para a UCP imediatamente reactivada. Para que este processo funcione correctamente, a UCP tem que ter um comportamento diferente do que foi apresentado para o caso do processador P3 do Captulo 12 em dois pontos: 1. o bit de estado E que permite ou no o atendimento de novas interrupes no deve ser colocado a zero automaticamente quando da entrada numa rotina de servio a uma interrupo. Em alternativa, possvel manter o mesmo comportamento do Captulo 12 desde que a primeira instruo de cada rotina de servio a interrupes seja um ENI. 2. a UCP tem que avisar o PIC do m da rotina de interrupo, para que este possa limpar a entrada correspondente no registo que mantm informao das interrupes activas. Naturalmente, existem alternativas ao modelo de PIC aqui apresentado. Nomeadamente, possvel realizar este modo de funcionamento em termos distribudos. Um exemplo simples o sistema de daisy-chain, em que o perifrico mais prioritrio recebe sempre o sinal de conrmao de interrupo, . Se no tiver sido ele a gerar a interrupo, ele prprio envia o para o segundo mais prioritrio, e assim sucessivamente at se chegar ao dispositivo que gerou a interrupo.

14.5. MODOS DE TRANSFERNCIA DE DADOS

303

14.5.3 Acesso Directo Memria


Como se viu no caso da transferncia por interrupo, a UCP foi aliviada da tarefa de teste da disponibilidade dos perifricos para nova transferncia e pode concentrar-se em outras tarefas, sendo a sua ateno desviada apenas de vez em quando para realizar efectivamente a transferncia de uma palavra de dados. Mas mesmo esta transferncia utiliza a UCP apenas porque no pode ser feita directamente da memria para o perifrico ou vice-versa, uma vez que a UCP se limita a ir buscar a palavra a um dos stios e colocar no outro. O objectivo dos dispositivos DMA (direct memory access, ou acesso directo memria) exactamente o de permitir esta transferncia sem interferncia da UCP. Para alm de libertar de vez a UCP do processo de transferncia de dados, uma segunda vantagem em realizar este tipo de transferncia directamente permitir que, em transferncias com perifricos muito rpidos, a UCP no constitua o ponto de estrangulamento da transferncia. Um controlador de DMA , portanto, um circuito que, sempre que necessrio realizar uma transferncia, toma controlo dos barramentos do sistema e coordena a transferncia de dados entre a memria primria e um perifrico ou vice-versa. Durante a transferncia de dados, a UCP no pode aceder aos barramentos que ligam memria primria e aos perifricos, logo no pode ir memria, quer para buscar uma nova instruo, quer para ler dados. Isso no impede, porm, a UCP de continuar a executar uma instruo desde que esta no implique um acesso aos barramentos. Nos sistemas com memrias cache, o impacto da transferncia DMA pode ser substancialmente menor. Durante uma transferncia DMA, a UCP pode continuar a aceder normalmente hierarquia de caches. Assim, enquanto a UCP conseguir obter a partir das caches as instrues e dados de que necessita, pode continuar a sua execuo normal. Se ocorrer uma falta na cache, ento sim, bloqueia-se espera de poder novamente aceder aos barramentos. Antes de assumir o controlo dos barramentos do sistema, o controlador de DMA tem, porm, de pedir UCP esse controlo e tem que esperar que este lhe seja concedido. Isso realiza-se atravs de duas linhas, que podem ter a denominao _ e _ . Assim, o controlador de DMA quando pretende realizar uma transferncia activa o sinal _ . O processador, se estiver a realizar um ciclo de leitura ou escrita, termina o ciclo e, logo aps, liberta os barramentos, colocando-os em alta impedncia e activa a linha _ . O controlador de DMA realiza a transferncia e, aps isso, desactiva a linha _ devolvendo o controlo dos barramentos ao processador. Arquitectura de DMA O funcionamento pode ser melhor compreendido com recurso Figura 14.26, em que, para no complicar desnecessariamente a gura, no est representada a hierarquia de caches. A sequncia de operaes para uma transferncia por DMA a seguinte: 1. A UCP funciona normalmente, processando instrues e realizando escritas e leituras da memria.

304

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES


Endereos Dados MRD/MWR IORD/IOWR

n m UCP

Perifrico A Memria Primria


BUS_REQUEST BUS_GRANT DMAR_A

Perifrico B

...

Controlador DMA

DMAG_A DMAR_B

DMAG_B

Figura 14.26: Arquitectura do sistema com um controlador DMA. 2. O perifrico A, por exemplo, tem uma palavra de dados que deve ser transferida para a memria. A interface deste perifrico activa a linha _ (em ingls, DMA Request), pela qual pede ao controlador de DMA autorizao para a operao.

4. Quando possvel, a UCP liberta os barramentos, deixando-os em altaimpedncia e activa a linha _ . 5. O controlador de DMA coloca o endereo da posio de memria onde escrever no barramento de endereos, coloca a linha a 0 e activa a linha _ , dando assim indicao ao perifrico da autorizao para a transferncia. 6. O perifrico, recebendo a autorizao, coloca os dados no barramento de dados e retira o _ . 7. O controlador desactiva (respeitando as temporizaes de escrita ou leitura da memria) o barramento de endereos, as linhas , _ e _ . 8. A UCP retira a linha _ e retorna sua actividade normal.

Repare-se que tanto os sinais _ / _ como os sinais _ / _ seguem um protocolo de double hand-shaking. O Controlador de DMA O controlador de DMA funciona, durante um ciclo de DMA, como mestre dos barramentos, mas durante o resto do tempo funciona como escravo. Nomeadamente, antes de realizar ciclos de DMA tem que ser programado pela UCP para conhecer os endereos para/de onde transferir dados na memria, qual a quantidade de informao a transferir e qual o tipo de DMA. Para que esta programao seja possvel, o controlador de DMA dispe internamente de um conjunto de registos que podem ser escritos ou lidos pela

3. O controlador de DMA activa, por seu lado, a linha espera por autorizao da UCP.

14.5. MODOS DE TRANSFERNCIA DE DADOS

305

Endereos

n
LD OE

Endereo

Read Write Lgica de Controlo


LD OE

BUS_REQUEST BUS_GRANT

Contador de Acessos

LD OE Registo de

Controlo

Dados

DMAR

DMAG

Figura 14.27: Estrutura interna de um controlador de DMA. UCP. A estrutura interna tpica de um controlador de DMA descrita na Figura 14.27. No incio de uma transferncia DMA o processador enderea os registos internos do controlador para programar o tipo e direco das transferncias no Registo de Controlo, o endereo do incio da zona de memria envolvida na transferncia e o nmero de acessos a realizar. O processador ter ainda que programar o perifrico envolvido, ou melhor, a sua interface. A partir daqui o processador deixa de interferir no processo. Sempre que um perifrico pretende realizar uma transferncia, activa a sua linha (DMA Request). O controlo, como se viu, pede controlo dos barramentos atravs da linha _ . Quando este dado pelo processador atravs da linha _ , o controlador: 1. activa o buffer de endereo de modo a enderear a posio de memria envolvida; 2. activa a linha ou , conforme se trate de leitura da memria para o perifrico ou o inverso; 3. activa a linha (DMA Grant) do perifrico, o que o leva a receber a palavra proveniente da memria pelo barramento de dados ou a transferir a sua palavra interna para o barramento de dados. Acabado este ciclo, o controlador:

2. incrementa o Registo de Endereo para car a apontar para a posio seguinte de memria;

1. retira o pedido

306

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

Pede controlo dos barramentos

Transfere uma palavra

Cede controlo dos barramentos

sim

Fim Transfer.? no

Perif. pronto? sim

no

Figura 14.28: Fluxograma de transferncia DMA por palavra. 3. decrementa o Contador de Acessos; 4. se o Contador de Acessos car a zero, activa a linha de Interrupo para avisar o processador que a transferncia programada terminou. Na gura est ilustrado um controlador com um canal de DMA, mas muitos controladores comerciais possuem mais que um canal. Nesse caso, apenas so replicados os mdulos especicamente referentes a cada canal e o controlo tem que gerir prioridades no acesso dos vrios perifricos para gerir pedidos concorrentes. Tipos de DMA H vrios aspectos que permitem denir as caractersticas de DMA. Uma transferncia por DMA pode ser: De memria para perifrico.

14.5. MODOS DE TRANSFERNCIA DE DADOS

307

Pede controlo dos barramentos

Transfere uma palavra

sim

Fim Transfer.? no

Perif. pronto? no Cede controlo dos barramentos

sim

Cede controlo dos barramentos

Perif. pronto?

no

sim

Figura 14.29: Fluxograma de transferncia DMA por burst. De perifrico para memria.

ou com alguma complexidade adicional e procedimentos diferentes: De memria para memria. De perifrico para perifrico.

As transferncias como as descritas atrs so do tipo simultneo. Neste tipo de transferncia, numa transferncia de perifrico para memria, por exemplo, a leitura do perifrico e a escrita de memria so feitas em simultneo, utilizando o barramento de dados. As transferncia do tipo sequencial obrigam o controlador de DMA a realizar sequencialmente a leitura da palavra a transferir da sua origem para um registo interno ao controlador e a escrev-lo imediatamente a seguir no seu destino.

308

CAPTULO 14. ENTRADAS, SADAS E COMUNICAES

Pede controlo dos barramentos

Transfere uma palavra

sim

Fim Transfer.? no

Cede controlo dos barramentos

Perif. pronto? sim

no

Figura 14.30: Fluxograma de transferncia DMA por bloco. O primeiro tipo mais rpido e o controlador menos complexo. No segundo tipo, porm, permite-se transferir informao entre dois perifricos, ou entre duas zonas de memria. Por outro lado, as transferncia por DMA podem ser realizadas em 3 modos diferentes: modo Palavra, modo Rajada e modo Bloco. No modo de transferncia por palavra (em ingls, word), cada ciclo de DMA usado para transferir uma palavra aps o que o controlo do barramento devolvido UCP, como descrito pelo uxograma de Figura 14.28. Na transferncia por rajada (em ingls, burst), um ciclo de DMA usado para transferir uma palavra aps o que, a haver mais palavras prontas para ser transmitidas, se d incio a uma nova transferncia. O controlo do barramento s devolvido UCP quando no houver mais dados para transmitir. Este comportamento est representado no uxograma da Figura 14.29. Na transferncia por bloco (em ingls, block), quando arranca uma transferncia o controlador DMA permanece com controlo sobre os barramentos at ser transferido o total das palavras para que foi programado, independentemente de entre cada par de palavras o perifrico estar ou no pronto. Usa-se este modo para transferir dados de e para perifricos muito rpidos. A Figura 14.30 descreve este modo de transfererncia.

14.5. MODOS DE TRANSFERNCIA DE DADOS


Endereos Dados MRD/MWR

309

n m UCP

Memria Primria
BUS_REQUEST BUS_GRANT

Processador Entradas/Saidas

Endereos Dados Interrupao IORD/IOWR

Perifrico A

Perifrico B

...

Figura 14.31: Interligao de um processador de entradas/sadas.

14.5.4 Transferncia usando um Processador de Entrada/Sada


As transferncias DMA permitem libertar a UCP do processo de copiar dados de perifricos para memria ou vice-versa. Um processador de entradas/sadas tem o mesmo objectivo, com a exibilidade adicional de ser facilmente programvel. A interligao de um processador de entradas/sadas apresentada na Figura 14.31. Como se pode observar pela gura, os perifricos do sistema comunicam todos com o processador de entradas/sadas. Este est ligado aos barramentos da memria do sistema, mas, em funcionamento normal, estes so controlados pela UCP. Tal como o controlador DMA, o processador de entradas/sadas s pode utilizar estes barramentos depois de ter pedido autorizao, e esta ter sido concedida, UCP. A vantagem adicional do processador de entradas/sadas a de, tal como um processador genrico, executar programas. O conjunto de instrues assembly que estes processadores executam pode ser mais reduzido que o de um processador genrico, mas, em geral, possuem instrues especcas para leitura e escrita de dados de diferentes fontes. Assim, este processador pode no s transferir informao de um perifrico para memria, ou vice-versa, mas pode realizar por si algum tipo de processamento desta informao, reduzindo ainda mais o peso do sistema de entradas/sadas na UCP. Tal como o controlador DMA, o processador de entradas/sadas funciona normalmente como escravo da UCP. Para alm do processador de entradas/sadas ter que pedir autorizao para aceder aos barramentos com a memria, a UCP que dene partida qual o programa que o processador de entradas/sadas deve executar para controlar a transferncia de um dado perifrico.

14.5. MODOS DE TRANSFERNCIA DE DADOS

313

Glossrio

Você também pode gostar