Escolar Documentos
Profissional Documentos
Cultura Documentos
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
114
Mais Abstracto
Sistema
Menos Detalhe
Porta Lgica
Transistor
Mais Concreto
Layout
Mais Detalhe
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
Resultados
Figura 9.2: Estrutura de um sistema digital em termos de unidade de processamento e de unidade de controlo.
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
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.
120
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.
121
122
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.
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
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,
124
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
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.
126
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
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
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
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.
130
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
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.
132
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.
133
B
n
SelB Y
n
2 2
Cin
+ Cout Cout
n
Cin
SelC
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.
134
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)
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.
1 0 1 0
0 1
0 1
Micro-Operao soma subtraco soma com bit de transporte subtraco com bit de transporte decremento incremento decremento, se incremento, se
136
MUX
Ri
3 SS 0 1
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
137
138
C
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
R1
R0 C
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.
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
139
SHR SHL
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.
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
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.
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
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
143
MUX C
C A R
ROM de Controlo
19
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.
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
01 01 10 11
10 10
reg B
. .
. Se:
reg dest
00 01 11 01 10
144
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.
146
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
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.
Computer.
148
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.
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.
150
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.
151
CABO VDEO
LINHA PARALELA
LINHA SRIE
152
NVEL 5
NVEL 1
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
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.
154
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.
156 Endereo Base 2 0001000000000000 0001000000000001 0001000000000010 0001000000000011 0001000000000100 0001000000000101 0001000000000110 0001000000000111 0001000000001000
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-
157
00A0h 00B0h 00B1h F000h R1, M[N1] R1, M[N2] R1, M[N3] R1 M[N4], R1
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
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
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
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.
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.
162
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.
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
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.
FF02h SP
FF03h SP
FF02h SP
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
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
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
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
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.
170
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.
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
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.
173
... ...
...
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
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.
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.
176
NEG INC DEC ADD ADDC SUB SUBB CMP MUL DIV
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
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
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.
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.
179
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
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.
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
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
sador, ao contrrio do que acontece com as operaes aritmticas, lgicas e de deslocamento estudadas nas seces anteriores.
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.
183
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.
; 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.
; Limpa o registo R2
Ciclo:
Programa 11.11: Soma das 10 posies de memria com incio na posio Start, incrementando o contador.
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.
185
Endereamento Por registo Por registo indirecto Imediato Indexado, directo, relativo ou baseado
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
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.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
187
IR1
188
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).
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.
O valor do campo
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
191
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
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.
193
mais simples, sem a preocupao de conhecer detalhes relacionados com a linguagem de programao.
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.
194
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.
195
Inicializa Apontador
L Caracter
Sim
Fim Texto ?
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:
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
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
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,
Fim Texto ?
Espao ? 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
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
Inicializa Apontador
Imprime Caracter
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
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-
199
Inicio:
; Inicializa a pilha
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 12
202
4 4 A
Banco de Registos
B 16 MB
16
0 1
MA
MUXA
MUXB
WM
Memria
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-
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.
204
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.
205
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 .
206
FIN 5
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.
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,
208
Sinal
R3
R3
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
209
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.
210
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 .
211
4 4 A
Banco de Registos
B 16 MB
0 1
16 WM F 16 W
MUXA
MUXB
Memria
FM F LF 16 F
16 FIN 5
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
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.
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
NA
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.
pela pela
214
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
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.
216
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.
217
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 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
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
4 4 M2 RB 4
0
RI15 M2 S
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
219
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.
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
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, .
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=10...
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
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.
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
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.
224
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
RD EA RD RD PC EA PC EA RD
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
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
SBR
SBR
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.
EA PC EA SD RD
SD PC RD
EA SD RD
SD RD
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.
ADD0: ADD1:
CAR+1
CAR+1
; ; ; ;
228
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.
WBR0: WBR1:
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.
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.
, esteja inactivo.
, esteja inactivo.
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
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.
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.
PC+1, CAR
ROMA[OPCODE].
1 0
RAD
1111
232
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
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
Dados
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
Dados
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.
237
A15
A14
Mem Enable
S1
S0
EN Descodificador
0 1 2 3
D7D0
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
A15
A14
Mem Enable
EN
0
S1
S0
Descodificador
1 2 3
D7D0
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.
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.
R/W
CS
ADDR DATA
240
RAM
F0000h
...
1FFFFh
RAM
10000h
...
07FFFh
ROM
00000h
UCP
8 16
RAM
DATA ADDR
CS
RAM
DATA ADDR
Descodificador
. .
16
1 0
CS 8 15
ROM
DATA ADDR
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
T2
T3
T0
T1
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.
UCP
Cache L1
Cache L2
Memria Primria
Memria Secundria
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
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.
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
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.
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
durante a execuo til de outro processo, diminuindo-se signicativamente o despedcio do tempo de processamento.
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
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.
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.
252
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
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
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
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
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.
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.
256
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.
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).
258
Nmero da pgina virtual
Tabela de pginas
00000h 00001h 00002h 00003h 0001h 0003h 0000h 0002h
Memria Primria
0000 000h 0001 000h 0002 000h
. . .
+
NULL
0003 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
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
. . .
FFFEh FFFFh
...
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
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.
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.
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.
262
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.
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
UCP
Pgina 20
Deslocamento
TLB Hit
Ready
CACHE
20 2 Etiqueta Deslocamento =
En Sel MUX
32 Hit
MEMRIA
Controlo Controlador 12 Endereos DIMM DIMM DIMM DIMM
32 32 32 32
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
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 14
268
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.
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.
Descodificao de endereos
...
Registos
Controlo
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
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).
271
...
Interface A En Descodificao Interna 0 n-1 Interface X
...
Controlo Escrita Leitura
...
Perifrico X Porto 0
...
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
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
Monitor
UCP
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
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.
278
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
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.
280
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.
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
Descodificao Externa
...
Controlo
Enable da Interface
Escrita
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
283
...
Porto 0 S 1D C1 R
OEn Porto 2
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
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
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
Dados a enviar
45
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
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.
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.
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
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.
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
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
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
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.
292
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
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
...
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 ,
294
295
pronto? sim
no
fim? sim
no
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
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-
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
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
299
sim
pronto?
no
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
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
301
Vector de interrupo
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
Interrupes Pendentes
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.
303
304
n m UCP
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.
305
Endereos
n
LD OE
Endereo
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
sim
Fim Transfer.? no
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.
307
sim
Fim Transfer.? no
sim
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
sim
Fim Transfer.? no
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.
309
n m UCP
Memria Primria
BUS_REQUEST BUS_GRANT
Processador Entradas/Saidas
Perifrico A
Perifrico B
...
313
Glossrio