Está en la página 1de 566
Miles J. Murdocca - Vincent P. Heuring Rutgers University University of Colorado Principios de arquitectura de computadoras . h Priticipios de arquitectura de computadoras: ‘TRaDUCCCION Ing. Fernando Szklanny Universidad de Buenos Aires Universidad Nacional de La Matanza Universidad de Morén REVISION TECNICA Ing. Elio de Maria Universidad Necional de La Matanza Universidad de Morén Universidad de Palermo Argentina + Botivia « Brasil» Colombia + Costa’ Rica * Chile » Ecuador * El Salvador + Espaita + Guaternala + Honduras * México » Nicaragua * Panamd + Paraguay + Peri + * Puerto Rico + Repibliea Dominicana * Uruguay * Venezuela 2 Amsterdam = Harlow + Londres = Menlo Parte nici» Nueva Delhi » Nuova Jersey = toy, Nueva York + Ontario + Paris Sidnoy + Singapur + Tokio + Toronto * Zurich es J. Murdocéa ~ Vincent P. Heuring: j | j Pier een Joos Muniocca, Mites MUR Principios de anquitectura de computadoras / Miles ‘Mardocca y Vincent Heuring ~ I" ed. - Buenas Aices Pearson Education, 2002. S84; 25,5 x 19,500 ‘Traducciém de: Feroando S2klanny ISBN: 987.9560.69-3 1, Heuring, Vinceat Il. Tiulo -1. Compuradoras = Arquiteetora Editor: Enrique Baumann Disetio de Tapa: Diego Linares Disefio de Interior: Adriana Mariner ‘Tradueci6n: Fernando Saklanny Correccién: Masta E. Walas Produccién: Marcela Mangacelli / Cristian Rodrigues Yabares ‘Traducido de: PRINCIPLES OF COMPUTER ARCHITECTURE, 1* Edicion by MURDOCCA, MILES, HEURING, VICENT P, published by Peatson Education, lnc, publishing as PRENTICE HALL, INC, Copyright © 2000, ISBN: 0-20-0143664-7 Edicién en espafiol publicada por: Copyright © 2002 PEARSON EDUCATION S.A. Ay, Regimiento de Patcicios 1959 (C12G6AAF), Buenos Aires, Rep. Argentina PRENTICE HALL Y PEARSON EDUCACION son marcas de propiedad de FEARSON EDUCATION S.A. ISBN: 987-9460-69-3 Primera edicién: enero de 2002 Queda hecho el depésito que dispone la ley 11.723 Esce libro no puede ser eproducide soral ni parcialmente en ninguna forma, ni por ningin media procedi- tiento, sea reprogrifico,forocopia, microfilmacién, mimeogrdfico o cualquier otro sistema mecinico,Foroqul- formitico, magnética, electrodptica, exétera. Cualquier reproduccién sin el permiso pre- vio por escrito de la editorial viola derechos reservados, es ilegal y constituye un delio, Impreso en Brasil por RR Donnelley, en el mes de enero de 2002. Rus Epiacaba 90 -Vila Arapus— 04257.170 - So Paulo SP Para Ellen, Alexandra y Nicole Para Gretchen Indice . de contenidos Prélogo 1. Introduccién 1.1 Planteo general 1.2 Una historia breve 1.3 El modelo von Neumann 1.4 El modelo de interconexi6n a través de bus 1.5 Niveles de méquina 5.1 Compatibilidad “hacia arriba” 1.5.2 Los niveles 1.6 Un sistema de computacién tipico 1.7 Organizacién de la obra 1,8 Estudio de un caso: ;Qué le ocurrié a las supercomputadoras? Resumen Para lectura posterior Problemas 2, Representacién de la informacién 2.1 Introduccién 2.2 Nimeros de punto fijo 1 Rango y precisi6n on nimeras de punto fijo 2.2.2 La ley asociativa del dlgebra no siempre funciona en la computadora 2.2.3 Sistemas de numeracién posicionales 2.2.4 Conversién entre sistemas 2.2.5 Una primera mirada a la aritmética de las computadoras 2.2.6 Niimeros signados en formato de punto fijo 2.2.7 Decimal codificado en binario 2.3 Formato de representacién en punto flotante 2.3.1 Rango y precisién en nimeros de punto flotante 2.3.2 La normalizaci6n y el esquema de bits implicitos X_PRINGIPIOS DE ARQUITECTURA DE COMPUTADORAS 2.3.3 Representacién de nimeros de punto flotante dentro de la computadora. Introduccién 2.3.4 Errores en la representaci6n de punto flotante Ejemplo 2.3.5 La norma de representacién IEEE 754 2.4 Estudio de un caso: una falla en un misil defensivo Patriot causada por una pérdida de precisién 2.5 Cédigos alfanuméricos 2.5.1 El conjunto de caracteres ASCII 2.5.2 El conjunto de caracteres EBCDIC 2.5.3 El eédigo UNICODE Resumen Para tectura posterior Problemas 3. Aritmética Introducci6n 3.2 Suma y resta en punto fijo 3.2.1 Suma y resta en la representaci6n de complemento a dos 3.2.2 Implementaci6n circuital de sumadores y restadores 3.2.3 Suma y resta en representacién de complemento a uno 3.3 Producto y cociente en punto fijo 3.3.1 Multiplicacién de mimeros sin signo 3.3.2 Divisién sin signo 3.3.3 Producto y cociente signados 3.4 Aritmética de punto flotante 3.4.1 Suma y resta en formato de punto flotante 3.4.2 Producto y cociente en formato de punto flotante 3.5 Aritmética de alto rendimiento 3.5.1 Suma de alto rendimiento 3.5.2 Producto de alto rendimiento 3.5.3 Divisi6n de alto rendimiento 3.5.4 Calculo residual Ejemplo. Sumador de alto rendimiento para palabras largas 3.6 Estudio de un caso: calculadora que utiliza el sistema decimal codificado en binario 3.6.1 La calculadora HP9100A 3.6.2 Suma y resta de némeros codificados en BCD 3.6.3 Suma y resta en BCD punto flotante, Resumen Para lectura posterior Problemas 38 4l 45 45 48 50 50 52 52 55 55 56 61 61 61 62 67 69 69 mW 13 14 14 18 16 76 2B 82 85 86 88 88 89 92 94 94 95 4, La arquitectura de programacién 99 4.1 Componentes circuitales de la arquitectura de programacién 100 4.1.1 Una revisién del modelo de bus 100 4.1.2 Memoria 101 4.1.3 La unidad central de proceso (CPU) 104 4.2 ARC, una computadora RISC 108 4.2.1 Memoria en ARC 109 4.2.2 El conjunto de instrucciones ARC 109 4.2.3 Formato del lenguaje simb6tico de ARC 112 4.2.4 Formatos de instruceién en ARC 113 4.2.5 Formatos de datos en ARC 115 4.2.6 Descripcién de las instrucciones de ARC 17 4.3 Directivas (seudo operaciones) 121 4.4 Bjemplos de programacién en lenguaje ensamblador 122 4.4.1 Variantes en las arquitecturas y en tos direccionamientos 125 4.4.2 Bficiencia de las arquitecturas de programacién 128 4.5 El acceso a la informacién en la memoria, Modos de direccionamiento 129 4.6 Acceso a subrutinas y pilas 130 4.7 Entrada y salida en lenguaje simbélico. 136 4.8 Estudio de un caso: la arquitectura de programacién de la maquina virtual Java 139 Resumen 144 Para lectura posterior 144 Problemas 45 5. Los lenguajes y la maquina 151 5.1 El proceso de compilacién 1s] 5.1.1 Los pasos de la compilacién 152 5.1.2 La especificacién del mapeo 153 5.1.3 Como convierte el compilador los tres tipos de instrucciones al cédigo ensamblador 153 5.1.4 Movimiento de datos 155 5.1.5 Instrucciones aritméticas 157 5.1.6 Control de secuencia 158 5.2 El proceso de ensamblado 160 5.2.1 El proceso de ensamblado y los ensambladores de dos pasadas 161 5.2.2 El proceso de ensamblada y la tabla de simbolos 164 5.2.3 Tareas finales del programa ensamblador 166 5.2.4 Ubicacién de programas en memoria 168 5.3 Bnlace y carga 168 5.3.1 Enlace (linking) 169 5.3.2 Carga 71 XXll_primcepios DE ARQUITECTURA DE COMPUTADORAS. Bjemplo de programacién 173 5.4 Macroinstrucciones (Macros) 5 5.5 Estudio de un caso: extensiones al juego de instrucciones - Las instrucciones SIMD Intel MMX™ y Motorola AltiVec™™ 17 $.5.1 Fundamentos 178 5.5.2 Las arquitecturas biisicas 178 5.5.3 Registros vectoriales 180 5.5.4 Operaciones de aritmética vectorial 182 5.5.5 Operaciones de comparacién de vectores 184 5.5.6 Conclusiones de los casos de estudio 185 Resumen 185, Para lectura posterior 186 Problemas 187 6. Trayecto de datos y control 191 6.1 Fundamentos de la microarquitectura 192 6.2 Una microarquitectura para ARC 193 6.2.1 El trayecto de datos 193 6.2.2 La seccién de controt 201 6.2.3 Temporizacién 208 6.2.4 El desarrollo del microprograma 205 Ejemplo 24 6.2.5 Traps e interrupciones 216 6.2.6 Nanoprogramacién 218 6.3 Control cablendo 219 Ejemplo 227 6.4 Estudio de un caso: el lenguaje de descripcién de hardware VHDL. 227 6.4.1 Antecedentes 228 6.4.2 ;Qué es VHDL? 228 6.4.3 La funcién mayoria y su descripcién en lenguaje VHDL 29 6.4.4 Sistema I6gico de nueve valores 233 Resumen 234 Para lectura posterior 234 Problemas 235 7. Memoria 243 7.1 Las jerarquias de ta memoria 243 7.2 Memoria de acceso aleatorio 245 7.3 Organizacién de un circuito integrado 246 7.3.1 Construccién de una memoria grande a partir de memorias pequefias 250 7.4 Médulos comerciales de memoria 251 inoice pé conTeminos XIII 7.5 Memoria de lectura 252 7.6 Memoria cache 254 7.6.1 Memoria cache de asignacién asociativa 256 7.6.2 Memoria cache de asignacién directa 260 7.6.3 Asignacién asociativa por conjuntos de la memoria cache 262 7.6.4 Rendimiento de la memoria cache 263 7.6.5 Tasas de acierto y tiempos de acceso 265 7.8.6 Memorias cache multinivel 267 7.6.7 Administracién de la memoria cache 268 7.7 Memoria virtual 270 7.7.1 Superposiciones (overlays) 270 7.7.2 Paginacién 2m 7.7.3 Segmentacién 274 7.7.4 Fragmentacion 216 7.7.5 Memoria virtual versus memoria cache an 7.7.6 El buffer de traducei6n anticipada (Translation Lookaside Buffer - TLB) 28 7.8 Temas avanzados 219 7.8,1 Arboles decodificadores 279 7.8.2 Decodificadores para memorias de acceso aleatorio muy grandes 280 7.8.3 Memorias de diteccionamiento por contenido (asociativas) 281 Ejemplo de disefio de una memoria: memoria RAM de doble puerto 285, 7.9 Estudio de un caso: la memoria Rambus 285 7.10 Estudio de un caso: el sistema de memoria Pentium de Intel 289 Resumen 292 Para lectura posterior 292 Problemas 293 . Entrada y salida 299 8.1 Arquitecturas de un tinico bus 300 8.1.1 Estructura de bus, protocolos y control 301 8.1.2 Frecuencias de reloj en el bus 302 8.1.3 Et bus siner6nico 302 8.1.4 El bus asincrénico 303 8.1.5 Arbitraje del bus, Maestros y esclavos 305 8.2 Arquitecturas de bus basadas en puentes 307 8.3 Metodologfas de comunicacién 309 8.3.1 Entrada-salida programada 309 8.3.2 Entrada-salida administrada por interrupciones 310 8.3.3 Acceso directo a memoria 312 8.4 Estudio de un caso: comunicaciones en Ia arquitectura Pentium de Intel 314. 8.4.1 El reloj del sistema, el reloj del bus y las velocidades de} bus 314 XUV. pruncipios DE ANQUITEETURA DE COMPUTADORAS 8.4.2 Direcciones, datos, memoria y entrada-salida 315 8.4.3 Las palabras de datos no requieren alineacién forzada 38 8.4.4 Ciclos de bus en la familia Pentium 318, 8.4.5 Ciclos de bus de lectura y escritura de memoria 316 8.4.6 El ciclo de bus de lectura por bloques (burst) 317 8.4.7 Retenci6n del bus para admitir pedidos de bus por parte de otro maestro 318 8.4.8 Velocidades de transferencia de datos 319 8.5 Almacenamiento masivo 320 8.5.1 Discos magnéticos 220 8.5.2 Cintas magnéticas 328 8.5.3 Tambores magnéticos 329 8.5.4 Discos épticos 330 Ejemplo: tiempo de transferencia de un disco rigido 332 8.6 Dispositivos de entrada 333 8.6.1 Teclados 334 8.6.2 Tabletas digitalizadoras 335 8.6.3 Ratones y trackballs 335 8.6.4 Lapices dpticos y pantallas sensibles al tacto 336 8.6.5 Palancas de control (joysticks) 337 8.7 Dispositivos de salida 338 8.7.1 Impresoras Miser 338 8.7.2 Pantallas de video 339 Resumen 342 Para lectura posterior 342 Problemas 343 9, Comunicaciones 347 9.1 Médems 347 9.2 Medios de transmisi6n 350 9.2.1 Lineas bipolares abientas 351 9.2.2 Lines de par trenzado 351 9.2.3 Cable coaxial 352 9.2.4 Fibra ptica 352 9.2.5 Sauélites 352 9.2.6 Microondas terrestres. 353 9.27 Radio 353 9.3 Arquitectura de redes: redes de érea local 354 9.3.1 El modelo OSI 354 9.3.2 Topologias 356 9.3.3 Transmisién de datos 358 {wotce OF comTENTDGS XV 9.3.4 Puentes (bridges), encaminadores (routers) y puentes de enlace (gateways) 359 9.4 Errores de comunicacién y cédigos correctores de errores 360 9.4.1 Tasa de error 360 9.4.2 Deteccién y correccién de errores 361 9.4.3 Control de redundancia vertical 367 9.4.4 Control de redundancia ciclica 368 Ejemplo: correccién de dos errores 370 9.5 Arquitectura de redes: Internet am 9.5.1 El modelo Internet 371 9.5.2 Revisi6n de puentes, encaminadores y conmutadores 376 9.6 Estudio de un caso: modo asincrénico de transferencia 378 9.6.1 Transferencia sincrénica contra transferencia asinerénica 379 9.6.2 {Qué es el modo asincrénico de transferencia? 380 9.6.3 Arquitectura de una red ATM. 381 9.6.4 Perspectivas de ATM. 383 Resumen 383 Para lectura posterior 383 Problemas 384 10. Avances en la arquitectura de computadoras 387 10.1 Andlisis cuantitativo de la ejecucién de un programa 388 10.1.1 Andlisis cuantitativo del rendimiento 390 Ejemplo: cdlculo del aumento de velocidad en un nuevo conjunto de instrucciones 301 10.2 De CISC a RISC 301 10.3 Segmentaci6n del trayecto de datos 393 10.3.1 Instrucciones aritméticas, de salto y de acceso a memoria 393 10.3.2 Segmentacién de las instrucciones 395 10.3.3 Cémo mantener ocupada la estructura 395 Bjemplo: andlisis de Ia eficiencia de una estructura segmentada 397 10.4 Superposicién de ventanas de registros 398 Ejemplo: c6digo compilado para ventanas superpuestas y saltos retardados 401 10.5 Maquinas con instrucciones nuiltiples (superescalares). El PowerPC 60t 406 10.6 Estudio de un caso: el procesador PowerPC como arquitectura superescalar 407 10.6.1 La arquitectura de programacién del PowerPC 601 407 10.6.2 La arquitectura de hardware del PowerPC 601 407 10.7 Méquinas con palabra muy larga de instruccién 410 10.8 Estudio de un caso: la arquitectura Intel |A-64 (Merced) 410 10.8.1 Antecedentes: fa arquitectura CISC 80x86 410 10.8.2. El procesador Merced: una arquitectura EPIC an 20VI_ermuceptos ce aRQUITECTURA DE COMPUTADORAS: 10.9 Arquitecturas paralelo 10.9.1 La taxonomia de Flynn 10.9.2 Redes de interconexién Ejemplo: red estrictamente no bloqueante 10.9.3 Asignacién de un algoritmo a una arquitectura paralelo 10.9.4 Paralelismo de grano fino. La arquitectura CM-1 10.9.5 Paralelismo de grano grueso: CM-5 10.10 Estudio de un caso: el procesamiento paralelo en Sega Génesis 10.10.1 La arquitectura Sega Génesis, 10.10.2 Operacién de Sega Génesis 10.0.3 Programacién de Sega Genesis Resumen Para tectura posterior Problemas A. Légica digital A.1 Introduccién A.2 L6gica combinatoria A.3 Tablas de verdad A.4 Compuertas l6gicas AA.1 Implementacién electr6nica de la Iégica AA.2Buffers de tres estados AS Propiedades del dlgebra de Boole AG Representaci6n en suma de productos y diagramas légicos A.7 La forma producto de sumas A.8 Légica positiva o légica negativa A9 La hoja de datos ‘A.10 Componentes digitales A.10.t Niveles de integracién A.10.2 Multiplexores A.10.3 Demultiplexores A.10.4 Decodificadores A.10.3 Codificadores de prioridad A.10.6 Matrices l6gicas programables Ejemplo: un sumador con arrastre serie ALL Légica secuencial A.LL.1 El circuito biestable (flip flop) $-R A112 El flip flop S-R sinerénico A.1L3 El flip flop D y la configuracién maestro-esclavo A.11A4 Flip flops J-K y T A.12Disefio de maquinas de estado 414 ANG 418 422 424 429 431 433 434 435 436 437 437 439 441 44t at 442 444 447 449 450 453 455 456 458 461 461 463 465 466 469 41 472 474 476 477 479 {Noice De conreipes XVII Ejemplo: un detector de secuencia 482 Ejemplo: un controlador para una méquina expendedora 485 A.13El modelo Mealy y el modelo Moore. 487 A.14 Registros 488 A.15 Contadores 489 Resumen 491 Para lectura posterior 491 Problemas 492 B. Simplificaci6n de circuitos légicos 499 B.1 Reducci6n de bégica combinatoria y de I6gica secuencial 499 B.2 Reduccién de las expresiones de dos niveles 499 B.2.1El método algebraico 500 B.2.2E1 método de los mapas K 501 B.2.3E1 método tabular 509 B.2.4Simplificacién légica: su efecto sobre la velocidad y laeficiencia $17 B.3 Reduccién de estados $21 B.3.1 El problema de Ia asignacién de estados 524 Ejemplo de reduccién: un detector de secuencia 526 B.3.2 Tablas de transiciones 528 Ejemplo de tabla de transiciones: un detector de mayorfa 533 Resumen 535 Para lectura posterior 535 Problemas 536 indice analitico 541 Préloga Acerca dei libro Nuestro propésito al escribir este texto es describir el funcionamiento interno de la com- putadora digital moderna a un nivel que logte desmitificar lo que ocurre dentro de esta, El nico requisito previo para ta lectura de Principios de arquitectura de computadoras €s poscer un adecuado conocimiento prictico de un tenguaje de programacién de alto ni- vel. La seleccién del material cubre temas que habitualmente forman parte de un primer curso de arquitectura de computadoras @ de organizacién de computadoras, La profun- didad y la amplitud con que se han tratado los temas tienen como propésito colocar al estudiante principiante en un camino sétido para la continuidad de sus estudios en disci- plinas relacionadas con las computadoras. Cuando se requiere crear un texto sobre arquitectura de computadoras, las solucio- nes técnicas surgen en forma natural, en tanto que las caracterfsticas organizativas se relacionan con las prestaciones mAs importantes. Entre las caracteristicas que recibie- ron mayor atencién a lo largo de este texto se incluyen la eteccidn de la arquitectura de programacién (ISA, Instruction Set Architecture), el uso de los casos de estudio y un importante desarrollo de ejemplos y ejercicios. La arquitectura de programacién Los textos que analizan los Jenguajes absolutos de programacién tienen dos criterios pa- ra el tipo de arquitectura de instrucciones a utilizar: 0 se adopta un modelo propio, o se elige uno de los tantos modelos comerciales existentes en ef mercado. La eleccién afece ta al instructor, que puede necesitar una arquitectura compatible con una plataforma de ta que dispone para los trabajos de programacién que le asigna a sus estudiantes. Para mayor complicacién, ta plataforma local puede cambiar de semestre en semestre: ayer pudo ser MIPS, hoy un Pentium, mafiana un SPARC. Los autores optaron por ambos ca- minos al adoptar como arquitectura la de programacién un subconjunte de Ia arquitectu- ra SPARC, a la que lamaron ARC (4 RISC Computer, una computadora RISC). Esta se Utiliza a lo largo del texto, siendo complementada con herramientas de programacién in- XOL_PRINCIPIOS DE ARQUITECTURA DE COMPUTADORAS dependientes de la plataforma, que permiten simular tanto la arquitectura ARC como las arquitecturas que corresponden a los procesadores Intel X86 (Pentium) o MIPS. Casos de estudio, ejemplos y ejercicios Cada capttulo contiene al menos un caso de estudio como elemento que le permite al alumno acercarse a ejemplos reales sobre el tema. Esto ubica al tema en perspectiva, lo que, a juicio de los autores, aporta al material un aire de realismo ¢ interés. Se han incorporado tantos ejemplos y ejercicios como ha sido posible para cubrir los puntos mis significativos del texto. En el sitio web que acompafia al texto se encuentran disponibles ejemplos adicionales y soluciones a los problemas. Cobertura de los temas El enfoque de este libro presenta a Ia computadora como un sistema integrado. Si se debiera elegir un subiitulo, este podria ser “Un enfoque integrado”, lo que reflejaria las relaciones de alto nivel que vinculan a tos distintos elementos entre ellos. Cada tema se cubre en el contexto de la integridad de ta méquina de la que es parte, y con la pers pectiva de determinar cémo afecta la implementacién a la conducta del sistema. Por ejemplo, la precisién finita de los ntimeros binarios se relaciona con Ia cantidad de unos que pueden sumarse a un atimero expresado en punto ftotante, antes de que el error en la representacién exceda el valor de 1, (Por esta razén, debe evitarse el uso de nime- ros de punto flotante como variables de control en rutinas tipo Lazo.) Otro ejemplo es el tema de ta vinculacign entre subrutinas, que se trata con fa expectativa de que el lec- tor pueda enfrentarse alguna vez con la necesidad de programar en el lenguaje C 0 con programas escritos en Java que invocan subrutinas escritas en otros lenguajes de alto ni- vel, como Fortran, ‘Como otro ejemplo del enfoque integrado, los conceptos de deteccién y correccién de errores se analizan en el contexto de Ia transmisin y almacenamiento masivos, an- te la perspectiva de que el lector pueda encarar aplicaciones referidas a redes (en las que los errores y las pérdidas de datos son un hecho cotidiano) 0 deba lidiar con ele- mentos de almacenamiento poco confiables, como los CD-ROM (compact disk-read only memory). La arquitectura de las computadoras impacta sobre Ja mayor parte de tas actividades que los profesionales de la computacién realizan diariamente, por lo que el enfoque in- tegrado orienta el texto hacia 1a diversidad de reas afines en las que dicho profesional debe capacitarse. Este énfasis es consecuencia de una transicién que esté ocurriendo en muchos planes de estudio de carreras de grado relacionadas con Ja computaci6n. A me~ dida que las arquitecturas de las computadoras se complican cada vez més, deben ser tratadas con niveles de abstracci6n cada vez mayores, ya que, de alguna manera, se han PROLOGO 1X1 wuelto dependientes de la tecnologia. Por esta cazén, la mayor parte del (exto trata sobre Ja arquitectura de computadoras con un enfoque de alto nivel, en tanto que los aspectos de menor nivel, dependientes de lo teenolégico, se tratan en los apéndices y en los casos de estudio, Los capitulos En el capitulo 1, “Introduccién’, se da comienzo al texto con una breve historia de la arguitectura de las computadoras, avanzando a través de las partes bésicas que las com- ponen, con lo que el estudiante termina con una visién de los sistemas de computacién desde el alto nivel. Se presenta el modelo convencional de Von Neumann, seguido por el andlisis descriptivo de una computadora tipica, Este capitulo se propone sentar las bases para permitir un andlisis mas profundo en capftulos sucesivos. Enel capitulo 2, “Representacién de la informacién”, se cubren los temas basicos relacio- nados con la representacién de datos. Se analizan las representaciones de niimeros signa- dos, a través de las convenciones de complemento a uno, complemento a dos, magnitud y signo, y representacién en exceso, Este capitulo también toma en cuenta la representacién, decimal co¢ificada en binario (BCD), utilizada habitualmente en calculadoras. Ademds, se cubre la representacién de ntimeros en formato punto flotante, incluyendo la norma TEBE 754 de uso comin en mimeros binarios. Por ultimo, también se analizan las repre- sentaciones ASCII, EBCDIC y Unicode para caracteres. En ef capitulo 3, “Ariumética’, se analizan la aritmética de computadoras y las represen- taciones avanzadas. Se estudian los procedimientos para realizar operaciones de suma, resta, producto y cociente en notacién de punto fijo. Se consideran también las represen- taciones de complemento a nueve y complemento a diez, utilizadas habitualmente en el célculo BCD, asi como las operaciones aritméticas en BCD y en punto flotante. Se desa- rrollan, ademds, los métodos requeridos para mejorar la eficiencia de estas operaciones, como la suma con arrastre anticipado, la multiplicacién matricial y Ia divisiGn a través de iteracién funcional. Para completar, se analiza brevemente la teoria de residuos, para introducir un enfoque poco convencional de alto rendimiento. En él capitulo 4, “La arquitecura de programacién”, se introducen los conceptos sobre fos componentes arquitecténicos bdsicos requeridos para Ia ejecucién de los programas. Se analizan tos conceptos de lenguaje de maquina y de ciclos biisqueda-ejecucién. Se de- talla la organizacién de la unidad central de proceso, se analizan las funciones del bus del sistema en la articulacién entre las unidades aritumético-légica, de memoria, de entrada y salida, y se detalla la estructura de la unidad de control. En el contexto de la arquitectura ARC (A RISC Computer), ligeramente basada en la arquitectura comercial SPARC, se analiza el tema de la programacién en lenguaje de 2OU_PRONCIPIOS OE AROUITECTURA DE COMPUTADORAS méquina. La arquitectura descriptiva ARC mantiene, con respecto a SPARC, los nom- bres y formatos de las instrucciones, los formatos de los datos y la sintaxis de su lengua~ Je simbélico de programacién, pero, por otra parte, presenta una gran simplificacién res- pecto de aquella. En la mayor parte del capitulo se utilizan solo 15 de fas instrucciones de SPARC, admitiendo en principio un tinico formato para datos, de 32 bits sin signo. Se analizan los formatos de instrucciones, asf como tos modos de direccionamiento. As ‘mismo se trata con distintos enfoques el manejo de subrutinas, que incluye un andlisis detallado de la transferencia de parémetros mediante el uso de una pila. En el capitulo 5, “Los lenguajes y 1a m4quina”, se relaciona el enfoque del programa- dor de un sistema de computacién con la arquitectura de la méquina, Se plantean temas de programacién del sistema, con el objetivo de colocar el lenguaje de bajo nivel a la vista del programador. El capitulo comienza con una explicacién del proceso de com- pilacién, para lo cual primero se analizan los pasos involucrados en la compilacién y luego se plantea Ia generaci6n del c6digo objeto. Se describe el proceso de traducci6n a lenguaje de maquina a través de un ensamblador (assembler) de dos etapas, agregan- do a la descripcién ejemplos de la generacién de tablas de simbolos. Se cubren tam- bién los conceptos asociadas con macros y con los procesos de vinculacién (linking) y de carga. En el capitulo 6, “Trayecto de datos y control”, se realiza el andlisis paso a paso de una unidad de control y los caminos de los datos. Se estudian fos dos métodos cominmente utilizados para las unidades de control: el del controt microprogramado y el de la unidad de control cableada. El instructor podré adoptar un método y omitir el otro, © cubrie ambos en funcién de sv disponibilidad de tiempo. Las unidades de control microprogra- madas y las unidades cableadas, utilizadas como ejemptos, implementan e! subconjunto ARC del lenguaje de programaci6n SPARC presentado en el capitulo 4, En el capitulo 7, “Memoria”, se analiza la memoria de la computadora, comenzando por Ta organizacién de una memoria de acceso al azar bisica, y continuando con conceptos avanzados como memoria virtual y cache. Se analizan los esquemas tradicionales de mapeo de memoria cache, tales como el directo y el asociativo, asi como el cache en va- rios niveles, También se tratan temas como el paginado (overlays), las politicas de reem- plazo, la segmentaci6n, 1a fragmentaci6n y el concepto de buffer de traduccién an pada (ILB, translation lookaside buffer). £n el capitulo 8, “Entrada y salida”, se cubren los métodos de acceso y comunicaciones en buses, Se analiza también la vinculacién entre buses. Ademds, trata sobre los distin- tos dispositivos de entrada-salida de uso habitual, como discos, tectados, impresoras y pantallas. PROLOED xxIN Enel capitulo 9, “Comunicaciones”, se analizan las arquitecturas de redes, con enfoques s0- bre médems, redes de area local (LAN, local area network) y redes de drea extendida (WAN, wide area network), Se plantea especial interés en el anilisis de las arquitecturas de redes, analizando en forma sencilla los protocolos que enfocan las prestaciones clave de di- has arquitecturas de redes. Se analizan en profundidad la deteccidn y ta correccién de erro- res, y se introduce, en el contexto de Internet, el esquema de protocolo TCP/IP. Enel capitulo 10, “Avances en Ia arquitectura de computadoras”, se cubren las caracte- risticas avanzadas de las arquitecturas que han aparecido o cambiado de enfoque en los Uiltimos afios. La primera parte del capitulo analiza los conceptos de la arquitectura de procesadores para las computadoras con conjunto reducido de instrucciones, mas cono- cidas como de arquitectura RISC (Reduced Instruction Set Computer) y las consecuen- cias derivadas de esta arquitectura. La dltima parte de este capitulo trata acerca de las méquinas de instruccién multiple y de palabra muy larga de instruccién (VLIW, Very Large Instruction Word). A través de un caso de estudio se hacen visibles al programa- dor las prestaciones de la arquitectura RISC, para lo cual se realiza el andlisis paso a pa- so de un programa SPARC generado por un compilador C, con explicaciones acerca del uso de registros, de pilas y de segmentacién (pipelining). El capitulo cubre también las arquitecturas distribuidas y paralelas, asf como las redes de interconexidn utilizadas en el procesamiento paralelo y en el procesamiento distribuido. En ol apéndice A, “Légica digital”, se analizan los temas asociados con légica combina- toria y secuencial, ademas de establecer la base que permita entender el disefio légico de Jos componentes analizados en el resto del texto, El apéndice A se inicia con una descrip- cidn de tablas de verdad, algebra de Boole y ecuaciones légicas. Asimismo, se describe la sintesis de circuitos légicos combinatorios, explordndose una gran cantidad de ejemplos. Se analizan los componentes de mediana escala de integracién (MSI, Medium Scale Integration), tales como multiplexores y decodificadores; se completa el andlisis con ejemplos de disefto de circuitos que utilizan componentes MSI. En este apéndice se analiza también el concepto de l6gica sincrénica, inicidndose con una introduccién de los aspectos de temporizacién de los circuitos biestables (flip- flops). Se trata, asimismo, la sintesis de circuitos Idgicos sincrdnicos, con relacién a sus diagramas de estados, sus tablas de estados y el disefio de légica sincrénica. £n el apéndice B, “Simplificacién de circuitos ldgicos”, que es un complemento del apéndice A, se cubren los métodos de reduccién de légica tanto combinatoria como se- cuencial. Se analizan los métodos de minimizacién basados en 1a simplificacién alge- braica, asf como en los diagramas de Kamangh y los métodos tabulares de Quine-Mc- Cluskey para funciones simples y miiltiples. Tambign se analizan la reduccién y la asig- nacién de estados. XXIV _PRINGIPIOS CE ARQUITECTURA OE COMPUTADORAS Ordenamiento de los capitulos El orden de los capitulos ha sido planteado de modo tal que los mismos puedan desa- rrollarse en orden numérico, aun cuando el instructor puede modificar e] ordenamien- to propnesto para adecuarlo a un programa o plan de estudios particular. La figura P.1 plantea los requisitos necesarios para establecer relaciones entre los capitulos, deta- Handose a continuacién algunas consideraciones especiales respecto de la sccuencia planteada. Capitulo 1: Introduce ‘Capitulo 2: Representacién de la informacién Capitulo 3: Aritmética fe —[ Apéndice A: Logica digital] Capitulo 4: La arquitectura| ‘Apéndiee B: Simplifieacion| de programacién de cireuitos l6gicos ‘Capftulo 5: Las lenguajes Capitulo 7: Memoria yy la méquinal I } Capitulo Capitulo 6: Trayectos Entrada y slide de datos y control 1 ‘Capitulo 9: Comunicaciones Capito 10; Avances en la rguitectura de computadoras| Figura P.1 » Requerimientos de correlatividad entre capitulos. El capftulo 2, “Representacién de la informacién”, deberia desarrollarse antes que el ca- pitulo 3, “Aritmética”, dado que este requiere de los conocimientos de representaci6n de datos. Los apéndices A, “Légica digital”, y B, “Simplificaci6n de circuitos 16gicos”, pueden omitirse si el tera de légica digital se ha desarrollado en una asignatura previa de la carrera; pero si el material no se cubre, las estructuras de algunos componentes (ta- Jes como una unidad aritmético-légica o un registro) pueden quedar en el misterio sino se desarrolla al menos el apéndice A antes que el capitulo 3. Los capitutos 4, “La arquitectura de programacién”, y 5, “Los lenguajes y la maquina”, aparecen en Ja primera mitad del texto por dos razones: (1) introducen al lector en el fun- cionamiento de una computadora a un nivel relativamente alto, el que permite un enfoque desde arriba hacia abajo (top-down) del estudio de la arquitectura de ia computadora, y (2) PAGLOGO_XXY es importante iniciar la programaci6n en lenguaje de bajo nivel en forma temprana solo si se realizan pricticas de programacién como parte del curso. El capitulo 10, “Avances en la arquitectura de computadoras”, aparece generalmente en los niveles de grado de los cursos de arquitectura; por ende, deberia desarrollarse solo si el tiempo lo permite, luego de haber desarrollado todo el contenido de los capitulos anteriores. El sitio web Acompaiiando a este texto, se ofrece un sitio web vinculado con el mismo: http: //www.pearsonedlatino.com/murdocca Este sitio contiene un conjunto de elementos de apoyo, como software y diapositivas en formato Acrobat, y una fe de erratus. Para quienes adopten el libro como texto, también se encuentran disponibles las soluciones a los problemas, as{ como problemas tipo para exdmenes con sus respectivas soluciones (aquellos docentes que deseen acceder a esta in- formacién, deberin conectarse con su representante de Prentice Hall). Herramientas de software Se provee un ensamblador y un simulador para la arquitectura ARC, asi como subcon- juntos de los lenguajes de m4quina de los procesadores MIPS y X86 (Pentium). Escri- tos como aplicaciones Java para aprovechar su portabilidad, los ensambladores y simu- ladores pueden descargarse desde el sitio web mencionado. Trasparencias Todas las figuras y tablas de Principios de arquitectura de computadoras se ban inclui- do en una presentacién de diapositivas bajo Adobe Acrobat. La versi6n gratuita de Acro- bat Reader se puede obtener en www.adobe.com. Problemas de exdmenes y soluciones Los problemas tipo y sus soluciones han sido ampliamente probados en clase. Los pro- lemas son los suficientes en cantidad como para servir en exdmenes y evaluaciones, y para ser utilizados como problemas pricticos en clases de repaso a eriterio del instructor. Los problemas tipo (que han sido incluidos con sus soluciones) y las soluciones a los pro- blemas se encuentran a disposicién del instructor que adopte el texto. (Para acceder a es- te sector del sitio web, deberé ponerse en contacto con su representante de Prentice Hall. Los autores solo requieren que este material no sea colocado en algiin otro sitio web.) 2XXV1_PRINCIPIDS DE ARQUITECTURA DE COMPUTADORAS A pesar de los mejores esfuerzos de los autores, editores, revisores, evaluadores y tra- ductores, esie libro seguramente contiene errores. Antes de informar acerca de algiin error, sirvase verificar en www,pearsonediatino.convmurdocea para ver si ya ha sido catalogado. Los errores detectados deberin ser informados a pocabugs@cs.rutgers.edu. El asunto del mensaje de correo electrénico remitido a esa direccién deberd indicar el numero del capitulo en el que se ha encontrado el error. Créditos y agradecimientos Los autores no han trabajado solos durante la creacién de este libro, por lo que agradecen profundamente el apoyo de la gran cantidad de gente que ha influido en la preparacién de este texto y en el pensamiento de los autores en general. Los autores desean agradecer, primeramente, a tos editores Paul Becker, Thomas Robbins y Eric Frank, quienes tuvie- ron el panorama y la visidn para guiar este libro y sus materiales de apoyo a lo largo de todo el trayecto que Slev6 a su concrecién, Donald Chiarulli tuvo una influencia impor- tamte sobre una edici6n temprana de este libro, el que fue probado en clase en las univers sidades de Rutgers y de Pittsburgh, Saul Levy, Donald Smith, Vidyadhar Phalke, Ajay Bakre, Jinsong Huang y Srimat Chakradhar colaboraron con la evaluacién del material en Rutgers y aportaron parte del texto, problemas y algunas aclaraciones de alto valor. Brian Davison y Shridhar Venkatanarisam trabajaron sobre la primera versiGn de las so- luciones y aportaron muchos comentarios de gran ayuda. Irving Rabinowitz aport6 una buena cantidad de problemas. Larry Greenfield hizo su aporte desde el punto de vista de un estudiante nuevo en el tema, por lo que se debe tomar en cuenta su participacién en la organizaci6n del capitulo 2, También quieren destacar su reconocimiento a Blair Gabert Bizjak por haber provisto el esqueleto para la mayor parte del material referido a redes de rea local. Ann Yasuhara aporté el texto sobre las contribuciones de Alan Turing a la ciencia de la computacién. William Waite, de la Universidad de Cotorado, Boulder, pro- porcioné buena cuntidad de los ejemplos en lenguaje de maquina. Ann Root, de la Univer- sidad de Colorado, Boulder, realiz6 un trabajo estupendo en el desarrollo de Jas herrarnien- tas de simulacién que se encuentran disponibles en el sitio web. La poblacién estudiantil de las universidades de Rutgers y Colorado sirvié como amplio campo de ensayo de! material, por lo que los autores desean reconocer su paciencia y sus recomendaciones durante la elaboracién del material para el libro. También desean hacer puiblico su agradecimiento a los revisores, quienes colabora- ron ampliamente al sugerir cambios a los manuscritos, lo que incluye a Perry Alexander (University of Cincinnati), Thomas L. Casavant (University of lowa, Electrical and Computer Engineering Department), J. Kelly Flanagan (Brigham Young Universit Dept. of Computer Science), Shelly Dalton Goggin (University of Colorado, Denver), aguas _yorvn Nikrouz Faroughi (California State University Sacramento, Computer Science Dept.), Mark Jones (Virginia Tech., Department of Electrical and Computer Engineering), Thuy T. Le (Profesor Adjunto. Electrical Engineering Dept., San Jose State University, ¢ In- vestigador Senior, High Performance Computing Group, Fujitsu America, Inc.), Gary Lippman, (Profesor, California State University Hayward, Dept. of Mathematics and Computer Science), Walid Najjar (Colorado State University, Computer Science Dept.), William Hsu (San Francisco State University), Jyh-Charn (Steven) Liu (Computer Science Dept, Texas A&M University), David B. Wortman (University of Toronto, Dept. of Computer Science), Janusz Zalerwski (University of Central Florida, Orlando, Florida, Dept. of Electrical and Computer Engineering). ‘Yo, Miles J. Murdocca quiero expresar mi reconocimiento a mis padres Dolores y Nicolas Murdocca, mi hermana Marybeth y mi hermano Mark por su aliento. Mi espo- sa Ellen y mis hijas Alexandra y Nicole han sido una fuente interminable de aliento € inspiracién. No creo haber podido encontrar la cnergfa necesaria para acometer el es- fuerzo realizado sin todo el apoyo recibido de ellos. Yo, Vincent P. Heuring, deseo agradecer el apoyo de mi esposa Gretchen, quien fue excesivamente paciente y alentadora durante todo el proceso de escritura de este libro. Existen, seguramente, més personas ¢ instituciones que han colaborado con este li- bro, tanto en forma directa como indirecta, cuyos nombres pueden haber sido omitidos en forma accidental, A esa gente y a esas instituciones, Ios autores quieren ofrecer aqui su tdcito reconocimiento y sus disculpas por la omisién de los reconocimientos explici- tos que hubiesen corespondido, Miles J. Murdocca Rutgers University murdocca@es.rutgers.edu Vincent P. Heuring University of Colorado - Boulder heuring @colorado.edu Capitulo 1 Introduccion 1.1 Planteo general El concepto de arquitectura de computadoras, enfocado desde el punto de vista de un programador, se relaciona con el comportamiento funcional de un sistema de computa- cin. Este punto de vista incluye aspectos tales como el tamaiio de los diferentes tipos de datos (por ejemplo, el uso de 16 bits para la representaci6n de enteros) y los tipos de ope- faciones que se pueden realizar (como la suma, la resta y los llamados a subrutinas). La organizacién de computadoras se refiere a las relaciones estructurales que no son visi- bles para el programador, como las interfaces hacia los dispositivos periféricos, la fre- cuencia del reloj y la tecnologia utilizada en las memorias, Este texto trata tanto de la ar- quitectura como de la organizacién, haciendo uso del término “arquitectura” para referirse en forma amplia tanto a la arquitectura como a la organizacién de la computadora. En la arquitectura de computadoras suele emplearse el concepto de niveles. La idea basica es ja de la existencia de muchos niveles, 0 enfoques, desde los cuales considerar a la computadora, los que van desde el nivel superior, en el que el usuario ejecuta pro- gramas o utiliza la computadora, al nivel inferior, consistente en transistores y cables. Entre los niveles superior e inferior existe una cantidad de niveles intermedios. Antes de analizar estos niveles presentaremos una breve historia de la computaci6n, con el objeto de obtener un enfoque claro acerca de su evolucién. 1.2 Una historia breve La existencia de dispositivos mecdnicos destinados al control de operaciones complejas se conoce al menos desde el siglo xvi, cuando ya en las cajas de msica se utilizaban ci- Jindros rotativos con clavijas en una forma similar a las de la actuatidad. Las méquinas para In realizacién de célculos, como ejemplo de elementos que no solo repiten una me- lodia predeterminada, aparecieron en el siglo siguiente, Blas Pascal (1623-1662) desarroll6 una calculadora mecénica con el objeto de cola- borar en el cdlculo de impuestos que realizaba su padre. La calculadora Pascalina, desa- 2. PRunciPios DE ARQUITECTURA DE COMPUTADORAS rrollada por Pascal, consta de ocho diales que se conectan a un tambor (véase la figura 1.1), vinculados entre ellos en una forma innovadora que provoca que uno de los diales se desplace en una posicién cuando se produce un arrastre desde un dial de menor posicién. Se coloca una ventana por encima del dial para permitir la observacién de la posici6n, en forma similar a Ia del odémetro de un auto, con la diferencia de que los diales se encuen- tran colocados horizontalmente, a la manera det dial de un teléfono rotativo. Figura 1.1 ¢ La maquina calculadara de Pascal, (Reproducida con autorizacién del Departamento de Ciencias dela Computacion, Universidad ce Manchester.) Adin existen algunas de las maquinas sumadoras de Pascal, de las que comenz6 a cons- truir en 1642. No obstante, recién alrededor del aito 1800 hubo quien agrupara los con- ceptos de control y cilculo mecénicos en una Gnica miquina que pudiese reconocerse hoy como formada por las partes basicas integrantes de una computadora. Ese alguien fue Charles Babbage. ‘A Charles Babbage (1791-1871) se lo menciona a veces como “el abuelo” de la com- putadora, mas que como “el padre” de la misma, dado que nunca construy6 una versién préctica de las maquinas que disefi6. Babbage vivid en Inglaterra en una época en la que las tablas mateméticas eran de uso comin en la navegacién y en ol trabajo cientifico. Esas tablas se computaban manualmente y, por consiguiente, contenfan gran nimero de errores, Frustrado por las imprecisiones, Bubbage se decidié a crear una méquina que re- solviera célculos a través del posicionamiento de engranajes y de su movimiento. La ma- quina que disefié permitia incluso la generacién de una plancha para impresién, lo que eliminaba los errores que podrtan producirse debido a la intervencién del tipégrafo. Las maquinas de Babbage poseian medios para la lectura de los datos de entrada, el al- ‘macenamiento de los datos, 1a produccién de los datos de salida y el control automatico de la operaci6n de la méquina. Estas son funciones bésicas que se encuentran en précti- ‘camente cualquier computadora moderna. Babbage creé un pequefio prototipo de su ma- quina diferencial, la que evaltia potinomios utilizando el método de las diferencias fini- tas. El éxito del concepto de la méquina diferencial le permitié lograr apoyo gubernamental para la maquina analitiea, mucho més grande y sofisticada, la que poseia Gapituo 1+ mroouccrin 3 ‘mecanismos para realizar bifurcaciones (toma de decisiones) y medios para programar- la empleando tarjetas perforadas, en forma similar a lo que se conoce come tejide por patrones Jacquard. Babbage discié la méquina analitica aunque nunca la construy6, dado que las toleran- ius mecinicas requeridas por su disefio no podian logrurse con la tecnologia de esa épo- ca. En 1991, el Museo de Ciencias de Londres construyé una versién de la méquina dife- rencial de Babbage, la que ain hoy puede ser observada. Pas6 més de un siglo, hasta ef comienzo de la Segunda Guerra Mundial, antes de que surgicra un nuevo avance importante en la computacién. En Inglaterra, los submarinos alemanes U-boat provocaban grandes daiios en los barcos aliados. Los U-boats recibian comunicaciones desde sus bases ubicadas en Alemania, para las que se utilizaban cédi- g0s enctiptados implementados por una maquina desarrollada por Siemens AG y cono- cida como ENIGMA. EI proceso de encriptado de la informacién ya se conocia desde mucho tiempo atrés, y hasta el presidente estadounidense Thomas Jefferson (1743-1826) habia desarrollado un antecesor de ENIGMA, sin haber Ilegado a construir la maquina, El proceso de deco- dificar la informacién encriprada era una tarea mucho més pesada, Este fue el problema que orienté los esfuerzos de Alan Turing (1912-1954) y de otros cientificos ingleses ha- cia la creacién de sistemas para descifrar cédigos. Durante la Segunda Guerra Mundial, Turing era el criptégrafo més importante de Inglaterra, siendo conocido como quien cam- bi6 el concepto de la criptografia, que pasé de ser tema para quienes se ocupaban de des- cifrar idiomas antiguos a ser un tema de y para matemticos. De Bletchley Park, Inglaterra, lugar de trabajo de Turing, surgié Colossus, una exito- sa méquina decodificadora. Su funcionamiento se basaba en la alimentacién de la maqui- na a través de una cinta de papel, cuyos datos se procesaban en valvulas de vacio, reali- zando los cflculos entre esas vélvulas de vacio y una segunda cinta de papel con la que se alimentaba a la m4quina. La programaci6n se efectuaba a través de paneles de cone- xi6n, Se desconoce la participacién de Turing en las distintas versiones de la mquina de- bido al secreto que rodeaba al proyecto, pero algunos aspectos de su vida y obra se pu- dieron ver en Ia obra Breaking the Code, que fuera puesta en escena en Londres y Nueva York sobre finales de la década de 1980, Alrededor de la misma época en que Turing desarrollaba sus esfuerzos, J. Presper Ec- kert y John Mauchly comenzaban a crear una maquina que pudiera usarse para el céleu- lo de tablas de trayectorias balisticas, para la Marina de los Estados Unidos. Et resultado de los esfuerzos de Eckert y Mauchly fue ENIAC (Electronic Numerical integrator and Computer). ENIAC estaba constituida por 18.000 valvulas de vaefo, tas que conforma- ban la seccién de célculo de la maquina. La programacién y el ingreso de los datos se rea- lizaban a través de la fijacién de elementos conmutadores (Ilaves) y del intercambio de cables. No existia el concepto de programa almacenado, ni tampoco una unidad de me- ‘moria central; no obstante, estas limitaciones no eran importantes dado que todo lo que ENIAC debfa hacer era e! cilculo de trayectorias balisticas. A pesar de no haber podido 4_PRINCIPIOS DE AROUTECTURA DE COMPUTADORAS. entrar en servicio hasta 1946, tuego del final de la guerra, fue considerada un modelo exi- toso y utilizada durante nueve afios. Luego del éxito de ENIAC, Eckert y Mauchly, que trabajaban en 1a Escuela Moore en la Universidad de Pennsylvania, se vincularon con John von Neumann (1903-1957), quien de- sarrollaba actividades en el Instituto de Estudios Avanzados de Princeton. En forma conjun- ta trabajaron sobre el desarrollo de una computadora de programa almacenado a la que Ila- maron EDVAC, Debido al surgimiento de un conflicto, los grupos de Pennsylvania y Princeton se separaron. El concepto de la computadora con programa almacenado, no obs- tante, prosper6; el resultado fue un modelo funcional de computadora de programa almace- nado, conocido como EDSAC, construido por Maurice Wilkes, de la Universidad de Cam- bridge, en 1947, . 1.3 El modelo von Neumann Las computadoras digitales convencionales presentan un aspecto comiin que se atribuye avon Neumann, aunque los historiadores coinciden en que el disefio en cuestién fue obra de todo el equipo. Ei modelo von Neumann consta de cinco componentes principales, tal como lo ilustra la figura 1.2. La unidad de entrada provee las instrucciones y los da- tos requeridos por el sistema, los que se almacenan en la unidad de memoria. Las ins- trucciones y los datos se procesan en la unidad aritmético-Iégien (ALU) bajo la direc- ci6n de la unidad de control. Los resultados obtenidos se envian a la unidad de salida. El conjunto constituido por las unidades aritmético-légica y de control se designa habi- tualmente bajo el nombre de unidad central de proceso (CPU). La mayoria de las com- putadoras comerciales pueden descomponerse en estas cinco unidades. Unidad de memoria { Unidad Unidad Unidas heft} aitmatica- de entrada vogice (ALD Unidad de salida ‘Unidad de control Figura 1.2 Una computadora digital segin el mode'o von Neumann. 12s flechas gruesas cepresentan ‘ulas de datos. Las flechas mds finas representan rulas de control, captruco 1 + irropucciim § El programa almacenado es el aspecto més importante del modelo von Neumann, Los programas se almacenan en la memoria de la computadora junto con los datos a procesar. Si bien en Ia actualidad podemos plantear esto como un hecho concreto, antes del desa- rrolo de las computadoras de programa almacenado, los programas se almacenaban en un medio extemno, tales como ios tableros de clavijas ~anteriormente mencionados-, cin- tas o tarjetas perforadas. En la computadora de programa almacenado, el programa pue- de manipularse como si se tratara de datos, Este concepto da origen a los compiladores y sistemas operativos, y es Ia base de la gran versatitidad de las computadoras modemas. 1.4 El modelo de interconexidn a través de bus Si bien ef modelo yon Neumann prevalece en la estructura de las actuales computadoras, el mismo ha sido modernizado. La figura 1.3 muestra e! modelo de una computadora que utiliza e) sistema de interconexién a través de lo que se denomina bus del sistema. El modelo considera que el sistema de computacidn est4 constituido por tres subconjuntos, Ja CPU, la memoria y la entrads-salida (E/S). Este refinamiento del modelo von Neu- ‘mann combina la ALU y 1a unidad de control en un solo bloque funcional, 1a CPU. Las unidades de entrada y de salida se combinan, asimismo, en una unica unidad de entrada- salida. ‘Lo més importante de este modelo es que realiza las comunicaciones entre los com- ponentes por medio de un camino compartide conocido como bus del sistema*, consti tuido a su vez por un bus de datos (que trasporta la informacién que se est trasmitien- do), un bus de direcciones (que determina hacia donde esta siendo enviada dicha informacién) y un bus de control (que describe aspectos de Ia forma en que se esté Ile- vando a cabo la mencionada trasferencia de informacién). Existe también un bus de ali- mentaci6n, que lleva energia eléctrica a los componentes. Este ultimo no figura en los esquemas pero se sobreentiende su presencia. Algunas arquitecturas pueden tener, ade- més de los anteriores, un bus de entrada-salida, Fisicamente, los buses estén constituidos por conjuntos de cables agrupados de acuer- do con su funcién. Un bus de datos de 32 bits contiene 32 cables individuales, cada uno de los cuales trasporta un bit de datos (distinguiéndolo de la informacién de direcciones o contol). En este sentido, el bus del sistema es, en realidad, un grupo de buses indivi- duales clasificados de acuerdo con su funcién, El bus de datos trasporta datos entre los componentes del sisteria. Algunos sistemas tienen buses de datos separados para el ingreso o la salida de informacién hacia o desde * M. de T: Se ha preferido mantener la denominaci6n original de bus para distinguir este conjunto de lineas ‘léctricas. a pasar del posible reemplazo por términos como barra, mazo 9 similares, utlizados para definir ‘conjuntos de cables, debido a que dicha término ya es de uso comiin en el ambiente de la computacién, la CPU, en euyo caso existirén un bus de entrada de datos y otro bus de salida de da- tos. Pero, més a menudo, un Gnico bus de datos cumple con la funcién de transportar los datos en una u otra direccién, aunque nunca en ambas direcciones en forma simulténea. | madelo de un sistema de computacién basado en un bus. (Apartado por Donald Chiaruli, Lnivarsidad de Pitsburg.] Figura 1.: Siel bus tiene ser compantido por diferentes elementos que se comunican entre si, los ele mentos deben tener identidades distintivas: direcciones. En algunas computudoras, todas las direcciones se suponen direcciones de memoria sin importar que formen parte de la memoria del sistema o que, en realidad, sean dispositivos de entrada-salida, mientras que en otras maquinas los dispositivos de entrada-salida tienen direcciones de entrada-salida separadas. (El tema del direccionamiento de entrada-salida se trata con mas detalle en el capitulo 8, “Entradas y salidas”.) La locacién o direceién de memoria identifica una celda de memoria en la que se al- macena informaci6n, tal como se utiliza la direcciGn postal para identificar el lugar en que un individuo recibe 0 envia comespondencia, Durante una operacién de lectura o escritura de memoria, el bus de dirceciones contiene la direecién de la celda de memoria en fa que debe leerse 0 escribirse el dato. Debe notarse que las expresiones “lectura” y “escritura” se plantean con respecto a la CPU: ta CPU lee datos desde la memoria y los escribe en la me- moria. Si se requiere leer un dato desde ta memoria, el bus de datos contend el valor lef- do desde la celda de memoria seleccionada. Si la informaci6n se escribiera en memoria, ol bus de datos contendria el valor del dato que se pretende almacenar en la memoria. El bus de control es algo bastante mas complejo, por lo que el andlisis de este bus que- dar4 diferido para capitulos posteriores. Por el momento, el bus de contro! puede consi- derarse como el elemento que permite Ia coordinacién del acceso a los buses de datos y de direcciones, y la orientacién de datos hacia componentes espectficos 1.5 Niveles de maquina Tal como sucede con cualquier sistema complejo, la computadora puede verse desde di- ferentes perspectivas, o niveles, que van desde el nivel superior correspondiente al usua- rio, hasta el nivel inferior, el de los transistores, Cada uno de estos distintos niveles repre- senta una abstraccién de la computadora, Probablemente, una de las razones del enorme capituto 1 + wrronuceris 7 Exito de la computadora digital es el alto grado de independencia o separaci6n existente entre los niveles de abstracci6n. Este planteo puede apreciarse facilmente: un usuario que necesita utilizar un programa procesador de texto requiere conocer muy poco o nada acerca de la programacién de la computadora que esté utilizando, En forma similar, un programador no necesita preocuparse por la estructura de los circuitos légicos que cons- tituyen la computadora. La separacién de estos niveles ha sido explotada en forma muy interesante en el desarrollo de computadoras compatibles “hacia arriba” 1.5.1 Compatibilidad “hacia arriba” La invenciGn del transistor trajo come consecuencia un ripido desarrollo de la electréni- cade computadoras, y juntamente con este desarrollo surgi6 el problema de la compati- bilidad. Los usuarios de computadoras pretendian hacer uso y aprovechar las ventajas de las méquinas mas modernas y mAs rpidas, pero cada modelo nuevo de computadora pre- sentaba una arquitectura diferente, por lo que los viejos programas no podian funcionar sobre los nuevos circuitos. El problema de la compatibilidad entre hardware y software se agudiz6 tanto que los usuarios muy a menudo dilataban la compra de m&quinas nue- vas debido al costo que significaba reescribir los programas que debfan funcionar sobre ‘estos equipos, Cuando el usuario por fin adquirfa una computadora nueva, esta podfa per- manecer instalada e indtilmente inactiva por meses, mientras se pracedfa a la reconver- sién de los conjuntos de datos y programas para adecuartos a los nuevos sistemas. En una apuesta exitosa que enfrent6 « 1a compatibilidad con el rendimiento, IBM fue pionera en el concepto de la “familia de méquinas”, aplicado en su serie 360, Las computa doras més poderosas de la misma familia podfan ejecutar los programas escritos para las méquinas menos potentes, sin modificaciones en dichos programas (compatibilidad “ha- cia arriba”). Este tipo de compatibilidad permitié que el usuario puediera avanzar hacia una maquina més rdpida y con mayores prestaciones sin tener que reescribir los progra- mas que funcionaban en las méquinas menos poderosas. 1.5.2 Los niveles La figura 1.4 muestra siete niveles dentro de la computadora, comenzando desde el nivel del usuario y descendiendo hasta el nivel de Jos transistores. A medida que se desciende desde el nivel superior, estos niveles se toman menos “abstracts” y comienza a apare- cer, cada vez miés, la estructura interna de la computadora, En los préximos puntos ana- lizaremos estos niveles. El nivel del usuario o del programa de aplicacion Este es el nivel de la computadora con el que nos encontramos mas familiarizados. En es- te nivel, el usuario interactia con la computadora por medio de la ejecucién de progra- ‘mas tales como procesadores de texto, planillas de céleulo o juegos. Aqui, el usuario ve 8 PRINCIPIOS DE AROUITECTURA DE GOMPUTADORAS ala computadora a través de los programas que en ella se ejecutan, y es poco o nada vi- sible la estructura intema correspondiente a su nivel inferior. [Nivel superior [Nivel del usuario: programas de aplicacisn Lenguajes de alto nivel Lenguaje absolutoiCédigo de maquina ‘Control microprogramado/eableado [Unidades funcionates (memoria, ALU. ee] Cireuitos légicos Nivel inferior Transistores y cables Figura 1.4 Niveles de maa en la jerarquia de un sistema, Et nivel del lenguaje de alto nivel ‘Cualquiera que haya programado una computadora en lenguajes de alto nivel, como C, Pascal, Fortran Java, ha interactuado con la computadora en este nivel. Aqui, el progra- mador solo ve el lenguaje y no ve ninguno de los detalles de los niveles inferiores de la maquina, En este nivel, el programador ve los tipos de datos y las instrucciones del len- guaje de alto nivel pero no necesita conocimiento alguno acerca de la forma en que Ia maquina configura realmente estos tipos de datos. Fs funcién del compilador el conver- tir los tipos de datos y las instrucciones desde el lenguaje de alto nivet hacia los circuitos de la computadora, Los programas escritos en lenguaje de alto nivel pueden ser recompi- lados para distintos tipos de maquina, las que (al menos es fo que se espera) funcionaran de la misma manera y entregarén los mismos resultados, independientemente de la m4- quina para la cual fueron compilados y en Ia cual se ejecutaron, Puede decirse que un pro- grama es compatible can distintos tipos de méquina si esté escrito en un lenguaje de alto nivel; esta clase de compatibilidad se conoce como compatibilidad de eédigo fuente. Ei nivel del ienguaje de maquina Tal como se ha mencionado previamente, el nivel de tos lenguajes de alto nivel tiene muy poco que ver con la maquina en Ia cual dicho lenguaje de alto nivel est siendo traducido. El compilador convierte el cédigo fuente en las verdaderas instrucciones de la méquina, a las que se suete denominar lenguaje de maquina o cédigo de maquina. Los lenguajes de alto nive! sirven al programador dado que le proveen un conjunto cierto de tipos de datos y capiTuLa 1 + wraopucciGn 9 construcciones de lenguaje, supuestamente bien pensado. Los lenguajes de maquina miran “hacia abajo” en la jerarquia, y asf alimentan las necesidades de los aspectos de bajo nivel del disefio de Ia méquina, Como resultado, los lenguajes de maquina deben tratar con cues- tiones circuitales tales como la estructura de los registros y la trasferencia de datos entre los registros. De hecho, muchas instrucciones pueden describirse en térmings de las trasferen- ccias efectuadas entre registros. El conjunto de instrucciones del lengvaje de maquina para tuna computadora dada suele denominarse juego de instrucciones de esa méquina, Por supuesto, el codigo real que utiliza Ia méquina no es més que un conjunto de ceros Y unos, a los que suele denominarse eédigo binario o lenguaje de méquina, Como puede imaginarse, la programacién en ceros y unos ¢s un proceso tedioso y factible de generar errores. Como consecuencia, uno de los primeros programas escritos para computadora fue el llamado assenrbler, que traduce esquemas nemotécnicos de un lenguaje comtin, tales co- mo MOVE Data, Acc, a sus comespondientes expresiones formadas por ceros y unos en el lenguaje de méquina, Este lenguaje, cuyas construcciones presentan una relacién uno a uno con el lenguaje de maquina, se conoce como lenguaje ensamblador (assembler). Como resultado de ta separacién de niveles, es posible tener mAquinas que difieren en la implementaci6n del nivel inferior pero que presentan el mismo conjunto de instrucciones 0 algtin subconjunto o superconjunto de un juego de instrucciones dado. Este planteo permitié que IBM disefiara una linea de productos como la serie IBM 360, que garantiza la compati- bilidad hacia arriba entre los eédigos de maquina. Un cédigo de méquina que funcione sobre una 360 Modelo 35 podrd funcionay, sin modificaciones, en una IBM Modelo $0, si el usua- rio requiriese actualizar su equipamiento hacia la méquina mas poderosa, Este tipo de com- patibilidad se conoce como “compatibilidad binaria”, dado que el cédigo binario funciona, sin modificaciones, en los distintos miembros de la favnitia, Esta particularidad fue, en gran parte, responsable del enorme éxito de Ia serie de computadoras [BM 360. Intel Corporation es otro ejemplo de compatibilidad binaria entre los integrantes de sus famitias. En este caso, los c6digos binarios escritos para el miembro inicial de una familia, ‘como et 8086, funcionarin intactas en todos los integrantes posteriores, como el 80186, el 80286, et 80386, e1 80486, y también en el mis modemo de ta familia, el procesador Pen- tium. Por supuesto, este enfoque no toma en cuenta ta existencia de otras computadoras que ofrecen a sus usuarios distintos juegos de instrucciones, lo que hace dificil el transporte del paquete de programas ya instalado en una familia de computadoras hacia otra. El nivel del control Las trasferencias entre registros -mencionadas en pérrafos anteriores~ se llevan a cabo desde la unidad de control, a través de sefiales de control que transficren la informacion entre un registro y otro, incluyendo, probabtemente, alguna Idgica circuital que pueda ‘realizar algun tipo de transformaci6n de la misma. La unidad de control interpreta las ins- trucciones de maquina una a una, lo que provoca la ocurrencia de las trasferencias entre registros 0 de alguna otra accién. 10_pruncipvos oF AROU:TECTURA DE COMPATADORAS La forma en que esto se lleva a cabo no debe ser motivo de preocupacién para el pro- gramador en lenguaje ensamblador. Los distintos integrantes de la familia de procesado- res Intel 80X86 presentan la misma conducta ante un programador en lenguaje ensam- blador, independientemente de cu‘il sea el procesador analizado. Esto se debe a que cada integrante que se incorpora a la familia se disefia para que sea capaz de ¢jecutar las ins- tnucciones originales de! 8086, adems de cualquier instrueci6n nueva que hubiese sido implementada para ese integrante de la familia en particular. Como se indica en la figura 1.4, hay diferentes formas de implementar la unidad de control. Probablemente, la forma més popular en ta actuatidad sea la de “cablear” la uni- dad de control, Esto significa que las sefiales de control que efectéan las transferencias entre registros estin generadas a partir de un bloque de componentes légicos digitales. Las unidades de control cableadas tienen como ventajas la velocidad y la cantidad de componentes, pero hasta no hace mucho eran extremadamente dificiles de diseftar y de modificar. (Estas técnicas se analizargn en detalle en el capitulo 6.) Una aproximacién algo més lenta pero més sencilla consiste en implementa las instruc- ciones como mieroprograma. Un microprograma es, en realidad, un pequefio programa es- crito en un lenguaje de nivel menor atin, e implementado en los circuitos de la maquina, cu- ya funcisn es la de interpretar las instrucciones del lenguaje de maquina. Fste microprograma suele conocerse como firmware debido aque incluye tanto hardware como software. El firm- ware se ejecuta a través de un microcontrolador, él cual ejecuta las microinstrucciones rea- les. (La técnica de microprogramacién también se explora en el capitulo 6.) El nivel de las unidades funcionales Las transferencias de registros y las demas operaciones implementadas por la unidad de control mueven informacién desde y hacia “unidades funcionales”, asf lamadas debido a que realizan cierta funcién importante para la operaci6n de ta computadora. Entre las unidades funcionales pueden incluirse los registros intemos de la CPU, la ALU y la me- moria principal de la computadora. Circuitos l6gicos, transistores y cables Los niveles mds bajos en los que puede observasse algiin resabio del funcionamiento de Jos niveles superiores de la computadora cortesponden a los niveles de los eircuitos l6gi- cos y de los transistores, Esto es asi dade que son los circuitos l6gicos los que se utilizan para construir las unidades funcionales, y porque son los transistores los que se usan para construir los circuitos légicos. Los cireuitos légicos implementan las operaciones légicas de mds bajo nivel, de las cuales depende el funcionamiento de la computadora. En el ulti- mo de los niveles, una computadora est formada por componentes eléctricos tales como transistores y cables, los que constituyen dichos circuitos I6gicos; pero, a este nivel, el fun- cionamiento de ia computadora se dispersa en términos de tensiones, corrientes, tiempos, de propagacién de las seftales, efectos cudnticos y otros temas de bajo nivel. tapiruio 1 + urrrooucetin 11 Interacciones entre niveles Las distinciones dentro de un nivel dado y entre niveles suelen confundirse en forma muy frecuente. Por ejemplo, una arquitectura nueva de computadora puede contener instrucciones de punto flotante en su implementacién més completa, pero en una imple- mentacién minima puede tener solo hardware suficiente como para ejecutar instruccio- nes con variables enteras. Las instrucciones de punto flotante se eapturan! antes de la ejecucién y se reemplazan por una secuencia de instrucciones de lenguaje de maquina que imitan o emulan esas instrucciones de punto flotante wtilizando las instrucciones de formato entero existentes. Este es et caso de aquellos microprocesadores que utilizan copracesadores de punto flotante opcionales. Los que no cuentan con el coprocesador de punto flotante emulan las instrucciones de punto flotante por medio de una serie de rutinas de punto flotante que se encuentran implementadas en el lenguaje de maquina del microprocesador y almacenadas en un circuito integrado de memoria ROM, que identifica a una memoria solo de lectura. Los puntos de vista de los lenguajes absoluto y de alto nivel son los mismos para ambas implementaciones, con excepcién de la velo- cidad de ejecucién. Es posible llevar esta emulacién al extremo de emular el juego completo de instruc- ciones de una computadora sobre otra computadora distinta. Los programas que cumnplen con esta funcién se conacen como emuladores y fueron utilizados por Apple Computer para mantener la compatibilidad del e6digo binario cuando Apple comenz6 a emplear los circuitos integrados PowerPC de Motorola en lugar de los circuitos integrados 68000, cu- yo juego de instrucciones es completamente distinto. El nivel de! lenguaje de alto nivel y los niveles del firmivare y de las unidades funcio- nales pueden estar tan entrelazados que resulte dificil identificar qué operacién se esté produciendo en qué nivel. El valor de la divisién de la arquitectura de computadoras en un conjunto de niveles jerécquicos no es tanto el de la clasificacién, que segtin acabamos de vera veces puede ser dificultosa, sino, simplemente, el de permitir ciertos enfoques en el andlisis a llevar a cabo en los capftulos que siguen. La perspectiva del programador. La arquitectura del juego de instrucciones Segiin se ha descrito en el andlisis de niveles previo, el programador que programa en len- ‘guaje de méquina tiene interés en el lenguaje y en las unidades funcionales de la maquina. Este conjunto de elementos, formado por el juego de instrucciones y las unidades funcio- nales, se conoce como arquitectura de programacién (ISA, instruction set architecture) de la computadora. 1.£l concepto se analiza en el capitulo 6. 12_PRINGIPIOS DE ARQUITECTURA DE COMPUTADORAS: {a perspectiva del arquitecto de computadoras El arquitecto de computadoras, por otra parte, observa al sistema desde todos sus niveles. El arquitecto que enfoca el diseito de una computadora estd sujeto invariablemente a requeri- mientos de rendimiento y restricciones de costos. El rendimiento puede estar especificado a partir de la velocidad de ejecucién de los programas, de fa capacidad de almacenamiento de la méquina o de una variedad de pardmetros diferentes. El costo puede estar planteado en términos monetarios, o de peso y tamaiio, o de consumo de potencia, El disefto propuesto por el arquitecto de computadoras debe intentar cumplir con las perspectivas especificadas parael rendimiento, pero sin salirse de los limites de costos establecidos, lo que normalmen- te lleva a soluciones de compromiso entre y a través de los niveles de la maquina, 1.6 Un sistema de computacidn tipico Las computadoras madernas han progresado desde los grandes monstruos de las décadas de 1950 y 1960 hasta llegar a las computadoras, mucho més pequeiias y més poderosas, que nos rodean en Ia actualidad, Aun con todos los grandes avances de la tecnologia de computadoras ocurridos en las ultimas décadas, las cinco unidades bésicas del modelo von Neumann siguen siendo visibles en las computadoras modemas. La figura 1.5 muestra la configuracién tipica de una computadora de escritorio, cuya unidad de entrada consiste en un teclado, a través del cual el usuario ingresa datos y co- mandos. Un monitor de video constituye la unidad de salida, en la que se presenta !a in- formacién en forma visual. La unidad de control y la ALU se agrupan dentro de un mi- croprocesador tinico que funciona como CPU del sistema. La unicad de memoria consta de un conjunto de circuitos individuales de memoria, asi como de unidades de disco ri- gido, de disquete y de CD-ROM. Una observaci6n del interior de la méquina permite ver que su corazén se encuentra contenido en una nica placa de circuit impreso, conocida cominmente como placa madre (motherboard), similar ala que se muestra en la figura 1.6. La placa madre con- tiene circuitos integrados, conectores para insertar placas de expansi6n, y cables que it terconectan los circuitos integrados y los conectores de expansi6n. En la figura se desta- can las secciones de entrada, salida, memoria, control y unidad aritmético-Iégica. (En capitulos posteriores se desarrollan los temas asociados.) 1.7 Organizacién de ta obra El funcionamiento interno de las computadoras se desarrolla en los capitulos siguientes. El capitulo 2 analiza la representacién de los datos, lo que provee el fundamento para to- dos los capitulos que siguen. El capitulo 3 analiza los métodos relacionados con 1a cavituto 1 + inTaopuccién 13 Unidad de disquete- Unidad de CD-ROM —— isco rigido. ‘Monitor de video Zécalos para conexidn de placas CPU (mictoprocesador debajo del disipador) Figura 1.5 + Un sistema de computacion de escritorio, implementacién del célculo aritmético. Los capitulos 4 y 5 analizan la arquitectura de programacién, lo que serviré como base para entender la interaccién entre tos compo- nentes de un sistema de computaci6n, El capitulo 6 vincula los contenidos anteriores pa- ra encarar el disefio y el anflisis de una unidad de control para la arquitectura del juego de instrucciones. in el capitulo 7 se cubre la organizacién de las unidades de memoria, asi como las técnicas de administracién de la memoria. En el capitulo 8, se tratan los te- ‘mas referidos a entrada, salida y comunicaciones. El capitulo 9 analiza aspectos avanza- dos de los sistemas de CPU tnica (que podrian tener més de wna unidad de procesamien- to). En el capftulo 10 se consideran aspectos referidos a sistemas de miiltiples CPU, tales como las llamadas arquitecturas paralelo y distribuida y las arquitecturas de redes, Por Liltimo, en los apéndices A y B se echa una mirada al disefio de circuitos tégicos digita- les, bloques fundamentales para los componentes basicos de la computadora. 14 _PRINCIPIDS DE ARQUITECTURA DE COMPUTABORAS one ne Be Figura 1.6 © Una placa made para procesador Pentium II. Fuente: TYAN Computer, http:/tyan.com.) 1.8 Estudio de un caso: zQué le ocurrié alas supercomputadoras? LiWorta de fos autores: El aporte que sigue proviene de la pagina lutp:/wwwperatogos com DeadSuper, creada por Kevin D. Kissell, kevink @acm.org, El sitio web creado por Kissell detaila docenas de proyectos de supercomputadoras que fueron quedando por el camino. (Véase la figura 1.7 2 para tener una visi6n histdrica de las primeras tecnologias de supercom- putadoras.) Una de las razones principales que han levado a las supercomputadoras a su ca- si extincién es el hecho de que las computadoras comunes de hoy en dia logran una parte sig- nificativa de la potencia de las supercomputadoras a un precio accesible para el individuo coméin, La relaci6n entre el precio de una computadora de escritorio y su rendimiento es muy favorable debido a los bajos costos logrados a través de las ventas en el mercado masivo. Da- do que las supercomputadoras no tienen acceso a ese mercado masivo, mantienen una rela- cin muy alta entre el precio y el rendimiento. El trabajo que sigue, escrito por Kissell y exteafdo de un anticulo publicado en Eleciri- cal Engineering Times, destaca las enormes inversiones que se realizan en el desarrollo de os microprocesadores de uso diario, lo que ayuda a mantener fa mencionada relacién fa- vorable entre precio y rendimiento en las computadoras de escritoria de bajo costo.) 2. Figura incluida por cortesta de la Universidad de Manchester. La historia de Manchaster Mark Ise cetalla en httpzevew.computers0.or9. Figura 1.7 ¢ La computadora Manchester University Mark | puesta en operaciOn el 21 de junio de 1948. (No debe confundirse con Harvard Mark 1, donada a la Universidad de Harvard por IBM, en agosto de 1944.) (Reproducido con autorizaciér del Departamento de Ciencias de la Computacion de la Universidad de Manchester) El final de una época dorada? Desde la construcci6n de las primeras computadoras programadas hasta mediados de la dé- cada de 1990, siempre hubo lugar en la industria de la computacién para cualquiera que ti viera alguna idea brillant, aun cuando fuese desafiante, acerca de c6mo desarroilar una maquina mas poderosa, La computacién se convirtié en estratégica durante In Segunda Guerra Mundial, y se mantuvo en tal situaciGn durante la época de ta Guerra Fria que s guié a aquella, La computacién de alto rendimiento es esencial para cualquier programa modemo de armamento nuclear, por lo que la carrera de la tecnologta de computadoras fue una consecuencia l6gica de la carrera armamentista. Si bien las computadoras poderosas son de mucho valor en una gran cantidad de sectores industriales, como las industrias del petréleo, quimica, médica, aerondutica, automotriz y de ingenieria civil, sera muy diftcil desmentir el papel de los gobiernos, y en particular el de tos laboratorios nacionales del go- biemo estadounidense, como catalizadores ¢ incubadores de las innovaciones en las tecno- logias de computadoras, La industria privada puede llegar a comprar mayor mimero de mé- quinas pero muy rara vez asumiré el riesgo de comprar una maquina cuyo mimero de serie sea de un solo digito. La desaparicién del comunismo soviético y el final de la Guerra Frfa provocaron, como consecuencia, un mundo en general més seguro y mis préspero, pero eliminaron la razén de ser de muchos mercaderes del rendimiento a cualquier precio, Junto con estos cambios geopoliticos aparecieron algunos hechos tecnolégicos y ‘econémicos que representaron problemas para los productores especializados en com- putadoras de alta tecnologia. La aparicién de los microprocesadores en lu década de 1970 planteé como punto principal la posibilidad de colocar una computadora de pro- grama almacenado en wn nico pedazo de silicio. Las presiones de la competencia, y el deseo de generar ventas mediamte la obsolescencia del producto del aio anterior, dieron comp resultado la duplicacién de la potencia de computucién de los microprocesadores cada 18 meses, segiin el enunciado de la conocida “ley de Moore”. En su camino, los di- 16 PawictPios DE AROUITECTURA DE COMPUTADORAS sefiadores de microprocesadores tomaron prestadas casi todas las argucias y téenicas uti- lizadas en el pasado por los disefiadores de supercomputadoras y mainframes: niveles jerdrquicos de almacenamiento, segmentaciones, unidades funcionales maltiples, mul- liprocesamiento, ejecucién desordenada, prediccién de saltos, procesamiento SIMD (Single Instruction, Multiple Dara), ejecuciGn especulativa. A mediados de los afios no- venta, las ideas de tos investigadores pasaban directamente de la etapa de simulaci6n a a implementacién de tos microprocesadores destinados a las computadoras de uso ma- ivo. No obstanie, debe notarse que la mayor parte de los avances logrados en el rendi- miento de los microprocesadores, en la década pasada, no llegé desde estas técnicas so- fisticadas de la arquitectura de computadoras, sino, simplemente, desde el aumento de las velocidades del reloj de los procesadores y de los crecimientos cuantitativos en los recursos de los procesadores derivados de los avances de la tecnologfa semiconductora, Alrededor de 1998, Ia CPU de la mejor computadora personal basada en Windows fun- cionaba ya a una frecuencia de reloj mayor que la de la supercomputadora mas impor- tante de la linea Cray Research en 1994. No puede sorprender entonces que las politicas de los laboratorios nacionales de los Estados Unidos se hayan desplazado desde la adquisicién de sistemas desarrollados des- de su base para tomar la forma de supercomputadoras hacia el despliegue de grandes en- sambles de sistemas producidos en masa y basados en microprocesadores, con el proyec- to ASCI como emblema de esta actividad. A la fecha de este trabajo, queda por ver si tales aglomeraciones resultarén ser lo suficientemente estables y apropiadas para el tra- bajo de produccién, pero los resultados preliminares han sido, al menos, satisfactorios. Los dias felices de las supercomputadoras basadas en tecnologias exdticas y en arquitec~ twras innovadoras bien pueden haber Hegado a su fin. Inyersién o muerte: La vida de Intel en la orilla? por Roy Wilson y Brian Fuller Santa Clara, California — Con alrededor de seiscientos millones de délares a ser utiliza- dos como inversién durante este afio, Intel Corp. se ha unido a las grandes ligas de las ‘empresas de capital empresario. Pero el nico imperativo que leva al gigunte de los mi- croprocesadores a invertir le da una influencia desproporcionada aun con respecto a esa enorme cifra, Para Intel, las inversiones de capital no son solo una fuente de ingresos; son una herramienta vital en la lucha por sobrevivi La supervivencia pareceria ser una preocupacién poco importante para la empresa de semiconductores més grande del mundo, Pero Intel, en un camino que le es totalmente propio, vive colgado en el equilibrio. Para cada nueva generaciGn de procesadores, Intel debe hacer enormes inversiones en el desarrollo de procesos, en edificios y en fabricas, una inversiGn demasiado gigante como para perderla. 3. Derechos reservados ©1998 CMP Media Inc. reproducido con autorizacion de Electronic Engineering Times. capiruio 1 + wrRoouccién_ 17 Gordon Moore, el emérito presidente de Intel, le pone la escala a la apuesta. “Una planta de investigacién y desarrollo cuesta hoy cuatrocientos millones solo en el edificio. Luego, hay que ponerle alrededor de mil millones de délares en equipamiento, Esto re- presenta una fébrica para un cuarto de micrén que puede Hlegar a producir alrededor de 5,000 obleas por semana, lo que se dice la planta utilizable mas pequefa. Para la prdxi- ‘ma generaciGn,” afirma Moore, “la inversién minima serd de dos mil millones, con entre tres y cuatro mil millones necesarios para cualquier tipo de volumen de producci6n. Nin- guna otra industria tiene una vida tan corta con inversiones tan enormes.” Gran parte de estas cifras sera gastada antes de que haya una necesidad concreta de los microprocesadores que la planta vaya a producir. En esencia, el total de los 4.000 mi- Hones por planta es una apuesta basada en la idea de que la industria absorberé un gran muimero de CPU a buen precio solo porque sean algo més ripidos que los elementos dis- ponibles actualmente. Si solo por una generacién dicha situaci6n no ocurriese (si alguien considerara, por ejemplo, que el Pentium IT es lo suficientemente rapido, gracias), los re- sultados serian impensables. “Mi pesadilla consiste en despertarme algin dia y no necesitar mayor poder de cém- puto,” dijo Moore. La arquitectura de tas computadoras trata aquellos aspectas de una computadora que son visi- btes para el pragramader, en tanto que ta organizacién de tas computaduras trata aqueltos as- pectos que se encuentran en un nivel més fisico y que no aparecen como visibles para el pra gramador. Histérlcamente, los pragramadores debian enfrentarse con cada aspecto de una Computadora: Babbage con elementos mecanicos y los programadores de ENIAC con cables y panetes de conexién, A medida que crece el nivel de sofisticacién de tas computatoras, el con- cepto de niveles de maquina aparece en forma més pronunciada, permitienda que las compu tadoras presenten conductas Internas y externas muy diferentes a la vez que se administra la complejidad en niveles estratiticados. El desarrollo individual mas significative que hace po- sible este planteo es ef cancepto de computadora de programa almacenado, que toma cuerpo enel modelo von teumann. Es el modeto von Neumann el que se ve en la mayor parte de las computadoras corrientes hoy en dia. Para lectura posterior La historia de la computacin esta llena de personalidades e hitos interesantes. Harlan Anderson ofrece un detalle corto y ameno de unos y de otros correspondientes al tltimo siglo. La obra de Charles Bashe y otros ofrece un resumen interesante acerca de las maquinas IBM. A. Bromley, ha- ce una crénica de las maquinas de Babbage. A. Ralston y E. Reilly aportan biogralias cortas de las 18_Pawcipios De ARQUITECTURA DE CoMPUTADORAS personalidades més célebres. B. Randell cubre la historia de tas computadoras digitales. Una histo- ria de la computacion, de lectura accesible, se encuentra en el sitio web hitp://vww.ifi.unizh.ch/se/ people/hoyle/Lecture/. Doron Swade, cubre una version legible del método de tas diferencias finitas tal como aparece en las maquinas de Babbage y en la versi6n de fa maquina diferencial analitica creada por et Museo de Ciencias de Londres. £! trabajo de A. Tanenbaum es uno de una cantidad de textos que popularize la nocion de niveles dentro de las maquinas. ‘Anderson, Harlan, “Dedication address for the Digital Computer Laboratory atthe University of Ilinois", 17 de abril de 1991, tal como se reproduce en: /EEE Circuits and Systems Society Newsletter, vol. 2, n®1, marzo de 1991, p.p. 3-6. Bashe, Charles J., Lyle R. Johnson, John H. Palmer y Emerson W. Pugh, i's Early Computers, The MIT Press, 1986, Bromiley, A. G., “The evolution of Babbage’s Calovlating Engines”, Annals of the History of Computing, vol. 9, 1987, p.p. 119-138. Randell, B., The Origins of Digital Computers, 3'ed., Springer-Verlag, 1982. Ralston, A. y €. 0. Reilly eds., Encyclopedia of Computer Science, 3'ed., van Nostrand Reinhold, 1998, Doron D. Swade, “Redeeming Charles Babbage’s Mechanical Computer”, en: Scientific American, vol. 268, n®2, febrero de 1993, p.p. 86-91. Tanenbaum, A., Structured Computer Organization, 4 ed., Prentice Hall, 1999. (Traduccién al espafio! disponible: Organizacién de computadoras, Prentice Hall, 2000.) Problemas 1.1 Laley de Moore, que se atribuye al creador de Intel, Gordon Moore, dice que la potencia de ‘computacién se duplica cada 18 meses por el mismo precio. Como observaci6n no relaciona- da surge que las instrucciones de punto flotante se ejecutan en forma circuital cien veces mas r4pido que cuando se las emula. Usando la ley de Moore como guia, gcuanta tiempo le llevard ala potencia de computacién crecer a punto tal que las instrucciones de punto flotante se emu- len tan rapido como sus anteriores contrapartidas en el hardware? Capitulo 2 Representacion de la informaci6n 2.1 Introduccion En los primeros dias de la computacién eran frecuentes los errores de concepto referidos a las computadoras. Uno de los mas habituales consistfa en creer que la computadora era énicamente una méquina sumadora gigante capaz de realizar operaciones aritméticas. Las computadoras tenfan capacidad para hacer mucho mds que eso, aun en aquellos primeros dias, Otro error de concepto, en contradiccién con el anterior, era el de pensar que 1acom- putadora podtia hacer “cualquier cosa”. Subemos ahora que bay ciertos problemas que re- sultan intratables, aun para la méquina més poderosa con arquitectura von Neumann. La percepcién correcta, por supuesto, esti en algtin lugar intermedio entre ambos. Hoy nos resultan familiares algunas operaciones que na son aritméticas, tales como la computacién grafica, el audio digital y aun el manejo del (ratén) mouse de la computado- ra, Independientemente del tipo de informacién que se esté manipulando, debe estar repre- sentada por patrones de unos y ceros. (También conocidos como cédigos “si-no”.) Este planteo lleva inmediatamente a la pregunta referida a como debe representarse 0 describir- se la informacién dentro de la maquina, o sea, cud dehe ser la representacién o codifica- cién de los datos. Las imégenes grificas, el audio digital o las pulsaciones sobre los boto- nes del mouse deben estar todos codificados de alguna manera sistemdtica y normalizada. Dado que es la més conocida, puede pensarse en ta representacién decimal de Ja in- formacién como a forma mas natural de dicha representacién. No obstante, el uso de e6- digos sf-no en la representacién de la informacién antecede en muchos afios a la compu- tadora, como es el caso de! e6digo Morse. Este capitulo introduce algunos de ios ejemplos de codificacién mas simples y més im- portantes: la codificacién de mimeros de punto fijo con y sin signo, la de los nmeros reales (Conocidos en la jerga de la computacién como mimeros de punto Notante), y la de los ca- racteres requeridos para la impresidn de texto. Se podri ver que en todos los casos existen diversas formas de codificar los distintos tipos de datos, algunas de ellas titiles en un con- texto dado, otras, nuis stiles en otro contexto. Asimismo, este capitulo presentard una prime- ra mirada sobre Ia aritmética de computadoras, con el objeto de entender algunos de los es- quemas de codificacién, si bien los detalles quedardn para ser tratados en el capitulo 3, ‘20_pRincrptos Of ARMUITECTURA DE COMPUTADORAS Un punto clave en ef desarrollo de un formato de representacién de informacién en una computadora es la determinacién del espacio de almacenamiento que se deberd de- dicar a cada tipo de dato. Por ejemplo, un disefiador de computadoras puede decidir re- presentar los niimeros enteros con 32 bits, e implementar una ALU que pueda realizar céilculo aritmético sobre esos conjuntos de 32 bits, y que devuelva resultados también en 32 bits. No obstante, algunos numeros pueden ser muy grandes como para ser represen- tados en 32 bits, y en otros casos, los operandos pueden representarse por 32 bits pero el resultado de una operacién ser mayor, lo que provocard una condicién de desborde*, condici6n cuyo significado se describe en el capitulo 3. Por consiguiente, se hace nece- satio tener en claro cudles son los limites a imponer sobre ta precisi6n y el rango de las ‘operaciones aritméticas derivados de la naturaleza finita de las representaciones ut das. Estas limitaciones se analizan en las secciones siguientes. 2.2 Nimeros de punto fijo En la representacién de mimeros de punto fijo™, todos los nsimeros a representar tienen exactamente la misma cantidad de digitos y la coma decimal esté siempre ubicada en el mismo lugar. Como ejemplos dentro del sistema decimal pueden plantearse los nimeros 0,23", “5,12” y “9,11”. En estos ejemplos, cada mimero tiene tres digitos y la coma de- cimal se ubica a continuacién del primero de ellos, Los ejemplos que poeden presentar- se en el sistema binario de numeracién (en el que cada digito solo puede adoptar los va- lores 0.0 1) son “11,10”, “01,10” y “00,11” en los que hay cuatro digitos y donde la coma “decimal” esté entre el segundo y el tercero de ellos. La diferencia principal entre la re- presentaci6n de ntimeros de punto fijo en el papel y la forma en que se almacenan dentro de la computadora es que, al representar mimeros en este formato, no se almacena coma decimal alguna, sino que, simplemente, se supone que ocupa un lugar determinado. Po- dria afirmarse que la coma decimal solo existe en fa mente del programador. El estudio de la representacién de ntimeros en el formato de punto fijo se inicia con el andlisis del rango y la precisiGn de esta representacién, utilizando para esto el sistema de numeracién decimal, Continda con una mirada a la naturateza de los sistemas de nume- raciGn, tales como el decimal y el binario, y a los métodos de conversién entre diferentes sistemas, Con estos fundamentos, se investigan distintas formas de representacién de mii- meros negativos expresados en formato de punto fijo, analizando, finalmente, algunas operaciones matemiticas simples que pueden realizarse con ellos. * N.de T: En muchos paises de habia hispana, suete utiizarse el término original ct idioma inglés (overttow) sin ‘raduccién alguna. “* de T: Se aceplard en este texto la nomenclatura habitual en la que se identifica como “punto” a la coma ecima), dbiendo queda clare que las mencione al punto Wo o tans se tefieren ala ubicacion de dicha ‘coma decimal GAPHTULO 2 + REPRESEWTACION DE LA WFORMAGION 21 2.2.1 Rango y precisién en ndmeros de punto fijo Una representacién de punto fijo puede caracterizarse por el range de los ntimeros que expresa (dado por la diferencia entre el niimero mayor y el menor) y por su precisién (1a distancia entre dos mimeros consecutivos en una serie numérica). Para el ejemplo plan- teado anteriormente, en el sistema de numeraci6n decimal, si se utilizan tres digitos con fa coma decimal entre el primero y el segundo, el rango de representacién varfa desde 0,00 hasta 9,99, incluyendo ios extremos, lo que se expresa como {0,00..9,99}. Lu preci- sin de la representacién es 0,01, y el error resultante puede considerarse como la mitad de la diferencia entre dos nimeros consecutivos, tales como 5,01 y 5,02, entre los que hay una diferencia de 0,01. El error, por ende, es 0,01/2 = 0,005. Esto significa que cual- quier nimero del rango 0,00 a 9,99 puede representarse en este formato con una aproxi- macién de hasta 0,005 de su valor real o preciso. Nétese de qué manera existe un compromiso entre rango y precisi cimal se coloca ala derecha del mimero, el rango pasa a ser (000..999} pero la precisin pasa a ser de 1,0. Si, en cambio, la coma decimal se coloca a la izquierda del numero re~ presentado, el rango pasa a ser [0,000..0,999} y Ia precisién pasa a valer 0,001. En cualquiera de tos casos, hay solo 10* “objetos” decimales diferemtes, cuyo rango va desde 000 2 999 o desde 0,000 hasta 0,999, en consecuencia, solo es posible repre- sentar 1000 elementos diferentes, independientemente de c6mo se administren rango y precisi6n. No hay raz6n alguna para que el rango empiece en 0, Un ndmero decimal de dos di- gitos puede tener rangos de [00.99] o de [-50..449}, o aun de [-99..0}. El apartado 2.2.6 analiza con mayor profndidad la representaci6n de los mimeros negatives. El rango y la precisién son conceptos importantes en Ia arquitectura de computadoras, debido a que ambos son elementos finitos en ta implementacién de la arquitectura, en tanto que son infinitos en ef mundo real, por le que el usuario debe tener en claro las li- mitaciones que surgen al tratar de representar informaciGn externa en el formato interno, .. Si fa coma de- 2.2.2 La ley asociativa del algebra no siempre funciona en la computadora Entre los primeros conceptos que se plantean en matemética, aparece la llamada propie- dad o ley asociativa: At(B+C)=(AFB)HC Como podré verse, la ley asociativa del dlgebra no funciona cuando se representan néme~ ros en el formato de punto fijo con represemtacién finita. Considérese una representacion de nimeros enteros en formato de punto fijo.con un solo digito decimal y la coma decimal ala derecha, con un rango de [-9..9]. En el caso en que A= 7, B=4 y C=-3, la sumade (22 _PRINGIPIOS DE ARQUITECTURA DE COMPUTADORAS. A+ (B+ O)=74+(4-3)=74 1 =8. Pero (A +B)+C=(744)-3= 11-3. El resultado intermedio, 11, jestd fuera del rango de la representacién considerada! Si bien el resulta- do final podria haber quedado dentro del rango de representacién del sistema de numera- cién, se ha producido un desborde en el resultado intermedia. Este ejemplo permite ver que, si algin resultado intermedio resulta incorrecto, el resultado final de la operacién completa también es incorrecto. Por consiguiente, surge como conclusién que la ley asociativa del dlgebra no se cumple cuando se representa la informact6n numérica en formato de punto fijo de longitud finita. Se trata de una consecuencia inevitable de esta forma de representacidn y no hay solucién prictica excepto la de detectar el desborde en el momento en el que ocurra, 0, habiendo de- tectado el desborde, repetir la operacién con una representacién que permita un rango ma- yor. (Esta dltima técnica se usa muy raramente, excepto en situaciones criticas.) 2.2.3 Sistemas de numera in posicionales Esta seccién analiza de la utilizacién de sistemas numéricos con bases arbitrarias, si bien el enfoque se concentra sobre {os sistemas mAs utilizados en las computadoras digitales, tales como el sistema binario (de base 2) y sus parientes cercanos, los sistemas octal (de base 8) y hexadecimal (de base 16). La base o rafz de un sistema de numeracién define el rango de valores posibles que pueden adoptar sus digitos. En el sistema de numeracién decimal (de base 10), los dife- rentes digitos de una cantidad numérica se representan por alguno de los 10 valores co- rrespondientes al 0, 1, 2, 3, 4, 5,6, 7, 8 y 9. ES sistema naturalmente utilizado para ta re- presentacién de niimeros en una computadora es el sistema binario, en el que se representa la informacién como un conjunto de ceros y unos. La expresi6n general que permite determinar el valor decimal de un niimero en un sis- tema de numeraci6n de base & y en formato de punto fijo es la siguiente: El valor del digito que ocupa la posicién / est representado por by. Existen en este caso 1 digitos a la izquierda de la coma fraccionai itos a su derecha, Esta forma de representaci6n de un niimero, en la que cada posicién tiene asignado un determinado va- Jor, se denomina sistema de numeracién posicional. Considérese la expresién (541,25), en la cual el subindice 10 representa la base en La que se expresa el nimero." En este caso, m= 2y k= 10: “ N. de T: €n ol casa de ndeneros axpresados en al sistema decimal, por convencién, suela oritrse el subind- ‘ce indicador de la base, sobreentendiéndose que todo nUmero asi expresado lo estd en dicho sistema decimal. CAPITULO 2 » REPRESENTACION DE LA mFORMACION 23 5x10 +4x 10'4 1x 10°42x 10" +5x 107 = = (500) + (40) + (1) +(2/10) + (5/100) = (541.25) Si en forma similar se considera el nimero binario (1010,01),, en el que a= 4, m=2y k= 2, se tiene Ux DPeOx Pet x 2 eOxMeOx 2s 1x2= = (8) + () + (2) + (0) + (0/2) + (1/4) = (10,25) Este dltimo procedimiento da una idea acerca de c6mo convertir un nimero expresado en un sistema de numeracién de base cualquiera al sistema de numeracién decimal, mediante Ja utilizacién de una representacién polinémica. Se trata de multiplicar cada digito por €l peso asignado a su posicién (potencias de dos en este ejemplo) y tuego sumar los va- lores para obtener el ntimero convertido. Si bien este método es vélido para conversiones de todo tipo de sistema, algunos sistemas plantean ciertas dificultades especiales, las que serdn desarrolladas en Ia prOxinya seoci6n. Nétese que en estos sistemas de numeraci6n posicionales se define el bit con el mayor pe- so asociado como bit mas significative (MSB, most significant bit), y el bit de menor peso como bit menos significative (LSB, least significant bit). Por conversién, el LSB es el bit a Ja derecha de la expresién numérica, en tanto que e} MSB es et bit a la izquierda de esta, 2.2.4 Conversién entre sistemas Ena seccién anterior se ha planteado un ejemplo de eémo puede convertirse un mimero expresado en el sistema de numeracién binario al sistema de numeracién decimal. La ‘conversi6n de un nimero en el sentido contrario puede ser un poco mas compleja. La for- ma més sencilla de convertir niimeros de punto fijo que contengan tanto parte entera co- ‘mo fraccionaria consiste en operar con cada una de sus partes por separado. Como ejem- plo, se planteard la conversién del nimero 23,375 al sistema binario. Se comienza por separar el mimero en sus pares entera y fraccionaria: 23,375 =23 + 0,375 Conversién de la parte entera de un niimero de punto fijo. Método de los restos Segtin Jo sugerido en la secci6n anterior, la forma polinémica general para la representa- cién de un niimero entero binario es: Bx D4 bx WA eB, x2 b,x 2” 24_pruncipios OE ARQUITECTURA DE COMPUTADORAS Si se divide al ntimero entero por dos, se obtendré: Bx Mab xIe +b, x2 con un resto de 8,, Como resultado de dividir por dos el niimero entero original se obtie~ ne el valor del primer coeficiente binario b,. Puede repetirse este proceso aplicdndolo al polinomio remanente para obtener el segundo coeficteme &,. Si se continGa aplicando el mismo procedimiento en forma iterativa, se obtendrdn todos los coeficientes b, Este pro- cedimiento forma la base del método de los restos para convertir nimeros enteros entre diferentes sistemas de numeracién. Entero Resto y a2 = 1 <— Bit menos significative x m= 0 1 <— Bit més significative QBhq = (OND, Figura 2.1 + Conversion de un nimero entero decimal al sistema de numeracién binario mediante el métogo de los restos. EI método de los restos se aplicar ahora para convertir el ntimero 23 al sistema de base 2. Como se ve en la figura 2.1, el entero se divide inicialmente por 2, lo que deja un res- tode 00 1. Eneste caso, 23/2 produce un cociente de 11 y un resto de 1. Este primer res- to es el digito (bit) menos significative del nimero convertido (el bit a la derecha del nd- mero). En el paso siguiente, se divide ahora el néimero 11 por 2, to que deja un cociemte de 5 y un resto de 1. Al dividir 5/2 se obtendré un cociente de 2 y un resto de 1. El proce- so continda hasta obtener 0 como cociente, Si se sigue dividiendo luego de obtener co- ciente nulo, solo se logrardn ceros como futuros cocientes y restos, 10 que no cambiaré el valor del niimero convertido. Los restos asi obtenidos se recogen en el orden indicado en 1a figura 2.1, para obtener la expresi6n binaria del numero convertido, lo que en este ca- so da por resultado 23 = (10111),. En general, todo numero expresado en el sistema de- cimal puede convertirse a cualquier otro sistema simplemente dividiendo el entero deci- mal reiteradamente por la base del sistema de numeraci6n al que se lo quiere converti El resultado puede verificarse mediante la conversi6n del mayor nimero binario asi obtenido al sistema decimal, mediante el método polinémico: CAPITULO 2 + REPRESEMTACION DE LA INFORMACION 25 OUD, = = 1x2 +Ox Pal x Pei x ei x= = 16404442415 = (23) Aesta altura, se ha procedido a la conversién de la parte entera del mimero 23,375 al sis- tema de numeracién binario. Conversi6n de la parte fraccionaria de un niimero de punto fijo. Método dé las multiplicaciones La conversién de la parte fraceionaria puede resolverse multiplicando sucesivamente la fraccién por dos, de acuerdo con lo que se describe a continuacién. Una fracci6n binaria se representa, en su forma general, segdn la expresién siguiente: byx2 4b xMHbgx Boa. Si se multiplica dicha expresién por 2, se obtiene: by +b, x2 +b x24... Se puede determinar asi el coeficiente b ,. Si se reitera el procedimiemto sobre la fraccién remanente, se obtendrén los sucesivos b,. Este proceso determina fa forma de convertir ni- ‘meros fraccionarios entre distintos sistemas de numeracién utilizando el método de las multiplicaciones. En el ejemplo aqui planteado (véase la figura 2.2), la fraccién inicial, 0,375, es menor que 1. Si se 1a multiptica por 2, el resultado obtenido ser menor que 2. El digito a Ta izquierda de 1a coma fraccionaria seré entonces 0 0 1. Este es el primer digito a Ja derecha de la coma fraccionaria en el niimero convertido a base 2, tal como se muestra en la figura, Se repite el proceso sobre la parte fraccionaria hasta que se obtenga una frac- ci6n nula, en cuyo caso las siguientes iteraciones solo darén por resultado ceros adiciona- Jes, 0 hasta que se haya alcanzado el limite de precision requerido por la representacién utilizada, Se recogen los digitos obteniéndose asf el resultado: 0,375 = (0,011, En este procedimiento, el multiplicador coincide con Ia base del sistema numérico de destino. En este caso, el multiplicador es 2, pero si se pretendiese realizar una conversiéa a otro sistema, como podria ser un sistema de base 3, se utilizaria 3 como multiplicador.t 1. Alernativamente, puede usarse el sistema de numeracién decimal y evitar la conversin mediante ia repre- ‘sentacion binaria de los diez dgitos decimales. Esta representacién se conoca como BCD (decimal codifica- ‘do en binario) y se la describird mas adelante, 26 _pemnciPiog Of ARQUITECTURA DE COMPUTADORAS ands significative 037s x 2 = Oi x 2 = ts as x 2 = 10 Bit menos significative (0.37549 = (0.01), Figura 2.2 « Conversién de una fraccién decimal al sistema binario por madio del método de las muikipicaciones. Puede verificarse el resultado de la conversiGn si se realiza la reconversi6n al sistema de- cimal del nimero binario ast obtenido, utilizando la representaci6n polinémica: (0,011), = Ox 244 1x27 41x 2750 40,25 + 0,125 = (0,375),9, ahora se combinan las partes entera y fraccionaria, se obtiene el resultado final: 23,375 = (10111,011), Fracciones no exactas Si bien el método de conversin funciona con todos los sistemas de numeracién, el proceso puede llegar a producir pérdidas de precisién. Por ejemplo, no todas las fracciones repre~ sentadas en el sistema de numeracién decimal pueden tener como equivalente un nimero ra- cional exacto en el sistema binario, Considérese como ejemplo Ia conversién de! niimero 0,2, al sistema binario de numeraciGn, siguiendo el procedimiento expresado, y de acuerdo con lo que se observa en la figura 2.3. En el cuarto paso de fa conversién reaparece la frac- cién 0,2, por lo que a partir de ese punto el proceso se repite en forma periédica. Para tratar de justificar la causa de esta situaci6n, considérese que cualquier fraccién exacta expresada en el sistema binario puede representarse como i/2* para ciertos valores de los enteros / y k. (Esta forma de representacién no es vélida para mimeros fracciona- rios periédicos.) En forma algebraica: 2 six SM(2* x SY) =i x SLO = j/10" En la que jes el entero ix 5*, La fracci6n no es periédica en el sistema decimal. Este con- cepto reafirma el hecho de que solo las fracciones no periédicas de un sistema de nume- racién de base b pueden presentarse como i/b* para algunos valores enteros de iy &. La condicién que debe cumplir una fraccién decimal exacta para que su equivalente binario también sea exacto es: 10 = ES* x 24) = j/2* ENTRCION OE LA UFORMACION 27 oa x 2 = 08 og x 2 = 16 Figura 2.3 © Un aémero traccionario pura en base 10 que no tiene su correspondiente forma en el sistema binario de numeracién. Donde j = i/5" y 5* debe ser factor de i, Para fracciones decimales de un sole digito, tnica- mente 0 y 0,5 dan como resultado binario una fraccién exacta (dando solo el 20% de las posibles fracciones decimates de un tinico digito); para fracciones de dos digitos, solo cumplen con la propiedad las fracciones 0,00, 0,25, 0,50 y 0,75, tas que corresponden al 4% de las posibles fracciones de dos digitos, etc. Existe una relacién entre los mimeros re- lativamente primos y las fracciones peridicas, que puede ser dil para entender cual es la raz6n por la que algunas fracciones decimales exactas no tienen una forma equivalente bi- aria que también seu exacta, D. E. Knuth, en The Art of Computer Programming, provee algunas profuadizaciones sobre el tema. Representaci6n binaria versus representaciOn decimal En tanto que 1a mayorfa de tas computadoras usan el sistema de numeracién binario pa- ra la representacién intema y el cdlcuto aritmético, algunas calculadoras y maquinas de oficina utilizan como representacién interna el sistema de numeracién decimal, con lo que no tienen los problemas de representacién mencionados. La causa principal de la uti- lizacién del sistema decimal de numeracién en las computadoras comerciales no es tan- to el problema de la precisiGn de Jos ntimeros fraccionarios sino el hecho de poder evitar los procesos de conversién decimal-binario en las unidades de entrada y salida, procesos que hist6ricamente requitieron una cantidad de tiempo importante, Representacién de numeros en los sistemas binario, octal y hexadecimal Sibien los nimeros binarios reflejan la realidad de la representacién interna de los néme- 19s tal como se utiliza en la inmensa mayoria de as computadoras, tienen como desven- taja el hecho de requerir mayor cantidad de digitos para representar un nimero dado que cualquier otro sistema de numeracién posicional. Asimismo, suele ser mas facil cometer 28_PRINGIPIOS DE AROUITECTURA DE COMPUTADORAS, errores cuando se escriben mimeros binarios debido a la gran cantidad de ceros y unos que hay que utilizar en la representaciGn. En apartados anteriores se ha mencionado a los sistemas de numeracién octal (sistema de base 8) y hexadecimal (de base 16), como sistemas vinculados al sistema de numeracién binario. Esta relacidn esta dada por el he- cho de ser estas bases potencias de dos, la menor de todas ellas. Se procederé a demos- rar que la conversiGn entre jos sistemas de numeracién binario, octal y hexadecimal es i |. ¥ que hay ventajas précticas significativas en el uso de estos sistemas para la re- presentacién de nimeros. Los niimeros binarios pueden ser considerablemente més grandes (en cantidad de di- gitos) que sus equivalentes decimales, Suele resultar practico como elemento de repre- sentacién el utilizar aquellos sistemas de numeracién cuyas bases son potencia de dos. La conversiGn entre los sistemas de numeracién de bases 2, 8 y 16 es mucho més sencilla que convertir hacia y desde el sistema decimal. Los valores utilizados para los digitos del sistema octal resultan familiares por cuanto son los primeros ocho digitos del sistema de- cimal. En cambio, para el sistema hexadecimal, se requieren seis digitos mas que los que se usan en el sistema decimal, La convenci6n habitual para la representacidn de los digi- tos adicionales (10, 11 ,12, 13, 14, 15} del sistema hexadecimal pasa por el uso de las seis primeras letras dei abecedario, sean maydsculas o mindsculas. La figura 2.4 representa los digitos utilizados coménmente en los sistemas de numeracién de bases 2, 8, 10 y 16. Al comparar la columna correspondiente al sistema binario con las columnas de los sis- temas octal y hexadecimal surge que se requicren tres bits para representar en binario ca- da uno de los digitos del sistema octal, y cuatro bits para representar en binario cada un de los 16 digitos del sistema hexadecimal, En general, se requieren k bits pura represen- tar en binario un digito del sistema de numeracién de base 2% siendo & un mimero ente- £0, por lo que el sistema de numeracién de base 8 = 2° requiere tees bits por digito, en tan- to que el sistema de numeracién de base 16 = 2* requiere cuatro bits por digito. Para conventir un nimero expresado en el sistema binario al sistema octal, se divide el mimero binario original en grupos de tres bits cada uno, empezando a partir de la coma de- cimal, completando el grupo més significative con ceros, en caso de ser necesario. Luego, cada trio de bits se convierte en forma individual al sistema octal. Para conversiones des- de el sistema binario al hexadecimal se utilizan grupos de cuatro bits. Si se pretende con- vertir cl ntimero (10110), al sistema de base 8, el procedimiento es el siguiente: (10110), = (010), (110), = (2)g (6)_ = (26), En ef caso de los dos bits de mayor peso, se agregé un cero a la izquierda para completar el trio correspondiente. Si ahora se considera la conversién det niimero binario (10110110), al sistema hexa- decimal, un procedimiento similar al anterior leva a: (10410110), = (1011), (0110), = (B),, (6g = (BO), apiruio 2 + nEPREsEwTacr6n GE LA WFORMACION 29 Binario Octal Decimal Hexadecimal (base2) (base 8) (base 10) {base 16) o ° 0 9 1 1 1 1 10 2 2 2 un 3 3 3 100 4 4 4 101 5 3 3 10 6 6 6 a i 7 7 1000 10 8 8 1001 "1 9 9 1010 2 10 A 1011 13 " B 1100 14 12 c 1108 15 3 D 1110 16 14 E a w 15 F Figura 2.4. Vslores de ls primeros 16 nimeros en los sistemas de aumeracién binavio, octal, decimal y hexadecimal, Néiese que B, en el sistema de numeracién hexadecimal, no es una variable, sino que es el digito de dicho sistema que representa al niimero once. Los métodos de conversi6n planteados pueden usarse para convertir un mimero desde cualquier sistema de numeracién a cualquier otro sistema, pero es probable que la forma de realizar una conversi6n, tal como la de convertir (513,03), a base 7, no resulte dema- siado evidente. Como ayuda en estos casos no habituales, se puede realizar la conversi6n pasando primero por el sistema de numeracién decimal, y completando luego Ia conver- sidn desde el sistema decimal a la base de destino. Como regla general, se utiliza el méto- do polinémico cuando se convierte un niimero al sistema de numeracién decimal, y se uti- lizan los métodos de multiplicacién (para nimeros fraccionarios) y de division y obtencién de restos cuando se convierte un nimero desde el sistema decimal. 2.2.5 Una primera mirada a la aritmética de las computadoras El andlisis detallado del célculo en computadoras se desarroHard en el capitulo 3. Por el momento se analizar4 emo se resuelve la suma binaria, dado que este conocimiento es necesario para la representacién de ntimeros binarios con signo. La suma binaria se rea- fiza en forma similur a la forma en que se realizan a mano las sumas en el sistema deci- mal, tal como se ilustra en la figura 2.5. Dos ntimeros binarios A y B se suman de dere- cha a izquierda, generando un bit de suma y uno de arrastre en cuda posicién binaria. Dado que los bits menos significativos de A y B pueden adoptar uno de dos valores, la su- ‘ma de la columna de las unidades permite plantear solo cuatro posibilidades: 0 +0, 0+ 1, | +0y 1+ 1, con un arrastre de 0, como se ve en la figura. El arrasire en la columna de Las uni- dades es siempre nulo, Para las columnas restantes, el arrastre que Iega desde la colum- ‘30__PRINCIPIOS DE AROUITECTURA GE COMPUTADORAS: na anterior puede ser cero 0 uno, por lo que cn cada columna pueden darse hasta ocho combinaciones de entrada, segtin lo muestra la misma figura 2.5. Amauedeenma 9 9 9 oO 1 1 1 4 ooo t 1 69 Oo 5 4 Operands [7 me ee eee ee tt Arrastee Suma Flemplas fil Arusedecmméa = 1 1 1 1 0000 Sumandod = OTL E1100 (24 Sunmdo# + 010411010 (90h Suma THOTOTIO Qe Figura 2.5 + Ejemplo de suma tinaria. Nétese que el mayor mimero que puede representarse con el formato de ocho bits de la figu- mi 2.Ses (1117 1111), = (255), ¥ que el menor ntimero a representar es (0000 0000), = (O),o- Los conjuntos de bits 1111 1111 y 0000 0000," asf como todos los patrones de bits interme- dios, representan a los ndmeros decimales correspondientes al intervalo cerrado que va desde 0 a 255, siendo todos ellos mimeros positivos. Hasta este momento se han consi- derado solo ntimeros sin signo, pero también se hace necesario admitir la representacién de ntimeros signados, para lo cual se asignaré aproximadamente la mitad de los elemen- tos antes mencionactos a la representaciGn de los némeros positivos y 1a otra mitad a los némeros negativos. La proxima seccién analiza cuatro convenciones de uso habitual en Ta representacién de mimeros binarios signados, 2.2.6 Niimeros signades en formato de punto fijo Hasta este momento solo se ha considerado la representacién de niimeros en formato de punto fijo sin signo. La situacién es bastante diferente cuando se pretende representar mi- meros signados. Existen cuatro convenciones distintas de uso habitual en la representa- ci6n de mimeros con signo: magnitud (valor absoluto) y signo, complemento a uno, com- plemento a dos y notacién excedida. Se analizarin todas ellas, de una en una, utilizando como ejemplo Ja representaci6n de mémeros enteros. Durante el andlisis, ¢l lector podré emplear como referencia la tabla 2.1, que muestra las cuatro representaciones para el ca- so de un miimero de tres bits. * NW. de T: Para mayor claridad, los nimeros binarios de més de cuatro bits se separan en grupos de a cualro (un cigito hexadecimal). Esta separacién no influye sobre el valor det nirnero; solo se utiliza para tecilitar la lectura, CAPITULO 2 + REPRESENTACION DE LA INFORMACION 31 Decimal Sinsigno Magnitud ysigao Complementoal Complementoa? Excesod 7 We - - 6 Ho - - = - 5 101 - - - - 4 100 - - - - 3 on on on ou ty 2 10 O10 010 010 m0 t 001 oO1 O01 oor 101 40 000 000 000 000 100 oO - 100 ut 000 100 tr - 101 10 U1 ou 2 - HO 101 10 O10 “3 - ML 100 101 00 4 - - - 100 000 ‘Tabla 2.1 * Repraseataciones de nimeros enteros de tres bits. Magnitud y signo La representaciGn en magnitud y signo (conocida también como de valor absolute y no) es la més habitual debido a su uso en el sistema de numeracién decimal. Un signo mas 0 un signo menos, colocado a Ia izquierda del nimero representado, indica si el né- mero en cuesti6n es positivo o negativo, tal como se acostumbra al escribir +12,,0-12,q En la representacion binaria de magnitud y signo se utiliza el bit ubicado més a la izquier- da (el de mayor valor absoluto) para representar el signo, asigndndosele valor 0 o | para representar, respectivamente, el + y el -. Los bits restantes conticnen el valor absoluto del numero. En esta convencién, las representaciones binarias de +12,, y 12, en formato de palabra de ocho bits, se traducen como: +(12),5 = (0000 1100), (12), = (1000 1100), El ndmero negative se obtiene simplemente al reemplazar, a partir de la representacién deb imero positivo, el cero del bit de signo por un uno, Nétese que en esta convencién exis- ten dos representaciones para el cero, una positiva y una negativa: 0000 0000 y 1000 0000. En el formato utilizado en el ejemplo se hace uso de ocho bits, siendo validas todas las combinaciones de esos ocho bits, por lo que existen 25 = 256 combinaciones diferen- tes, Sin emburgo, esta convencidn solo puede representar 2°— | = 255 combinaciones, da do que +0 y -0 representan el mismo niimero. ‘32_PRINGIPIOS DE ARQUITECTURA DE COMPUTADORAS En el desarrollo de! texto se hard uso de la representacidn en magnitud y signo duran- te el andlisis de las representaciones en punto flotante, en la seccién 2.3. Complemento a uno La operaci6n binaria de complemento a uno tiene una resolucién trivial; convertir en ceros todos los unos de un ntimero y convertir todos sus ceros en unos. Véase como referencia la cuarta columna de la tabla 2.1. De allf surge que en ta representucién de complemento a uno, el bit més significativo es 0 para los niimeros positives y 1 para Jos negativos, tal como ocurre en la representacién de magnitud y signo. El procedi- miento de invertir ceros por unos y unos por ceros se conoce como complementacién de la palabra, Si se vuelve a considerar la representacién de (+12),9 y (-12),,n forma- to de ocho bits, ahora usando esta convenciGn de complemento a uno, los resultados seran: (+12),9 = (0000 1100), (12), = (1111 0011), Nuevamente, debe notarse la doble representacién del cero, mediante 0000 0000 y 1111 1111, respectivamente, para +0 y -0. Como resultado, en esta convencidn también pueden repre- sentarse solo 2° — | = 255 valores numéricos a pesar de ofrecer 256 combinaciones. La representacién de complemento a uno no es de uso comtin, Esto se debe, al menos parcialmente, a la dificultad en ta realizacién de comparaciones derivada de la existencia de dos representaciones para el cero. Ofrece también una complejidad adicional en las operaciones aritméticas como la suma, lo que se analiza en el capitulo 3 Complemento a dos El complemento de un numero a dos se obtiene en forma similar a la del complemento a uno: tras invertir todos los bits de una palabra, se le suma uno al resultado obtenido, y si esa suma da por resultado un arrastre desde el bit mds significativo, el mismo se desear- ta. Si se analiza la quinta columna de la tabla 2.1, se puede observar que en la represen tacin de complemento a dos y signo, el bil més significative vuelve a ser cero para los niimeros positivos y uno para los negativos. No obstante, esta representacién no ofrece la caracteristica desafortunada vista en los dos modelos anteriores, dado que solo posee una Gnica representaci6n para el cero. Para ver que esta afirmacién es cierta, considérese la obtencién del valor negativo correspondiente al (0),,, cuyo formato es: (0), = (0000 0000), CAPITULO 2 + REPRESENTACION DE LA INFORMACION 33 El céleulo del complemento a uno de esta palabra lleva a obtener (ILI 1111}, ¥ siaes- te valor se Je suma 1, en formato de ocho bits se obtiene (0000 0000),. Asi, la represen- tacién del (-0),.= (0000 0000),. E] arrastre proveniente del bit ms significativo siempre se descarta en las operaciones de suma en complemento a dos, excepto cuando se detec- ta una situacién de desborde. Dado que hay una dnica representaci6n para el cero, y da- do que todas las combinaciones son vélidas, existen 2° = 256 ndmeros diferentes a ser re- presentados en esta convencién, Si se vuelve a considerar la representacién de los nimeros decimales +12 y -12, en formato de ocho bits, ahora con la representacién de complemento a dos y signo, el pro- cedimiento requerird comenzar con (+12),,= (0000 1100),. Si se invierte o niega el va- Jor, se obtendré (1111 0011), Si al resultado se le suma uno, se obtiene (1111 0100),, por Jo que (12), = (1111 0100), (+12), = (0000 1100), G12) 9 =U 10100), Si se considera que el cero es positivo, 1o que es razonable dado que su bit de signo es ce- 10, existen en la convencién igual cantidad de mimeros positivos y negativos. Los niimeros positivos arrancan desde cero, pero los negativos se inician en -1, por lo que el valor abso- uto del nimero mas negativo es mayor, en una Unidad, que el valor absoluto del nimero. ms positivo. EI mayor nmero positive que se puede expresar en esta convencidn es +127 y el menor mimero negativo (el neimero negativo de mayor valor absoluto) es -128, No existe, por consiguiente, ndmero positivo alguno a ser representado que pueda correspon- derse con el complemento de -128. En efecto, si se trata de obiener el complemento a dos de -128, se volverd a obtener un niimero negativo, segin puede observarse a continuacién: (-128),, = (1000 0900), OIL L111 + L = (1000 0000), La convencién de complemento a dos y signo es la representacién més utilizada en computadoras, y es la que se empleard a lo largo de este texto. Representacion excedida (desplazada) En la representacién con exceso 0 desptazamiento, los niimeros se tratan como si no tu- vieran signo, pero se los “desplaza” en su valor par medio de la resta de otro niimero co- nocido como exceso o desplazamiento. La idea es asignar el valor numérico més peque- fio, formado por todos ceros, al valor negativo del desplazamiento, y asignar los valores restantes en secuencia a medida que los patrones binartos aumentan en magnitud, Una for- 34 _Prwcipios OE ARQUITECTURA GE COMPUTADORAS ma conveniente de pensar en una representacin excedida es la de imaginar al nimero co- mo representado por Ia suma de su expresidn complemento a dos y otro niimero, al que se designa como “exceso” o “desplazamiento”. Nuevamente, puede emplearse como referen- cia la tabla 2.1, en este caso la columna de la derecha, para ejemplos de aplicacién. Si se vuelve a plantear el ejemplo de la representaci6n de (+12),9 ¥ (-12),9 en formato de ocho bits pero utilizando ahora una representaci6n en exceso 128, los dos ntimeros se obtendrin sumando 128 al némero original y determinando luego Ia versi6n binaria sin signo, Para (+12),9 se calculard (128 + 12 = 140), 10 que Hevard al patrén (1000 1100),, Para (-12),9, el cfllculo a realizar es (128 12 = 116),o, obtenigndose ahora la representa ci6n binaria (0111 0400), (412),9 = (1000 1100), 12), = (0111 0100), Nétese que no hay ningun significado numérico asociado con el valor del excesa; su efecto es simplemente el de desplazar la representacién de los némeros expresados en complemento a dos. Hay una sola representacién desplazada para el 0. dado que la representacién excedida constituye simplemente una versi6n desplazada de la representacién complemento a dos. En el caso anterior, el valor del exceso fue elegido para que tuviese el mismo formato que el ni mero negativo mas grande, lo que produce como efecto que los mimeros aparezcan ordena- dos numéticamente si se los mira en una representacién binaria no signada. Ast, el ndmero mids negative es (-128), = (0000 0000),, y el més positive es (+127)},g=(I111 LI), Esta representaciGn simplifica lus comparaciones entre ntimeros, dado que las representaciones binarias de los niimeros negativos tienen valores numéricamente menores que las represen- taciones de los ntimeros positivos, Esto se hace importante cuando se representan los expo- nentes de los niimeros en punto flotante. En este tipo de representacidn se requiere compa- rar dichos exponentes de dos cantidades para igualarlos, en caso de ser necesario, para sumar o restar. Las representaciones de punto flotante se analizardn en la seccién 2.3. 2.2.7 Decimal coditicado en binario ‘Un ndimero cualquiera puede representarse en su expresiGn de base 10 mediante codificacién binaria. Cada digito del sistema de numeracidn decimal se representa con cuatro bits, dando lugar a lo que se conoce como decimal codificado en binario (BCD, binary coded de mat. Cada digito BCD puede tomar uno de diez valores. Dado que para cada digito decimal hay 2* = 16 posibles combinaciones binarias, resulta que quedan seis combinaciones bina- rias de cuatro bits sin utilizar. En el ejemplo de la figura 2.6 se presenta un numero de cua- tro digitos decimales significativos, lo que implica la existencia de 10*= 10.000 combinacio- nes binarias validas, de las 2"° = 65.536 combinaciones que pueden formarse con 16 bits. CaPhrwuo 2 + REPRESEWTACION DE LA WFoRMAEION 35 Si bien algunas de las combinaciones binarias no se utilizan, el formato BCD se em- plea coninmente en calculadoras y en aplicaciones comerciales. Existen menos probl ‘mas cuando se representan fracciones decimales exactas en este formato, en contrapos ci6n con la representacién binaria, No hay necesidad de convertir la informacién que se ingresa en formato decimal (como en una calculadora) o de convertirlos desde un forma- to de representacién binaria a su correspondiente expresién decimal. La realizacién de operaciones aritméticas con ndmeros BCD signados puede no re- sultar obvia, Si bien el uso de representaciones de magnitud y signo es habitual en el sistema de numeracién decimal, la computadora utiliza un método diferente para la re- presentacién de niimeros decimales signados. En la representacién de complemento a nueve, los nimeros positivos se representan en la forma BCD habitual, pero el digi- to decimal mds significativo adopta un valor menor que 5 si el mimero es positive, y 5.0 mas si et niimero representado es negativo. El complemento a nueve se obtiene restando cada digito de 9, Por ejemplo, el niimecro decimal +301 se representa como 0301 (0, simplemente, como 301) tanto en las representaciones de complemento a nueve y a diez, segin se muestra en la figura 2.6a. El ndmero negativo, en com- plemento a nueve, es 9698 (figura 2.6b), y se obtiene restando de 9 cada uno de los digitos del 0301. El complemento a diez se obtiene sumando uno al complemento a nueve, por lo que la representacién de -301 en notacién de complemento a diez seré 9698 + I = 9699, tal como se ilustra en la figura 2.6c. En este modelo, los niimeros positives asumen un ran- g0 de 0 2.4999, en tanto que los niimeros negativos estén en el rango de 5000 a 9999. Se (a 2008 01k, 9000 9001, (20149 Gamrlementoa Oyo Bio Oho ig (e 1001 D110 1001 1000 e301). Complemeno as Orn “Go Ow Cho fe LOGE C110 1008 1001, 300% Complemento a 10 Dig Gy Oho Oo Figura 2.6 + Representacién BCD de los ndmeros 203 y -301 en (a) complementa a nueve, (6) complementa a 2.3 Formato de representacién en punto flotante La representacién de ntimeros en formato de punto fijo, que fuera analizada en la secci6n 2.2, ubica la coma decimal en una posici6n fija, y una cantidad fija y determinada de digitos tan- to ala inquierda como a la derecha de la coma decimal. Por consiguiente, este tipo de repre- sentacién puede requerir una gran cantidad de digitos para representar un rango de nimeros apropiado para determinada aplicacién. Por ejemplo, una computadora que deba representar 36_PRINCiPls DE ARQUITECTURA DE COMPUTADORAS niimeros de! orden del billén (millén de millones)? requerira, al menos, 40 bits a la izquier- da de la coma decimal, dado que 10'* es aproximadamente igual a 2". Si se debiera represen- tar ademas una fraccién equivalente al billonésimo, se requerirfan adicionalmente otros 40 bits a fa derecha de ta coma decimal, lo que darfa por resultado una palabra de 80 bits. En la préctica, suelen aparecer en los célculos nimeros que pueden ser mucho mayores 0 mucho menores que los mencionados, lo que requiere atin més espacio de almacenamiento en la computadora, Para manejar y almacenar ndmeros con 80 o mas bits de precisién se re- quiere una buena cantidad de hardware, y, por otra parte, las operaciones de célculo pueden Megar a resolverse més lentamente cuando se trabaja con cantidades mayores de bits. No abs- tante, también es cierto que en muchas ocasiones no se requiere una precisi6n muy fina cuan- do se trabaja con cantidades muy grandes y que, por el contrario, no se requieren nuimeros muy grandes cuando se trabaja con operandos pequefios. Como conclusién, la computadora ms eficiente puede imaginarse como aquello que soto tiene la precisién que se requicre. 2.3.1 Rango y precision en nimeros de punto flotante La representacidn de nimeros en formato de punto flotante permite representar un am- lio rango de nimeros con poca cantidad de digitos binarios; para esto, se separan los di- gitos utilizados para determinar la precisin de la representaciGn de aquellos necesarios ara representar el rango. El numero decimal de formato de punto flotante utilizado para expresar el niimero de Avogadro es +6,023 x 10% En esta representaci6n, el rango se expresa a través de una potencia de Ia base 10, 10% en este calso, y la precisién se expresa a través del mimero de punto fijo, 6,023 en este casi En la representacién de niimeros de formato de punto flotante, la parte que corresponde al valor en punto fijo se conoce habitualmente como mantisa del mimero. Asi, la repre- sentacién de punto flotante de una cantidad numérica queda determinada por un trio de elementos numéricos; el signo, el exponente y 1a mantis Ubicacién de a coma decimal > 2] BI] [5 lag 3 Signo Exponente ——-Mantisa Dos digitos Cuatro eigitos Figura 2.7 + Representaci6n de un nimero decimal en formato de punto fiatante, 2, Debe tenerse en cuenta queen la denominacion norteamericana de los nimeros, 10'2, aqui mancionado co- imo “bil6n”. se denomina “trillén”, Para los nortearnericanos, el “bitin” corrasponde a lo que en otras par- tes del mundo se conace como “mil millones” (10%) capiriuo 2 « REPAESENTACION OE LA WronMACiiN 37 El rango de fa representacién queda determinado basicamente por ta cantidad de digitos del exponente (en este ejemplo se utilizan dos digitos para la representaciGn del exponen- (c) y 1a base a la que ese exponente afecta (diez, en este caso). La precisién queda deter- minada por la cantidad de digitos de la mantisa (cuatro, en este ejemplo). Asi, el nimero completo puede representarse a través de su signo y 6 digitos, dos para el exponente y ‘cuatro para la mantisa. La figura 2.7 muestra un formato que podria utilizarse dentro de una computadora para la representacién del ntimero asi expresado, Nétese que, en este ejemplo, los digitos se empaquetan colocando primero el signo, Iuego el exponente y por ‘iltimo la mantisa. Este ordenamiento resulta préctico en las operaciones de comparacién de cantidades expresadas en et formato de punto flotante. El lector debe tener en cuenta que la coma decimal no debe almacenarse dado que ocupa siempre la misma posicién dentro de 1a mantisa, la que esté representada en formato de punto fijo. (Esta idea se ana- liza en la secci6n 2.3.2.) Si se requiere un rango mayor, y si a cambio se est dispuesto a sacrificar precisién, se pueden usar tres digitos para la parte fraccionaria y dejar entonces tres digitos dispo- nibles para el exponente, sin necesidad de aumentar la cantidad de digitos totales de la re- presentacién. Un método alternativo para aumentar el rango es el de aumentar la base del sistema de representacién, lo que incrementa la precisién de fos ntimeros mas chicos mientras disminuye la de los ntimeras més grandes. La posibilidad de plantear solucio- nes de compromiso entre rango y precisién es una de las ventajas principales de la repre- sentacin en formato de punto flotante, aun cuando reducir la precision puede provocar problemas que Ilevan al desastre, tal como se lo describe en un ejemplo planteado en la seccién 2.4, 2.3.2 La normalizacién y el esquema de bits implicitos La representaci6n de ndmeros en formato de punto flotante presenta como eventual pro- blema el hecho de que un mismo mimero puede representarse de distintas maneras, lo que complica las comparaciones y las operaciones aritméticas. Por caso, las siguientes formas numéricas son todas equivalentes: 3584.1 x 10° 3,5841 x 10? = 0,35841 x 10¢ Con el objeto de evitar el uso de representaciones multiples para el mismo numero, las representaciones de nimeros en formato de punto flotante tabajan de manera normali- zada, En este concepto, la coma decimal se desplaza a derecha 0 a izquierda y se ajusta el exponente en forma coherente con el desplazamiento de Ia coma decimal hasta ubi- carla a la izquierda del digito no nulo ms significativo, Por consiguiente, la expresién normalizada del nimero que aparece en el ejemplo anterior es la tercera, a la derecha de Jas tres. Como inconveniente, este esquema no permite representar el cero, por lo que su representaci6n debe hacerse a través de un procedimiento de excepcién. La excepcién ‘38_PRINGIPIOS DE ARQUITECTURA DE COMPUTADORAS planteada consiste en la representacién del cero a través de un mimero con mantisa to- talmente nula, Si la mantisa se representa como un niimero binario (esto es, en el sistema binario de numeracién), y si la condicién de normalizacién consiste en que la mantisa normalizada siempre comience con un I, no hay necesidad de almacenar ese 1, por lo que, efectiva- mente, la mayoria de los métodos de representaci6n de nimeros en formato de punto flo- tante proceden a no almacenar dicho bit inicial. En vez de almacenarlo, lo que se hace es “recortarlo” antes de empaquetar el ntimero para su almacenamiento, recuperéndolo at desempaquetar y Hevar e] numero a su representacién de mantisa y exponente. Como re- sultado de esta operaci6n se obtiene lugar para un bit adicional a la derecha de la manti- sa, lo que mejora la precision de la representaci6n. El bit asi eliminado se suele denomi- nar bit implicito. Por ejemplo, si en un formato determinado la mantisa luego de la normalizacién se representa como 0,11010, el pairén a ser almacenado es 1010 y el bit més significativo se trunca, se esconde, se sobreentiende. En el andlisis de la norma de representacién de punto flotante IEEE? 754 veremos que la misma representa nimeros utilizando un bit implicito. 2.3.3 Representacién de aiimeros de punto flatante dentro de la computadora. Introduccién Para ilustrar las caracteristicas importantes de la representaci6n de nimeros en formato de punto flotante se procederé a definir un formato simple de representacién. En principio, este formato puede parecer innecesariamente complicado. La mantisa se representard en formato de magnitud y signo, con un Gnico bit para representar el signo y tres digitos he- xadecimales (doce bits) como tamaiio de la representaci6n. El exponente serd un mimero de tres bits, expresado en exceso 4, con base 16. La forma normalizada de la cepresenta- ci6n tiene la coma fraccionaria ubicada a la izquierda de los tres digitos hexadecimales. Los bits que forman Ia palabra se empaquetardn de modo tal que el bit de signo que- de a la izquierda, seguido por el exponente de tres bits y, a continuacién, los tres digitos hexadecimales de la mantisa, El formato analizado no almacena ni la base del sistema de representacién ni ta coma fraccionaria. La razén fundamental para utilizar este formato aparentemente extrafio es la posibil dad que ofrece para comparar directamente dos nimeros por =, #, 2 y BM o Un némero grande ——» bY (1-5) 1-6 l- = ' Un intervalo pequefio— —b™ bs Un nimero pequeio —» BF (1-69) 1-6 \- =| ‘ ‘capfro 2 + REPRESENTACION OF LA INronMaciiN 45 Se utiliza en este caso la representacién de un mimero pequefio, en lugar de la represen- tacién correspondiente al ménimo nimero admisible, debido a que el intervalo, grande, entre cero y el primer némero representable. es un caso especial. Se propone considerar el problema de la conversién del nimero 9,375 x 10 aun forma- to de notacién cientifica utilizando el sistema binario de numeracién. Esto significa que el resultado deberia adoptar ta forma x,yy x 26. El proceso se inicia con la conversion de! valor decimal punto flotante a un formato de punto fijo. Con este objeto se desplaza la co- ‘ma decimal dos posiciones a la izquierda, lo que corresponde al exponente -2, El niime- 10 resultante es 0.09375. Mediante el método de las multiplicaciones se procede a con- vertir el mimero decimal asi obtenido at sistema binario, representandoto en punto fijo: 009375 x 2 = 0,1875 01875 x 2 0,375 0,375 x 2 0,75 0,75 x 2 1,5 05 x 2 = 10 Entonces, resulta que (0,09375),9 = (0,00011),. El dltimo paso consiste en la conversién del valor a la representaci6n normalizada de punto flotante, lo que Heva a que 0,00011 = 0,00011 x = IIx 240 2.3.5 La norma de representacién IEEE 754 Existen muchas maneras de representar néimeros en formato de punto flotante, algunas de las cuales ya han sido analizadas. Cada representaci6n tiene sus caracterfsticas propias en términos de rango, precisién y cantidad de elementos que pueden representarse. En unt esfuerzo por mejorar la portabilidad de los programas y asegurar la uniformidad en la exactitud de las operaciones en el formato de punto flotante, el [EEE desarroll6 su nor- ma IEEE 754 para la representacién de niimeros en el formato de punto flotante. Existen algunas lineas de productos anteriores a dicha norma que no la utilizan, como las compu- tadoras 1BM/370, las computadoras VAX (DEC, Digital Equipment Corporation) y la \i- nea Cray, pero précticamente todas las nuevas arquitecturas utilizan en alguna forma la estructura IEEE 754, La norma {EEE 754, tal como se la describe, debe estar asociada con un sistema de computacién, no siendo necesario que la rel En consecuencia, mientras la computadora siga respetando la norma, el soporte puede realizarse a través de una combinacién de hardware y software. 46 PRINCIPIOS GE ARQUITECTURA DE COMPUTANORAS 2.3.5.1 Formatos Hay dos formatos principates en Ia norma IEEE 754: el formato de simple precisin y el formato de doble precisién. La figura 2.10 resume ta distribuci6n de ambos forma- tos. E] formato de simple precisién requiere 32 bits, mientras que el de doble precision utiliza 64 bits. El formato de doble precisién es, simplemente, una versién mas amplia del formato de simple precisién. bie ———— Simple [Taam ae | pee” Exponenie Manisa Sign a A 6a bits, ei, Leal srs , Exponente Mantisa Figura 2.10 ¢ Formatos IEEE 754 para punto flotante simple precisidn y doble precisién. EI bit de signo se ubica en la posiciGn det bit més significativo, a la izquierda del nimero, € indica que el mimero a representar es positivo o negativo mediante un 0 o un 1, respectiva- mente. A continuacién se ubica el exponente, de ocho bits, en formato exceso 127 (no 128). Tal como se describe luego, las combinaciones 0000 0000 y III IIL se reservan para casos especiales. Pata el formato de doble precisi6n, se utiliza un exponente de 1t bits, ex- presado en exceso 1023, y se reservan las combinaciones 000-0000 0000 y 111 111 ILI. A continuaci6n, se representa la mantisa, en binario y formada por 23 bits. A la izquierda de la coma fractionaria existe un bit implicito, el que cuando se lo considera en conjun- to con la mantisa de simple precisién, constituye una palabra de 24 bits, de la forma 1 fffff...f. En este formato, el patrén filff.f representa los 23 bits de la mantisa que se almacenan. El formaio de doble precision también utiliza un bit implicito a la izquierda de la coma fraccionaria, lo que representa un valor significativo de 53 bits. En ambos formatos, el niimero se representa normalizade a menos que la estructura soporte nui- meros denormalizadas, segiin se describird mas adelante. Existen en la norma cinco tipos de nimeros que se representan. Los niimeros no nu- Jos adoptan los formatos descriptos anteriormente, La norma admite una llamada repre- sentacién “limpia” del cero, formada por la combinacién reservada 0000 0000 en el cam- po del exponente, y todos ceros en Ia mantisa, El bit de signo puede ser cero 0 uno, por To que hay dos representaciones para el cero. E1 infinito puede representarse mediante la combinacién reservada 1111 It] enelex- ponente, acompafiada por una mantisa de valor cero y el bit de signo en cero o uno. La re- presentacién del infinito se usa para manejar situaciones de desborde o para ofrecer una representaci6n valida para la divisién de un némero (distinto de cero) por cero. Si se plan- tea la cuestién de dividir cero por cero o la de dividir infinito por infinito, el resultado CAPHrULO 2 + REPRESENTACION DE LA INFORMACION 47 queda indeterminado. En este caso, la representacién NaN (not a number: no es numéri- co) presenta en el campo del exponente la combinacién reservada 1111 1111, en fa man- tisa un valor no nulo, y el bit de signo indistintamente en 0.0 1. Puede obtenerse también un NaN si se intenta calcular la rafz cuadrada de -1. ‘Tal como sucede en todas las representaciones normalizadas, existe un intervalo impor- tante entre cero y el primer nimero que puede representarse. La representacién de nime~ £08 incluidos en este intervalo se resuelve mediante la representaci6n del “cero sucio”, de- normallizado, En este caso, el bit de signo puede ser 00 1, ¢l campo del exponente contiene Ja combinaci6n reservada 0000 0000, que representa -126 en el caso de simple precisién y -1022 para doble precisién, en tanto que la mantisa contiene el valor real correspondiente a la magaitud del némero. Por lo tanto, no hay bit implicito en este formato. Nétese que la notaci6n denormulizada no es una represemaciGn no normalizada. La diferencia clave en- tre ambas palabras consiste en que para un nimero dado existe una sola representaci6n de- normalizada, en tanto que existen muchas representaciones no normalizadas. La figura 2.11 ilustra algunos ejemplos de nimeros expresados en formato de punto flotante segin Ia norma IEEE 754. Los ejemplos desde (a) hasta (h) se representan en for- mato de simple precisin y el ejemplo (i) se muestra en formato de doble precisién. El ejemplo (a) ilustra un namero cualquiera en formato de simple precisi6n. Debe notarse que la mantisaes 1,101, y que, sin embargo, solo se representa explicitamente Ia fraccién (101). El ejemplo (b) utiliza el minimo exponente en simple precisién (-126) y el ejem- plo (c) utiliza el exponente maximo en simple precisién (+127). Los ejemplos (4) y (e)ilustran las dos representaciones del cero. El ejemplo (f) repre- senta el formato del 40, Existe, asimismo, un formato alternativo para -c. El ejemplo (g) muestra un niéimero denormalizado, Nétese que si bien el nimero en si es 2, el exponen- te minimo representable sigue siendo -126. El exponente para niimeros denormalizados en simple precisi6n siempre es -126, representado por ka combinacién 0000 0000 y una man- tisa no nula. La mantisa representa directamente la magnitud del miimero. Asi se tiene que 42° = 40,01 x 2", representada por la combinacién indicada en la figura 2.11g. El ejemplo (hi) nuestra un NaN de simple precisién, Un NaN puede ser positivo 0 negati- vo. Finalmente, el ejemplo (j) replantea la representaci6n de 2", pero utilizando ahora el for- mato de doble precisiGn, La representacin corresponde a un néimero cualquicra de doble pre- cisi6n y, por ende, no hay consideraciones especiales para hacer en este caso. Notese que 2% tiene una mantisa de 1,0, por lo que la parte fraccionaria esté totalmente formada por ceros. Ademés de los formatos de simpte y doble precisi6n, existen dos formatos que se cono- cen como extendido simple y extendido doble. Los formatos extendidos no son visibles para el usuario, pero se usan con el objeto de mantener internamente una mayor precisin durante los edlculos para reducir los errores de redondeo. Estos formatos extendidos incre- ‘mentan el tamafio de los exponents y de las mantisas en una cantidad de bits que puede va- riar en funcién de la implementacién. Por ejemplo, el formato extendido simple agrega al menos tres bits al exponente y ocho a la mantisa, El formato extendido doble est4, en gene- ral, formado por 80 bits, con un exponente de 15 bits y 64 bits para la mai 48_PRINciPIas ne ARQUITECTURA DE COMPUTADDRAS Valor Patran binario Signo Exponente Manisa @ — +Llorx2s 010000100 1101 0000 0000 0000 0000 0000 () 01011276 10000 0001 ‘010 1 100 0000 0000 0000 0000 © Hox 6 LAO ‘000 0000 0000 0000 0600 0000 @ +0 0 00000000 900.0060 0000 6000 0000 0040 © 0 1 0060 0000 ‘200.0000 0000 6000 0000-0000, wo 4 0 i (900.0000 e000 4000 8000 0000 @ 42% 0 0000 0000 (010.000.0000 0000 0000 0000 a 4NN 0) TUT (011 0111 6000 0000 0060 G000 @ 4208 0 o1LoWENIN ‘0900 0000 0000 0000 0000 0000 ‘9000 000 0000 0000 000 000-0000 Figura 2.11 » Ejemplas de niimeros en formato de punto flotante, representados segin la norma IEEE 754, en formatos de simple precisién (a-h) y de doble precisidn (i). Los espacios se usan para faciltar la visuatizacién. No son parte de la representaci¢a, 2.3.5.2 Redondeo Una implementaci6n de la norma IEEE 754 debe proveer al menos un formato de simple endo los restantes formatos opcionales, Mas aiin, el resultado de cualquier operacién que se realice con niimeros expresactos en formato de punto flotante debe ser precisa en el orden de la mitad del bit menos significativo de la mantisa. Esto significa que durante el calculo pueden ser necesarios alpunos bits adicionales de precisién (bits de guarda), y que debe haber un método apropiado para redondear el resultado interme- dio al némero de bits que constituyen la mantisa, Existen cuatro formas de redondear mimeros en la norma IEEE 754, Uno de los mé- todos redondea a cero, el otro redondea a tee y el otro, hacia -c°. Por defecto, el redondeo se realiza hacia el ntimero representable mas cercano. Los casos intermedios redondean hacia el nimero cuyo digito menos significative es par. Por ejemplo, 1,01101 redondea hacia 1,0110, en tanto que 1.01111 redondea hacia 1,1000. 2.4 Estudio de un caso: una falla en un misil defensivo Patriot causada por una pérdida de precision Durante el conflicto bélico ocurrido en Ios afios 1991-1992 entre las fuerzas aliadas y el ejército iraqui, conocida como “Operacién tormenta del desierto”, tas fuerzas aliadas uti- lizaron una buse militar ubicada en Dhahran, Arabia Saudita, In que se hallaba protegida por seis barreras basadas en misiles Patriot de origen estadounidense. El sistema Patriot habia sido desarrollado originalmente para ser mévil y para funcionar solo por algunas horas, con el objeto de evitar su deteccién. El sistema Patriot rastrea ¢ intercepta ciertos tipos de objetos, como los misiles bal ticos Scud, uno de los cuales acert6 en una barraca de la marina norteamericana en Dhah- ran el 5 de febrero de 1991, como consecuencia de lo cual fallecieron 28 norteamerica- nos. El sistema Patriot fallé en el rastreo ¢ imercepcién del misil Scud que llegaba, debido a una pérdida de precisidn en la conversi6n de niimeros enteros a formato de pun- to flotante. Los sistemas de radar operan a través del envio de un tren de pulsos electromagnéti- cos y de la posterior escucha de las seftales de retorno que pudieran haber sido reflejadas por objetos ul 10 det haz enviado. Si el sistema de radar del Patriot de- tecta un objeto aéreo de su interés, por ejemplo un Scud, procede a determinar la posicién de un detector de rango (véase la figura 2.12), el que procede a estimar la posicién que ‘ocupard el objeto rastreado en el momento del préximo barrido. Este detector también permite filtrar la informacién proveniente de las afueras de los Ifmites establecidos, lo que simplifica el rastreo. La posici6n del objeto (en este caso un Scud) se valida si se lo encuentra dentro del rango establecido. La determinacién del lugar en que se produciré la préxima aparicién del misil depen- de de la velocidad del mismo, La velocidad del Scud se determina por su cambio de po- j6n con relacién al tiempo transcurrido, y el tiempo se actualiza desde el reloj interno del Patriot en intervalos de 100 ms. La velocidad se representa con un mimero de 24 bits en formato de punto Mlotante, en tanto que el tiempo se representa como un niimero ente~ ro de 24 bits. Con el objeto de predecir la siguiente aparici6n del Scud, ambos valores de- ben representarse como mimeros de 24 bits en formato de punto flotante. rados en el cat Misil era dol aleance Volidacién Area de alcance Laaccién de bisqueda vbica al misil on algin lugar dentro el haz, Sistema Misi Pateiot de radar Figura 2.12. Efecto de los errores de conversién en e: cAloulo del rango de posicién, ‘50 _eRunereios DE ARQUITECTURA DE COMPUTADORAS La conversin del tiempo desde su formato de punto fijo al formato de punto flotanie da por resuliado una pérdida de precisién que aumenta en la medida en que aumenta eb tiempo medido por el reloj interno. El error introducido por la conversién trae como re- sultado un error en el cflculo del rango de posicién, proporcional ala velocidad del ob- jetivo y del tiempo transcurrido desde el comienzo del funcionamiento del sistema. La causa del ineidente de Dhahran, luego de un funcionamiento ininterrumpido del Patriot de més de 100 horas, fue un error de desplazamiento, en el rango calculado, de 687 m, lo que a su vez provocs la fallida intercepcién del Scud. EI problema de conversién se conocfa desde al menos dos semanas antes del inci- dente mencionado, por medio de informacién entregada por Israel; pero la llegada de} nuevo software con lus correcciones no se produjo sino hasta el dia anterior al ataque, debido a la dificultad que implicaba el realizar correcciones del sistema en un ambien- te de guerra. Se podria haber adoptado como solucién transitoria al problema, hasta tanto se tuviese disponible In modificacién requerida de software, la de reiniciar fre- cuentemente el sistema y, por ende, el reloj. Dado que el personal de campo no tenia in- formacién de cudnto tiempo era mucho tiempo en el funcionamiento continuo del siste- ma, -lo que ya se sabia a partir de ta informacién entregada por Israet-, esta simple solucién no se implementé nunca. La leccién que deja este caso es que hay que estar muy atento a las limitaciones que implica confiar en operaciones con formatos de pre- cisién finita, 2.5 Cédigos alfanuméricos A diferencia de los mimeros reales, que tienen un rango infinito, existe solo una cantidad finita de caracteres representables, Por consiguiente, para representar un conjunto com- pleto de caracteres hacen falta unos pocos bits por carfcter. Se describen aqui tres repre- sentaciones habituales en la codificacién de caracteres, los cédigos alfanuméricos ASCII, EBCDIC y Unicode. 2.5.1 El conjunto de caracteres ASCII La figura 2.13 representa el conjunto de caracteres que forman el cédigo ASCIE (American Standard Code for Information Interchange), simbolizados en notacién he- xadecimal. La representacién de cada cardcter requiere 7 bits, y las 128 combinacio- nes resultantes son caracteres vilidos. Los caracteres representados por los valores he- xadecimales 00-1F y el valor 7F corresponden a caracteres especiales de control usados para la transmisién de datos, el control de impresién y otros propésitos no im- primibles. Los caracteres restantes son todos imprimibles, ¢ incluyen la representa- cidn de letras, niimeros, simbolos y el simbolo espaciador. Los digitos 0-9 aparecen en secuencia, tal como lo hacen los dos alfabetos correspondientes a las letras maytis- Ccaptruto 2 » REPRESENTACION DE LA WFoRMACHiN 51 culas y mindsculas.5 Esta organizacién simplifica el manejo de los caracteres. Para obtener el valor de un digito a partir de su representacién ASCII, se debe restar (30), de dicha representacién. Para convertir el cardcter ASCII “5°, que se encuentra en la posici6n (35),,. al mémero 5, se caleularé (35 — 30 = 5),,. Para convertir una letra ma- yuscula en su correspondiente mindscula, se le suma (20), al valor correspondiente a la mayiiscula. Por ejemplo, para convertir la letra “H”, cuya posici6n es (48), en la representacién ASCII, en la letra “h”, ubicada en la posicién (68),,, se debe calcular (48 + 20=68),,. OO NUL]10 DLE]20 SP ]30 0 [4% @ [50 P [60 ~ |7 p or son} ir per}21 1 131 1 far A [51 Q jor a [at gq 02 STX |12 DC2Z}22 * /32 2 |42 B [52 R Jez b |72 © o3 etx} 13 Dc3|23 # 133 3 |as c [53 s [6 ¢ [73 s os BOT| 14 pCa }24 § [34 4 [ad D [54 T [64 d |7a t 05 ENQ}IS NAK}25 % [35 5 [45 E [55 U [65 © |75 06 ACK} 16 SYN|26 & |36 6 [46 F [56 V [66 1/76 v 07 BEL | 17 ETB/ 27 * [37 7 [47 G 157 W lo? g 77 w 08 BS 18 CAN)28 (¢ [38 8 [48 H [58 x [6s h [78 x oo HT |19 EM |29 ) [39 9 [49 1 |s9 ¥ [69 i [7 y OALF |1ASUB/2A * [3A 4A 4 [5A Z |6A j [7A 7% oB VT |iB Esc }28 + [3B : [4B K |5B [ joR k [7B ocrr jicrs |2c * \3c < Jac L jsc \ loc 1 |7c } opcr }ipGs /20 - [3D = [4D M /SD | |6D m | 7D } OE SO }iE RS |2e . [3 > [4E N [SE * joE n [7E ~ or st jipus jor / |3F 7 Jaf o |5F _ [6F o | 7F DEL NUL Nulo FF Cambio de pagina CAN. Cancelacién SOH Comienzo de encaberla CR Retommoacomienzo de linea EM Final de medio fisico STX Comienzo de texto SO Shift out SUB Sustitucidn ETX Finde texto St Shiftin ESC Salida EOT Finde wansmision DLE Salidadel vincalo de datos FS Separaddor de archivos ENQ Consulta DCI Control de dispositive GS Separaor de grupos ACK Acuse de recibo C2 Contr de dispositive 2 RS Separador de registros BEL Campanilla DC3_ Control de dispositivo 3. US Separador de unidudes BS Retroceso C4 Control de dispositivod —- SP_—_Espacio HT Tabulaci6o horizontal ©=—--NAK Acuse negativode ecibo DEL Borrar LE Cambio de tinea SYN. Sincronismo (nactive} VI Tabulacién vertical ETB Fin de blogue de transmisién Figura 2.13 » El digo de caracteres ASCII, representado en valores hexadecimales. 5, Conta comentario, los carectores “a” y “A” son diferentas y tienen cbdigns diferentes en ta representacién ASCII Las letras mintsculas se congcen como de tipo inferior (lower case), y fas mayisculas como de tipa ‘superior (upper case). La denominacién proviene de la posiciénrelativa de fos caracteres en los sistemas dé tipogratia, Las letras mayisculas aparecen encima de las mindsculas, lo que da origen a la nomenclature de tipo superior-iferio.ér la actualidad, si bien ta tipogralfa se realiza casi siempre en forma electronica, se si {Que manteniendo la nomenclatura tradicional. 52_PRINGIPIOS GE ARQUITECTURA DE COMPUTADORAS 2.5.2 El conjunto de caracteres EBCDIC Un problema que surge en la utilizaci6n del cédigo ASCIL es su capacidad para represen- tar solo 128 caracteres, lo que plantea una limitacién en muchos teclados que ademds de fas letras mayisculas y mindsculas incluyen una buena cantidad de caracteres especi: les.* El e6digo EBCDIC (Extended Binary Coded Decimal interchange Code) ¢s un 06- digo de ocho bits utilizado ampliamente por las computadoras IBM. Dado que los carac~ teres ASCII suelen representarse en un formato de ocho bits (un cardcter por byte), agregandose a los siete bits ASCII un cero 0 un uno, el uso de EBCDIC no plantea ma- yores necesidades de espacio para el almacenamiento de caracteres en una computadora. No obstante, para la transmisién de datos en serie (véase el capitulo 8), el uso de un cO- digo de ocho bits requiere tiempos mayores que la transmisién de un c6digo de siete bits, y en este caso, el cédigo de mayor tamaiio sf establece una diferencia. El cédigo EBCDIC se representa en la figura 2.14. Se puede observar la existencia de combinaciones no utilizadas, las que pueden usarse, Ilegado el caso, para caracteres es- pecificos de alguna aplicacién. El hecho de que haya huecos en las secuencias de las le- tras maydsculas y mimisculas no genera mayores inconvenientes, dado que el manejo de los caracteres puede seguir haciéndose como en el cédigo ASCII, solo que con diferentes desplazamientos. 2.5.3 El cédigo UNICODE Los c6digos ASCII y EBCDIC sirven para soportar los conjuntos de caracteres (latinos) Sricamente dominantes en las representaciones de la computacién, Existen muchos otros conjuntos de caracteres en uso en el mundo, y no siempre es posible la conversi6n de cédigo ASCII al cédigo correspondiente al idioma X. Por consiguiente, se hizo nece- sario el surgimiento de un nuevo conjunto de caracteres, universal y normalizado, al que se conoce como Unicode, y que sirve para soportar una buena cantidad de los alfabetos que se usan en el mundo. Unicode es una norma en desarrollo, que se modifica a medida que se le incorporan los simbolos correspondientes 2 alfabetos nuevos, y a medida que los conjuntes de caracteres incorporados se van modificando y se refinan las correspondientes representaciones. En la versiGn 2.0 de Unicode se incluyen 38.885 caracteres diferentes, los que cubren los princi- pales lenguajes escritos de uso en América, Europa, Medio Oriente, Asia, India y las islas del Pacifico. * NW. de T: Los autores se refieren al c6digo ASCII de 7 bits, 0 estindar, utiizado en el idioma inglés. La limi- 1aci6n que plantean se elimina en el c6digo conocido como ASCII extendido, que con 8 bits admite represen- ‘ar 256 caracteres. De hacho, la traducci6n de esta texto no podria haberse levaca a cabo sin la uliizacién 4e los caracteres dal lenguaje espafiolincluidos dentro de los 128 caracteres adicionales aportados por el édigo extendido. STX DLE BS ACK SOH ENQ ESC BYP CAN RES SI 80 DEL SUB NL CAPITULO 2. REPRESENTACION DE LA iNFoRMACIEN $3 00 NUL ol SOH 02 STX 03 ETX 04 PF os HT 06 LC 07 DEL 08 09 04 SM 0B VT 0c FF 0D CR OE So OF ST $0 DLE ai DCL 12 pcz 13 TM 14 RES 15 NL 16 BS IL 18 CAN 19 EM 1A CC 1B CUl IC IFS 1D IGS 1B IRS IF (US 20 DS 21 SOS 22 FS 2 24 BYP 25 LE 26 ETB 27 ESC 28 29 2A SM 2B CU2 2 2D ENQ 2E ACK 2F BEL 32 SYN 37 BOT 38 39 3A 3B CU3 3c Dea 3D NAK 3E 3F SUB 40 SP 4 42 43 44 45 46 a7 a8 49 4A @ 4B 4c 4D 4E aE 30 51 32 53 34 55 56 37 58 59 SA 5B sc sD 5E oF. Ronan ee daw 60 61 2 63 64 65 66 oT 68 oo 6A 6B 6c 6D 6B oF 0 n 2 B a” 5 76 7 B D TA 78 1 2D TB TF, > 2 # @ 30 Ad cof [EO \ gia jar - fcr a [EL g2 b [az s [c2 B [F2 S g3oc last [cs c [Bs T gad jaa u [cs D [Es U ase [as v [cs & [ES Vv a of [as w [co F [ES Ww ag [a7 x |c7 G IE? x ge oh |As y [cs H [EB Y¥ go i fag z joo 4 feo z BA AA CA EA 8B AB cB EB 8c AC cc EC aD AD cD ED 8E AE cE EE 8F AF oF EF 90 BO Do y [FO 0 gi j [Bt pi {riot 92k | B2 D2 K |[F2 2 935 | BS bs L [FB 3 94 om | Ba ba M [FS 4 95 on | BS ps N [FS 5 96 0 | BG D6 0 |F6 6 97 p |B7 br p |e 7 98 oq | Bs Ds Q [FR 8 oo or [Bo po R [Po 9 9A BA DA FA | 9B BB DB FB 9c BC De FC 9D BD DD FD 98 BE DE FE oF BF, DF FF Comienzo de texio Salida del vinculo de datos PF Retroceso DS_ Seleccionar di ‘Acuse de recibo PN Actuat perforado ‘Comienzo de encabezado SM Fijar modo Consulta LC Lower Case Escape CC Cursor Control ‘Saltenr ER Acerca de cima Cancelaciéa EM End of Medium Reponer Shift In TM Tape Mark Shift Out UC Maydsculas Borrar Reemplazar Linea menor ‘VT. Tabulaciéa verical IRS Cambio de Tinea RS. Sepurador de registrosDC1_ Conuol de dispostivol BEL Campanitla Detener perforadar DC2 Console dispostive 2 SP Espacio DCA Convol de dispostivod TL Inactive CUI Usodeletiene 1 NUL Nulo GU2 Uso del cliente 2 CU3. Uso delelieme 3 SYN Synctranous tle TFS. Separador de archivos de imtercambio EOP Finde canstision FF Cambio de pigina ETB Fin del bloque de transmisién NAK Acuse negaivo de resist SMM Comienzo de mensaje normal FS. Separador de archivos SOS Co mienzode significado HT Tahulacién horizontal IGS Separador de grupo de intercambio UC Mayisculas de registro de intercambio HWS. ‘Separador de unidad de imercambio Figura 2.14 El cédigo alfanumérico EBCDIC, representado con valores hexadecimates. (54 _ PRINCIPIOS DE AROUITECTURA DE COMPUTADORAS ‘0000 NUL [0020 SP [0040 @ [0060 ~ [O80 Crt [OOAO NBS[O0cO X O0RO a 001 oH] 0021 1 | oat A }o0sL a fons) Ci food) ; | O0CI A JOORI 4 0002 STX |0022 "| 942 B | 0062 b | 0082 Cul | OGAZ ¢ |90CZ2 A |QOE2 & 0003 ETx|0023 # [0013 C |o062 ¢ | 0083 Giri /00a3 £ ]00C3 A |OOES & 004 EOT]002s s [oo D Joos: a joss Cui ooas a }oocs A fooBt 6 Dons ENG] 002s % /O04 E [0065 ¢ /otes cin] ooas y foocs A fooas a 0006 ACk|0026 & |0046 F |0066 ¥ | 0086 Cri ]ooas | }oocs & |O0ES = Goor Bet. Jaonr {0:7 G [0057 g [a7 cui Joon? § fooc7 g /ane7 ¢ og Bs |oo2s ¢ {oo H Joos: fh | 008s Cri ooas ~ loocs £ |oves @ 009 7 }6029-) /0049 1 [0069 i | 0089 Cin fooAS © | ooce & | 00H « OOOALF [002A * /OO4A J | O06A j | 008A Cis] | OGAA + | OOCA B | QOEA & coos vt |oo2B + |ooae K |O06B k | 0088 Cul }O0AB « |00CB E | OOEB & goo FE joc * Joo & fonsc 1 Joosc Get fooac + /oxce 1 | onEc coop cr 0020 - ood x foosd m foosD Cui |ooAD = | oocD { | o0eD i OVE SO [O02 . [OOK N /O06E n OO8E Cul [OQAE @ | ONCE i | OORE i OOF Si foo2F —¢ onde © [oo6F o | 00RF Cut |ocAF ~ | oOCF 7 |ooEF i a1 DLE}0030 o | 0050 P |o070 p | 0090 Cui |ooBO * | ooD0 D | OOFD ¢ art DCi }o031 a }o0s1 Q jor! q | 009 Cut }coph + |oop) NX | oF & oo12 DCz} 0032 2 |o0s2 RK [0072 +r | 0092 Cri ]ooB2 » |o0D2 d | 0oR o 0013 DC3 [0033 3 |0053 S [0073 s | 0093 Cui ]o0B3 > |00D3 O | 00F] 6 oo14 DC4 [0034 4 | 0054 T | 0074 ¢ | 0094 Cul ]ouBa * |ooDs 6 | GOFe & OOIS NAK}0035 5 0055 U {0075 u | 0095 Cit ]0oBS w |o0DS 6 | 00Rs o 0016 SYN |0036 6 | 0056 Vv |0076 v | 0096 Cui |o0ns 9 |ooDe 6 |OOFS 6 oor7 Ere }0037 7 |o0s7 w }oo77 w [0097 Cut }oo7 ° |oop7 x | oor? + Goi CAN}0038 8 |0058 X 0078 x | G09 Cri jOORR , | O0D8 @ | OOF8 o 0019 EM [0039 9 | 0059 Y |0079 y | 0092 Cui |o0B2 * ooD9 U | OOFe a OO1A SUB]003A : | 005A Z [007A z | 009A Cit |OORA 2 [OODA U | OOFA 6 OLB ESC [0038 }O0sB | |OO7B { | 0098 Ci /OOBB » /ooDB C | OOFR o OIC FS J003C < Jousc \ Joa7c | | o09C Cul | OBC 14 |oODE C | WFC & 001DGS }003D = |00sD | 007 } | GoD Cui | o9BD 172 joopD ¥ | OORD b corr RS /9035 > }onse * Joo7e ~ | O09E Cui |ooBE 34 |onDE ¥ |OOFE p corr us _|003F_? | 00sF__ | 007F DEL | O09F Cul | OOBF_, [OODF_g | Gorey NUL Nu ‘SOH Comtienzo de eneahezado Cancelacién ‘SP Espacio STK Sttof text EOT Finde taosmisin Finale medio ico DEL Borar ETX Endofien DCI Com de dispositive L Swsiucién tl Control ENQ Enquiy C2 Contol de dispositive 2 Escape FF Combio de nigina ACK Acwederenbo DCI. Control de dispositive 3 Separator de eampes CR Retarw a comienze de nea BEL Compania DC# Com! de dispositive 4 Sepereder de grupos SO Shiftout BS Rewoceso INAK Acusexegativo de recibo Scparmor de regicies St Shiftin HT Tabulacién harzonts NBS. Espacio sie inzerupeién LF Cambiodelinea ETB. Fin det bloque de wansmis Sepicador de unidades DLIE Said dl vineul de datos Sinercnismo (inactive) VT Tabulacién venical Figura 2.15 * Los primeros 256 cédigos de Unicode, con sus representaciones hexadecimates. La norma Unicode utiliza un conjunto de caracteres de 16 bits, en el que hay correspon- dencia biunivoca entre tos caracteres representados y las palabras de 16 bits. Si bien Us code soporta muchos mas caracteres que ASCII o EBCDIC, no es 1a norma de mayor im- portancia, En efecto, Ia norma Unicode de 16 bits es un subconjunto del Conjunto Universal de Caracteres ISO 10646, de 32 bits de palabra (UCS-4), Los cédigos correspondientes a los 256 primeros caracteres Unicode se muestran en Ia figura 2.15, de acuerdo con la versi6n Unicode 2.1, Nétese que los primeros 128 carac- teres coinciden con los del ASCII. CAPITULO 2 » REPRESENTACION DE LA INFORMACKN 5S Toda la informacién que se maneja dentro de una computadora se representa en términos de 18 que pueden organizarse e interpretarse como enteros, nimeros de punto fijo, niimeros de punto flotante o caracteres. Los cédigos altanuméricos, tales como ASCII, EBCDIC y Unico- de, tienen dimensiones finitas y, por ende, pueden ser representados integramente con un ni- mero finito de bits. El nimero de bits que se utiliza para la representacién de cantidades tam- es finito, y como resultado de esta limitacién solo puede representarse un subconjunto de la totalidad de los nimeros reales. Esto conduce a las naciones de rango, precisiGn y error. El rango de una representacién numérica define los valores maximo y minimo que pueden repre- senlarse, y queda casi enteramente determinado por ta base y fa cantidad de bits que se utili zan en él exponente de una representacién de punto flotante. La precisién queda determinada por la cantidad de bits usados en la representacidn de la magnilud, excluyendo los bits corres- Rondientes al exponents en las representaciones de punto flotante. Las representaciones en for- mato de punto flotante generan errores derivados de la existencia de nimeros que caen dentro ite Ios intervalos existentes entre nimeros consecutivos que pueden ser representados. Para lectura posterior D.E. Knuth ofrece un tratamiento completo de los temas de algoritmas y célculo en computadoras, V.0, Hamacher y otros provee una buena explicacién acerca del tema de los errores en las represen- taciones de punto flotante. La norma de representacién de punto flotante IEEE 754 se describe en IEEE Computer. Los andlisis acerca de rangos, errores y precisin, presentados en la seccién 2.3, tuvieron la influencia de G. E. Forsythe. El informe GAO contiene un resumen muy legible del proble- mma de software que provoct la falla del Patriot en Dhahran. Véase http-/www.unicode.org para ob- tener informacién sobre la norma Unicode. Forsythe, G. €, “Pitfalls in Computation, or Why a Math Book Isn't Enough”, en: The American Mathematical Monthly, vol. 77, n® 9, noviembre de +970, p.p. 931-955. Hamacher, V. C., Z. 6. Vranesic y §. G. Zaky, Computer Organization, 3° ed., McGraw Hill, 1990. JEEE, “IEEE Standard for Binary Floating Point Arithmetic”, ANSI/EEE Standard 754-1985, en: /EEE Computer, vol. 14, marzo de 1981, p.p. 51-62, aparece una edici6n preliminar. Knuth, D. E., The Art of Computer Programming, vol. 2, Semi-numerical algorithms, 2 ed, Addison- ‘Wesley-Longman, 1981. Informe de la U.S. General Accounting Office GAOJIMTEC-92-26, “Patriot Missile Defense: Softwa- re Problem Led to System Fallure in Dhahran, Saudi Arabia”, U. S. General Accounting Otfice, P.O. Box 6015, Gaithersburg, Maryland, 20877, febrero de 1982. ‘56_PRINCIPIOS OF AROWITECTURA OE GOMPUTADORAS Problemas 2.4 Dada una representaciOn de punto fio, signada, en el sistema decimal, con tres digitos ata de- Techa y tres digitos a la izquierda de fa coma decimal, se pregunta: a. eGual es el rango? (Deberdn calcularse el maximo nimero positivo y el minima ndmero ne- gativo.) b. {Cual 8s la precisién? (Calcuilese la diferencia entre dos nimeros consecutivos sobre la rec- ‘ta numérica. Recuérdese que el error as la mitad de la precision.) 2.2 Convertir los ntimeros expresados a los sistemas de aumeracién indicados, utlizando en tos resultados la menor cantidad de digitos. a. (47),q a binario sin signo. b. (-27),9 binario, magnitud y signo, ©. (213), a decimal. 4. (10110,101), a decimal. ©. (34,625),,a base 4. 2.3 Convertir los nlimeros expresados, alos sistemas de numeracién indicados, utilzando en los resultados la menor cantidad de digitas. a. (011011), 4 decimal. b. (-27),9 a binario exceso 32 ¢. (011011), a hexadecimal. 4. (55,875) a binario sin signo. 8. (132,2), a hexadecimal 2.4 Convertir al sistema decimal el nimero (0,201),. 2.5 Convertir (43,3}, al sistema octal, usando no més de un digito octal a ta derecha de la coma ‘traccionaria. Expresar el resultado en una representation octal no signada y truncar los restos por medio de la eliminacién de los digitos sobrantes, 2.6 Representar (17,5),, en el sistema de base 3; convertir el resultada obtenido nuevamente al sistema decimal. En la expresi6n del sistema de base 3 daberan usarse dos digitos a la dere- cha de la coma fraccionaria. 2.7 Expresar el equivalente decimal del nimero binario 1000, considerando que esta representa do en formato de complemento a dos. 2.8 Expresar el equivalente decimal del niimero binario 1111, considerando que esta representa- do en formato de complemento a uno. 2.9 Utillzando tres digitos BCD, representar et nimero (305),9, 2.10 Utilizando tres digitos BCD, representar el numero (-305),, expresado en notacién de comple- mento a 10. 2.11 Para un némero dado de bits, indicar si ta cantidad de enteros representables en las codifica- ciones de complemento a uno y complemento a dos son iguales 0 no. 2.12 Completar la tabla siguiente para las representaciones indicadas, en formato de cinco bits {in- cluyendo signo). Expresar las respuestas como niimeros enteros decimates signados. Magnitudy signo, 5 bils | Fxceso 16, cinco bits Valor maximo Valor rinimo (menos negativo Cantidad de representaciones 2.13 Comptetar la tabla siguiente utiizando notacién cientifica en el sistema binario y una represen- tacién de punto flotante de ocho bits, en la que se incluyen un exponente de tres bits expresa- do en exceso 3 (no exces 4) y una mantisa normalizada de cuatro bits con un bit implicito. En esta reprasentaci6n, el bit implicito esta ubicado a la izquierda de la coma fraccionaria. Esto significa que el niimero 1,0101 estd normalizado, en tanto que 0,101 no lo esta. Notaci6n cientifica, sistema binario Representacin punto flotante Signo Exponente Mantisa -1,0101 x2? #11 x22 0 oo 0000 1 110 it 2.14 La norma de representacién de punto flotante IBM utiliza base 16, un bit de signo, un exponen- te de siete bits expresado en exceso 64 y una mantisa normalizada de 24 bits. a. 4Oué niimero representa la siguiente combinacién binaria? 10111111 01410000 00000000 00000000 Expresar la respuesta en el sistema de numeraci6n decimal. . Representar en la norma mencionada el nimero (14,3). 2.45 Para una representacién de punto flotante normatizada, si se mantienen todos fos elementos sin moditicar, excepto por: a. La disminucion de la base, se produciré aumento/disminuciér/ningdn cambio en la canti- dad de ndmeros que pudieran representarse, ‘58_PRINCIPIOS DE ARQUITECTURA DE CoPUTADORAS b. EF incremento de la cantidad de digitas significativos, se producird aumento/disminucién/ aingin cambio en el numero positivo mAs chico que pudiese representarse. ¢. El incremento de la cantidad de bits en el exponente, se producira aumento/disminucion/ hingdn cambio en el rango de representacién. 4. El cambio de la representaci6n del exponente a complemento a dos (en vez de exceso 64), ‘se producird aumento/disminucién/ningiin cambio en el rango. 2.16 Utilizando una representacién de punto flotante con un bit de signo en la posicién izquierda del niimero, seguido por un exponente de dos bits en convencién de complemento a dos, y segui- do a su vez por una mantisa normalizada expresada en binario, considerando que no hay bit impicito y que ef cero se representa como 000000: a, 2Cudl es el numero decimal representado por la expresién 100100? b, Si se modifica la base a 4 mientras se mantienen todos los demés elementos constantes, qué ocurre con et minima valor que puede representarse? . ¢Cudl es el intervalo minimo entre numeros consecutivos? 4. 2Cual es el intervalo maximo entre ndmeros consecutivos? . Habiendo un total de seis bits en esta representacién, hay un total de 64 combinaclones bi- narias diferentes. ¢Cudntas de ellas son vélidas? 2.17 Representar el niimero (107,15), en un formato de punto flotante que ofrazca un bit de signo, un exponente de siete bits en exceso 64 y una mantisa normalizada binaria de 24 bits, sin bit implicito. Truncar ta fraccion eliminando los bits que fuesen innecesarios. 2.18 Para los valores siguientes, expresados en la norma de punto flotante IFEE 754 de simple preci- Sin, expresar los valores numéricos en la forma de mantisa binaria y exponente (aj: 1,11 x 25). a. 0 10000011 0110000 co000000 0000000 . 1 10000009 000000 aooco000 aovo0000 c. 1 00000000 0000000 00000000 aov00000 4. 111111111 0900000 00000000 ovo00000 e,011111111 1101000 00000000 oo0c000 #. 9.00000001 1001000 00000000 00000000 9.0.00000011 0110100 coon0000 covod000 2.19 Indicar los formatos binarias correspondientes a la norma de punto flotante IEEE 754 para los numeros siguientes. a, 41,1014 x 25 (simple precision}. b. 40 (simpte precisién). ¢. -4,00111 x 2° (doble precision). 4.- NaN {simple precision). CAPITULO 2 + AEPRESENTACION DE LA WwFoRMACION 59 2.20 Uilizando el formato de punto flotante IEEE 754 de simple precisiGn, indicar el valor (no el pa~ trGn binario) correspondiente a: a. EI maximo niimero positivo representable (infnito no es un numero). b, EI minimo nimero positiva no nulo normalizado. ¢, EI minimo nimero positive denormalizado. 4, El minimo intervalo normalizado, . El maxima intervalo normalizado. +. La cantidad de nimeras normalizads representables (incluyendo el cero: ni el infinito ni el NaN son niimeros). 2.2 Dos programadores escriben generadores de niimeros al azar para ntimeros normalizados de punto flatante, usando el mismo método. El programador A utiliza un generador que crea nit- meros aleatorios en el intervalo cerrado 0..0,6, y el programador B utiliza uno que crea dichos uimeros en el intervato cerrado 0,5..1. El generador del programador B funciona correctamen- te, en tanto que el generador del programador A produce una distribucién de numeros irregu- lar. 2Cudl puede ser el problema en el planteo del programador A? 2.22 La representacién con un bit 1 implicito na funciona en el sistema hexadecimal. gPor qué? 2.23 Con una representaci6n que utiliza un bit implicito, puede representarse el valor O si todas las combinaciones de bits tanto en el campo de a mantisa como en el del exponente se usan pa- ra niimeros no nulos? 2.24 Dado un niimero en representacién de punto totante expresado en el sistema decimal (por ¢).: 0,583 x 10°), ase puede convertir el numero a una forma equivalente en el sistema binarlo uti- lizando como método la conversion de la mantisa y del exponente a binario en forma separada? Capitulo 3 Aritmética 3.1 Introduccion El desarrollo del capitulo anterior permitié explorar algunas de las formas en que puede realizarse la representaci6n de nimeros dentro de una computadora digital, aun cuando el tema de las operaciones aritméticas que pueden ejecutarse sobre dichos nimeros ape- nas fue tratado, Este capitulo analiza las cuatro operaciones bisicas: suma, resta, produc- toy cociente, Comienza describiendo las formas de operacién sobre ntimeros de forma- to de punto fijo y continiia con la descripcién de los métodos que permiten la realizacién de operaciones con mimeros representados en formato de punto flotante. Algunos de los problemas mas importantes, como los célculos climéticos o | laciones de mecdnica cudintica, entre otros, ponen a prueba la capacidad de las computa- doras existentes hoy en dia, aun cuando se trate de las mas grandes y poderosas. Por tal raz6n resulta tan importante el tema del calculo aritmético de alto rendimiento. El capi- tulo se completa con Ia introduccién de algunos de los algoritmos y técnicas utilizados para acelerar el proceso de eflculo aritmético, imu- 3.2 Suma y resta en punto fijo La suma de nimeros binarios y el concepto de desborde (overflow) fueron tratados bre~ vemente en el capitulo 2, En este capitulo se tratan en detalle 1a suma y la resta de mime- 10s de punto fijo, tanto signados como sin signo. Dado que la representaciGn de enteros en complemento a dos es practicamente universal en las actuales computadoras, e! enfo- que se orientar4 principalmente a Jas operaciones en complemento a dos. Se analizarén brevemente las operaciones con niimeros representados en complemento a uno y en BCD, que tienen gran significado en otras éreas de la computacién tales como ta opera- cién en redes (en el caso de sumas en complemento a uno) y en calculadoras portitiles (en et caso de las operaciones en BCD). (B2_pruncipigs OF ARKUITECTURA GE COMPUTAIORAS 3.2.1 Suma y resta en la representacién de complemento a dos En esta seccién se analizard la operacién de suma de ntimeros signados representados en complemento a dos. Durante el andlisis de la operacién de suma de nimeros signados, la Festa de estos quedard implicitamente incluida, como resultado del principio aritmético segtin e] cual: a-b=at(-b) Et correspondiente negativo de un némero se puede obtener por medio de su complemen- to; por consiguiente, se puede realizar una resta por medio de la suma del niimero com- plementado. Como consecuencia, se logra un ahorro en Ia estructura circuital de la uni- dad de céleulo, dado que se evita la necesidad de un elemento restador por hardware. Este punto se desarroltard en detalle en secciones posteriores. 0 Resta 0 1 de nimends um ‘oon 010 2 on 3 3 Soma 100 1 de némeros Figura 3.1 * Representaci6n circular de los nimeros de tres bits en representacion. ‘dg complemento a dos. Lo que si habra que hacer cuando se sumen nimeros en represemtacién de complemento a dos es modificar la interpretacién de los resultados de la suma. Para entender la raz6n de esta afirmacién, puede considerarse la figura 3.1. Cuando se realizan sumas sobre Ia recta numérica, los nimeros a sumar pueden ser tan grandes 0 tan pequefios como se de- see; la recta numérica Hega hasta 40, por lo que la recta numérica real puede acomodar niimeros de cualquier tamafio. Por otra parte, tal como fuera anatizado en el capitulo 2, las computadoras representan la informacién utilizando un nidmero finito de bits, por lo que solo pueden almacenar valores numéricos dentro de un rango determinado. Por ejem- plo, si se analiza la tabla 2.1 se observa que si se restringe el tamafio de un nimero a, por ejemplo, tres bits, habrd solo ocho posibles combinaciones binarias para representarlo. En la figura 3.1 estos valores se ubican sobre una circunferencia, empezando desde el 000 y avanzando, a Io largo de la misma, hasta llegar a 111 y retornar a 000. La figura muestra también los valores decimates de los mismos niimeros. Al experimentar con Ia circunferencia se observa que los niimeros pueden sumarse 0 restarse recotriendo la circunferencia en el sentido horario para sumar y en el sentido an- capituo 3+ anmuénca 63 tihorario para restar. También puede restarse por medio de ta complementacién del sus- traendo y posterior suma. Nétese que la situaci6n de desborde solo puede producirse en ‘una suma en la que ambos operandos tienen el mismo signo. Més atin, el desborde se pro~ duce cuando ocurre una transicién desde +3 a -4 mientras se recorre la circunferencia du- rante una suma, o desde -4 a +3 durante una resta. (El concepto de desborde en las ope~ raciones de complemento a dos se analiza detalladamente en secciones posteriores del presente capitulo.) A continuaciéa se plantean dos ejemplos de suma de dos niimeros de ocho bits repre+ sentados en notacién de complemento a dos. En el primero de los dos se plantea la suma de dos niimeros positivos: 00001010 (419) + OOOTOIII (423),0, 00100001 (339 Dos ntimeros de signos opuestos se pueden sumar en forma simitar: 00000101 5g + 11E11110 Cp Arrastre a descartar a) 00000011 Do En las operaciones de suma de niimeros representados en complemento a dos se debe descartar e] arrastre producido por la suma en la posicién més significativa (el bit a la iz- quierda). Ocurre una situacién similar cuando se genera un arrastre a partir de la suma de. dos némeros negatives: Wanita Dy + 11111100 (jo Arrastre a descartar CD TI11OTI — C3)q El bit de arrastre que se produce a la izquierda de Ia posicién més significativa debe des- cartarse debido a que el sistema numérico es modular, es decir, se cierra desde el maxi- mo mimero positive sobre el menor niimero negativo, tal como to muestra la figura 3.1,* Si bien la operacién de suma puede generar un bit de arrastre desde el bit mas signi cativo del resultado, el descarte del mismo no significa que el resultado sea erréneo. La * de T: Una ustiticacién mas rigurosa de! motivo por el cual se descarta el bit de arrastre puede encontrar se en a definicién del complemento y su apicaciéa aa resta de nimeros enleras. (64. PRINCIPIOS NE ARQUITECTURA DE COMPUTADORAS. secci6n siguiente analiza en mayor detalle ef problema del desborde en la suma de nime- ros representados en notacién de complemento a dos. Desborde Cuando se suman dos nuimeros de igual signo, se producira deshorde si el resultado es demasiado grande como para poder ser representado con la cantidad de bits utilizadas pa- a representar los operandos. Considérese como ejemplo la suma de los ntimeros (+80), ¥ (+50),o, expresados ambos en ocho bits. El resultado deberfa ser (+130),o, aunque de la operacién representada a continuacién se observa que el resultado obtenido es (-126),,! 01010000 (+80), + DOT10010 — (450), 10000010 126),y Este resultado no deberia sorprender, dado que se sabe que el miximo nimero positivo que puede representarse en la notacién de complemento a dos es (+127),5 ¥ que, por lo tanto, es imposible representar (+130),., Si bien el resultado 1000 0010 “se parece” a (130),9 si se lo analiza como un nimero sin signo, al trabajar en forma signada el primer bit, de signo, indica un nimero negativo, lo que resulta claramente erréneo. Cuando se suman dos nuimeros de signo opuesto no puede ocurrir desborde. Esto se deduce intuitivamente debido a que en una resta la magnitud del resultado no puede su- perar la magnitud del operando més grande, Esto conduce a la definicién de desborde en Ja representacién de ntimeros mediante et comptemento a dos: Si tos mimeros que se suman tienen el mismo signo y el resultado tiene el signo opuesto, se hat producido desborde, por 1o que el resultado es incorrecto. Si los ndmeros que se suman son de signos opuestos. no existe la posibilidad de desborde. Como método alternative para detectar un desborde en la suma, hay que saber que se produce si y solo si el arrastre que se ingresa ha- cia el bit de signo difiere del bit de arrastre que sale desde dicho bit. Si se resta un mimero positivo de un nimero negative y el resultado es positivo, o se resta un iimero negativo de un mimero positive y el resultado es negativo, se produjo desborde. Si tos intimeros que se restan son del mismo signo, no se puede producir desborde. 3.2.2 Implementacion circuital de sumadores y restadores. Hasta ahora et foco de atencién estuvo puesto sobre los algoritmos para la suma y la testa. A continuacién se analizan las implementaciones de sumadores y restadores simples. capiTuLo 3° ARITMENICA 65 Sumadores y restadores en serie El disefio de un sumador serie (ripple carry adder) para dos muimeros de cuatro bits se analiza en el apéndice A. El circuito sumador sigue el modelo utilizado normalmente pa- ra la suma decimal, en el que se suman los digitos de cada columna, en forma consecuti- va una tras otra, de derecha a izquierda. En esta secci6n se pretende revisar e! sumador serie y luego analizar un restador serie (ripple borrow subtractor), combinando final- mente ambos circuitos para obtener una Gnica unidad de summa y resta. yay ats byt tty Le) Wey Lhe Lee |Sumador} | |Sumador| | |Sumador] | |Sumador| lcomptetol | [completo] } comptetol | compl AP SPST 8 3 st 50 Figura 3.2 » Sumador serie para dos nimeros de cuatro bi La figura 3.2 muestra el circuito del sumador serie de cuatro bits desarrollado en el apén- © A. Los dos niimeros binarios A y B se suman de derecha a izquierda, generando un bit de suma y uno de arrastre en cada columna binaria. En la figura 3.3 se han conectado en cascada cuatro sumadores binaios serie para permi« tirla suma de dos némeros de 16 bits. El sumador completo de la derecha tiene su entrada de arrastre en 0. Si bien este andlisis podria haber simplificado el circuito de tal sumador, se pre- fiere usar Ia forma més general y forzar ¢, a 0 para simplificar el posterior proceso de resta. a5 Me a3 2 Wy ay ay a bas| i i i reeeleh Wh cig] Suma debits le el Samad is le» Wil Figura 2.3 © Un sumador de 16 bits obtenido a partir de cuatro sumadores serie de cuatro bits cada uno. La resta de nimeros binarios se resvelve en una forma similar la de la suma, La resta en- tre dos ntimeros puede realizarse trabajando de a una columna por vez, restando de dere- cha a izquierda los digitos del sustraendo b, de los respectivos digitos del minuendo ai. G66 _pamvcipias DE ARQUITECTURA DE COMPUTADORAS Tal como en la resta decimal, si el susteaendo es mayor que el minuendo o hay un arras- we (borrow) desde un digito previo, se deberd propagar dicho arrastre hacia el bit més significativo siguiente. La figura 3.4 ilustra la tabla de verdad y un diagrama en bloque del circuito restador, p, ana Resa, Arms a (een ba ooo fo o ama oo ifr 4 or ofr 4 estan ori. oO 1 jeomplet 1a o]f1 6 1oO oT oO oO Arasite; ¢ p ‘a 110 fo oo Reve, ee ee (a~b) Figura 3.4 Tabta de verdad y simbolo esquemético para un restador serie de un bit. Los circuitos restadores de dos niimeros de un bit pueden conectarse en cascada para crear un circuito restador serie, de la misma manera en que se conectan en serie los su- madores completos de aumeros de un bit para formar un sumador serie. La figura 3.5 ilustra un circuito restador serie de cuatro bits formada por cuatro restadores completos. de un bit. by as byay bay yay Arrastreg Wey Wen VW ° Restador| | |Restwaior] | jresaor] | | Restador Jcompteio] | Jeompteo} | foompleia) | |eompteso sa JU] Uy Resta Resiay Resta, Restag Figura 3.5 « Restador serie Tal como se analizara previamente, un método alternativo para la implementacién de la resta consiste en determinar el complemento a dos del sustraendo y sumarlo al valor del minuendo. El circuito de la figura 3.6 resuelve tanto la operacién de suma como la de res- ta sobre dos niimeros de cuatro bits, para to cual requiere que las entradas ®, puedan com- plementarse cuando se desea realizar una resta. Una linea de control SUMAR/RESTAR determina cul es la operacién a realizar. La barra por encima del simbolo SUMAR indi- ‘ca que Ia operacién de suma se activa cuando la sefal estd en su nivel bajo. Esto es, si la Minea de control esté en su estado 0, las entradas a, y b se transfieren al sumador, el que genera la suma s;en sus salidas. Si la linea de control esté en 1, las entradas ay se transfie~ caphruio 3 + anmuénea 67 ren al sumador, pero las entradas b, se complementan a uno en las compuertas XOR an- tes de su ingreso al sumador. Para formar el complemento a dos, se debe sumar ! al com- plemento a 1, 1o que se logra colocando la linea de arvastze de entrada ¢, en 1 por medio de la entrada de control. De esta manera, 1a electronica del sumador se comparte entre el sumador y el restador. by b a by SUMAR Lo LD] estar Isumador} | |Sumator] | Sumador| | |Sumador jeomplero] | Jeompletof | completo] | Jcompleto] 4 | | | | 5 3 aa Ey Figura 3.6 « Circuito sumador-restador. 3.2.3 Suma y resta en representacién de complemento a uno Si bien la representacién de complemento a uno actualmente no se utiliza demasiado en los sistemas de cmputo, fue muy usada en las primeras computadoras. La suma en com- plemento a uno se maneja en forma un poco diferente a ta suma en Ia representacién de complemento a dos: el bit de arrastre que se genera a partir de la posicién més significa- tiva no se descarta sino que se vuelve a sumar con la posicién menos significativa del re- sultado obtenido, tal como lo mucstra la figura 3.7. Esta operaciGn suele conocerse como arrastre circular final. Para entender mejor la causa por fa cual se necesita reutilizar ef arrastre, puede exa- minarse la circunferencia mediante la que se representan los ndimeros de complemento a uno, [a que se muestra en la figura 3.8, Nétese que la cireunferencia ofrece dos represen- taciones para el 0, Cuando se suman dos rtimeros, al atravesar tanto una como otra repre- sentacién del cero, debe compensarse el hecho de que el 0 se recorre dos veces. El agre- gado del bit de arrastre a la columna de las unidades desplaza en uno el resultado final para salvar esta situacién. Debe notarse aqui que la distancia entre 0 y-0 es la distancia entre dos enteros y no la distancia entre dos néimeros representables consecutivos. Como aclaracién de este punto, considérese la suma de (+5,5),9 Con (-1,0),9, representados ambos en la notacién de com- plemento a uno, segin la figura 3.9. (Cabe aclarar que este problema podria tratarse tam- 10011 C12, HO1101 (130 100000 + Correcciéa del resultado + t 00001 Go Figura 3.7 * Ejemplo de la suma en complemento a uno con reutilizacién del arrastre genesado, 2 kaa 4 oo 1 a or 10 010 2 01 on 2 100 3 sumade 5 rximeres Figa * Circunferencia representativa de los nmecos en notacién de complemento a uno. bién como una resta, en la cual se complementa el sustraendo, por inversién de todos sus bits, antes de sumarlo al minuendo). Para poder sumar (+5,5),9 y (-1,0)j, ¥ obtener el resul- tado correcto en la representacin de complemento a uno, se suma a la posicién de las uni- dades el arrastre generado por la suma realizada, segin se muestra. Esto complica la repre- sentaci6n circular de los nimeros, dado que en el intervalo entre +0 y -O existen nimeros vélidos que representan fracciones negativas, pero que aparecen en la circunferencia antes de que aparezca la representacién del nimero -0, Si se reordena la circunferencia de modo de salvar esta anomalta, habré que tratar la suma en una forma mas complicada, La aparici6n de dos representaciones diferentes para el cero y la necesidad potencial de realizar otra suma para agregar el bit de arrastre son dos razones importantes para que los di- sefiadores prefieran la aritmética de complemento a dos antes que la de complement a uno. 0101.1 G55ho + 1110,0 (L049 10011, +Leiio 0100,1 4540 Figura 3.9 ¢ La suma del bit de arrastre carnplica la operaci6n de suma para nUmeros no enteros. 3.3 Producto y cociente en punto fijo La multiplicaci6n y la division de nimeros representados en punto fijo pueden resolver- se mediante operaciones mas sencillas de suma, resta y desplazamiento. Las secciones que siguen describen métodos para realizar las operaciones de producto y cociente de ni- meros en representacién de punto fijo, tanto signados como no signados, utilizando las operaciones basicas mencionadas. Se analizardn primeramente las operaciones para ni- meros no signados y, luego, las operaciones para ndimeros signados. 3.3.1 Multiplicacion de nimeros sin signa La multiplicacién de nimeros binarios enteros sin signo se realiza en la misma forma en que se la realiza manualmente para los niimeros decimales. La figura 3.10 ilustra el pro- cedimiento para multiplicar dos enteros binarios sin signo. Cada bit del multiplicador de- termina si el multiplicando, desplazado a Ia izquierda de acuerdo con ta posicién del bit del muttiplicador, se suma o no ai producto, Cuando se multiplican dos nimeros sin sig- no de 7 bits, e] resultado puede estar formado por hasta 2n bits. Para el ejemplo de la fi- gura 3.10, el producto de dos operandos de cuatro bits cada uno da por resultado un va- Jor de ocho bits. Cuando se multiplican dos némeros signados de 7 bits, el resultado solo puede estar formado por 2(n— 1) + 1 = (2n~ 1) bits, siendo este valor el equivalente a realizar el producto de dos niimeros sin signo de (n — 1) bits cada uno y agregar luego el bit de signo. 1.101 (13)— Multiplicando M X1LOL1 (the Multiplicador Q rol oui! Productos pales tio 10001111 (143)9 Producto P Figura 3.10 © Mutipicacién de dos nimeras enteres binarios sin sign, La implementacién circuital del producto de enteros puede adoptar una forma similar a la que se utiliza en el método manual. Lu figura 3.11 ilustra el circuito de una unidad multiplicadora para nimeros de cuatro bits, la que contiene un sumador de cuatro bits, una unidad de control, tres registros de cuatro bits y un registro de un bit para el arras- ire, Para realizar el producto de dos niimeros, €! multiplicando se coloca en el registro M, el multiplicador en el registro Q, en tanto que los registros A y C se colocan en cero. Durante Ia operacién, el bit de la derecha del multiplicador determina, en cada paso, si el multiplicando debe sumarse o no al producto parcial. Luego de sumar el multiplican- doal producto, el multiplicador y el registro A se desplazan simulténeamente a derecha. Esto produce el efecto de desplazar €] multiplicando a la izquierda (tal como se realiza 70 _PAINCIPIOS DE AROUITECTURA OE COMPUTADORAS: en el procedimiento manual) y, a la vez, de colocar el siguiente bit del multiplicador en ‘Muttipticando (M) Tégica de contrel para sume y Multiplicador (Q) Regisiro A Figura 3.11 » £1 multiplicador serie La figura 3.12 muestra el proceso de multiplicacién. Al comenzar, C y A se limpian, en tanto que M y Q contienen, respectivamente, al multiplicando y al multiplicador. El bit menos significative de Q es 1, y, por consiguiente, el multiplicador M se suma con el pro- ducto contenido en el registro A, La palabra formada por los contenidos de los registros Ay Qtomados como un conjunto constituye el producto de ocho bits, siendo el registro Acel que recibe la suma de! multiplicando. Luego de sumar M con A, los registros A y Q se desplazan a derecha. Dado que los registros A y Q se vinculan como un par para con- tener el producto de ocho bits, el bit menos significativo de A se desplaza hacia la posi- ciGn més significativa de Q. El bit menos significativo de Q se descarta, C se desplaza ha- cia la posici6n mis significativa de A y se ingresa un 0 en C. El proceso contintia durante tantos pasos como bits tenga et multiplicader. En la segunda iteracién, el bit menos significativo de Q vuelve a ser 1, por lo que el multi- plicando se suma con A, desplazdndose la combinacién de los registros C, A y Q ha- cia la derecha. En Ia tercera iteraci6n, el bit menos significativo de Q es 0, por lo que M no se suma con A, pero si se produce el desplazamiento a derecha de los tres regi: tos. Finalmente, en la cuarta iteracién, el bit menos significative de Q vuelve a ser 1, por lo que nuevamente M se suma con A y se desplaza a derecha la combinacién de los tres registros C. A y Q. El producto queda contenido en los registros A y Q, donde el registro A contiene los bits mas significativos, en tanto que Q contiene los bits de menor peso. * N. de T: duntamente con el desplazamiento de los dos registros mencionados, se procede a la carga del bit de arrastre en el registro C. capiroio 3 + anrrsérica 71 ‘Multiplicando (M1): Tx -voeiiistes c Q Q o900 1011 0 1101 1081 — SumarMcona 0 O116 1101 _ Desplazamiento 2 0011 1401 — SumarM con 0 £00) 1110 Dexpluzamiento 0 0100 LLL IT — Desplazamiento sin suma 1 9 Sumar M con A. 00 Dapiamene Resultado (producto) Figura 3.42 * Un ejemplo de producto utiizando el mutiplicador serie. 3.3.2 Division sin signo En la divisién binaria, se debe intentar reiteradamente la resta del dividendo menos el di- visor, usando la menor cantidad de bits posibles en el dividendo. La figura 3.13 ilustra es- te punto mostrando que (11), no cabe en 0 0 en OI, pero sf cabe en 011, como se puede ver desde el patrén binario 001 que inicia el cociente. ont LL 11 0010) 01+ Resto. Figura 3.13 « Ejemplo de dvisi6n binaria. La divisi6n de mimeros enteros binarios en una computadora se puede mangjar en forma similar a la que se utiliza para el producto de enteros binarios, pero con la dificultad de tener que determinar si el dividendo cabe © no en el divisor, cuya tinica solucién es efec- tuar la resta y verificar si el resto es negativo. Si eso ocurre, se debe dar marcha atrs con Ja resta, para lo cual se vuelve a sumar el divisor, como se describe mds adelante, En el algoritmo de divisién, en lugar de desplazar el producto a la derecha tal como se realizara en el caso del producto, se desplaza el cociente a la derecha y se resta en vex. de sumar, Cuando se dividen dos nimeros sin signo formados por 2 bits, el resultado no pue- de tener més que n bits. La figura 3.14 ilustra el circuito de una unidad divisora para mimeros de cuatro bits, la que contiene un sumador de cinco bits, una unidad de control, un registro de cuatro bits para el dividendo Q, y dos registros de cinco bits para el divisor M y para el resto A. Se zan registros de cinco bits para A y M, en lugar de usar registros de 4 bits como po- ‘72_PRINcrPlos DE ARQUITECTURA DE COMPUTANDRAS drfa suponerse, dado que se requiere un bit adicional para indicar el signo de los resulta- dos intermedios. Si bien este método de divisién se usa para nimeros sin signo, se utili- zan restas a Io largo del proceso, por lo que pueden obtenerse resultados negativos. Esto extiende el rango de -16 a +15, to cual, a su vez, plantea la necesidad de 5 bits para el al- Mmacenamiento de los resultados intermedios. Divisor (M) Logica de control urna! | para suma, resta, ‘desplazamieato Desplazamea 5 gaauierce Dividendo (Q) a4] Registro A Figura 3.14 @ Circuito divisor se Para dividir dos ndmeros de cuatro bits, se almacena e! dividendo en el registro Q y el divisor en el registro M, en tanto que el registro A y el bit més significativo de M se car- gan con 0. El bit mas significativo del registro A determina en cada paso si el divisor de- be volver a sumarse al dividendo, Esto se hace necesario para reponer el dividendo cuando, como se ha descripto anteriormente, el resultado de restar el divisor resulta ne- gativo. Se suele hablar de una divisién con reposicién porque, en los casos en que el Testo es negativo, se debe restaurar el dividendo a su valor anterior. Cuando el resultado no es negativo, el bit menos significativo de Q se lleva a | para indicar que el divisor ca- be en el dividendo. En la figura 3.15 se ilustra el proceso de divisi6n. Et registro A y el bit més significa livo de M se llevan a cero, en tanto que Q y los bits menos significativos de M se cargan con el dividendo y con el divisor, respectivamente. Los registros A y Q se desplazan en conjunto a la izquierda y se resta el divisor M de A. Dado que el resultado es negativo, el divisor se vuelve a sumar para reponer el dividendo, y q, se carga con 0. El proceso se re- pite, desplazando A y Q a izquierda y restando M de A. Nuevamente se obtiene un resul- tado negativo, por lo que se vuelve a reponer el dividendo y se coloca un cero en gy. En latercera iteracién, se desplazan a izquierda A y Q, en tanto M se vuelve a restar de A. En este caso, el resultado de ta resta no es negativo, por lo que se coloca un | en gg. El pro- ceso se repite una vex mas, para realizar una iteracién final, en Ja que nuevamente A y Q se desplazan a izquierda y M se resta de A, lo que vuelve a dar un resultado negativo. Se capiruio 3 + anrrménica 73 repone et dividendo y se carga un 0 en qo, El cociente queda contenido en el registro Q, en tanto que el registro A contiene el resto de la divisi6n. Divisor (M) ooo 9.0000 1110 Desplazamicnto a izquicrds DIE OL 1110 Reser A-M TOOOO F110 — Recuperar A (sumar A +M) 00000 b1 10 Limpiarg 20001 2100 Desptazamiento aizquierda rDI110 1100 — RestrA-M TOOL 1100 — Recuperara 00001 1100 — Limpiar gy 00011 10.00 Desplazamiento aizquierds fO9 000 1900 ResarAnM 0000 1961 — Colocargy ent 99001 0010 Desplaramiento a zquienda rOIti0 0010 ResarA-M TOOOL O10 Recuperar A 0001) OOD) Limpiaras Resto Cociente Figura 8.15 © Un ejemplo de divisién que utiliza et divisor serie, 3.3.3 Producto y cociente signados Si se aplican los métodos descriptos en ia seccién anterior al producto y cociente de nii- meros con signo, surgiran algunos problemas. Considérese el producto de -1 por +! uti- Jizando palabras de cuatro bits, como se muestra en el esquema de la izquierda de la gura 3.16. En lugar de obtener el resultado esperado de -1, se obtiene el equivalente a +15. Lo ocurrido se debe a que el bit de signo no se extendi6 hacia la izquierda del resul- tado. Este no es un problema cuando el resultado es positivo, dado que los bits de mayor peso adoptan el valor 0, por lo que el bit de signo se genera correctamente como 0. En el esquema de la derecha de la figura 3.16 se puede observar una solucién, en la cual cada uno de los productos parciales se extiende a todo lo ancho de la palabra resul- tado, reteniéndose solo los bits menos significativos de dicho resultado. Si ambos ope- randos son negativos, se extienden ambos signos, nuevamente reteniendo solo los ocho bits menos significativos del resultado. 74 Pruncipios be ARGUTTECTURA DE COMPUTADORAS. H1it ye LIVI Elo XOOO1 (ly x 2001 Go biat Pididi ta 0000 0000000 0000 o00000 0000 90000 OOOOTIIT Gide PLtTitdd Cho Incorrect, debe dar—1 Figura 3.16 + Producto de mimeros con signo. La divisién signada es mas compleja. No es intenci6n de este texto el desarrollo de los métodos requeridos, pero, como técnica general, la solucién consiste en convertir ambos operandos a su forma positiva, realizar la operacién y luego, como paso final, convertir el resultado a su forma signada correcta, 3.4 Aritmética de punto flotante Las operaciones aritméticas que utilizan ndmeros representados en notacidn de punto flo- tante pueden realizarse mediante las operaciones de punto fijo descriptas en las seccio- nes anteriores, prestando la debida atenci6n a la necesidad de mantener las caracteristi- cas fundamentales de ta representacién de punto flotante. En las secciones si explorardn los procedimientos para la realizaci6n de célculos tanto en el sistema de nu- meracién binario como en el decimal, sin olvidar los requisites propios de Ia representa- cidn de punto flotante. 3.4.1 Suma y resta en formato de punto flatante Las operaciones aritméticas de punto flotante difieren de las de punto fijo en el hecho de que, ademis de considerarse las magnitudes de los operandos, tiene que considerarse también el tratamiento que debe darse a sus exponentes. Como en el caso habitual de las operaciones decimales en notacién cientffica, los exponentes de los operandos deben ser iguales para poder sumar o restar. Se suman o restan las mantisas segtin corresponda, y se completa ta operacién normalizando el resultado. Los procesos de ajuste de la parte fraccionaria y de redondeo det resultado pueden We- var a una pérdida de precisién del resultado. Como ejemplo, considérese la suma sin sig- no de los operands (0,101 x 2°) + (0,111 x 2 en los que las mantisas se representan con tres digitos significativos. Se inicia la operacién haciendo que el menor de los exponen- (es se iguale al mayor de ellos, y se ajusta adecuadamente fa mantisa. Se tendré asf que 0,101 x 2? = 0,010 x 2*, por lo que se pierde en este proceso una precisi6n equivalente a 0,001 x 2? La suma resultante es: cariruo 3+ anmainca 75 (0,010 + 0,111) x 245 1,001 x 24= 0.1001 x 25 y si se vuelve a redondear a tres digitos significativos, se obtiene 0,100 x 2°, lo que im- plica otra pérdida de precisién de 0,001 x 2* en el proceso de redondeo. éPor qué los némeros de punto flotante tienen formatos tan complicados? Puede ser motivo de curiosidad saber la causa de la complejidad de a estructura que se utiliza cuando se representan niimeros en formato de punto flotante. La mantisa se repre- senta en formato de magnitud y signo; el exponente, a su vez, en notacién excedida, y el bit de signo separado del resto de la mantisa por el campo de exponente. La explicacién de esta estructura es relativamente simple. Considérese la complejidad con la que se realizan las operaciones de punto flotante en una computadora. Antes de poder realizar cAlculo alguno, el nimero debe ser desempaquetado a partir del formato utilizado para su almacenamiento. (En el capitulo 2 se analiza el formato de representacién de nimeros en punto flotante descripto en la norma IEEE. 754.) Antes de realizar la operacién, se deben extraer del conjunta de bits la mantisa y el exponente; luego de realizar la operacidn arit- mética, el resultado debe volver a normalizarse y redondearse, y finalmente se deben rea- comodar los bits para satisfacer los formatos requeridos. La ventaja del formato de punto flotante que contiene un bit de signo seguido por un exponente en notacién excedida, sepuido a su vez por la magnitud de la mantisa, es que perinite Ja realizacién de comparaciones entre dos nimeros de punto flotante, por mayor, menor o igual, sin necesidad de desempaquetar los némeros. El bit de signo es lo mas im- portante en tal comparacién, por lo que es razonable que el signo, en el formato de pun- to flotante, se encuentre en e! bit mas significativo. Lo que sigue en importancia, en la comparacién, es el exponente, dado que una variacién de #1 en el exponente modifica el valor en un factor de 2 en el sistema binario, en tanto que un cambio en cualquier bit de Ja mantisa, aun en el mas significativo, modifica el ntimero en un valor menor. aca tener en cuenta el bit de signo, las mantisas signadas se representan como ente- ros y se convierten en su formato de complemento a dos. Una vez realizada la suma ola resta en formato de complemento a dos, puede haber necesidad de normalizar el resulta- do y de ajustar el bit de signo, tras lo cual nuevamente se Heva el resultado al formato de representacin de magnitud y signo. 3.4.2 Producto y cociente en formato de punto flotante El producto y el cociente en el formato de punto flotante se resuelven en forma similar a fa de la suma y la resta en punto flotante, excepto por el hecho de que tanto el signo co- mo el exponente y la mantisa del resultado se pueden calcular por separado. Si los ope- randos ticnen el mismo signo, el signo del resultado es positivo, Signos distintos produ- ‘76_PRINCIPIOS DE AROUITECTURA DE COMPUTADORAS cen un resultado negativo. El exponente del resultado, antes de su normalizacién, se ob- tiene sumando los exponentes de los factores en la mulliplicacién, 0 restando los expo- nentes de dividendo y divisor en la divisién, Las mantisas se multiptican o dividen de acuerdo con la operacién a realizar, tras to cual se normaliza el resultado, Considérese el uso de mantisas de tres bits al calcular el producto binario de los nii- meros (+0,101 x 2%) x (-0,110 x 27). Los signos de los operandos difieren, lo que signifi- ca que el resultado tendrd signo negativo. Para multiplicar se suman los exponentes, por lo que el exponente del resultado ser4 2 + (-3) =-1. Se multiplican las mantisas, de don- de se obtiene el producto 0.01111. La normalizacién del producto y su redondeo a solo tres bits en la mantisa produce como resultado el valor -0,111 x 27. Ahora se considera la divisin de los ndmeros binarios (+0,110 x 25) y (+0,100 x 24), cu- ‘yas mantisas se representan con tres bits. Los signos de los operandos son iguales, por ende, el resultado tiene signo positivo, Para dividir se restan los exponentes, por lo que el expo- nente del resultado es 5-4 = 1. Se dividen luego las mantisas, lo que puede realizarse en dis- tintas formas. Si se tratan las mantisas como enteros no signados, se obtiene 110/100= I con un resto de 10. Lo que se pretende en realidad es un conjunto de bits que representen la mantisa en vez de dos elementos que en forma separada representen cociente y resto. Para lograrlo, se puede escalar el dividendo en dos posiciones a Ia izquierda, con lo que se ob- tiene el resultado 11000/100 = 110. Si el resultado obtenido se vuelve a escalar dos luga- res, ahora a la derecha, para mantener el factor de escala original, se logea 1,1. Sise agru- pan todos los elementos obtenidos, el resultado de dividir (+0,110 x 2°) por (0,100 x 24) es (41,10 x 2, el que, luego de fa normalizacién, se convierte en (+0,110 x 2%). 3.5 Aritmética de alto rendimiento La velocidad con la que se realizan las operaciones aritméticas suele sere] cuello de bo- tella en el rendimiento de una computadora, Muchas supercomputadoras, como la Cray, la Tera y la Intel Hipercubo, se consideran “super” debido a su eficiencia en el célcuto tanto de punto fijo como flotante. En esta seccién, se analizan distintas técnicas para me- jorar la velocidad de las operaciones de suma, resta, producto y cociente. 3.5.1 Suma de alto rendimiento El sumador serie analizado en la seccién 3.2.2 puede introducir retardos importantes en el sistema que lo utilice. El camino més largo dentro del sumador es aquel que va desde las entradas del sumador menos significativo hasta las salidas del sumador més signifi- cativo. El proceso de sumar las entradas correspondientes a cada posici6n binaria es re- lativamente rapido (es suficiente un circuito en I6giea de dos niveles), pero Ia propaga- ci6n del arrastre demora un tiempo largo en recorrer el circuito. En efecto, el tiempo de propagacién es proporcional a la cantidad de bits de los operandos. La consecuencia es capiruia 3 + anmmmenica 77 desafortunada, dado que aumentar ta cantidad de dfgitos significativos en una suma se traduce en un mayor requerimiento de tiempo para realizar la suma. En esta seccién se analiza un método para acelerar 1a propagacién del arrastre, en lo que se conoce como un sumador con arrastre anticipado (carry lookahead adder), En el apéndice B se desarrollan Ins expresiones booleanas reducidas correspondientes, ala suma (x) y el arrastre (¢,,,) de un sumador completo, Se reiteran aqui estas expresio- nes, donde los subindices indican la posicién relativa de cada sumador completo de un biten el sumador seri ret abe,+ abe, + abe, 5 Gaz betac, ab, Si se factorea la segunda ecuacién se obtiene on = ab + (at Be, La que a su vez puede escribirse en la forma Cini = G+ Pe, En la que Gaaby P, Los términos G; y P; se conocen como funciones de generacién y propagacién, respec- tivamente, por el efecto que tienen sobre el arrastre. Cuando G;= I, se genera un arrastre. en la etapa i. Cuando P, = 1, se propaga un arrastre a través de la etapa i siempre que al- guno de los operandos a, 0 4; valgan 1, Los términos G, y P; pueden implementarse con l6gica de Gnico nivel ya que solo dependen, respectivamente, de un producto légico (Y} ‘ode una suma iégica (0) de Jas variables de entrada. Nuevamente, los arrastres requieren el mayor tiempo. La salida de la etapa 0 corres- pondiente al arrastre c, vale Gy+ Py. cq ¥ dado que en la suma c, = 0, esta expresién pue- de escribirse como c, = G,. La salida de la etapa | correspondiente ac, es G+ P,.¢,. ¥ dado que ¢, = Gy esta expresin se escribe también como ¢, = G, + P, . Gy La salida de arrastre c, de la etapa 2 vale c, = G, + P, . cy y dado que c, = G, +P, . Gy, también pue- de escribirse la expresién como ¢, = G, + PG, + P,. P, . Gy, Reiterando este planteo por dltima vez para un sumador de cuatro bits, la salida de arrastre que se obtiene desde la ctapa 3 es c, = G, + P, . cy, por lo que, considerando el valor obtenido para c;, se pue- de escribir esta titima expresi6n como 78_PRWCIPIOS DE ARQUITECTURA DE COMPUTADORAS Gy+ Py. G,+ Py. P,.G,+P).P,.P,. Gy st Py Git Py ' 2° Py. Gy baa, bray yay bye PG; PG MG « % Cs “ cg a semader| [completa | sumadoe Jcompleia Surat compet Sumsdo| completo 4 n 4, fa Figura 3.17 © Sumador con arrasire anticipada, Ahora puede implementarse un sumador de cuatro bits con arrasire anticipado, tal como el de la figura 3.17. Sigue existiendo el retardo entre los sumadores al igual que en el ca so anterior, pero ahora ia cadena de arrastres puede pensarse como un conjunto de partes independientes que requieren el retarde de una compuerta para G, y P,, y dos retardos adi- cionales para generar c,, ,. Por lo tanto, se agrega un retardo equivalente al pagacién de tres compuertas, pero se elimina la cadena de arrastres entre las distintas eta pas. Si se supone que cada sumador completo de un bit introduce un retardo equivalente a dos compuertas, un sumador de cuatro bits con arrastre anticipado tendrd un retardo mé- ximo equivalente a cinco compuentas, en tanto que en el caso de un sumador serie de cua- tro bits el retard maximo seré equivalente al tiempo de propagacién de ocho compuertas. La diferencia entre las dos soluciones se vuelve mds pronunciada cuanto mas grandes son los operandos. Este procedimiento suele estar acotado a alrededor de ocho bits de antici- paci6n, debido a las Jimitaciones en los factores de carga de las compuertas analizadas en el apéndice A. Para sumar niimeros de més de ocho bits, es posible plantear circuitos par- ciales de anticipo de arrastre, los que pueden encadenarse para calcular las entradas y sa- lidas de arrastre de cada una de esas etapas. (Véase el ejemplo de la pagina 86.) 3.5.2 Producto de alto rendimiento Existen varios métodos para acelerar el proceso de In multiplicacién, Dos de estos mé- todos se describen en las secciones siguientes. El primero gana en eficiencia median- te el esquema de saltear bloques de unos, lo que elimina pasos de suma en la opera- capiruio 3 + anmwerica 79 cidn, Luego, se describe un multiplicador paralelo, en el que se forma un producto cruzado de todos los posibles pares de bits del multiplicando y del multiplicador. E] producto final se obtiene cuando se suma por filas el resultado del producto cruzado antes generado, El algoritmo de Booth Et algoritmo de Booth trata a los niimeros positivos o negativos en la misma forma, Su funcionamiento se basa en el hecho de que, cuando en e! multiplicador existen secuen- cias de ceros 0 unos, no se requieren sumas, sino solo desplazamientos. Las sumas o las restas se evan a cabo en los limites de las secuencias, donde se detecten transiciones de 0a lode t a0. Una secuencia de unos en e! multiplicador, ubicada entre las posiciones de pesos 2 a 2° puede considerarse como 2**! — 2". Por ejemplo, si el multiplicador es 001110 (+14), # = 3 y v= 1, por lo que 2*— 2) = 14. En la implementaci6n circuital se analiza e] multiplicador de derecha a izquierda. La primera transicién que se detecta es un cambio de 0a 1, lo que requiere Ia resta del valor inicial (0) menos 2!, En la transicién siguiente, de | a 0, se suma 24, lo que da por resul- tado +14. Se debe considerar que existe un 0 agregado a la derecha del multiplicador con el objeto de definir la situacién en la que aparezca un | como digito menos significative del mismo. Si el multiplicador se codifica de acuerdo con el algoritmo de Booth, el proceso de la multiplicaci6n puede llegar a requerir menos pasos. Considérese el ejemplo de mul- tiplicacién ilustrado por Ia figura 3.18. El multiplicador (14),, contiene tres unos con- secutivos, lo que implica, si se usara el procedimiento de multiplicar por sumas y des- plazamientos descripto en la seccién 3.3.1, la necesidad de tres operaciones de suma. El multiplicador codificado segtin Booth se obtiene analizando 1 multiplicador origi- nat de derecha a izquierda, colocando un -1 en la primera posicién en la que se encuen- tre un 1, y colocando un +1 en la posicién en la que uparezca el siguiente 0. El multi- plicador se convierte asi en 0 +100 -1 0. El multiplicador codificado segin Booth solo contiene dos posiciones no nulas, lo que significa que habré que realizar una tinica su- ‘ma y una tinica resta, por lo que este ejemplo logra una reduccién en el tiempo reque- rido para completar el producto. Sin embargo, no siempre se logran mejoras, y en algunos casos puede darse que el algoritmo en cuestién genere la realizacién de mas operaciones que si no se lo hubiese utilizado. Al efecto, considérese el ejemplo de la figura 3,19, en la que el mulliplicador consiste en una secuencia de ceros y unos alternados. Este ejemplo es el mismo de la figura 3.18, en la cual se han conmutado multiplicando y multiplicador. Sin ta codifi- ‘cacién Booth del multiplicador se hubiesen requerido tres operaciones de suma dado que tiene tres unos. Si se lo codifica segtin Booth, se requerirdn seis operaciones de su- ma y resta, lo que resulta notablemente peor. La secci6n siguiente intenta mejorar esta situacién, ‘80_PRINCIPIOS DE ARQUITECTURA DE COMPUTADORAS 010101 py OO 1110 (ay x 0+ 0 o-1 0 1 locate Desplazamiento IORPHO” | Desptazamicnto 110 G2tx2o 09:0 X16 11 0 (29449. Producto Figura 3.18 # Producto de enteros con signo mediante el algoritmo de Booth, OO 1119 (1p 0 1 0 1 0 1 Q@1q Mokiplicador X41 <1 41 <1 +1 <1 Recodificacién det moltiplicador {t tA Arena 89 Booth ‘Suma CEPT ETT £0010 (Max 90 CO0KHOL1T 100 Caxrg PET a1 1001000 Cldxdhy 900008110000 (4x8 P11 100100000 (14x16 000111000000 (14x3% 9 ° ° ° ° 2941 Producto iciencia en la aplicacién del algoritma de Booth. Ei algoritmo de Booth modificado Una solucién a este problema consiste en agrupar los bits del multiplicador codificado en pares de bits, lo que lleva a la codificacién por pares de hits, dando lugar a lo que se ¢o- noce como el algoritmo de Booth modificado. El agrupamiento de pares de bits de de- recha a izquierda produce tres pares “+1, -1”, tal como se observa en Ia figura 3.20. De- bido a que el término +1 esté a la izquierda del término -1, tiene un peso que es el doble del peso de la posicién correspondiente al -1. Por consiguiente, puede pensarse en el par como si tuviese un valor conjunto de +2— 1 = +1. De forma similar, el par -1, +1 es equivalente a-2+ 1 =-1, Los pares +1, #1 y-1,-1 no pueden producirse. Se pueden generar un total de siete pares de bits diferentes, los que se muestran en Ia figura 3.21. En cada caso, se realiza el producto del multiplicande por el valor del par de bits codificado y el resultado obtenido se suma al producto parcial. En una implementacién del sistema de codificacién por pares de bits, se resuelven los dos procedimientos de codificacién en un solo puso, mediante la observacién simulténea de tes bits del multiplicador, segdn se muestra en la tabla de bits correspondiente, OO 1 1 tO Qi Mulipticando 01.0.1 4 1 (14g Mubiplicador X SL -1 41-1 41-1 Revodificacin dei multiplicador segin Booth oo +1__+1__#1__ Multiplicador codificado por pares de bits 110 (4xDy9 000 (AxAhg 09 0 (4x16 000100 1001 1 0 (294) 9 Produce Figura 3.20 ° Producto que utiliza la codificacion por pares de bits en el mult okiplicadores Par de bits Par de bits hit G+1.i) recoditicado() (rr i= 1) rq o 0 0000 141 o + 001 0-1 no +H 0 ou +41 +A 010 1 0 100 “lol 101 otal — Figura 3.21 + Cocificacin de pares de bits. El proceso de codificar los bits del multiplicador de a pares garantiza que en el peor ca- 80 se realicen solo w/2 sumas (0 restas) si el multiplicador esté formado por w bits. Multiplicadores matriciales El metodo serie que fuera utilizado para multiplicar dos enteros no signados en la seccién 3.2.1 requiere muy poca cantidad de circuitos, pero el tiempo necesario para realizar el pro- ducto de dos niimeros de w bits crece proporcionalmente con w*, Se puede acelerar el pro- ceso de multiplicacién de modo que se complete en solo 2 pasos por medio de la imple- mentacién del proceso manual de la figura 3.10, en paralelo. La idea general es 1a de formar productos de un bit entre cada bit del multiplicando y cada bit del multiplicador, y sumar luego cada fila de elementos del producto parcial, desde arriba hacia abajo en forma sist6lica (fila por fila). La estructura de un muttiplicador matricial sist6lico se ilustra en la figura 3.22. En Ja parte inferior de la figura se muestra un elemento para el céleulo de un producto par- ‘82_PRINCUPIOS UE ARQUITECTURA DE COMPUTADORAS cial (PP). A través de la compuerta Y se realiza el producto de un bit del multiplicando (nm) por un bit del multipticador (q), Jo que genera un producto parcial en la posicién (i) de la matriz, Este producto parcial se suma con el producto parcial obtenido desde la eta- pa previa (b,) y con cualquier arrastre que se hubiese generado en dicha etapa (a). El re- sultado tiene 2w bits y se lo obtiene en la parte inferior de la matriz (los w bits mas signi- ficativos) y a la derecha de la misma (los w bits menos significativos). rr re | itt fal Powe ty | PPgap— Ay | Pup do | PPgg4——— 4g — fam Pre 1 | PP] sopmcndeays teri] FA Paw ‘Semador Somat ‘ Proc Asrasre defalida ead Jan oh Figura 3.22 Multipticador paraleto de matriz segmentada. 3.5.3 Division de alto rendimiento La metodologia de division de mimeros enteros sin signo desarrollada en la secciGn 3.3.2 puede extenderse para permitir la generacién de un resultado fraccionario cuando se cal- cula a/b, La idea general es la de escalar a y b para que parezcan enteres, realizar el pro~ cariruuo 3 « armuérica 83 ceso de division y, luego, volver a escalar el cociente para que se corresponda con el re- sultado correcto de la divisién de a por 8. Figura 3.23 « teracién de Newton para encontrar el cera {adaptado de D, Goldberg) Otro método para realizar la divisi6n utiliza una tabla de busquedas y un mecanismo de ite- rucién, Uno de los métodos iteratives usados para encontrar las rafces de un polinomio se co- noce como método de iteracién de Newton, y se ilustra en la figura 3.23. El objetivo del mé- todo es encontrar el punto en que la funcién f(x) cruza el eje x a través de una primera aproximacién x, y luego refinar dicha aproaimacién utilizando el error entre f(x) y cero. La tangente en f(x,) puede representarse por la ecuacién yf) La recta tangente cruza el eje x en fe) fe) “aay Me E] proceso se repite mientras /lx,) se acerca a cero. La cantidad de bits de precisi6n se duplica en cada iteracién (véase D. Gotdberg); por ende, si se requiere una precisién de 32 bits a partir de un dnico bit de precisién ini- cial, deben realizarse cinco iteraciones para Negar al resultado deseado, El problema ahora es c6mo convertir la operaci6n de divisi6n en una operaciGn que permita encon- rar un cero para flr). Considérese la funcién IZ - b, que tiene un cero en 1/5, Si se inicia con b, se puede calcular 1/2 aplicando repetidamente el método de Newton. Dado que f(x) =-1/2, se ob- tiene Vx, = 444-106 =x, (2-4 b) oUt ‘84 _PRINCIPIOS DE ARQUITECTURA DE COMPUTADORAS Por consiguiente, solo se requiere la realizacién de productos y restas para poder resol- ver la divisin. Més atin, si la primera aproximaci6n para determinar x, es lo suficiente- mente buena, puede ocurrir que solo hagan falta unas pocas iteraciones. B=primeros Valordecimal Enirada correspondiente Sbitsdeb —realde /B ena tabla de basquedas 0,100 2 10 0,101 19/5 a ont 11a oO onl Ma a Figura 3.24 « Tabla de biisqueda para el cétculo de x. Antes de utilizar este método en un ejemplo, se hace necesario considerar cudl ser la for- ma de intentar ia aproximacién inicial. Si se trabaja con fracciones normalizadas, es rela- tivamente sencillo utilizar una tabla de biisqueda para los primeros dfgitos. Considérese el caso de requerir el céleulo de 1/0,101 101 utilizando una mantisa normalizada representa da en 16 bits, sin la caracteristica del primer uno implicito, Los primeros tres bits de cualquier mantisa binaria pueden adoptar cualquiera de los siguientes valores: 0,100, 0,101, 0,110 0 0,111. Estas fraeciones corresponden, respectivamente, a los valores deci- males 1/2, 5/8, 3/4 y 7/8. Las inversas de estos nmeros son, respectivamente, 2, 8/5, 4/3 y 8/7. Los correspondientes valores binarios pueden almacenarse en una tabla de biisque- da y luego puede recuperarse x, sobre la base de los tres primeros digitos de b. El primer I de la mantisa no contribuye a la precisién, por lo que los tres primeros bits de la misma solo aportan 2 bits de precisi6n. Por lo tanto, la tabla de biisqueda solo re- quiere dos bits para cada entrada, tal como se indica en Ia figura 3.24. Considérese ahora la divisién de 1/0,1011011 mediante esta misma representacién de punto flotante. Se comienza encontrando x,, para lo cual se wtiliza la tabla de ta figura 3.24. Los primeros tres bits de la fraccién b son 101, lo que corresponde a x, = O1. Se puede calcular x, =, (2 — x4) de donde se obtiene, en una operacién sin signo binaria, 01(10 - (01)(0,101 1011)) = 1,0100101. Los dos bits de precisién se han convertido en cuatro. Para este ejemplo, se busca retener la mayor precisién intermedia que permita el cdlculo. En general, si se requiere un resultado de p bits, hace falta retener a lo sumo 2p bits de precisi6n intermedia. A} iterar nuevamente, se obtendrén ocho bits de precisién: ici 4] =x, 2—¥,b)= 1,0100 101 (10 - (1,0100 101,101 011) 1,0110.0101 1001 0010 11101 terando nuevamente, se obtienen los 16 bits de precisién pretendidos: capiruo 3 « aarmuénica 85 y=4,2-4))= =(1,0110 0101 1001 0040 1110)(1 - (1.0110 0101 1001 9010 1110)(1,1011 0119) = 1,0110 1000 0001 001 = (1,40652466),. El valor exacto es (1,40659341),9, pero la precisién obtenida es la mAxima que puede lo- grarse con una representacién de 16 bits, 3.5.4 Calculo residual Las operaciones de suma, resta y producto pueden realizarse en un tinico paso, sin nece- sidad de arrastres, utilizando el Namado edleuto de residuos. El sistema de numeracién residual se basa en un conjunto de ndimeros enteros relativamente primos entre si, Ilama- dos médulos. El residuo de un entero con respecto de un médulo particular es el menor resto entero positivo resultante de la divisién del entero dado por el médulo. Los nime- ros 5,7, 9-y 4 forman un conjunto de médulos posibles. Con estos médulos pueden re- presentarse en forma tinica la cantidad de 5 x 7 x 9 x 4 = 1260 emteros. La figura 3.25 muestra una tabla en la que se tiene la representaci6n de los primeros veinte enteros de- males utilizando los médulos 5, 7.9 y 4. La suma y el producto desasrollados en el sistema numérico de residuos da por resul tado ntimeros de residuos vélidos, suponiendo que el tamafio del espacio numérico elegi- do sea lo suficientemente grande como para contener el resultado. La resta requiere que cada uno de los digitos residuales del sustraendo sea complementado con respecto a su médulo antes de realizar fa suma, La figura 3.26 ilustra ejemplos de suma y producto que utilizan a los ntimeras 5, 7, 9 y 4 como médulos. La suma se realiza en paralelo en cada columna, sin propagacién de arrastre. El producto también se realiza en paralelo colum- ‘na por columna, en forma independiente de las dems columnas. Decimal | Residue | Decimal | Residuo 5794 5794 0 000 10 0312) ' ML ub 123 2 2222 2 2530 3 3333 a 36a 4 4200, 4 4082 5 0551 15 0163 6 1662 16 1270 7 2073 0 2381 8 3180 8 3402 9 4201 9 4513, Figura 3.25 » Representacién de los vainte primeros enteras decimales en ef sistema de residuos para los ‘mAdulos propuestos. ‘86_PANUCIPIOS OE AROUTECTURA DE COMPUTADORAS 29427 = 56 Decimal | Residuo Residuo 5798 5794 29 4121 10 0312, a 2603 7 2381 56 1020 170 0282 Figura 3.26 Ejemplos de suma y producto usando el sistema de residuos. Si bien la aritmética de residuos puede ser muy wipida, trae aparejada una serie de desventa- jas. La divisién y la detecci6n de signo suelen ser complejas, asf como también la represen- tacién de fracciones. Las conversiones entre el sistema numérico de residuos y los sistemas numéricos posicionales conllevan cierta dificultad, y a menudo requieren la utilizacién de ‘otros métodos como el Teorema chino de los restos. Ei problema de conversién es impor- tante debido a que el sistema numérico de residuos no es demasiado ttl si no se lo puede con- vertir en un formato posicional para realizar comparuciones de magnitudes, No obstante, pa- ra aqueltas aplicaciones enteras en las que tos tiempos requeridos por las operaciones de uma, resta y producto superan por mucho al tiempo utilizado para realizar divisiones, con- versiones, etc.,l sistema de residuos puede ser de aplicacién prictica, Ejemplo de este caso es el de la multiplicacién matriz-vector, ampliamente usada en el procesamiento de seftales. Ejemplo. Sumador de alto rendimiento para palabras largas La utilizacién de sumadores con arrastre anticipado suele ser préctica para palabras de cuatro bits, no siendo tan duil su aplicacién en palabras de 16 bits debido a las limitacio- nes eléctricas de entrada y salida de lis compuertas I6gicas que los conforman. La suma de dos ntimeros de 16 bits puede subdividirse en cuatro grupos de cuatro bits cada uno, los que se suman, en cada grupo, con sumadores con arrastre anticipado. La suma entre los distintos grupos de cuatro bits también se realiza con sumadores con arrastre anticipado. Esta forma de organizar la operaci6n sucle denominarse sumador con arrastre anticipa- do entre grupos (GCLA, group carry lookahead adder). En este ejemplo se compararin, en términos de retardos y cargas eléctricas, un sumador de 16 bits con arrasire anticipado (CLA) y otro que utiliza la técnica de arrastre anticipado entre grupos (GCLA). La figura 3.27 muestra un sumador de 16 bits con arrastre anticipado entre grupos, compuesto por cuatro sumadores de cuatro bits, y alguna Iégica adicional que pueda ge- nerar los arrastres entre los distintos sumadores de cuatro bits. Cada grupo se comporta como un sumador convencional, excepto por el hecho de que €1 arrastre que ingresa af bit menos significativo de cada grupo debe ser tratado como una variable en lugar de ser cero, origindndose sefiales de generacién geupal (GG) y propa- gaci6n grupal (GP). Se genera una sefial GG cuando se produce un arrastre en alguna par- te dentro de un grupo y si todas las sefiales de propagacién mis significativas son ciertas. capirwo 3+ annminca 87 Esto significa que la sefial de arrastre ingresada a un grupo se propagard a todo lo largo del mismo, Las ecuaciones correspondientes a las seftales GG y GP menos significativas de la figura 3.27 son las que siguen: GG.= G, + PG, + PPG, + P,P,P\G GP,= PPP Gy amas =a) ay~ay aq a3 bia bas dam by by - by t! {! 4 aha % % CLAY Chay CLAy Pye) Ie mass $6751 sao 57 0-53 op, |G. ar, |e. ari] |ac, Jaro] |ac + Logica de arrastreanticipedo entre grupos (GCLA) “6 Figura 3.27 » Sumador de 16 bits con arrastre anticipado entre grupos. La determinacién de las seftales GG y GP restantes se realiza en forma similar. El arrastre que ingresa en cada grupo, excepto para el caso del arrastre inicial, se de- termina desde las sefiales GG y GP. Por ejemplo, ¢, es cierta cuando GG, es cierta 0 cuando GP, y ¢q son ambas ciertas. La ecuaci6n correspondiente es: C42 GGy+ GP, cy Los arrastres de orden superior que salen desde cada grupo se calculan en forma similar: G, + GP,c,= GG, + GP,GG, + GP xq = GG, + GP,¢,= GG, + GP;GG, + GP,GP GG, + GP;GP,GP 64 €¢= GG, + GP, = GG, + GP,GG, + GP,GP,GG,+ GP,GP,GP GG, + GP,GP,GP,GP 6, En términos de retardos de compuertas, un sumador con arrastre anticipado de 16 bits tie- ne como carnino mas largo para sus seffales Idgicas el equivalente a cinco niveles de com- puertas, requerido para generar el bit mds significative de la suma, tal como se planteara (88 _PRINCIPIOS DE ARQUITEGTURA DE COMPUTADORAS en Ia seccién 3.5.1. Cada uno de los sumadores individuales en el sumador grupal tiene también, al menos, cinco niveles de compuertas en su trayecto mas largo. Las sefales GG y GP se generan con tres niveles de compuertas, y las seffales de arrastre que salen de ca- da uno de los grupos también se generan en dos niveles de compuertas, con lo que s¢ ob- tiene un total de cinco niveles de compuertas como retardo para la generaci6n del arrastre que sale de cada uno de los grupos. En la posicién més significativa (s,,), se requieren cin- co niveles para generar ¢,, y otras cinco compuertas para generar s,., dando como resulta- do que ta peor solucién presenta dicz. niveles de retardo a to largo del sumador grupal. Con respecto a las entradas y salidas, ta cantidad maxima de entradas en cualg compuerta de un sumador de cuatro bits con arrasire anticipado es cuatro, segtin puede verse en la figura 3.17. En general, la maxima cantidad de entradas en una compuerta de un sumador con arrastre anticipado de 1 bits es n. Asi. la méxima cantidad de entradas de cualquier compuerta en un sumador de 16 bits con arrastre anticipado es de 16, Como comparacién, la maxima cantidad de entradas en un sumador grupal de 16 bits es solo de 5, en la generaci6n de c,,, Las cantidades de salidas son las mismas que las de entradas. En resumen, un sumador de arrastre anticipado de 16 bits tiene solo la mitad de la can- tidad de niveles Iégicos que el sumador grupal de [6 bits (5 niveles de compuertas con- tra 10 niveles en el segundo caso). La mayor cantidad de entradas de un sumador con arrasire anticipado de 16 bits es de 16, lo que es mds de tres veces mayor que la caracte- ristica similar en un sumador grupal (16 contra S). Las caracterfsticas de salida son las mismas que las de entrada en cada caso. « 7 3.6 Estudio de un caso: calcutadora que utiliza ef sistema decimal codificado en binario E] cdlculo aritmético en méquinas calculadoras se resuelve tradicionalmente en el siste- ma decimal, en lugar de hacerlo en el sistema binario. Las calculadoras deben ser de ta- mafio reducido y econémicas, y por esa razén los ntimeros decimales se representan en BCD (decimal codificado en binario, véase et capitulo 2), utilizando cuatro bits por digi- to, en lugar de usar el sistema binario de numeracién, que demanda un proceso de con- versién entre sistemas con altas necesidades de recursos. Para realizar las operaciones podré pensarse en una unidad aritmético-légica pequefia, de 4 bits, que realice los célcu- los en serie, operando sobre los digitos codificades BCD, uno tras otro. 3.6.1 La calculadora HP9100A Lacalculadora HP9100A, que apareci6 y se hizo popular sobre el final de la década de 1960, realizaba las funciones aritméticas bisicas: suma, resta, producto y cociente, asf como radi caci6n, ex, In-x, log x, funciones trigonométricas y otras, utilizando en todos los casos aritené- tica decimal. La calculadora HP9100A es, en realidad, una calculadora de escritorio (véase capiTu.o 3» armérica_89 1a figura 3.28). considerada pequeiia para lo que hacia con la tecnologia de aquellos dias. En el visor de la HP9100 se muestran diez dfgitos significativos, pero todos los edlculos se rea- Tizaban con 12 digitos significativos, donde los dos tltimos digitos (digitos de guarda) eran uitilizados para administrar los ervores de redondeo y truncado. Si bien la HP9100A puede pa- recer hoy una reliquia, los métados de operacién aritmética siguen siendo relevantes. Calculadora de escrtorio de la serie HPB100A, Fuente: Museo de caleuladoras HP, httpefvrww hpmuseum org. Las dos secciones siguientes describen téenicas genéricas para la realizacién de operacio- nes de suma y resta entre nimeros codificados en BCD, tanto en punto fijo como en pun- to flotante. Las demés operaciones descriptas en las secciones restantes se realizan en for~ ma similar, haciendo uso de las operaciones de suma y resta. 3.6.2 Suma y resta de némeros codificados en BCD Considérese ta suma de (+255)jo y (+63),o, Codificados en BCD, de acuerdo con lo ilus- trado en la figura 3.29, Cada digito decimal ocupa cuatro bits, y la suma se realiza digito por digito (no bit por bit), de derecha a izquierda, tal como se procederfa cuando se rea- lizan operaciones decimales a mano. El resultado (+318),9, Se obtiene en formato BCD, segan se observa en la figura. 1 0 9 <— Anrastres 0000 0010 9101 0101 2559 + 0000 9000 0110 0011 630 0000 9011 9001 1000 3180 eos Orn Bo Wa Bro Figura 3.29 e Ejempio de summa que uliliza el sistema decimal codificado en binario (BCD) (90_PRINGIPIOS DE ARQUITECTURA DE COMPUTADORAS La resta BCD se resuelve en forma similar a la forma en que se Ia ejecuta en la represen- tacién binaria de complemento a dos (utilizando el complemento del sustraendo), con la tinica diferencia de que se debe usar el complemento a diez en lugar del complemento a dos. Considérese la resta entre (255)jo ¥ (63),q, = (192),q, Esta operacién se puede con- vertir en ia suma equivalente (255 + (-63) = 192),9, Se comienza calculando el comple- mento a 9 de 63: 9999 — 0063 = 9936 al cual se le suma | para obtener el complemento a 10 del mismo valor: 9936 + 1 = 9937 A continuacién se realiza la suma, tal como se ilustra en la figura 3.30. Nétese que al rea- lizar la suma, del mismo modo que en el caso del complemento a 2, se descarta el bit mas significativo. I 1 0 t 0 <— Arrastees 0000 0010 0101 0101 4255)9 + 1001 1001 0011 0111 COD 1 0000 000L 1001 0010 (+1929 Descanar arrastre Figura 3.30 Suma BCD en aoiacién de complemento a des. A diferencia de la representacién en complement a dos, no se puede determinar el sig- no del resultado simplemente mirando el bit més significative. En el complemento a diez, el mimero es positivo si el digito més significativo esta en el rango entre 0 y 4, incluidos los extremos, y es negativo en caso contrario. (Las representaciones BCD del 4 y el 5 son, respectivamente, 0100 y 0101; ambas tienen el bit més significativo en cero y, sin embar- 0, una representa un ntimero positivo y la otra representa un ntimero negativo.) Si se uti liza una representaci6n de exceso 3 para cada digito, entonces sf se podré considerar al bit més significative como bit de signo. La figura 3.31 representa ambas codificaciones, Debe notarse que seis de las diez combinaciones de bits no pueden producirse, por to que se las define como combinaciones redundantes* (don 1 cares), indicadas con “d” en di cha figura, * WN. de T: La lerminologia inglesa, que se refiere a “estados qua no interasan*, suete tradi ‘mas diferentes, tales coma "combinaciones indeterminadas”, “redundantes”, capinno 3 + anrwénica_ 91 ‘Combinacién | Valor BCD Representacién| BCD saz exceso 3 oo00 o 4 coor 1 4 ooo 2 en oot 3 a) or) 4 1 o1ot 5 2 mame oro 6 3 oid 1 a 1000 ¥ 3 loot ° 18) Nimeros 1010 4 al negativos 1013 ‘ 8 1100 a 9! 1101 4 ao | 1110 4 4 rida a 4 Figura 2.31 © Codificacidn de digitos BCD en oddigo exceso 3. Considérese ahora el disefio de un sumador completo BCD. Este sumador deberd sumar dos digitos BCD y un arrastre de entrada, debiendo producir como resultado un digito BCD y un arrastre de salida, todo codificado en notacién exceso 3. La figura 3.32 mues- tea un disefio que utiliza sumadores completos binarios de complemento a dos. Los dos digitos codificados en exceso 3 se suman en los cuatro sumadores de un bit del bloque su- perior de la figura, Dado que cada digito esta expresado en exceso 3, ef resultado termi- na expresado en exceso 6. Para volver a llevar el resultado a la representacién en exceso 3, se requiere restar 3 al resultado, Como alternativa, se puede sumar 13 al resultado, da- do que 16 -3= 16 + 13 si se trabaja en cuatro bits, y se debe descartar el bit de arrasire ‘que se genera luego del bit mas significativo, El sumador de la figura 3.32 utiliza esta ul- {ima téenica, porlo que adiciona 13,)= 1101, al resultado de Ia primera suma. Nétese que esto funciona solo si no hay arrastre en la primera operacién. Si se produce un arrastre, se requicre restarle 10 al resultado (0, lo que es lo mismo, sumarle 6), ademts de la resta de 3 (0 suma de 13) necesaria para recuperar la representaci6n en exceso 3 y generar el arrastre final. El criterio utilizado para este caso es el de sumar 3,, = 0011,, lo que produ- ce el mismo efecto que sumar (6 + 13) % 16 = 3, de acuerdo con lo que se puede ver en Ja figura 3.32.1 Si se requiere realizar una resta en BCD, se puede crear un circuito restador comple- to en complemento a diez usando sumadores completos decimales, tal como fue plantea- 1. El operador %, ullizado en el fenguaje de programacién C, devuelve el resto de la divisién entre dos ope- randos. 92. PrmnciPing OF ARQUTECTURA DE COMPUTABORAS do en el caso del restador en complemento a dos descripto en ta seceién 3.2.2. Como al- ternativa, se puede generar el complemento a diez del sustraendo y aplicar luego los mé- todos comunes de La suma BCD. La figura 3.33 ilustra la operacin (21 - 34 = -13),) usando el segundo método mencionado para la resta de niimeros de cuatro digitos. El complemento a diez de 34 se suma con el minuendo 21, dando por resultado e! valor 9987 en complemento a 10, lo que equivale a (-13) en magnitud y signo. by as bya, bay by ag Wey Wen de ¥ { ¥ yy¥ im [sumader] | [sumadoe] } [Suiator] | [Soraer completa] | completo] | lcompero| | feompen ac J y Y | ily y¥ ¥ ¥ J svmador] | [sumadoe] | [semadon| | [sum Jcompieo| | feorpteto] | Jcompiery | compere 4 % 4 Figura 3.32 « Un sumadox completo BCD. 021 oo2t 4.9966 = 0034 9987 = 0013 Complementoa diez Magninudy signo Figura 3.33 » El célculo de (21 - 34 = -13) en complemento a dos y en magnitud y signo. 3.6.3 Suma y resta en BCD punto flotante Considérese una representacién decimal de punto flotante con un exponente de dos digi- tos representado en magnitud y signo, y una mantisa signada de ocho digitos. En una cal- culadora, la correspondiente entrada de datos podria verse como -0,37100000 x 10“ representada en su forma normalizada. {Cémo se almacena el mimero en realidad? Un usuario de calculadora ve magnitud y Signo tanto para el exponente como para la mantisa, aunque internamente pueda usar- cariryin 3 + animmenica 93 se una representacién de complemento a diez tanto para el exponente como para la manti- sa, Para el caso anterior, la representaci6n del exponente en notacién de complemento a diez seria 88, en tanto que la mantisa se represemtarfa como 62900000. Si se utiliza una re~ presentacién binaria en exceso 3 se obtendrfa 1011 1011 como valor para el exponente, y ‘una mantisa representada como 1001 0101 1100 0011 0011 011 0011 0011. Nétese que, dado que el bit mas significativo debe considerarse como signo, el rango del exponente es [+50 .. -49), en tanto que el de Ia mantisa es [-0,50000000 .. + 0,49999999] Si se trata de representar ahora el ndimero + 0,9 en base 10, vuelve a aparecer un in- conveniente debido a que el bit més significativo de la mantisa se usa como bit de signo. Esto significa que no puede utilizarse 1100 como digito més significativo de la mantisa, dado que, si bien corresponde a la representacién exceso 3 del mimero 9, hace que la ‘mantisa aparezca como si fuese negativa, Existe una solucién mejor. Simplemente, es ‘cuesti6n de usar Ia notacién de complemento a 10 para la aritmética entera, tal como en el caso de los exponentes, y usar magnitud y signo para las mantisas. El resumen hasta el momento cs el siguiente: se utiliza una representacién de comple- mento a diez para et exponente debido a que se trata de un entero, y se utiliza una repre- sentacién decimal de magnitud y signo para la mantisa. Se mantiene un bit de signo se- parado para la mantisa, de modo que cada digito pueda adoptar cualquiera de los diez valores que van de 0 a9 (excepto para el primer digito, que no puede ser cero) y asf po- ‘dré representarse el +0,9. También deberfan representarse los exponentes en exceso 50 para que las comparaciones se resuelvan més fécilmente. El ejemplo anterior, si se lo mi- 1a internamente, adopta la siguiente forma, en representacién binaria de exceso 3 con un exponente de dos digitos representado en exceso 50: Bit de signo: 1 Exponente: O10 1011 Mantisa: 0110 1010 0100 0011 0011 011 9011 OD11 COI Para sumar dos ntimeros representados en este formato, se debe proceder a recorrer los mismos pasos que se Ilevaran a cabo en las representaciones binarias de punto flotante planteadas anteriormente. Se comienza la operacién ajustando el exponente y la manti- sa del menor de los operandos hasta que ambos exponentes coincidan. Si ta diferencia entre los exponentes es tan grande como para que la mantisa del menor de los peran- dos se haya desplazado totalmente hacia la derecha, dicho operando debe tratarse como si valiese 0, Luego de ajustar la mantisa del operando menor, se convierten uno 0 ambos de su formato de magnitud y signo al formate de comptemento a diez, se trate de una su- mao uns resta y de acuerdo con el signo de los respectivos operandos, Nétese que no habré inconvenientes de funcionamiento dado que las mantisas estin siendo tratadas co- mo enteros. (94 _PruNciPiog OE ARQUITECTURA DE COMPUTADORAS Cos calcutas aritméticos dentro de una computadora pueden efectuarse tal como se realizan en torma manual las operaciones decimales, siempre y cuando se tome en cuenta el sistema de ‘fumeracidn en que se esté operando. Para la representacidn de nimeros enteros se usan, ha- bituatmente, tas de complemento a dos o a diez, en tanta que los valores fraccionarins se repre- sentan en magnitud y signo debido a la dificuitad de manejar fraccianes positivas y negativas de ‘modo unitorme. La eficiencia del célcuta puede mejorar si se utllizan tas técnicas de eodificacién de Booth y del apareamiento de bit para saltear cadenas de unos. Una alternativa para mejorar el rendi- miento se basa en el uso de los métodos que permiten sumar sin arrastres, como es el caso de ta aritmética de residuos. Si bien ta suma sin restas puede ser et entoque mas rapido en lo que hace a las complejidades relacionadas con los tiempos y los circuitos, en la practica se utilizan los codigos pesados mas comunes con ef objeto de simpliticar las comparaciones y la represen- taci6n de tas mantisas. Para lectura posterior D. Goldberg es una fuente concisa pero profunda para diversos aspectos de [a aritmética de compu- tadoras. V. C, Hamacher y otros provae el tratamiento clésico de la aritmética de enteros. M. J. Flynn ofrece un tratamiento acerca de la deteccién de la division por cero. H. L. Gamer realiza una descrip- clon completa del sistema de numeracién residual en tanto que I. Koren brinda un tratamiento tuto- ‘al del mismo tema. A. Huang y J. W. Goodman describen él proceso de construccién de un proce- sador residual basado en memoria. Koren también ofrece detalles adicionales acerca de la utilizacién de unidades con arrastre anticipado en forma ancadenada, D. S. Cochran es una buena fuente para la programacién de la calculadora HP9100A. Cochran, D. S.. “Intemal Programming of the 9100 Calculator”, en: Hewiett Packard Journal, sep- iembre de 1968: véase también https/www.hpmuseum.org/iournals/9100:prg.htm, Flynn, M. J., “On Division by Functional Iteration”, en: JEEE Trans. Comp., C.19, n* 8, agosto de 1970, p.p. 702-706. Gamer, H. L., “The Residue Number System”, en: JRE Transactions on Electronic Computers, vol. 8, junio de 1959, p.p. 140-147, Goldberg, 0., “Computer Arithmetic”, en: D. A. Patterson y J. L. Hennessy, Computer Architecture: A Quantitative Approach, 2 ed., Morgan Kaufmann, 1998, Hamacher, V.C., 2. G. Vranesic y 5. G. Zaky, Gomputer Organization, 3¢ ed., McGraw-Hill, 1990, Huang A. y J. W. Goodman, “Number Theoretic Processors, Optical and Electronic”, en: SPIE Optical Processing Systems, vol. 185, 1979, p.p. 28-35. Koren |., Computer Arithmetic Algorithms, Prentice Hall, 1993. gapirwwo 3 + anmaénca 95 Prablemas 2.1 Indicar el resuttado que se obtiane al sumar los siguientes pares de nimeros de cinco bits, re- presentados en complemento a dos con un bil de signo y cuatro de valor numérico, indicando en cada caso la ocurrencia 0 no de desborde. 10110 + 1011 1111011101 = 1111140111 3.2 Una forma de determinar fa ocurrencia de un desborde en la suma de dos nimeros consiste en detectar que el resultado de la suma de dos ntimeras positivos es negativo 0 que el resul- tado de sumar dos ndmeros negativos es positivo. Las reglas para la resta son diferentes: exis- te desborde cuando al restar un nimero negative de uno positivo se obtlene un resultado ne- ‘gativo, 0 si ol resuttado de restar un niimero positive de otro negativo da un resultado positivo, Calcular la resta de los numeros que se indican y determinar si se ha producido desborde 0 no. La resta debe calcularse sin considerar el complemento a dos del sustraendo, sino restando bit por bit y analizando los arrastres producidos en cada posicién. 0101 -0110= 3.3 Sumar los dos numeros binarios 101,101 + 0111,011 considerando que los mismos estén representados a. en complemerto a dos. 'b. en complemento a uno. Para cada caso, indicar si hay desborde. 3.4 Mostrar el proceso a realizar para abtener el producto sin signo de 1010 x 0101, utilizando el asquema de la figura 3.12, 3.8 Mostrar el proceso a realizar para obtener el producto no signado de 11,1 (muitiplicando) por 01,1 (multipticador) mediante el tratamiento de los operandos como enteros. El resultado a ob- tener deberfa ser 101,01 3.6 Mostrar el proceso a realizar para obtener el cociente sin signo de 1010 = 0101, utilizando et esquema de la figura 3.15. ‘3.7 Mostrar el proceso a realizar para obtener ¢l cociente sin signo de 1010 + 0100, continuando ta divisi6n para obtener el resultado con parte fraccionaria. El resultado a obtener deberia ser 10.15. 3.8 La ecuacién utilizada en la secci6n 3.9.1 para obtener el valor de cs en un sumador con arras~ tre anticipado supone que en el proceso de suma co vale 0. Si se realiza una resta utilizando el ‘96_PRINCIPIOS DE ARGUITECTURA DE CoMPUTADORES circuito sumador-restador de la figura 3.6, cp vale 1. Rescribir la ecuaci6n que define cy cuan- do co= 1. 3.9 El sumador de 16 bit de la figura utiliza arrastre serie entre cuatro sumadores de cuatro bits con arrastre anticipado, on ey 4 Ay dy Probe Pyke bya Dp +44 u ape tps pane Sumador Sumator Sumador ‘con arrastxe con arasire ‘con arrastre anticipado ‘aaticipade ‘amicipado t 4 t 4 ; 4 Suess fyb Sank @. 4Cual es el maximo retardo, medido en cantidad de niveles de compuertas, alo largo del su- mador? ‘0. éCual es el minimo retardo a lo largo del sumador, entre cualquier entrada y cualquier salida? c. gCudl es ef retardo en la salida sy2? 3.10 Utilzar el algoritmo de Booth {sin codificacién de pares) para multiplicar 010011 (multiplican- do) por 011011 (multipticador), ‘3.11 Repetir el producto anterior utilizando caditicacion de pares de bits. 3.12 Calcular el méximo retardo, en niveles de compuertas, que se produce ato largo de un suma- dor de 32 bits con arrastre anticipado. 3.13 ¢Cudl es el maximo ndmero de entradas para cualquier compuerta ldgica en un sumador de 32 bits con arrastre anticipado, si se usa e! esquema planteado en este capitulo? 3.14 En un sumador con seleccién de arrasire (carry select adden) el arrastre se propaga desde tuna etapa del sumiador, en forma similar pero no exactamente igual ala que se utiliza en un su- ‘mador con arrastre anticipado. Como en muchos otros sumadores, la salida de arrastre de una etapa dada puede ser 0.0 1. En un sumador con seleccién de arvastre, para cada etapa del su- ‘mador se realizan dos sumas en paralelo. Una de ellas supone una entrada de arrastre de va- {or 0, y la otra supone un arrastre de entrada cuyo valor es 1. Se realiza iuego (por ejemplo, con ‘un multiplexar), ta seleccién de cual de las dos sumas debe utilizarse. E! esquema hasico se ‘muestra en fa figura siguiente para un sumador de acho bits con selector de arrastre. ‘Suponiendo que cada uno de los sumadores de cuatro bits utiliza internamente la técnica de arrastre anticipado, comparar la cantidad de retardos o niveles de compuertas requeridas pa- rasumar dos ndmeros de ocho bits, st dlchos sumadoras de cuatro bits utilizan el esquema de seleccién de arrastre, contra el vator resultante si el arrastre se trasporta en serie desde un su- mador de cuatra bits al otro. a. Dibujar un diagrama de un circuito sumador de ocho bits que utilice la configuracién de arrastre anticipado y que use como bloques los sumadores de cuatro bits de la figura. ‘. Calcular la cartidad de niveles de compuertas requeridas para cada una de las configuracio- nes planteadas, tanto para el sumador con seleccién de arrastve como para el sumador di- sefiado en la pregunta a. UUiMte IOUT INET dhkbh dhkbh TTT 3.15 El camino con mayor nimero de niveles de compuertas a lo targo del multiplicador matricial de la figura 3.22 se inicia en el elementa PP ubicado arriba a la derecha, recorre la colurnna hasta la fila inferior y, finalmente, cruza hacia la izquierda, £1 maximo numero de niveles de ‘compuertas en un elemento PP as tres. ,Cudntos niveles de compuertas hay en el camino de maximo retardo de un multiplicador matriclal que produce un resultado de p bits? 3.16 Se tienen unidades multiplicadoras que producen productos binarios sin signo de 16 bits a partir de dos entradas sin signo de 8 bits. Se tienen, ademas, sumadores completos de 16 bits que producen ana suma de 16 bits y una salida de arrastre a partir de dos entradas de 16 bits y un atrastre de entrada. Conectar los bloques mencionados de modo tal que el canjunto ob- tenida multiplique 6os mimeros sin signo de 16 bits y entregue un resuttado de 32 bits. 3.17 En una division se desea obtener una precisiOn de 42 bits, usando el método iterativo de New- ton. Sise utiliza una tabla de busquedas que provee 8 bits de precisi6n para el intento inicial, Ecudntas iteraciones posteriores se requieren? 3.18 Sumar os nimeros (641),9 ¥ (259),» en BCD sin signo, utiizando la menor cantidad de digi- tos posibles en el resuttado. 3.49 Sumar (129), y (-178),9 en BGD con signo, usando palabras de cuatro digitos. La arquitectura de programacion Ato largo de este capitulo se encara un tema fundamental en la arquitectura de compu- tadoras: el lenguaje que puede entender el hardware, conocido como lenguaje de méquina. El lenguaje de maquina se analiza habitualmente en funcién del Jlamado len- guaje ensamblador (assembly language) o lenguaje simb6lico, funcionalmente eq) valente al lenguaje de maquina correspondiente excepto por el hecho de que uti nombres aigo mis intuitivos como, Move, Add y Jump", en reemplazo de las palabras binarias que en realidad emplea el lenguaje de maquina. (Para los programadores es mucho mds clara y menos factible de error una construcci6n tal como “Add 10, rl, r2” que O110 1011 1010 1101.) El desarrollo de! capitulo comienza por la descripcién de Ia visin de 1a computado- ra y de sus operaciones desde su arquitectura de programacién (ISA, Instruction Set Architecture). El enfoque desde la arquitectura de programacién de una maquina se co- rresponde con el nivel del Lenguaje ensamblador y del cédigo de maquina descripto en la figura 1.4, Se halla entre el enfoque desde el nivet del lenguaje de alto nivel, en el cual poco 0 nada se hace visible del esquema circuital de la computadora, y el nivel del con trol, em el cual las instrucciones de la maquina se interpretan como acciones de transfe~ rencius entre registros al nivel de las unidades funcionales. Con el objeto de describir la naturaleza de} lenguaje simbélico y la programacién en dicho lenguaje, se utilizard como modelo de arquitectura la de la computadora ARC, simplificaci6n de la arquitectura comercial SPARC, comtin en las computadoras Sun, {Sobre otros modelos de arquitectura adicionales, se puede consultar en The Computer Architecture Companion. Véase hitp:/iwww.pearsonedlatino.com/murdocca.) La utilidad de los distintos tipos de instrucciones se ilustra con ejemplos pricticos de programacién en lenguaje ensamblador, completéndose el tema con un caso de estudio. referido a los cédigos de Java como ejemplo de un lenguaje ensamblador comin, porta- ble, que puede implementarse utitizande los e6digos naturales de otra maquina. za * W.de T: Dado que la mayoria de os lengualas simblions utilizan nombres asociados con ef idioma inglés para representar is instrucciones, se ha optado por elemplicar respelanto ls siglas originales. 2100_bpintipios DE AROUITECTURA DE COMPUTADORAS 4.1. Componentes circuitales de la arquitectura de programacion La arquitectura de programacin de una computadora coloca a quien programa en len- guaje ensamblador ante una visién de la maquina que incluye todos los elementos circui- tales accesibles al programador y las instrucciones que manejan informaci6n dentro del hardware. Esta seccién analiza los componentes de hardware tal como se los ve desde el enfoque del programador de lenguaje de maquina. Comienza con el andlisis del sistema como un conjunto, con Ia unidad de proceso interactuando con Ia memoria principal y realizando operaciones de entrada-salida con el mundo real. 4.1.1 Una revisién del madelo de bus La figura 4.1 intenta una revisién del modelo de computadoras basado en buses, que fue- ra planteado en el capitulo 1. El propésito del bus es el de reducir la cantidad de interco- nexiones entre la CPU y sus subsistemas. En lugar de tener caminos de comunicacién di- ferentes con la memoria y con cada uno de los dispositivos de entrada-salida, la CPU se interconecta con la memoria y con Ios sistemas de entrada y salida a través del bus del sistema. En sistemas mds complejos puede haber buses separados: por un lado, entre la CPU y la memoria, y por otro, entre ta CPU y los dispositivos de entrada-salida. cru aly, ; i Entrada. regisros y Memoria ee | Salida (2/8) de conteol Bus de control Figara 4.1 » El modelo de un sistema de computacién con estructura de bus. No todos los componentes del sistema se conectan al bus de la misma forma. La CPU ge- nera las direcciones que se transfieren sobre el bus de direcciones, mientras que la me- moria recibe esas direcciones a través del bus de direcciones. La memoria nunca genera direcciones, asi como la CPU nunca recibe direcciones, por consiguiente, no hay interco- nexiGn en ese sentido. En un escenario tipico, el usuario escribe un programa en lenguaje de alto nivel, el que se traduce 2 lenguaje ensamblador por medio de un programa compilador. Luego, un programa ensamblador convierte el programa en lenguaje simbdlico a lenguaje de md- capiruaa 4 + LA angurtetruas ve pRotaamacin 101 quina, para su almacenamiento en disco. Como puso previo a su ejecucién, el sistema operativo de la computadora carga el programa en lenguaje de méquina desde el disco a la memoria principal Durante la ejecucién del programa cada instruccién se carga en la CPU desde ta me~ moria, a raz6n de una instruccién por vez, junto con cualquier dato que sea necesario pa- ra ejecutar la instrucci6n. La salida del programa se coloca en un dispositivo, tal como una unidad de disco o una pantalla de video, Todas estas operaciones estin reguladas, por la unidad de control, fa que ser analizada en detalle en et capitulo 6. La comunica- cin entre los tres componentcs (CPU, memoria y entrada-salida) se maneja por medio de buses. Debe quedar claro que las instrucciones se ejecutan dentro de la CPU, a pesar de que las instrucciones y los datos se encuentran almacenados en memoria. Esto signi- fica que las instrucciones y los datos deben cargarse desde la memoria hacia los registros de la CPU, en tanto que los resultados deben devolverse a la memoria para su almacena- micnto desde los registros de la CPU. 4.1.2 Memori La memoria de una computadora consiste en un conjunto de registros numerados (direc- cionados) en forma consecutiva, cada uno de los cuales normaimente almacena un byte de informacién. Un byte es un conjunto (Ilamado habitualmente octeto por quienes tra- bajan en comunicaciones digitales) de ocho bits. Cada registro tiene una direcci6n, ala que se suele designar como locacién de memoria, La denominacidn nibble (también se eseribe como nybble) se refiere a un conjunto de cuatro bits. Normalmente, hay acuerdo acerca de los significados de los términos “bit”, “byte” y “nibble”, pero no ast sobre ef concepio de palabra, el que depende de la arquitectura particular de cada procesador. Los tamafios de palabra tipicos son de 16, 32, 64 y 128 bits, siendo el tamaito de palabra de 32 bits el mas comtin para las computadoras usadas principalmente hoy en dia, mien- tras se observa el crecimiento de la popularidad de las palabras de 64 bits. En este texto, se supone que las palabras tendrén 32 bits a menos que se especifique otra cosa, La figu- 1a 4,2 compara estos formatos de datos. En una maquina con capacidad de direccionamiento al byte, el menor objeto al que puede hacerse referencia en memoria es el byte; no obstante, es habitual que tenga ins- trucciones que pueden leer y escribir palabras de mis de un byte. Las palabras de més de un byte se almacenan como una secuencia de bytes, y se direccionan a partir del byte me- nos significativo de la palabra almacenada. La mayor parte de las computadoras actuales poseen instrucciones que pueden acceder a distintos tamafios de datos ‘Cuando se utilizan palabras de mas de un byte, hay dos alternativas en cuanto a la forma de almacenar sus bytes en memoria: en la primera de ellas, el byte mds significa- tivo se almacena en la direcciGn mAs baja de memoria (big endian) y en la otra, el byte menos significative es el que se almacena en la direccién més baja de memoria (little 102 _pnmveypins pe aRQUITECTURA DE COMPUTADORAS Bit oO Nibble (io) Bye Palabra de 46 bits (media palabra) Palubra de 32 bits Palabra de 64 bits (doble) D101 1000_O1015791, 10110000 11110011 Palabra de 828 bits (cuddruple) — (QUULTOOO OLOTOTOT TOTO LTTTOOLT] a Figura 4.2 6 Tamafios comunes para las formatos de palabra de datos. endian). El término “endian” proviene de discutir si los huevos deben romperse por su extremo mas grande o por el mAs pequefio, to que provocé una guerra entre politicos pendencieros en el afamado cuento de Jonathan Swift, Los viajes de Gulliver. La figura 4,3 ilustra los formatos mencionados para una palabra de 4 bytes. 32 bits. Byte aavmea_Big-Endian | yey 0 siense Little-Endian rey s0 TT TTT TTT aT tof ott tot tt eo 8 woo2 otk La direccién de la palabra es x en ambos formatos Figura 4.3 » Formatos de almacenamiento ig enclany Hite endian La estructura de una memoria consiste en un arregio lineal de las diversas locaciones or- denadas en forma consecutiva, tal como se muestra en la figura 4.3. Cada una de las di- receiones identificadas en la figura con un valor numérico se corresponde con una pala- bra especifica almacenada en la misma, (En este ejemplo, ta palabra se compone de cuatro bytes.) El ndmero que idemtifica en forma univoca cada palabra se define como su direccién. Dado que las direcciones se cuentan en secuencia, a partir de cero, la direc cién més alta corresponde a una unidad menos que el tamaiio de la memoria. La lima direccién de una memoria de 2* bytes es 2° — 1, en tanto que la primera direccién es 0. El modelo de memoria a ser utilizado durante el resto del capitulo es el que se ilustra en la figura 4.4, La memoria tiene un espacio de direcciones de 32 bits, lo que significa que el programador puede acceder a un byte de memoria ubicado en cualquier posicién en el rango de 0.42" — 1, El espacio de direcciones de la arquitectura de este ejemplo es- td dividido en diferentes sectores, los que se utilizan para el sistema operativo, para los elementos de entrada-salida, para los programas del usuario y para la pila de! sistema, La distribuciGn de estos sectores forma e] mapa de memoria que se ilustra en la figura 4.4. El mapa de memoria puede diferir entre una implementacién y otra, y esta es una de las capfruio 4 + LA ARQUITECTURA GE PRogaamaciin 103 causas por las cuales algunos programas compilades para el mismo tipo de procesador pueden no ser compatibles entre sistemas. Entrada Direccin Control de datos Reservado para el sistema opecativo 2048 — |“ Espacio'para& LLL. resp pica foemala | a ee i -———— | Unapresora- 7 Bs Salida iT es, va a Figura 4.4 © Un mapa ce memoria para un ejemplo de arquitectura. (No dibujado en escala.) Las 2!' = 2048 primeras direcciones del mapa de memtoria se reservan para el sistema opera- tivo, El espacio pam el usuario es aquel que se reserva para la carga de los programas ensam- bblados del usuario, y puede crecer, durante la operaci6n, desde la direcci6n 2048 hasta que se encuentre con Ia pila det sistema, La pila del sistema comienza en la direccién 2"' 4 y cre- ce hacia las direcciones inferiores. La zona det espacio de direcciones ubicada entre 2" y 2 =I se reserva para los dispositivos de entrada-selida, En consecuencia, el mapa de memoria ‘no est compuesto enteramente por memoria real, y de hecho pueden existir espacios en los que no haya ni memoria real ni direcciones de dispositivos de entrada-salida. Dado que los dispositivos de entrada-salida se tratan como posiciones de memoria, Ia Jectura y escritura de dichos dispositivos de entrada-salida se puede realizar a través de los mismos comandos de Jectura y eseritura utilizados para la memoria del sistema. En estas eircunstancias, se habla de un sistema de entrada-salida mapeado en memoria, Es importante que quede clara la diferenciacién entre lo que significa una direceién y Jo que significa un dato. En este ejemplo, la palabra binaria que representa una direccién de memoria tiene 32 bits, en tanto que una palabra de datos también tiene 32 bits, a pesar de lo cual no son la misma cosa, Una direccién es un puntero a una posicién de memoria, Ja cual contiene un dato. En este capitulo se supone que la memoria de la computadora est organizada en wn nico espacio de direcciones. La expresién espacio de direcciones se refiere al rango numérico de direcciones de memoria al que puede hacer referencia la unidad de proce- 104 _prnwcipios oe AROUTECTURA DE COMPUTADORAS so. En el capitulo 7 (“Memorias”) se verd que existen otras formas de organizacién de Ja memoria, pero, por el momento, se supondré que la memoria, tal como se Ia ve des- de la CPU, tiene un tinico rango de direcciones. Lo que decide el tamatio de ese range de direcciones es el tamaito de la direccién de memoria que la CPU puede colocar so- bre el bus de ditecciones durante las operaciones de lectura y escritura. Una palabra de direcci6n formada por 1 bits puede especificar una de 2" direcciones. Esta memoria puede plantearse como una memoria con un espacio de direcciones de 2 bits, 0, en for- ma equivalente, como una memoria con un espacio de direcciones de 2" bytes. Por ejemplo, una memoria con un espacio de direcciones de 32 bits tiene una capacidad ma- xima de 2 bytes (4 Gbytes). El rango de las direcciones de memoria va desde 0 hasta 27 — 1,0 lo que es igual, desde 0 hasta 4.294.967.295 si se lo expresa en decimal, 0 bien, expresado en el sistema hexadecimal, mas sencillo de manejar, desde 00000000H hasta FFFFFFFFH. (En la mayorfa de los lenguajes simbdlicos, la H indica un némero hexadecimal.) 4.1.3 La unidad central de proceso {CPU} Una vez familiarizados con los componentes basicos de! bus del sistema y de la memoria, corresponde explorar la estructura intema de la CPU. Como minimo, la estructura de la CPU consiste en una seccién de datos, formada por los registros y la unidad aritmético-l6gica (ALU), y una seceién de control, la que interpreta las instrucciones y realiza las trasferen- cias entre registros, como se observa en fa figura4.5. La seccién correspondiente a los datos se conoce también como trayecto de datos (datapath). La unidad de control es la responsable de la ejecucién de las instrucciones del progra- ma, las que se almacenan en la memoria principal. (En el andlisis que sigue se supondra que la unidad de control ejecuta el cédigo de miquina de a una instruccién por vez, aun cuando en el cupitule 9 se planteard la arquitectura de muchos procesadores modernos que pueden procesar varias instrucciones en forma simultdnea.) Existen dos registros que forman la interfaz entre 1a unidad de control y la unidad de datos, lamados contador de programa! (PC, program counter) y registro de instruccién (IR, instruction register). El contador de programa contiene la direccién de la instruccién en ejecucién. La instruc- ci6n a la que apunta el PC se rescata de memoria y se almacena en el IR, desde donde se la interpreta. Los pasos que lleva a cabo la unidad de control en ta ejecucién de un pro- grama son los que se detallan: 1, Buisqueda en memoria de la préxima instruccién a ser ejecutada. 2. Decodificacién del cédigo de operacin. 3. Buisqueda de operandos en memoria, si los hubiera. 1. En los procesadores Intl, ef contador de programa se conoce como puntero a instructiones (iastruction pointes IP). cariruio 4 + LA ARQUIFECTURA DE PROGRAMACIN 105 4, Ejecucién de la instruccién y almacenamiento de los resultados, 5, Vuelta al paso 1. Este proceso se conoce como ciclo de bitsqueda-ejecucién. Trayecto de datos. — f—_—Bloque de control (Bloque de datos) Sistema Figura 4.5 + La CPU vista on atta civel La unidad de control es la responsable de coordinar las distintas unidades que inter- vienen en la ejecucién de un programa de computadora, Puede pensdrsela como “una computadora dentro de In computadora”, entendiendo que toma decisiones acerca del comportamiento det resto de la méquina. La unidad de control se trata en detalle en el ca- pitulo 6. El trayecto de datos esté constituido por un conjunto o bloque de registros y por la unidad aritmético-légica, tal como se muestra en la figura 4.6, La figura ilustra el cami- no de datos de un modelo de procesador que serd utilizado en el resto del capitulo. El conjunto de registros de ta figura puede verse como una memoria, pequeiia y répi- da, separada de la memoria del sistema, que se utiliza para el almacenamiento tempora- rio durante las operaciones de calculo. Los tamafios tipicos del conjunto de registros van desde algunos pocos a algunos miles de registros. Al igual que ta memoria principal del sistema, cada registro del conjunto recibe una direccién ordenada secuencialmente a par- tir de cero. Estas direcciones de registros son mucho mis chicas que las direcciones de ‘memoria: un conjunto de registros que contenga 32 registros requerirfa una palabra de recciones de solo cinco bits. Las diferencias principales entre el conjunto de registros y Ja memoria de! sistema derivan de que los registros estin contenidos dentro de la CPU; Por consiguiente, funcionan con mayor rapidez. que aquella. Una instruccién que se eje- cuta sobre operandos almacenados en el conjunto de registros puede ejecutarse unas diez veces més rapido que si los operandos estuviesen en memoria, Por esta razén, los pro- _gramas que hacen uso intensivo de los registros de la CPU son més rpidos que los progra- as equivalentes que hacen uso inten: tareas, hiciesen falta més operaciones cuando los operandos se encuentran almacenados en registros que si estuviesen almacenados en memoria. /o de la memoria, aunque, para realizar las mismas 106_pawncrpias De ARQUITECTURA DE COMPUTADORAS Regisuo Regist ‘origen | origen 2 eb (32) Del bus de datos Conjunto oe (Landa de como seleocione as funciones ae los egisutos yy deta ALU ogisiy ce eesti (a Figura 4.6 « Ejemplo de un trayecto de datos. Notese que dentro del trayecto de datos de la figura 4.6 existen varios buses. Tres buses conectan el trayecto de datos con el bus del sistema. Esto permite la trasferencia de los datos entre la memoria principal y el conjunto de registros, Tres buses adicionales conec- tan el conjunto de registros con la unidad aritmético-légica, Estos buses permiten la bis- queda simultinea de dos operandos almacenados en el conjunto de registros, para ser procesados por la ALU, tras lo cual se devuelvé el resultado en el conjunto de registros. La ALU implementa una variedad de operaciones de uno y dos operandos, entre las cua les se incluyen la suma, el producto y las operaciones I6gicas de disyuncién (or), conjun- cién (and) y negacin (not). La unidad de control selecciona las operaciones y los operan- dos a utilizar por aquellos. Los dos operandos se trasfieren desde el bloque de registras a través de dos buses que se conectan con los registros de origen 1 (rs1)y 2 (rs2). La salida de la ALU se coloca en el bus que conduce al registro destino (rd) can el objeto de devolver el resultado af registro correspondiente dentro del conjunto de registros. En la mayoria de los sistemus, estas conexiones tambien incluyen la conexién con el bus del sistema de modo de poder acceder a la memoria y a los dispositivos de entrada-salida, En la figura, estas cone- xiones son las rotuladas como “del bus de datos”, “al bus de datos” y “al bus de direcciones”. El conjunto de instrucciones El conjunto de instruceiones es la coleccién de instrucciones que un procesador puede ejecutar, lo que, en efecto, define al procesndor. Los conjuntos de instrucciones pueden ser completamente diferentes de un procesador a otro. Difieren en los tamafios de las ins- trucciones, el tipo de operaciones que permiten, el tipo de operandos sobre los que pue- den operar y los tipos de resultados que pueden entregar. Esta incompatibilidad en los conjuntos de instrucciones contrasta claramente con la compatibilidad de los lenguajes + ciones determi CAPITULO 4 + LA ARQUITECTURA DE PROGRAMACION 107 de alto nivel, como €, Pascal y Ada. Los programas escritos en estos lenguajes de alto ni- vel pueden ejecutarse casi sin cambios en diferentes procesadores, siempre y cuando sean recompilados para el procesador a utilizar. Una excepcién a esta incompatibilidad entre los lenguajes de maquina se puede ver en Jos programas compilados en e6digo Java, dado que es un lenguaje de maquina para una maquina virtual. Estos se ejecutardn sin cambios en cualquier procesador que esté eje- cutando la maquina virtual de Java. Esta maquina virtual, escrita en el lenguaje simbéili- co del procesador en que se utiliza, intercepta cada uno de los bytes de cédigo Java y to ejecuta como si estuviese funcionando sobre una maquina “real” para Java. El caso de es- tudio del final del capitulo permire ver més detalles del tema. Debido a la incompatibilidad planteada entre los conjuntos de instrucciones, los sistemas de computacién se definen, a menudo, porel tipo de CPU que incluyen. Et conjunto de instruc- cudles programas puede ejecutarel sistema y tiene un impacto importante so- bre el rendimiento. Los programas compilados para una computadora personal IBM (0 com- patible) utilizan el conjunto de instrucciones de una CPU 80x86, donde la “x” se reemplaza por un digito que corresponde a la versién, tal como 80586, procesador normalmente conocido co- mo Pentium. Estos programas no funcion.urin sobre una computadora Apple Macintosh 0 so- bre una IBM RS6000, dado que estas dos méquinas ejecutan el juego de instrucciones del pro- cesador PowerPC de Motorola. Esto no significa que todos los sistemas de computacién que ‘utilizan la misma CPU pueden ejecutar los mismos programas. Un programa PowerPC escri- 10 para IBM RS6000 no funcionard en ka Macintosh sin grandes modificaciones, debido a kas diferencias entre los sistemas operativos y las convenciones de entrada-salida. En secciones posteriores de este capitulo se analizard en detalle un conjunto de ins- trucciones especifico. Software para la generacién de programas en lenguaje de maquina Un compilador es un programa de computadora que transforma programas escritos en un lenguaje de alto nivel, como C, Pascal o Fortran, en lenguaje de maquina. Los compi- adores para un mismo lenguaje de alto nivel generalmente presentan la misma “cara”, definida como la parte que reconoce las sentencias de! lenguaje de alto nivel. No obstan- te, sus estructuras tendrdn diferentes aspectos en lo que hace a su salida hacia el procesa- dor para el que se produce la compilaci6n, Esta salida del compilador es la parte del pro- ‘grama responsable de la generacién de ¢édigo de maquina para un procesador especifico. Por otra parte, un mismo programa C, compilado por distintos compiladores C para la misma méquina, puede generar diferentes compilaciones aun cuando el cédigo fuente sea el mismo, como se verd posteriormente. En el proceso de compilacién de un programa (normalmente conocido como proceso de traduceién), el programa fuente escrito en lenguaje de alto nivel se transforma en Ienguaje simbélico (assembly language), luego de lo cual un programa ensamblador (assembler) traduce este lenguaje simb6lico hacia el cédigo de mAquina del procesador 108 _PrmciPios DE ARQUITECTURA DE COMPUTADORAS de destino, Estas traducciones se producen, respectivamente, en los ilamados momento de la compilacién (compile time) y momento del ensamble (assembly time). El progra- ‘ma objeto resultante puede vincularse con otros programas objeto en el momento del en- lace (link time). El programa objeto, normalmente almacenado en un disco, se carga en Ja memoria principal en el momento de la carga (loud sime) y se ejecuta desde la CPU enel momento de ta ejecuctén (r1n time). Si bien la mayor parte del cédigo se escribe en lenguajes de alto nivel, es posible el uso del lenguaje simbélico para escribir programas que pueden ser criticos en espacio 0 tiempo. Por otra parte, no siempre se consiguen compiladores para algunos procesadores dedicados a aplicaciones especiales, 0 bien, sus compiladores pueden no ser aptos para expresar operaciones especiales. En estos casos también puede surgir la necesidad de la programacién en lenguaje simbélico. Los lenguajes de alto nivel permiten ignorar, durante la codificacién, Ia arquitectura dela computadora en que se va a ejecutar el programa. Al nivel del fenguaje de maquina, no obstante, la arquitectura subyacente se vuelve un elemento de consideracién principal. Un programa escrito en un lenguaje de alto nivel, como C, Pascal o Fortran, puede tener el mismo aspecto y ejecutarse correctamente sobre distintos sistemas luego de la compi- lacién, El cédigo objeto producido por el compilador para cada maquina ser4 totalmente diferente para cada sistema, aunque los sistemas utilicen ef mismo conjunto de instruc- ciones. Tal es el caso de aquellos programas compitados para PowerPC a ser ejecutados en Macintosh contra los que ge ejecutan sobre una RS6000 IBM. Habiendo analizado las caracteristicas de la CPU, la memoria y el bus del sistema, se procederd ahora a analizar en detalle un conjunto de instrucciones a ser utilizado como modeto, llamado ARC. 4.2 ARC, una computadora RISC En el resto del capitulo se analizard un modelo de arquitectura basado en el procesador SPARC (Scalable Processor Architecture) desarrollado por Sun Microsystems a mediados de los aifos ochenta. El procesador SPARC se convintié en una arquitectura popular desde el mismo instante de su introduccién, lo que se justifica en parte debido a su naturaleza abierta: la definicién completa de la arquitectura SPARC se divulga al poco tiempo de su aparicién. En este capitulo se analiza un subconjunto de SPARC, al que se denominaré ARC (A RISC Computer), RISC es también un acrénimo para la definici6n de una compu- tadora con un conjunto reducido de instrucciones (RISC, Reduced instruction Set Com- puter), la cual se analiza en el capitulo 9. La configuracién ARC contiene la mayoria de las, caracteristicas importantes de la arquitectura SPARC, pero sin algunas de las prestaciones mas complejas presentes en un procesador comercial. CapiTULO 4 » UA ARQUITECTURA DE PROGRAMACION 109 4.2.1 Memoria en ARC ARC es una méquina de 32 bits con capacidad de direccionamiento de memoria por bytes; puede manejar tipos de datos de 32 bits, pero toda la informacién se almacena en memoria en la forma de bytes, La direccién de la patabra de 32 bits es la del byte almacenado en Ia menor de las direcciones de la palabra. Como se ha descripto anteriormente en e] contexto de la figura 4.4, ARC tiene un espacio de memoria de 32 bits, que en la arquitectura de este ejemplo se divide en distintas regiones a ser usadas por el cédigo del sistema opera- tivo, el cédigo del programa del usuario, 1a pila del sistema (uilizada para el almacena- miento temporario de informacién) y la entrada y salida. Estas regiones de memoria se detallan a continuacién: + Las primeras 2048 direcciones del mapa de memoria se reservan para ser usadas por el sistema operativo. * EL espacio del usuario es el que se reserva para la carga de los programas ensambla- dos por el usuario. Puede crecer durante el funcionamiento desde la direccién 2048 hasta que se encuentre con Ia pila del sistema. + La pila del sistema se inicia en la direccién 2” — 4 y crece hacia direcciones inferio- res de memoria, La causa por la cual se organiza el crecimiento de los programas en el sentido de memoria creciente y la pila en sentido decreciente puede verse en la fi gura 4.4; esta organizacién acepta tanto una combinacién de programas grandes con pilas pequefias como la de programas pequefios y pilas grandes. + La zona del mapa de direcciones ubicada entre 2"! y 2"7— 1 se reserva para los dis- positives de entrada-salida, Cada dispositive tiene asignada una serie de direcciones de memoria para el almacenamiento de sus datos, en lo que se denomina “entrada- salida mapeada en memoria”. ARC tiene diferentes tipos de datos (byte, media palabra, entero, etc,), pero, por el momento, se consideraré solo el tipo de datos entero de 32 bits. Cada entero se alma- cena en memoria como un conjunto de cuatro bytes. La arquitectura ARC funciona con el byte més significative almacenado en ta menor de las direcciones asignada a ta palabra, lo que se conoce como almacenamiento big endian, La maxima direccién disponible para el almacenamiento de un byte en ARC es 2 - 1, de modo que la di- recci6n de la palabra mAs alta de memoria est ubicada tres bytes por debajo de esta, en 24, 4.2.2 El conjunto de instrucciones ARC Con el objeto de obtener detalles del conjunto de instrucciones ARC, se hace necesario revisar primero las caracterfsticas de ta CPU: 110 _PRINcIPIOS DE AROMITEGTURA OE COMPUTADORAS + ARC tiene 32 registros de uso general, de 32 bits cada uno, asf como un contador de programa (PC) y un registro de instruccién (IR). + Existe un registro de estado del procesador (PSR, processor status register) que contiene informacién acerca del estado del procesador, incluida la informacién re- ferida a los resultados de tas operaciones aritméticas. Las “banderas aritméticas” del registro de estado se denominan e6édigos de condici6n. Especifican si en una operaci6n aritmética determinada el resultado dic cero (2), si dio un niimero nega- tivo (n), si se obtuvo un arrastre a la salida de ta unidad aritmético-I6gica de 32 bits (c), 0 Si se produjo un desborde (v). El bil v se activa cuando el resultado de Ia operacién aritmética es demasiado grande como para ser manejado por la unidad ariemético-t6gica. + El tamafio de todas las instrucciones es de una palabra (32 bits). + ARC es una maquina de arquitectura carga-desearga (load-sture). Las Gnicas ins- trucciones permitidas para el acceso a memoria cargan un valor hacia alguno de los registros, o almacenan en una posicién de memoria el contenido de alguno de los re- gistros. Todas las operaciones aritmnéticas se ejecutan sobre operandos contenidos en registros y los resultados también quedan almacenados en un registro. El conjunto de instrucciones del procesador SPARC, sobre el que se basa ARC, tiene aproxima- damente 200 instrucciones. La figura 4.7 ilustra un subconjunto de 15 de esas ins- nes. Cada instruccién estd representada por un cédigo nemotéenico, defini do como un nombre utilizado para simbolizar la instrucei6n mnembnico Puneiba 34 | Cargar un registro desde nenoria Salvar un registro oa couoria Cargar 109 22 bits ms significetives de un reyietro Producto Logic bit « bit i¥) ‘Suna Logica bit a bit (0) ‘Suma Logica nevada bit a bit (NOR) Desplazar a derecha (1égic0) Sunae Salto (1ianado) a subrutina Retorno de subrutina Biturcecién (salto por igual} Bifurcaeién (salto) por negative Bifurcacién (ealtoy por arrastre Bifurcacion (calto) por desbarde Bifureacion (salto) incoadicional Memoria Logicas Aritméticas Control Figura 4.7 + Sudconjunto de instrucciones para la arquitectura de programacién ARG, CAPITULO 4 « LA ARQUITECTURA DE PROcRAMAciGN 111 Instrucciones para el movimiento de datos Las primeras dos instrucciones, 14 (load [eargar]) y st (store {descargar 0 almacenar}) Uansfieren una palabra entre Ia memoria principal y alguno de los registros de ARC. Es- {as son las tinicas instrucciones que permiten el acceso a memoria dentro de ARC. La instruccién sethi carga los 22 bits més significativos de un registro con la cons tante de 22 bits contenida dentro de la instruccién, Se la utiliza habitualmente para cons vir una constante arbitraria de 32 bits a ser almacenada en un registro, en conjunto con otra instruccién que carga los 10 bits menos significativos del registro. Instrucciones aritméticas y logicas Las instrucciones andee, ree y ornce realizan operaciones ¥, O y NOR, respectiva- mente, sobre sus aperandos. Uno de los dos operandos origen debe estar en un registro, El otro puede estar en un registro o puede ser una constante incluida en la instruccién, ex- presada en 13 bits en notacién de complemento a dos, la que se extiende a 32 bits cuan- do se Ja utiliza. El resultado se almacena en un registro. Para el caso de Ia instruccién andcc, cada bit del resultado se coloca en | si los bits, correspondientes de ambos operandos son simultineamente 1; en caso contrario, el bit del resultado vale 0. En la operacién oxce, cada bit del registro es 1 sial menos uno de los correspondientes bits de los operandos vale 1; en caso contrario, el bit correspondien- te de! resultado vale 0. La operacién ornece es complementaria de orec, de modo tal que cada bit del resultado vale 0 si uno o los dos bits correspondientes en los operandos vale 1; en caso contrario, el bit del resultado se coloca en 1. Los sufijos “ee” especifican que luego de realizada la operacién deben actualizarse los cédigos de condicién del re~ gistro de estado de modo que permitan reflejar el resultado de la operaci6n realizada. En particular, el bit 2 se coloca en 1 si todos los bits det registro que contiene el resultado son cero, el bil n se pone en I siel bit més significative del resultado es I, y los bits ¢ y v, en el caso de estas instrucciones en particular, se colocan en 0. (gPor qué?) Las instrucciones de desplazamiiento permiten desplazar el contenido de un registro hacia otro. La instruccién sel (shift right logical [desplazamiento légico a derechal) desplaza un registro hacia la derecha y carga ceros en el (los) bit(s) més significativo( La instrucci6n sxa (shift right arithmetic [desplazamiento aritmético a derechal), que no se indica en la tabla, desplaza el contenido original del registro a la derecha y almacena ‘una copia del bit més significativo del contenido original en los bits vacios creados por el desplazamiento del registro. Esta operacidn da por resultado la extensién del signo del ‘operando, preservando asi su signo aritmético. La instrucci6n addce realiza sobre sus operandos una suma de 32 bits en comple- mento a dos. 112. Privcipios 9€ ARQUITECTURA DE COMPUTADORAS Instrucciones de control Las instrucciones ea y jmp forman un par utilizado para el llamado de subrutinas y el retorno desde las mismas, respectivamente. La instrucci6n mp1 también se utiliza pa +a transferir el control a otro sector del programa, Las dltimas cinco instrucciones son instrucciones de salto o bifurcacién condicio- nal. Las instrucciones be, bneg, bes, bys y ba provocan un salto en la secuencia de ejecucién de un programa. Se las llama condicionales debido a que verifican uno 0 més de los cédigos de condici6n del registro de estado, y provocan el salto si los bits indican que la condicién verificada se cumple. Se utilizan para la implementacién de construcciones de alto nivel, tales como goto, if-then-else y do-while, Las secciones siguientes describen estas instrucciones en forma detallada y ofrecen ejem- plos de su utilizacién. 4.2.3 Formato del lenguaje simbélico de ARC Cada lenguaje simbélico tiene su propia sintaxis, En este caso, la sintaxis a respotar es la del lenguaje de programacién simbélico de SPARC, que se muestra en la figura 4.8. El formato incluye cuatro campos: un campo optativo para los rétulos, un campo para el c6- digo de operacién, uno o mas campos para especificar los operandos origen y destino (si existieran operandos), y un dltimo campo optativo para los comentarios. Los rétulos se forman con cualquier combinacién de los caracteres alfabéticos o auméricos y con los simbolos correspondientes al guién bajo (_), al signo monetario ($) y al punto (.), siem- pre y cuando el primer cardcter no sea un digito. Todo rétulo debe terminar en dos pun- tos (:). El lenguaje es sensible al tipo de letra, por lo que hace distinei6n entre letras ma- yisculas y mindsculas. El lenguaje ofrece “formato libre”, lo que significa que cualquier campo puede empezar en cualquier columna, debiendo mantenerse el ordenamiento re- lativo de izquierda a derecha, Opersndos —Operandos Rétwlo Mneménico de origen de destino Comemario 4 t y Z t ae _4#__., Jab_l: eddcc trl, $12, 3 t= jemplo de codigo simbolico Figura 4.8 ¢ Formato de una sentencia en el lenguale simbélico SPARC (también ARC). La arquitectura ARC contiene 32 registros denominados x0 - 131, cada uno de los. cuales contiene una palabra de 32 bits. También existe un registro de estado del procesa- dor (PSR), que describe et estado vigente del procesador, y un contador de programa (PC) de 32 bits, que controla Ia direcci6n de la instruceién en ejecucién, segtin se ilustra en la figura 4.9. El registro de estado del procesador se denomina @psz, en tanto que el contador de programa se designa como pc. El registro $0 siempre contiene el valor CAPIyULO 4 » LA ARQUTTEETUNA DE PROGRAMAGION 113 0, el cual no puede modificarse. Los registros 814 y $15 tienen aplicacién adicional como puntere de pila (sp, stack pointer) y registro de enlace (link register), respec- tivamente, segiin se describe mas adelante. Regisiro 00] $ro (= 0] [Regiswo 1 | tr Registro 22 | 8122 Regisiro 01 | 8r1 Registro 12 | 8x12 Registro 23 | #23 Regisiro 02 | 8r2 Registro 13 | #113 Registro 24 | #24 Registro 03 | 8r3 Registrol4 | 8r14 [tsp] [Registro 25 | 4x25 Registro 04 | ara Registro 15 | #x15 [Link] | Registro 26 | $r26 Regisiro 05 | ars Registro 16 | #r16 Regisiro 27 | 8x27 Registro 06 | 8r6 Registro 17 | x17 Registro 28 | $528 Regisiro 07 | 4x7 Registro 18 | 8r18 Registro 29 | x29 Registro 08 | ars Registro 19 | $119 Regisiro 30 | $130 Registro 09 | aro Regisiro 20 | x20 Registro 31 | $r31 Regisiro 10 | ario Registro 2) | @r22 PSR] 8pst ‘pe 7 bits — 32 bits——~ Figura 4.9 » Registras en ARC acoesibies al propramador, Los operandos que aparecen en una sentencia del lenguaje simbélico se separan por comas, y el operando de destino siempre debe aparecer, dentro del campo de operandos, en Ja posicin de la derecha, Por consiguiente, el ejemplo de la figura 4.8 especifica la suma de los registros tx] y #12, y el almacenamiento del resultado en $3. Si en el campo de operandos, en la posicién de destino, aparece el registro $20, el resultado se descarta, Los operandos numéri- os se representan, por defecto, en el sistema de numeracién decimal, por lo que la sentencia addec trl, 12, %r3 muestra una operacin de suma entre el contenido del registro $1 y un operando de va- Jor (12),9, cuyo resultado se almacenari en el registro $¢3. Los nuimeros se interpretan enel sistema decimal, a menos que se los preceda por “0x” o se los termine en “H”, cual- quiera de los cuales indica que el ntimero es hexadecimal. El campo de comentarios se encuentra a continuacién del campo de operandos: se inicia con un signo de admiracién y termina al final del rengién. 4.2.4 Formatos de instruccin en ARC El formate de instruccién define la manera en que el ensamblador distribuye los diver- sos campos de una instruccién y la forma en que los interpreta la unidad de control de ARC. La arquitectura ARC tiene unos pocos formatos de instruccién. Los cinco forma- 114 epmeiPios ve ARQUTTECTURA DE CoMPUTADORAS tos son: SETHI, Salto, Llamada (CALL), Aritmético y Memoria, de acuerdo con lo que se describe en ta figura 4.10. Cada instruccién tiene una representacién nemotéeni ca, tal como “14”, y un cédigo de operacién. Un formato particular de instruccién puc- de tener mas de un campo de operandos, los que en forma colectiva identifican una ins- ruccién en una de sus diversas formas. (Nétese que los formatos de instruccién mencionados no se corresponden directamente con la clasificacién de las instruceiones en cuatro grupos, planteada en la figura 4.7). Los dos bits més significativos (a Ia izquierda de ta palabra) forman el campo op co- rrespondiente al cédigo de operacién, el que identifica el formato. Los dos formatos correspondientes a SETHI y a las instrucciones de salto contienen 00 en el campo op, por lo cual pueden juntarse para considerar un tinico formato. Quien determina si el for- mato corresponde a SETHI 0 a un salto es el dato contenido en el campo op2 (010 = salto, 200 = SETHI). En el formato de salto, el bit 29 siempre vale cero. El campo de cinco bits xd identifica el registro al que se aplicaré la instruccién SETHI. op 53 3029 2027 2625 2625 2220 2929 181736 15 14 1912 1 1909 98 97 05 9L 9307 03 96 Formato de 1a inservecion serax [2,0] 4, | op? Tama? Formato do 1 Anstruceiones 0, o]9] cond | on? diopae 35 3629 2027 26 25.2429 2 2129 39 48 1736 161419 1213 1009 08.0706 0504 9302 05 98 0" dispio fal 435 3629 2027 2626-2429 2220 2939 36.1736 16 14912 11-1069 00 9786 0504 9209.63 90 Formatos de vo "ed op8 FIC DOOOGOOK INET) instrucciones aritméticas vol" rd op3 ii [| ‘ine 135 3029 2021 2625 2429 22 20 2039 18 1716 1914 15.1212 1069 08 0706 0504 99 02 0.90 Pormatos de Vay ed eps Fel | [0)0,0.0.0.0'0.0.0] . toZ Anstrucoiones de menoria val” ed op8 zt fl Por ep| Formato | [op2] tast. | [op3 (op=t0) | { op3 cor cond] salto 00] serar/eranch| [010] Branch | [o1coo9 addec| | oo0000 ta | [ooaa| be 01) caLe 100] setni | Jo1coe2 andcc| | coorao st | |o1ea| sew 10] aritmaticas 010010 orce 0110] bneg 11] Remorde 010120 ornee o1ai| bes 100110 srl 1000| ba 311000 jmp 23 3029 2627 36 25-2479. 21 2619 1819 16 1524.13 1711 1909 09 67 06 9504 0922 1.00, PSR ally |e] Figura 4.10 + Formatos de instruccién y contenido del PSR en ARC, CAPITULO 4 « LA ARNUITECTURA DE pROcRAMAciiN 115, El campo cond identifica el tipo de salto condicional, que se basa en los c6digos de con- dici6n (n, 2, v yc) del registro de estado PSR, de acuerdo con lo que puede observarse en la parte inferior de la figura 4.10, El resultado de la ejecucién de cualquier instruccién cuyo mneménico termine en “ec” acomods los bits de e6digo de condicién de modo que n = 1 siel resultado de 1a operaciGn es negative; z = 1 siel resultado es cero: v = 1 si la operacién causa un desborde: y © = 1 sila operacién genera un arrastre. Las ins- trucciones que no terminan en “ce” no afectan los ¢6digos de condicién. Cada uno de los campos imm22 y disp22 contiene una constante de 22 bits que se utiliza come operan- do en el formato SETHI (para imm22) 0 para el célculo del desplazamiento que permite determinar una direccién de salto (en el caso de disp22). EI formato correspondiente a una Hlamada tiene solo dos campos: el campo op, que contiene la palabra binaria 01, y un campo disp30, que contiene un desplazamiento de 30 bits que se utiliza para determinar la direccién de la rutina invocada. Los formatos aritmético (op = 10)y memoria (op = 11) utilizan campos rd para identificar un registro origen en el caso de st, o un registro de destino para las instrucciones restantes. El campo 81 identifica el primer registro origen y el campo x82 identifica el segundo registro origen. El campo op3 correspondiente al cédigo de operacién identifica la instruccidn, de acuerdo con las tablas op3 indicadas en la figura 4.10. El campo simm13 es un valor inmediato de 13 bits, que se extiende con signo a 32 bits para el segundo registro origen cuando el campo i (inmediato) vale 1. El concepto de “extender con signo” significa que el bit de signo (el més significativo) se copia en Jas posiciones restantes de una palabra de 32 bits, antes de ser sumado a rs1 en este ca- 80, Esto asegura que un ntimero negativo en complemento a dos sigue siendo negativo tras la conversién a 32 bits (asf como un néimero positivo continda siendo positive). Por ejemplo, (-13),o= (1 1111 L111 OO1E),, y luego de ta extensién a un formato entero de 32 bits se tiene (IIL HIT 1111 1111 1111 111 1111 0011), que sigue siendo equiva- lente a (-13)}9. Las instrucciones aritméticas necesitan dos operandos origen y un operando destino, lo que hace un total de tres operandos. Las instrucciones de memoria solo necesitan dos operandos, uno para la direccién y uno para el dato. El campo origen remanente, sin em- bargo, se utiliza también para la direccién. Cuando i = 0, los operandos contenidos en los campos rs1 y rs2 se suman para abtener la direccién. Cuando i = 1, la direccién se obtiene sumando los campos rs1 y simm13. Para los primeros ejemplos a plantear, se utilizard $0 para x2, con fo cual solo se especificaré el operando origen restante, 4.2.5 Formatos de datos en ARC ARC soporta {2 formatos de datos diferentes, segiin se ilustra en ta figura 4.11. Los for- matos de datos se agrupan en res tipos: entero signado, entero sin signo y punto flotan- te, Dentro de estos tipos, los tamaiios admisibles son byte (8 bits), media palabra (16 116 _PRINCIPIOS DE AROUITECTURA DE COMPUTADORAS bits), palabra (32 bits), palabra rotulada (32 bits, de los cuales los dos bits menos signi- ficativos forman un rétulo o referencia, en tanto que los restantes 30 bits forman el va- Jor), palabra doble (64 bits) y palabra cudruple (128 bits). sr ign de Bis I Enea sigma de 1 bite Ener sina de 2s, (peat. — a conse g 3 co eerste — oy rT epee seteinten [> ans C ] | Ce sony C 3 Taner a —— nan Soutien i at 2 eee cma OG ae 7 Figura 4.11 « Formatos de datos en ARG. En realidad, ARC no distingue entre enteros signados 0 no signadas. Ambos se manejan y almacenan como enteros representados en notacién de complemento a dos. Varia soto su interpretacién. En particular, un subconjunto de las instrucciones de salto supone que os valores que se comparan son valores con signo, en tanto que el otro subconjunto su- pone que no tienen signo, En forma similar, el bit ¢ indica un desborde en las operacio- nes enteras sin signo, en tanto que el bit v lo idemifica para operaciones con signo, La palabra rotulada utiliza os dos bits menos significativos para indicar un desbor- capiruno 4 « La ARGUTTECTURA DE PROGRAMACION 117 de, en et caso en que se intente almacenar un valor mayor que 30 bits en los 30 bits asig- nados en la palabra. Se utiliza en lenguajes con datos dindmicos, como Lisp y Smallualk. En forma genérica, un | en cualquier bit del campo de referencia indica una situacién de desborde en esa palabra, Las referencias pueden utilizarse para asegurar que se cumplan las condiciones de alineacién requeridas (que una palabra empiece en una direecién mal- tiplo de cuatro bytes, que Ta palabra doble empiece en un miltiplo de ocho bytes, etc.), especialmente en el caso de los pumteros. Los formatos de punto flotante se establecen de acuerdo con la norma IEEE 754-1985 (véase el capitulo 2). Existen instrucciones especiales que invocan formatos de punto flo- tante que no se deseriben aqui y que pueden encontrarse en la literatura de SPARC. 4.2.6 Descripcidn de las instruccianes de ARC Siendo ya conocides las formatos de instruccién, se puede desarrollar una descripcién detaliada de las 15 instrucciones de ta figura 4.7. Esta secci6n se ocupa de esa descrip- cién. La traducci6n a c6digo objeto se agrega solo como referencia, ya que se describe en detalle en el préximo capitulo. En las deseripciones, la referencia al contenido de una po- sicién de memoria (para 1d y st) se indica con corchetes, tal como en “Id [x], %r1", que copia el contenido de la direccién x en el registro $1. La referencia a la di- recci6n de una posicién de memoria se especifica directamente, sin corchetes, como ocu- meen “call sub_x”, instruccién que genera un llamado a la subrutina sub_r. Solo 1d y st pueden acceder a memoria, razén por la cual admiten el uso de corchetes. Los registros siempre se mencionan en funcién de su contenido, nunca en términos de una di- reccién; por consiguiente, no hay necesidad alguna de encerrar entre corchetes las refe- rencias a los registros. Instruccién: 1d Descripcién: Carga un registro desde la memoria principal. La direccién de memoria debe es tar alineada con una frontera de palabra (lo que significa qué la direccién dehe ser miiltiplo de 4), Se catcuta ta! Ensamblar solo si es cierta sendiz sendi¢ Fin de estructura condicional ‘Figura 4.12 » Directivas para el lenguale ensamblador de ARC. 4.4 Ejemplos de programacion en lenguaje ensamblador El proceso de escritura de un programa en lenguaje simbélico es similar al proceso de escri- tura de dicho programa en lenguaje de alto nivel, excepto por el hecho de que muchos deta- lies que en el lenguaje de alto nivel se vuelven abstractos, son (otalmente explicitos en el ten- guaje simbélico. En esta seccién se analizan dos ejemplos de programas escritos en el Jenguaje simbélico de ARC. Programa: sumar dos enteros Considérese la escritura de un programa para el lenguaje de programacién simbélico de ARC que sume los enteros 15 y 9. Una posible codificacidn es la que se muestra en la fi- gura 4.13. El programa comienza y termina con un par de directivas .begin/.end. La directiva .org le indica al programa ensamblador que la traducci6n debe iniciarse de modo tal que el c6digo ensamblado se cargue en memoria a partir de la direccién 2048, Los operandos 15 y 9 se almacenan en las variables x € y, respectivamente, Solo se puc- den sumar nimeros que estén almacenados en registros de ARC (dado que solamente 14 y St pueden acceder a memoria) y, por consiguiente, el programa se inicia cargando en los registros $1 y 8r2 las variables x ¢ y. La instrucci6n addee suma $1 con $r2 capiruvo 4 + La angurrecTura ne erocnamaciin 123 y deja el resultado en el registro $3. La instruccién st se encarga de almacenar @r3 en la direccién de memoria 2. La instruccin jmp1 con operands *r15 + 4, %x0 pro- voca un retomno a la instrucci6n siguiente del programa que invecé a la rutina de suma. Debe notarse que en caso de que no haya habido programa usuario que invocara al pro- ‘grama de suma, s¢ entender como que este tiltimo ha sido invocado por el sistema ope- rativo. Las variables x, y y z se definen a continuaci6n del programa. 1 Bete prograna sume doa abmeros sbegia sorg 2048 progi: ld fx}, Srl ! Cargar el registro tr1 con 2 valor de x dd ty), tr 1 Cargar e1 registro &r2 con el valor de y addcc rl, t22, 0x3 | ty} & tel + tr? st tr, [2] 1 Guardar @1 contenido el registro tr3 en 2 1 jmph E15 + 4, 4x0 Retorno Figura 4.13 © Un programa para ARC que suma dos enteros. En la practica, el cddigo SPARC equivalente al e6digo ARC de la figura 4.13 no es de! todo correcto. Las instrucciones 1d, st y jmp1 demoran al menos dos ciclos de instruc- cién para completarse, y dado que SPARC inicia una nueva instrucci6n en cada pulso de reloj, estas instrucciones deben estar seguidas por instrucciones que no dependan de sus, resultados, Esta propiedad, que permite iniciar una nueva instruccién antes de haber com- pletado la anterior se conoce como segmentacién (pipelining), y se analiza con detalle en el capitulo 10, Programa: suma de un arreglo de enteros Considérese ahora un programa algo mas complejo, que suma un arreglo de enteros. La figura 4.14 ilustra una posible codificacién, Como en el caso del ejemplo anterior, el pro- ‘grama se inicia y se termina con un par .begin/.end. La directiva .org indica que Ja traducci6n se debe realizar de modo que e} e6digo ensamblado se cargue en memoria 4 pantir de la direcci6n 2048. Se utiliza una directiva para definir el simbolo a_start, al que se te asigna el valor 3000. El programa se inicia cargando la longitud del arreglo a, la que se presenta en bytes, en el registro $11. El programa carga luego Ia direccién de comienzo del arreglo a en $r2 y pone en cero el registro 83, que acumularé el resultado parcial. El registro 3 se pone en cero a través de una operacién de producto légico con el registro $0, que siempre contiene el valor cero. Cualquier producto l6gico que se realice entre el registro $20 y cualquier otro registro dard siempre por resultado el valor cero. CIPI OE AROUITECTURA DE COMPUTADORAS 1 Rote programa suma tantos atmeros com lo indice LENGTA 1 Utilizacion de regiatros: trl — Longitud del arregio » 1 ‘452 — Direccion de comienzo del arreglo a 4x3 — suma parcial ‘rd — Puntero ai arregio a ‘4x5 — Contiene un elemento do a 1 Conienzo de teadvecion 1 Comienzo del programs en 2048 1 Direceién del arraglo a 1 tri © lengitud del arreglo a 1d faddress],tr2 1 tr? & direecibn del arregio @ andec tr3, tr0, ¥r3 1 Wr3 0 loop: -—andce tel, tri, tr0 t Vorificar nimoro de elexentos rostantes ! ' : 1 a t -begin sorg 2008 q.start equ 3000 1d [leagthy, tt be done Pinelize cuando LENGTH = 0 addee trl, -4, %rl_ 1 Decrenentar tamaho del arreglo addee trl, $2, tr4 1 Direccibn del proximo cleaento ld trd, 3x5 Qr5 @ direccién de menoria [¥r4] addee tr3, 4x5, %r3,1 Sunar elemento nuevo al contenide de $23 ba Loop Repetir el 1az0 done: japl_ tri5 + 4, Br0 1 Retorno a rutina principal Rength: 20 1 Bl arreglo a tiene 5 nimeros (20 bytes) addresses a_ovart sorg a_start 1 Conenzo del arreglo & 25 1A continvacion low elementos del arreglo 10 33 -5 7 -end 1 Pin de traduccién Figura 4.34 © Un programa para ARC que suma cinco enteros.. El rétulo Loop inicia un 1az0 que suma los sucesivos elementos del arregto a dejando la suma parcial en ei registro $3, en cada iteracién. Bl lazo se inicia verificando si el ni~ mero restante de elementos a sumar (811) es cero. Para obtener este dato realiza el pro- ducto Idgico de $1 consigo mismo, con lo que logra acomodar los eédigos de condi- ci6n. El cédigo que interesa es z, el cual se pondréen | si $r1 = 0. Las banderas restantes (n, v y ¢) se acomodan de acuerdo con el resultado. Bl valor de z se analiza por medio de la instruccién be. Sino quedan mas elementos a sumar dentro del arreglo, el programa bifurca a done, de donde vuelve a ta rutina que lo invocs (y que puede ser el sistema operativo, si este es el nivel mis alto del programa usuario). Si luego de la verificacién de 8x1. = 0 el programa no hubiese salido del lazo, se de- crementa el valor de $11 en cuatro (e! tamaito de cada palabra medido en bytes) para lo cual se le suma al contenido de $11 el valor -4. La direccién de comienzo del arreglo a (almacenada en $12) y el indice en a ($1) se suman en $14, el que apunta a un nuevo elemento de a. El elemento al que apunta $14 se cargaen 825, y su valor se sumaa la su- ma parcial (#13). La instruccién “ba Loop” lleva al programa nuevamente al comienzo CAPITULO 4 + LA AROUITECTURA TE PROGRAMACION 125 del lazo cerrado. La variable Length se almacena luego de las instrucciones. Los cinco: elementos del arreglo a se ubican en el rea de memoria especificado por ef argumento de ladirectiva .org (direccién 3000). ‘Notese que hay tres instrucciones para calcular fa direcci6n del elemento siguiente en el arreglo, dada la direccién del elemento inicial en $r2 y la longitud del arreglo en bytes en @r1: addce trl, -4, trl ! apuntar al nuevo elemento a sumar addcc trl, %r2, @r4 ! sumarlo a la base del arreglo ld sr4, 815 ! cargar en tr5 el proximo elemento Este método para el edlculo de la direccién de una variable como ta suma de una base més un fndice se usa tan frecuentemente que tanto ARC como otros lenguajes simbélicos tienen modos especiales de direccionamiento para utilizarlo, En el caso de ARC, Ia direc- cién de la instruecién 1d se calcula como la suma de dos registros o la de un registro con una constante de 13 bits, Nétese que el registro #0 siempre contiene et valor cero, por To que al especificar $0, lo que se hace en forma implicita en la instruccién 1d, se des- perdicia la oportunidad de permitir que la misma instruccién 1d haga el céleulo de la di- reccién. Un registro tinico puede contener la direccién del operando y permite resolver en dos instrucciones lo que en el ejemplo anterior Neva tres: addec @r1, -4, trl ! apuntar al proximo elemento a ser sumado 1d @r1 + $r2, &r5 | cargar el proximo elemento en tr5 Notese que también se evita el uso de un registro, #14, antes utilizado como elemento de almacenamiento temporario de Ia direccion. 4.4.1 Variantes en las arquitecturas y en los direccianamientos La arquitectura de ARC es la tipica arquitectura de una méquina de carga y descarga. Los programas escritos para este tipo de maquinas se ejecutan generalmente en menos tiem- po, en parte debido a la reducci6n del tréfico entre CPU y memoria, porque los operan- dos se cusgan solo una vez en la CPU y los resultados se salvan en memoria tinicamente cuando se completa el célculo. El aumento en el tamafio de memoria requerida por el pro- ‘grama se considera un precio que vale la pena pagar. No era tal el caso cuando las memorias eran varios érdenes de magnitud mas caras que hoy y los procesadores eran varios érdenes de magnitud més limitados que hoy, lo ‘que representa el cuadro de tas primeras épocas de la computacién. En aquellas con- diciones, cuando la CPU probablemente ofrecfa solo un nico registro para almacenar valores aritméticos, los resultados intermedios debfan almacenarse en memoria, Estas ‘méquinas presentaban instrucciones aritméticas de una, dos y tres direcciones. Esto sig- 126. PRINCIPIOS OE ARQUITECTURA DE COMPUTADORAS. nifiea que una instruccién podia realizar cAlculo aritmético con tres, dos o uno de sus re- sullados u operandos en memoria, lo que se contrapone con la arquitectura ARC, en la que todas las operaciones aritméticas y l6gicas requieren que sus operandos estén alma- cenados en registros. Considérese la forma en que podria evaluarse ta sentencia A= B x C+ D a través de los distintos tipos de instrucciones de tres, dos y una direccién. En los ejemplos que si- guen, la referencia a la variable A significa, en realidad, “el operando cuya direccidn es A”, Para poder reatizar algunas estadisticus de rendimiento de los diversos fragmentos del programa, pueden hacerse las siguientes suposiciones: + Las palabras de direccién y datos son de 16 bits, o 2 bytes, tamaiio habitual en mi- quinas de aquellas épocas. + Los e6digos de operacién tienen 8 bits. Se determinardn tanto ef tamaifo como el trifico de memoria del programa, en bytes, con estas suposiciones. El tréfico de memoria tiene dos componentes, por un lado la instrucci6n en sf mis- ma, que debe traerse de memoria a la CPU para poder ser ejecutada, y por otro los da- tos: operandos que deben trastadarse a la CPU para realizar Ia operacién y resultados que deben ser devueltos a memoria cuando se completa el cilculo. La observacién de estos célculos permitira visualizar algunos de los acuerdos entre el tumafio del progra- ma y ¢l téfico de memoria que ofrecen los distintos tipos de instrucciones. El lector de- berd tener en cuenta que los c6digos de operacién, como mult y add, son genéricos: no son instrucciones de ARC. Instrucciones de tres direcciones En una instruccién de tres direcciones, A = B x C + D podria codificarse como: mult B, C, A !ACBxC add D, A, A ! ACAD Jo que implica multiplicar B por € y almacenar el resultado en A. (En este punto del pro- grama, A se usa como elemento de almacenamiento para resultados temporarios.) Luego se sumard el valor de A con D, y se volverd a almacenar el resultado en la direccién A. Cada instruccién tiene un tamaiio de 1 +2 +2 +2=7 bytes, Por consiguiente, el tamaiio del programa es de 14 bytes. El trifico de memoria para cada instruccién se calcula co- ‘mo la suma de la cantidad de basquedas de instrucciones, 7 bytes, mas el trifico de da- (os, 2-+2 +2= 6 bytes, lo que leva a un total de 13 bytes por instruccién. En consecuen- cia, el tréfico total de memoria del programa es de 26 bytes. caPiruna 4 + LA ARQUITECTURA DE PROGRAMACION 127 Instrucciones de dos direcciones En una instruccién de dos direcciones, uno de los operandos queda sobrescrito por el re sultado, Por consiguiente, el cédigo para la expresién A = B x C + D puede ser: load B, A 1ACB mult cA PAG AKC add DA 1ACA+D ‘Cada una de las tres instrucciones ocupa ahora | +2 +2=5 bytes, por fo que el tamaito del programa es de 15 bytes. En el célculo del trifico de memoria debe notarse que cada una de las biisquedas de las instrucciones implicard un trifico de 5 bytes, tal como se ha dicho. No obstante, el tréfico de datos de la primera instruceién sera de 2 palabras, o sea, 4 bytes, en tanto que el tréfico de datos de las dos instrucciones restantes serd de 3 palabras, 0 seu, 6 bytes, Esto se debe a que cada una de las dos dtimas instrucciones requiere cargar am- bos operandos en la CPU, lo que requicre 2 palabras, o 4 bytes, en tanto que el almacena- miento del resultado en memoria requicre una palabra de dos bytes. En consecuencia, el teéfico toral de las tres instrucciones seri de (5 + 4) + (5 + 6) + (5 +6) = 31 bytes. Instrucciones de una direccién Las instrucciones con una sola direccién emplean un registro aritmético tnico de la CPU, ac- cesible al programador, conocido como acumulador. El acumulador, normalmente, contiene un operundo aritmético y sirve como lugar de almacenamiento del resultado de las operaciones aritmeéticas. El formato de una direccién no es de uso comin en estos dias, pero to era en épo- eas anteriores de la computacién, en las que los registros eran més caros y frecuentemente cum- plian con funciones diversas. El acumulador sirve para el almacenamiento temporario tanto de ‘uno de los operandos como del resultado. El cédigo para la expresiGn A = B x C-+Des ahora load B PAcceB mult c Ace Ace xC add D 1 Acc Acc +D store A 1Ac Ace La instruccién Load carga B en cl acumulador, muLt realiza la multiplicacién de C por el contenido del acumulador y deja e! resultado en el mismo acumulador, y add realiza Ja suma requerida. La instruccién store almacena el acumulador en A. Cada instruc- cién ocupa 3 bytes, por lo que el tamafio total del programa es de 3 x 4 = 12 bytes. Néte- se que cada instruccidn requiere la biisqueda o almacenamiento de solo una palabra de dos bytes. Por lo tanto, el trifico de memoria para cada instruccién es de 3 +2 = 5 bytes. y el trafico total de memoria del programa es de 4 x S = 20 bytes. 128. PRINCIPIOS DE AROQUITEGTURA DE COMPUTADORAS Notese que la maquina de una direcci6n ofrece el menor tamafio de programa y el me- nor tréfico de instrucciones de todos los ejemplos vistos. Esto explica la popularidad de las viejas computadoras basadas en acumulador, en las épacas en que los registros y las memorias costaban cientos de délares por bit Registros de propésitos especiales ‘Ademés de los registros de uso general y de los acumuladores descriptos previamente, la mayorfa de las arquitecturas modernas incluyen otros registros que se dedican a propési- tos especificos. Como ejemplo de este tipo de registros pueden mencionarse: + Registros indice para memoria, como el caso de los registros indice de origen (SI, source index) (ndice de destino (DI, destination index) en el caso del 80x86, Estos egistros se utilizan como punteros al comienzo o al final de un arreglo almacenado en memoria. Algunas instrucciones especiales referidas a “cadenas” transfieren un byte 0 una palabra desde una direccién de comienzo de memoria, a la que apunta SI, hacia una direccién final de memoria, a la que apunta Di, y posteriormente incre- ‘mentan 0 decrementan los registros para que apunten al byte siguiente o a la palabra siguiente. + Registros de punto flotante. Muchos procesadores de la generaci6n actual ofrecen registros e instrucciones especiales para el manejo de niimeros de punto flotante. + Registros pura manejo de tiempo y de operaciones de temporizacién. El procesador Po- werPC 601 tiene registros asociados con un reloj de tiempo real. El mismo permite ta mediciGn de tiempo real con alta resolucién, con el objeto de indicar fecha y hora del dia. El cango que ofrecen es de, aproximadamente, 135 afios, con una resolucién de 128 ns. + Registros de apoyo al sistema operativo. Muchos procesadores modernos ofrecen registtos para manejo del sistema de memoria. + Registros accesibles solo a través de “instrucciones privitegiadas” o en el “modo su- pervisor™. Con el objeto de evitar dafios accidentales o intencionales al sistema, mu- chos procesadores incluyen instruceiones y registros especiales que son inaccesibles para tos usuarios y las aplicaciones convencionales. Estas instrucciones y registros solo pueden ser usados por el sistema operativo. 4.4.2 Eticiencia de las arquitecturas de programacién Si bien las estadisticas sobre tamafio de programa y uso de memoria calculadas en los ejemplos anteriores estén planteadas fuera del contexto de los programas en los que po- drian haber estado contenidos los ejemplos, muestran claramente que aun el hecho de te- ner un solo registro como elemento temporario de almacenamiento en la CPU puede tener un efecto muy significativo sobre la eficiencia en la ejecucién del programa, De hecho, el procesador Pentium Intel, considerado entre los més veloces dentro de los procesado- GAPITULO A + LA ARQUITECTURA DE PROGRAMACION 129 res para aplicaciones generales, tiene un solo acumnulador, aun cuando tiene una canti- dad de registros de uso especial como elementos de apoyo. Existen muchos otros facto- res que afectan la eficiencia de un conjunto de instrucciones, tales como el tiempo que necesita Ia instrucciGn para ¢jecutar su funcidn, o la velocidad a la cual puede funcionar el procesador. 4.5 El acceso a la informacion en la memoria. Modos de direccionamiento Hasta este momento, se han analizado cuatro métodos para obtener la direcci6n de un da- to almacenado en memoria: * Un valor constante, conocido al momento del ensamble, + El contenido de un registro. + La suma de los contenidos de dos registros. + La suma del contenido de un registro mds una constante. Modo de direccionamiento Sintaxis Significado Inmediato #K K Directo K MIKI Indirecto «K) MIMIKIL Indirecto a través de registro (a) MIRa} Indexado a través de registro (Rm + Ro) M[Rm + Ro] Basudo en registro (Rm +X) MIR +X! Tndexado basado en registro (RM+Rn+X) | MIRm+Rn +X] Tabla 4.1 © Mocos de direccionamiento, La tabla 4.1 le asigna nombres a estos modos de direccionamiento y muestra algunas. otras altemativas, Notese que la sintaxis de la tabla difiere de la de ARC. Esta es una ca- racteristica particular, comtin y desafortunada de los lenguajes simbélicos. Cada uno de ellos difiere de los demas en sus convenciones sintacticas. La notacién M{x} en la colum- na de significados supone que 1a memoria es un arreglo, M, indexado segiin una direc- cidn que se obticne a través del célculo indicado entre corchetes. Parece haber un surtido injustificado de modos de direccionamiento, pero cada uno de ellos tiene su aplicacién: + El direccionamiento inmediato permite hacer referencia a una constante cuyo valor se conoce al momento del ensamble. 130 _PRiNciptos DE AROUITECTURA DE COMPUTADORAS, + El direccionamiento directo se utiliza para acceder a aquellos datos cuya direccién se conoce al momento del ensamble. + El direccionamiento indirecto se utiliza para acceder a una variable puntero cuya di- reccién se conoce al momento de la compilacién. Los procesadores modemos easi no usan este modo de direccionamiento debido a que requiere dos referencias a me- moria para acceder al operando, lo que complica la instruccién que Ja utiliza. El pro- gramador que desee usar este direccionamiento para acceder a datos necesita utili- zar dos instrucciones, una para acceder al puntero y otra para Hegar al valor al que dicho puntero hace referencia, Esto tiene como beneficio el hecho de exponer la complejidad de! modo de direccionamiento, con lo que tal vez. se logra desalentar el uso del mismo. El direccionamiento indirecto a través de registro se usa cuando la direccién del ope- rando no se conoce hasta el momento de la ejecucién. El almacenamiento de operan- dos en una pita cumple con esta descripcidn, por lo que se accede a dichos operandos através de un direccionamiento indirecto via registro, habitualmente en ta forma de instrucciones del tipo “push” y “pop” que, ademds, decrementan ¢ incrementan, res pectivamente, el registro puntero. El direccionamiento indexado, el basado en registro y el indexado basado en regis- two se usan para acceder a los componentes de arreglos tales como el que se muestra en la figura 4.14. y 2 aquellos componentes ubicados mas alld de] comienzo de la pi- Ja, en una estructura conocida como bloque de datos (stack frame), la que se anali- za.en la seccién siguiente. 4.6 Acceso a subrutinas y pilas Una subrutina, conocida a veces como funcién o procedimiento, es una secuencia de instrucciones a Ia que se invoca como si se tratara, desde Ia visi6n de alto nivel, de una Gnica instrucei6n. Cuando un programa Hama a una subratina, se transfiere el control del programa a la subrutina, la que ejecuta fa secuencia de instrucciones requerida, tras 10 cual vuelve a la posicién inmediatamente siguiente a la que generé el Hlamado. Existen distintos métodos para pasar argumentos hacia y desde la rutina invocada, a los que sue- Te denominarse convenciones de Hamada. El proceso de tansferencia de argumentos ‘entre subrutinas suele conocerse como enlace entre subrutinas. Una de las convenciones de llamada de subrutinas simplemente coloca los argumentos, en registros. El c6digo de la figura 4.15 muestra un programa que carga dos argumen- (os en los registros 61 y 2, invoca la subrutina add_1 y recupera el resultado desde el registro 83. La subrutina add_1 toma sus operandos desde &r1 y $2 y deja cl resulta- do en $13 antes de retornar por medio de la instruceién jmp1. El método es sencillo y ve- Joz, pero no funciona si la cantidad de arguments a ser transferidos excede el nimero de registros disponibles, o si las Hamadas a subrutinas estin fuertemente encadenadas. CAPITULO 4 + LA AROUITECTURA GE PROGRAMACION 131 1 Rutina invocante 1 Rutina invoceda Lard © trl + 812 id Gx], Set le fy], rz | ade A: addcc tei, 822, 6x3 call add’) jmp. trl5 + 4, tx0 st te, (2) x53 yz 10 z 0 Figura 4.15 © Liamado a subrutina utiizando registros. Una segunda forma de llamada crea Jo que se denomina una zona de transferencta de da- tos. La direcciGn de la zona de transferencia de datos se entrega a la rutina invocada en un re- gistro predeterminado. La figura 4.16 ilustra un ejemplo de este método de llamada. La direc- tiva wb que aparece en la rutina invecante genera una zona de (ransferencia de datos, de tres palabras, en las direcciones x, x +4 y x + 8. La rutina invocante carga sus dos argumentos enx y x-+ 4, lama a la subrutina add_2, y luego recupera el resultado que le es transferido desde add_2 en la direcci6n de memoria x + 8. La direcci6n x correspondiente al comien- zo de la zona de datos se le transfiere a la subrutina add_2 en el registro 8x5. 1 Rutina invocante 1 Rutina invocada : 1 x12) © x10) + xU1) se NEL, tx) add_2: 1d 8r5, tr8 st tr2, [xa] ld eS +4, to setni x, tS addec ar8, 4r9, #r10 sel 8x5, 10, 425 st trld, a5 +8 call add_2 jmpl 515 + 4, aro ld [x48], 03 ! Bona de tranaferencia de datos x: dvb 3 Figura 4.16 » Llamado a subrutina usando una zona para transferencia de datos. Nétese que la instruccién sethi requiere una constante para definir su operando origen, por lo que el ensamblador reconoce la estructura de seth incluida en el programa in- vocante de la subrutina y reemplaza x por su direccién, La instruccién ex1 que sigue a sethi coloca la direccién x en los 22 bits menos significativos de 85, dado que sethi. coloca su operando en los 22 bits mas significativos del registro utilizado. Un método al- ternativo para cargar la direccidn de x en $15 consistirfa en el uso de una direccién de 132_onmeteigs os anqumTecruRa ne COMPUTADORAS memoria para almacenar la direcci6n de x, y el posterior uso de la instrucci6n 1d para cargar la direccién en $15. Si bien esta dltima alernativa es més sencilla, la utilizacién de sethi/srl es mas répida debido a que no involucra operaciones de acceso a memo- rin que consumen tiempo. La subrutina add_2 lee sus dos operandos desde e! drea de datos en las direcciones x5 y 15 +4, y coloca el resultado en la misma zona de datos en ladireccidn #5 + 8 antes de retornar, El uso de una zona para transferencia de datos permite el pasaje de bloques de datos de todo tamaiio sin tener que copiar més que un registro en el proceso de llamado ala subrutina, Sin embargo, cuando se trabaja con rutinas recursivas, este sistema puede generar algunos problemas complicados, debido a que una rutina que se invoque a sf mis- ma requerird varias zonas de transferencia de datos. Las zonas de transferencia de datos tienen la ventaja de que su tamafio puede ser ilimitado, pero tienen también la desventa- ja de que dicho tamaiio debe ser conocido al momento del ensamble. Una tercera convencién para las Ilamadas a subrutinas utiliza una pila. La idea gene- ral es que la rutina invocante coloca (empuja) todos sus argumentos (0 punteros a los mismos, si los datos tienen tamafos grandes) en una pila secuencial del tipo LIFO (last in first out). La rutina invocada extrae de la pila los argumentos transferidos, a la vez que coloca en la misma cualquier valor que deba retornar. El programa invocante, a su vez, rescata de la pila los valores devueltos por la rutina invocada y continia con Ia ejecucién, El registro de la CPU conocido como puntero a la pila (stack pointer) contiene la direc- ci6n de la cabeza de la pila, Muchas méquinas tienen instrucciones del tipo push y pop que, autométicamente, decrementan e incrementan el puntero a la pila cuando se colocan elementos en la pila 0 cuando se los extrae de 1a misma, 1 Rutina invocante | 1 Rutina invocada 1 Los argumentos estan en 1a pila 1 Sspl0] — tspi0) + tspr4) Yop .equ trid top -equ trie addce top, -4, top| add 3: ld tep, eri st rl, tsp addec §sp, 4, Isp addce asp, -4, tsp ld tap, tro st 42, tsp addec $18, 829, 4220 call add_3 st trl0, tsp la esp, tr3 gap Sris'+ 4, aro addce sp, 4, Sep Figura 4.17 « Limado a subrutina utiizando una pita. La ventaja del uso de una pila es que el tamafio de la misma aumenta o disminuye a me- dida que resulta necesario. Esto admite la posibilidad de encadenar llamadas a procedi- mientos, en cantidad arbitraria, sin tener que declarar el tamafio de la pila en el momen- to del ensamble. La figura 4.17 ilustra un ejemplo de transferencia de argumentos por capiruvo 4 + in angurrecruna DE paoaaawaciin 133 medio de una pila. El registro $14 sirve como puntero a la pila (8sp), €l que se inicia- liza desde el sistema operative con anterioridad a la ejecucién de la rutina que lo requie- re, La rutina invocante coloca sus argumentos $r1 y $r2 en la pila a través del decre- mento del puntero a Ja pila (lo que ubica al registro ¢sp apuntando a la primera palabra libre por encima de la pila) tras lo cual se almacena cada argumento en ka nueva posi cién apuntada en la pila, Se invoca a la subrutina add_3, la que rescata sus argumentos de 1a pila, realiza la operacién de suma y deja su resultado en Ja pila antes de retornar. La rutina invocante recupera su argumento de la primera direcci6n de la pila y contintia su ejecucién. CCualquiera sea la convencién de llamada, se utiliza para el llamado la instruccién call, Ja que rescata el valor actual del contador de programa en ¢x 15, Cuando la subrutina com- pleta su ejecucién, necesita volver a la direccién de In instruccidn siguiente a la que efec- tu6 la Hamada, la que se encuentra una palabra (cuatro bytes) después del vator rescata- do del PC. Por consiguiente, Ia sentencia “jmp1 8r15 +4, 8x0” completa el retomo. No obstante, si la rutina invocada llama a su vez a otra rutina, el valor del contador de programa que hab/a sido guardado originalmente en ®r15 se verd sobrescrito por Ia Ila- mada encadenada, lo que implica que no se podrd retomar correctamente al programa original a través de $215. Con el objeto de permitir Hlamadas y retornos encadenados, el valor actual de $15 (llamado registro de enlace) deberia rescatarse en Ia pila, junto con cualquier otro registro que requiera ser recuperado luego del retorno. Si se utiliza una convencién de llamada basada en registros, antes de proceder a una llamada encadenada deberfa rescatarse cl registro de enlace en alguno de los registros dis- ponibles, Si se utiliza una zona de transferencia de datos, la misma deberia disponer de es- pacio reservado para el registro de enlace. Si se usa una pila, el registro de enlace también debe apilarse. Para cada una de las convenciones utilizadas para lamadas a subrutinas, an- tes de encadenar subrutinas deben rescatarse los contenidos del registro de enlace y las va- riables locales. En caso contrario, cuando se produzca una llamada encadenada a la mis- ma subrutina se producird la pérdida de fas variables locales, Existen muchas variantes de las tenicas de llamadas bésicas, pero, probablemente, la més popular para La utilizacién de subrutinas sea la {éenica busada en el uso de una pila. ‘Cuando se utiliza un método de Hamado a subrutina que requiere el uso de una pila para invocar subrutinas anidadas, se construye un drea de pila para que contenga los argu- mentos que se han de transferir a una rutina invocada, la direceién de retorno a la rutina invocante y cualquier variable local. La figura 4.18 iJustra un programa escrito en lengua- {je de alto nivel que requiere el uso de rutinas anidadas. La funcién del programa no es im- portante, como tampoco lo es el hecho de haber usado C como lenguaje de programa- ci6n. Lo que sf importa es la forma en que han sido implementados los llamados a subrutinas. La figura, 19 ilustra la conducta de Ia pila a lo largo del programa. El programa prin- cipal invoca a £unc_i con los argumentos | y 2, y luego invoca a func_2 con el argu- mento 10 antes de completar su ejecucién. La funcién func_1 posee dos variables loca- 134 _PRINCIPI0S DE ARQUITECTURA DE COMPUTADORAS Linens prograna an C que ilustra el Llando de subrutines No tanidadas)*/ 00 o1 oz ant wer ns 8 locales */ 030 w= fune1 (1,29; /* sebratina func +/ 04 == func_2 (1095 /+ subruting fune_2 +/ 05) 7+ Pin de prograna principal */ 06 tune (xy) ds celular xt x+y tf 07 int x,¥5 (> partmetros a tranferir a func} +/ oe 03 Ant £,45 /* Variables tocales */ 10 dmx nr aL geity: 2 return (3); /* Devolver 5 a1 programa principal */ By a4 tunc_2 (a) (calcular at a tas +/ 15 int a; 7+ Parbmetro a txanateri: a func_2 */ wet v int mae /* Variables locales */ 18 neat ss 19 m= fune_t (ayn); 20 return (5); /* Devolver m al programa principal -/ 2) Figura 4.18 » Programa escrito en C que ilustra llamados encadenados. les lamadas 3. y 3, que se usan para el cleulo del valor j a devolver. La funcién fane_2 posee dos variables locales m y n que se utilizan para crear el argumento m que la funcién devuelve antes de retornar. EI puntero de pila (8114 por convencién, pero se lo denominard ¥sp) se inicializa antes del comienzo de la ejecucién del programa, funcién que suele estar a cargo del s tema operativo. El compilador es el elemento responsable de implementar la técnica de llamada y, por consiguiente, serd el compilador quien genere el cédigo que envie los pa- metros y ta direceién de retorno a la pila, reservando espacio en Ia pila para las varia bles locales e invirtiendo el proceso a medida que las rutinas regresan a quienes las Ila- maron, La conducta de la pila, que se ilustra en la figura 4.19, se produce entonces como consecuencia de la ejecucién de cédigo generado por el compilador, pero dicho cédigo bien pudo haber sido escrito directamente en lenguaje de méquina, Cuando se inicia la ejecucién del programa, el puntero apunta al elemento superior de Ja pila del sistema (figura 4. 19a). Cuando et programa principal invoca a func_1 en la lf nea 03 del programa de la figura 4.18, utilizando los argumentos | y 2, estos argumentos se salvan en Ia pila, como se muestra en Ja figura 4.19b. El control se transfiere a ta subrutina £unc_1 a través de una instruccién de ca (la que no se muestra). La rutina func_1 rescata de lu pita la direccién de retomo, la que se encuentra en %x 1S como resultado de la instruccién de cal (figura 4.19c). Se reserva espacio en la pila (figura 4.194) para las caphryno 4 + LA AROUITECTURA DE PaDERAMACION 135 eS | Comienso Aveatitve | dezonz | Arealitve Are Fibre de datos. spa Asp= z e z ‘’sp-] + + ° Pita Pils, Bila a eee 4 (a) 4 (b) 4 e ‘Configuraién inci. 1 programa principal Luego del llamado. w ydenincnlepils, colocalosargumesion, —_Tarutna toca escaa (Cinea 00 del programa.) antes de Namar 2 fun nls pila el PC dela {tra 03 del programa ina voce (241) {Ginea 6 de programa} es zomade prs fue tep-| Area bee ‘Area lies z spf ts Pil Pita ® Pil want | a a) 4 eh 4 o Reserva de espacio en func_1 coloca en la pila I programa principal rilapamiavancblelores —"elvlors desler, eacamde pla alot yj ie tone.) ‘oiesdeteoman “developer func) unedsectnongaeney nen Slims aan 03S pogeaa) Figura 4.19 « (a-f) Conducta dela pila curante la ejecucién del programa de la figura 4.18. variables locales 4 y j de €unc_1. A esta altura, fa llamada a la rutina £unc_1 dispone, ena pila, de un bloque compuesto por los argumentos que se transfieren a func_1, la di- reccién de retomno al programa principal y las variables locales de func _1 Inmediatamente antes de que £unc_1 vuelva a la rutina que ta llamé, libera el espa- cio ocupado en la pila por sus variables locales, recupera de la pila fa direccién de retor~ no y coloca en la pila el valor que debe regresar, tal como se ve en Ia figura 4.19e. La ins- trucci6n jmp1 devuelve el control a la rutina invocante, la que es responsable de recuperar de la pila el valor transferido desde func_1, y de decrementar el puntero de pila a su posiciGn original anterior a la llamada, tal como se ve en la figura 4.19f. Luego, se ejecuta la rutina £unc_2, con lo que se reinicia el proceso de generacién del bloque © zona de datos en It pila, tal como se muestra en Ta figura 4.19g. Dado que la rutina func_2 realiza un llamado a £unc_1 antes de retomar al programa principal, existirén en la pila, en forma simultdnea, sendos bloques para cada una de las rutinas func_1 y func _2, tal como se ve en la figura 4.19h. El proceso se completa en la misma forma anterior, reubiciindose finalmente el puntero de pila en su posicién original, de acuerdo con lo que se muestra en las figuras 4.19i-k. 136_Pmincipios De ARQUITECTURA DE COMPUTADORAS ona de de ontane. 0 of a ative | , Zonade Aces i ares para fun? oop FT| za dtl TG I eee abe wo rl ah od 4 (e) Cras dcunsomdecons Ceniéndcwoznete Lara F000 frm fune_2.camv relia dispar fume Acie _ecloca eb apa ‘ela liamada funcién en resultado de a llamada funeién el valcradevolver Tales 08 det programa. en la ines 19 del programs, lies 12 de progrem, oe? op Area ine Arealibre so Bie Pia. or o Lamatna £0082 colo Pn dl opt Serene ning aleabre crveker iuplaasscoeyscn Cina cetera il ca Oy ‘et ra Figura 4.19 © (9-k) 4.7 Entrada y salida en lenguaje simb6lico Por ultimo, se lega al andlisis de las formas que permiten que un programa escrito en len- guaje de miquina pueda comunicarse con el mundo exterior: las actividades de entrada y salida (E/S). Una de las formas en que puede administrarse la comunicaci6n entre los dis- positivos de entrada-salida y el resto de la maquina requiere el uso de instrucciones espe- ciales y de un bus de entrada-salida especialmente dedicado a este objetivo. El método altemnativo para Ia interacciGn con los dispositivos de entrada-salida implica el concepto de entrada-salida mapeada en memoria principal, en el cual los dispositivos de entrada- salida ocupan espacios del mapa de direcciones de memoria en los que no existe memo- tia fisicamente disponible. E] acceso a los dispositivos se realiza como si fueran posicio- nes de memoria y, por consiguiente, no hay necesidad de crear nuevas instrucciones para el manejo de los dispositives. ‘Como ejemplo del concepto de entrada-salida mapeada en memoria principal puede considerarse nuevamente e! mapa de memoria de ARC, que se representa en la figura 4.20, Se observan algunas nuevas zonas de memoria, reservadas para dos médulos de CAPITULO 4 + LA ARQUITECTURA DE PROGRAMACIOR 137 Direccién Contenido <3 bits —> o- Reservade par ritines de aranqoe syria gticns 216 >" Memoris de video Ww + adicignal #] 217 > [emer dws 219 > bation 22 ‘Zona sn 59 2 > q Memoria de abajo (Conieaode fap | Je Puntero de pila "Pils dl ssera waa race i FFFFFOjs Pamalla sensible al tacto {711 1 Espacio de coord. x — entrada-salida FFFFFé1¢ Pantalla sensible a tacto coord. ¥ ane te at Figura 4.20 © Mapa de memoria de ARC que incluye la distribucién de Ios elementos en memoria memoria de video adicionales y para una pantalla sensible al tacto. Existen dos tipos de pantatlas sensibles al tacto, la fotdnica y la eléctrica. La figura 4.21 ilustra una ver~ sin de la pantalla fotdnica. La pantalla se encuentra cubierta, tanto en horizontal como en vertical, por una serie de rayos o haces. Si algo (un dedo, por ejemplo) interrumpe un haz, puede determinarse la posici6n a través de los haces interrumpidos. En una versin altemativa de fa pantalla, el elemento de visualizaci6n se encuentra cubjerto por una su- perficie sensible al tacto, El usuario debe hacer contacto con la pantalla para poder efec- tuar una seleceién, Diodes erisores: luz (LEDS) El usuario inerumpe el haz Detecror Figura 4.21 « Seleccién de un objeto en una pantalla sensible a tacto. 138_PaciPi0s DE ARQUITECTURA DE COMPUTADORAS Latnica memoria fisicamente existente en el sistema ocupa el espacio de direcciones entre 22 y 28-1. (Debe recordarse que 2” — 4 es la direcciGn del byte mis significativo de la pa- Jabra més alta en el formato de aimacenamiento big-endian). El resto del espacio de direccio- nes est4 ocupado por otros componentes. El drea de direcciones que va desde 0 hasta 2!° — 1, inclusive, contiene programas residentes para la operaci6n de arranque de encendido (power- ‘on bootstrap) y para rutinas gréficas basicas, El espacio de direcciones entre 2'° y 2!°— | se utiliza para ubicar dos médulos adicionales de memoria de video, los que serfin analizados en el problema 4,3, Debe notarse que solo se tendré informacién valida disponible en esas direcciones cuando los médulos de memoria estén fisicamente ubicados en el sistema. Por tiltimo, el espacio de direcciones entre 2 y 2**— | se utiliza para los dispositivos de entrada-salida, En este sistema, las coordenadas X Y que determinan la posicién se~ leccionada por el usuario se actualizan automdticamente en registros ubicados dentro del mapa de memoria. Los contenidos de estos registros se obtienen simplemente por medio de Ia lectura de las direcciones de memoria en las que se encuentran. La posicién “parpa- deo de pantalla” hard que Ia pantalla parpadee cada vez. que se la escriba. Si se desea escribir un programa simple que haga parpadear la pantalla cuando el usuario cambia de posicién en la misma, el diagrama de flujo de la figura 4.22 ilustra una forma de resolverlo. Se leen primero los registras X e Y, tras lo cual se los compara con sus valores anteriores. Si se modifica alguna de las posiciones, se produce el parpadeo de Ja pantalla, se actualizan los valores previos de X e Y y se repite el proceso. Si no se pro- dujo cambio alguno en las coordenadas, el proceso simplemente se repite. Este ejemplo representa el método de acceso a un dispositivo de entfada-salida por programa. (Véase el problema 4.3, al final del capftulo, para una descripcién més detallada.) Terapia erga cape Sears Figura 4.22 » Diagrama de flujo que flustca la estructura de control de un pragrama que veritica una pantalla sensibia al tact. ccxpiruio 4 » LA ARMUTECTURA DE PROGRAMACIGN 139 4,8 Estudio de un caso: la arquitectura de programacion de la maquina virtual Java Jaya es un lenguaje de programacién de alto nivel desarrollado por Sun Microsystems, que ha tomado una posicién prominente entre los programadores. Un aspecto clave es que los e6digos binarios de Java son independientes de Ia plataforma, lo que significa que. el mismo cédigo compilado puede ejecutarse sin modificacién alguna sobre cualquier computadora que soporte 1a maquina virtual Java (JVM, Java Virtual Machine). La méquina virtual Java es el medio por el que Java logra ser independiente de las platafor- mas: se implementa una especificacién normalizada de JVM en el conjunto primario de instrucciones de las méquinas subyacentes, y asi los eédigos Java compitados funcionan en cualquier ambiente JVM. Aquellos programas escritos en lenguajes totalmente compilados, como C, C+ 0 For- tran, se compilan hacia el e6digo nativo de la arquitectura de destino y, por ende, en gene- ral no pueden transportarse entre plataformas a menos que el c6digo fuente sea compila- do nuevamente para la nueva plataforma. Los fenguajes interpretados, como Perl, Tel, AppleScript y shell script son en gran medida independientes de la plataforma, pero pue- den llegar a ejecutarse en tiempos 100 a 200 veces mayores que los lenguajes compilados. Los programas Java se compilan en un formato intermedio conocido como bytecodes, los que se ejecutan en tiempos diez veces mayores que los lenguajes completamente compi lados, No obstante, la compatibilidad a través de las diversas plataformas y otras carac- teristicas del tenguaje hacen de Java un lenguaje de programacién ventajoso para muchas apticaciones. La figura 4.23 ilustra una visi6n de alto nivel de la arquitectura SVM. JVM es una mé- quina basada en pilas, lo que significa que los operandos se colocan y se extraen de una pila, en lugar de ser transferidos entre registros de uso general. No obstante, hay una can- tidad de regisiros dedicados, y también una cantidad de variables locales que cumplen con la funcién de los registros de uso general en la arquitectura “real” (no virtual). EL mo- tor de ejecucisn de Java toma tos cédigos compilados de Java en su entrada y los inter- preta en una implementaci6n software de JVM, o los ejecuta directamente en una imple- mentacién circuital de la misma. La figura 4.24 muestra una implementacién Java del programa SPARC analizado en Ja figura 4.13. La figura ilustra tanto el programa fuente de Java como los hytecodes en los que fue compilado. El archivo de byrecodes se conoce como un archivo de clase de Java (denominacién que reciben los programas Java compilados). Si se analiza un archivo de clase, se podrd ver que solo algunos pocos bytes del mis- ‘mo conticnen instrueciones. El resto del archivo es un encabezado que debe estar inclui- do en el archivo para permitir su ejecucién sobre JVM. En la figura 4.25 se ha procedido a“desensamblar” el programa c6digo nuevamente hacia su formato de alto nivel. Las po- siciones del cédigo estén expresadas en hexadecimal, a partir de la direccién 0x00. Los primeros cuatro bytes contienen el mimero magico Oxcafebabe, el que identifica al 140 _phincrews OE ARQUITEGTURA DE COMPUTADORAS Pin Jra Pade opens ef | vests 3} | cae ts Mote de ecen Java 2 o BY | conjon Do) eee seems : 5,535) ‘Esa de subpcoeso (Thr wares (etnias 4 sent =e] eee Figura 4.23 » Arquitectura de la méquina virtual Java programa como un archivo de clase de Java compilado. Los nimeros correspondientes mayor y menor versi6n se refieren a la versi6n de Java para el cual se ha compilado el pro- grama. Viene a continuacién la cantidad de entradas al conjunto de constantes (constant pool), que para este ejemplo es 17, La primera entrada (direccién cero del conjunto de constantes) se reserva siempre para JVM y no se incluye en el archive de clase, si bien Ia indexaci6n en el conjunto de constantes se inicia siempre en la posicién 0, como si estu- viese explicitamente representada. El conjunto de constantes contiene los nombres de métodos (funciones), atributos y toda otra informacién que sea requerida por el sistema ‘que administra el momento de la ejecucién. El resto del archivo esta compuesto mayormente por el conjunto de constantes y por instrucciones ejecutables de Java, No se analizan aqui todos tos detalles referidos a los archivos de clase. Para el lector que desee una descripci6n completa del formato de ar- chivos de clase de Java se recomienda la lectura de J. Meyer y T. Downing. El cédigo real que corresponde al programa fuente Java, que simplemente suma las constantes 15 y 9 y devuelve el resultado (24) a la rutina invocante en la pila, aparece en las direcciones 0x00e3—0x00ef. Debe tenerse en cuenta, a medida que se sigue el ejemplo, que las variables x, y, z de la figura 4.24 se definen como enteros, los que en Java se definen con un tamafio de 32 bits. La figura 4.26 muestra edmo se interpreta esa porcién de los byzecodes. El programa convierte las constantes 15 y 9 en palabras de 32 bits mediante Ia extensién del signo, y coloca las palabras en la pila usando como caplrouo 4 » LA ARQUITECTURA DE procnaMacioN 141 17 Bste es el archivo add. java public class add { public static void main(String args[]} { int x=15, y=9, 2=07 zaxtyr , 0000 cafe babe 0003 002d 0012 0700 de07 0010 0010 0200 040¢ 0007 0005 0100 0328 2956 Dee OV 0020 1628 Sbic 6261 7661 2f6c 616e 672 ((ujava/lang/ 0030 7269 6087 3b29 5601 0006 3069 6e69 Stzing:)V.... . .Code...Cons 0050 Ge74 5661 6c75 6501 000a 2578 6365 tantValue...Exce 0060 696£ 6873 0100 Ofde 6962 6540 756d ptions...LineNum 0070 7254 6162 6c65 0100 Oedc 6£63 616c berTable.. .Local 9080 7269 6162 6c65 7301 000a 536f 7572 Variables...Sour 9090 4669 6c65 0100 0361 6464 0100 0861 ceFile...add...0 9020 2e6a 6176 6101 0010 6a61 7661 2f6c dd. java... java/1 00b0 672E 4£62 6a65 6374 0100 046d 6169 ang/Object.. mai 00c0 2100 9100 0200 9000 0000 0200 0900 n.....e.. eee dodo 0600 0100 0800 0000 2400 0200 0400 fee 0000 0d10 0£3¢ 1009 3403 Jeb 1c60 3eb1 nt oo£0 0091 000b 0000 000e 0003 0000 0004 fees 0100 0006 O00 0002 0001 9007 0005 0001 fie 0110 0000 001d 0001 0001 0000 0005 2ab7 fetteeeee 0120 0130 100 0000 0100 ob90 0000 9600 0100 9100 0100 ca00 9000 0200 of00 ite Figura 4.24 + Programa Java y archivo compilado, intermediarios a las variables locales 0 y 1. En un alarde de gimnasia innecesaria, el pro- igrama extrae los dos valores desde la pila hacia dos variables locales, ¢ inmediatamente tos vuelve a empujar hacia la pila. El programa invoca luego la instruccién iadd, ta que extrae los dos elementos superiores de la pila, los suma y coloca el resultado en la cabe- za de la pila, tras lo cual procede a retornar. Las operaciones innecesarias que se realizan sobre 1a pila representan algunas de las razones por las que JVM corre 10 veces més despacio que el eédigo nativo. El programa ‘empuja los argumentos hacia fa pila, tos saca luego hacia dos variables locales 1 y 2, y os vuelve a introducir en la pila antes de sumarlos, Para los compiladores de otros len- guajes, esta transferencia es vista como redundante por lo que, en dichos casos, seria eli- minada. Dado este dnico ejemplo, probablemente exista un amplio espacio para mejorar Ia velocidad de ejecucién con respecto a la velocidad de ejecucién de los programas JVM de hoy en dfa, que es unas 10 veces menor que la de tos otros lenguajes. Otras mejoras pueden presentarse en lu forma de lo que se denomina compiladores just in time (JIT), lie teralmente compiladores puntuales 0 justo a tiempo. Estos compiladores, en lugar de in- terpretar los byrecodes VM uno por uno cada vez que aparecen, aprovechan el hecho de que la mayorfa de los programas dedican la mayor parte de su tiempo a realizar lazos y otras rutinas iterativas. A medida que el compilador JIT encuentra cada linea de c6digo 142_pnuveietos ne anquiTecruRa DE cOMPUTADORAS. ‘Ls zoma de eonsianesconiene 18 elementos ‘Version mezor erin [Néovero magico | rn Direction ‘0000 2 TAS Sona T Réwlo= 19 (Meade) Rélo Indice de sombre lai ype fice de lee aa 3060 0200 Gabe G00T & 010 Rénio = (Case) egies de me 14 Réaslo=7 (Che) Lee de TF 6785 Ged7 Fora ORME HH 212 embryo} ce de nome = 7 Pointe tipo Réwlo= 1 (U) Ling = byes or 5B O1aS TATE THE 0020 030 poe Jo0so 090 Reuto= 1 ai engine =22 bytes Loe O00 166 suas abl Teer Bite Flse OTE Reale = 1 CU Logit 6 bytes veering: 9¥" mein” *uiavaNtange™ =e SUIT TIGT GeeT GTS SOOT GOOG FEET GOT Rotwle= TUE) Rl = 10000 “Lansi Loraine Aoyes bys -L Tise Gide Guay Gee GBI 00S IIGE GOTF Réculo= 1 (049) nin Otner | “Exce i al ‘TUG Gata 665 Ge75 G51 She GSTS ies Réwla 1c “cose” “cons” eantvelue “peions’ 7074 G96T GeT3 0100 Ofdc oote 6540 756d ela = 110) Longin “peetable” Hbyes “nocea™ ee — S765 Taba TET Gees G1GD dean GEE? Bike Résulo=1 (CM angina = 1a eee —l_ S665 7269 6162 Goes TO0L G00e See TETE Rela = 1 (UH Réan = CUNT seariier | anes “ste = a a a ies Gees cee S100 OB61 Ge6e D100 086i “variables Figura 4.25 » Un archivo de clase de Java. por primera ver, 10 traduce al lenguaje nativo y lo almacena en memoria para un eventual uso posterior. La proxima vez que el cédigo debe ser ejecutado, se ejecuta la forma nati- va, compilada, en lugar de los bytecodes. caplruno 4 + Wa ARQUITECTURA DE PaOsRAMACiON 143 Reale 1 (i) Tongitud = véa.jave | Tebpes “java sae aame ETHEL aS BT TET TERE eto = 100) ' Tena ~wos/absect™ Ste Sas™ C—O Gis aE Weed Goes OITA rao TAKE TD Hon de ecm ACC_PURLIC ACC. STATIC || Bains eens ACPO [ACE SUPER Supine JaveSang/0bjece Gomer Ege se Eas g one tase: add | deiner fasten ae 1 1 00c9! a0 2100 0190 6260 5065 0000 0260 6805 Iadice de nombre "” || nic de po Hejaua/ Leng/Steing: 19° ‘Contr | 7 dice de nomives de nuibuts. "Code™ i onto Maxine de pln senntucs | Siaeteas 1 Slat ac L i —_inctes 4 lo0goi i190 6600 0109 6800 000 Zav0 Oz00 OaGD taht od tye |S aghast ‘Contact de [Ss 6810) (0108) Hoa 2 [ont + Spee] [Tiere ie Lt eae ‘ceo; 6900 Cai0 OF3e 1003 3403 Feib 1e6 ebi—| tomo (Onbl) ‘niet eerie” weer TT omar emcee Stn i | ‘arate ale foc) ats fos ove aslee BH TabeBo a) dere do sens ACC PUBLIC | | Gaiciar PCS Initia PET |Indice de nombre %indt>" 1 [ON ¢e li N* de lines Indice de tipo "97" ' ON adn {0100; 008 GONG GBbE GO6E TUGI TOOT TAOS GUE] emit Ince denne riba: “cad Cott de cio IMikimod ioe?) stim lcmeatrietyese's] aches) | Citgo mores wis ak we ino GOOF BGO OOTa TOOT S001 TOUT GOS Tass } indice de nomtres de auido: “Lisettoabertabie Condor | Conder Contr de ceauituros| detytes=6 linewe= t J__|_ — Tita i TOT WHET TTT TAS Caer cee umbesierbwes Source weer | feyustyse2_ fees "add. java” logo 050 OIDG GIST TATE D900 GRIT Toe Figura 4.26 © Continuacién. 144 _Prmeieigs De AnQUITECTURA DE COMPUTADORAS, Posicién Cédigo Mneménico Significade 0x00e3 0x10 bipush Colocar proxima palabra en 1a pila Ox00ed Ox0f 15 Argunento para bipush Ox00e5 Ox3c store 1 Extraer de la pila 1a variable local 1 0x00e6 OxLD ~—-bipush Colocar proxims palabra en 1a pila Ox00e7 0x09 Argumento para bipush variable local 2 La conatante 0 ka variable local 3 0x00e8 Ox3d istore_2 © Extraer Ox00e9 0x03 iconst_0 Colocar en la Ox00ea Ox3e kxtraer de la Ox00eb Ox1b Colecar en la ia variable local 1 Ox00ec Oxle Colocar on 1a Ja variable local 2 ox00ed 0x60 Sumar los dos elementos superiores de 1a pila Ox00ee ox3e store 3 Extraer de la pila la variable local 3 Ox00ef Oxbl return Retornar figura 4.26 » Versin desensamblada del cédigo que implementa el pragrama Java de la figura 4.24 En este capitulo se ha presentado la arquitectura de programaciOn ARC y se han estudiade algu- nas propiedades generales de las arquitecturas de programacién. En el disefio de un juego de instrucciones se debe lograr un balance entre el rendimiento del sistema y las caracteristicas de la tecnologia en {a que se implementa el procesador. La interaccién entre la CPU y la memo- ‘ia es una consideracién clave. La forma en que se calcula la direccién cuando se realiza un acceso a memoria se denomi- ‘na modo de direccionamiento. Se han examinado las secuencias de cétcula que pueden combi- narse para implementar un modo de direccionamiento. También se han anatizado algunos ca- 0s espectticas comdnmente identificades por nombre. Se han anatizado, ademés, tas distintas partes de un ststema de computacién que juegan al- ‘pin papel en la ejecucion de un programa. Se ha podido delerminar que un programa esta cons- truido con secuencias de instrucciones, Jas que se obtienen del juego de instrucciones de la GPU. En el capitulo siguiente se analizard la torma en que estas secuencias de instrucciones se traducen en cédigo objeto. Para lectura posterior El material de este capitulo es, en su mayor parte, un resumen de la experiencia acumulada a lo lar- {90 de cincuenta afios de disefio de computadoras de programa almacenado. Si bien cada genera- ci6n de sistemas de computaci6n se identifica con una tecnologia circutal especttca, han existido también algunas arquitecturas de programacién historicamente importantes. En los sistemas de pri- ‘mera generacién de los afios 1950, come la EDVAC de von Neuman, la UNIVAC de Eckert y Mauchly, y a IBM 701, la programacién se realizaba a mano en lenguaje de maquina. Aun siendo simples, ¢s- capirune 4 + LA angumrecTuna oe proenamaciOn 145 {as arquitecturas de programacién detinieron los conceptos fundamentales respecto de cédigos da oneracién y operandos, Elconcepto de una arquitectura de pragramacién como entidad con identificacién propia puede en- contrarse en los diseffadores del sistema IBM $/360. Las arquitecturas VAX de Digital Equipment Cor- poration pueden rastrear sus propias raices en este perfoda, en el que se llevaba a cabo el desarrollo de fas minicorputadoras POP-4 y POP-8. Tanto Ia 360 como a VAX son arquitecturas de dos direc cones. Las arquitecturas mas signficativas de una sola direceién incluyen al procasador Intel 8080, antecesor de la moderna arquitectura 80x86, y a su contemporéneo 280 de Zilog. Como arquitectura de cero direccianes es de significacién historia la computadora Burroughs B5000. Hay gran cantidad de referencias que cubren los distintos lenguajes de méquina existentes. Son demasiadas para ser detallados aqul y, en consecuencia, solo se mencianan algunos pocos de los casos mas celebres. Los lenguajes de maquina de las maquinas de Babbage se datalian en el texto de A. G. Bromlay. Ei lenguaje de maquina de la vieja computadora del Institute for Advanced Study (JAS) esta tratado por W. Stallings. G. W. Struble analiza el lenguaje de maquina de la IBM 360, an tanto que ei dei procesador 68000 se puede encontrar en A. Gilly otras, y el de SPARC en el texto correspondiente. Una descripeién completa de la méquina virtual Java y el formato de archivos de clase de Java tue desarrollado por J. Meyer y T. Downing Bromley, A. G., “The Evolution of Babbage's Calculating Engines", en: Annals of the History of Computing, vol. 9, 1987, p.p. 113-138. Gill, AE. Corwin y A, Logar, Assembly Language Programming for the 68000, Prentice Hal, 1987. Meyer, J. y F. Downing, Java Virtual Machine, O'Reilly & Associates, 1997. SPARC International, Inc., The SPARC Architecture Manual: Version 8, Prentice Hall, 1992, Stallings, W., Computer Organization and Architecture, 4 ed., Prentice Hall, 1996. (Traduccién at espatiol disponible: Organizecién y arquitecura de computadores, 5° ed., Prentice Hall, 2000.) Struble, G. W., Assembler Language Programming: The IBM System/360 and 370, 2 ed,, Addison Wesley, 1975. Problemas 4.1 Una memoria tiene 2 posisiones direccionables. Cul es la menor cantidad de bits requeri- da en la palabra de direcciones que permite direccionar todas las 2** posiciones? 4.2 {Cuéles son la primera y la Gitima direcctén de una memoria de 2* bytes si !a menor estruc- tura direccionable es una palabra de cuatro bytes? 4.3 Ena figura 4.20 se muestra e! mapa de memoria de ARC. a. {Qué eantidad de memoria (en bytes} tiene disponible para cada uno de los médulos de me- ‘motia de video adicionales? (Se pide la respuesta en la forma de potencias de 2 0 suma de potencies de 2, por ejemplo, 2"°) 146_pauciptos ne annurTECTURA SE COMPUTADORAS. b. Si se desplaza un dedo por sobre la pantalla sensible al tacto, las posiciones horizontal (x) ¥ verlicat (y) del movimiento se actualizan en registros que se encuentran en las direcciones (FFFFFO),g) (FEFFF4),,, espectivamente, Cuando se eseribe un 1 en el registra accesible ena direccin (FFEFEC),,, la pantalla parpadea, tras lo cual Ja estructura de hardware pone en cero la direccion (FFFFEC),, sip que el programa deba realizar dicha operacion. Escribir un programa ARC que haga parpadear la pantalla cada vez que cambie la posicién del usua- tio. Utitizar como esqueleto del programa el que se muestra a continuacién: begin 1d [x], #17 !1os registros 8x7 y %r8 apuntan a las coordenadas, Jd (yl, #28 !x © y de la pantalla 1d [flash], %r9 !el registro #r9 epunta a 1a posicién de parpadeo loop: 1d #17, $r1 !Cargar los valores actuales x e y de la 1d #r8, #r2 !posicién de pantalla en #r1 y &r2 ld [old x], 13 !Cargar los valores anteriores x e y de la posicién Jd [old_y], $ré !de pantalla en %r3 y tra ornee #13, %r0, tr3 !Complementar a 1 el valor old_x addce #3, 1, 8x3 !Complementar a 2 el valor old_x addee trl, &r3, #3 !#r3 <- x - old x be x_not_moved 'Saltar si no hubo cambio n x ba moved !x cambio, no hace falta controlar y X_not_moved: !Ingresar cbdigo de programa aqui, lalrededor de cuatro lineas <- CODIGO DE USUARTO AQUI !Se accede a esta parte del codigo !solamente si se movi el cursor de 1a pantalla ! Parpadeo de pantalla, almacenar nuevos valores de x e y, repetir moved: orce #r0, 1, @r5 ! Cargar el registro $r5 con 1 st x5, %r9 ! Guardar el 1 en el registro de parpadeo st ‘trl [old_x] | Actualizar los valores anteriores st x2 [old_y] | de la posicion ba 2oop | Repetir flash: #FFFEC !Fosicion del registro de parpadeo x1 #PFFFCO ! Posicién del registro de coordenada x yt #FFEFEC4 ! Posicion del registro de coordenada y old x: 0 !valor anterior de x old_y: 0 !Valor anterior de y vend ‘capivuin 4 + us ARQUITECTURA CE PROGAAMACIGN 147 4.4 Escribir una subrutina para ARC que realice una operaci6n de intercambio entre los operandos de 22 bits x = 25 € y= 50, los que se encuentran almacenados en memoria. Usar la menor cantidad posible de registros. 4.5 A continuacién se muestra una seccin de cédigo simbdlico de ARC. Qué functén cumple el programa? {Suma ndmeros o limpia algo? ¢Simula un lazo for, un lazo while o alguna otra co- sa? Supaner que ay b san posiciones de memoria que se encuentran definidas en algin otro ‘ugar del cbdigo. ld (k], xl addec #1, -4, &r1 st rl, [k) bneg x ld fal, Srl, $2 ld [b], Srl, $3 addee @r2, 4r3, tr4 st tr4, trl, (c) bay X: mpl @ri5 + 4, #0 k: 40 46 Un sistema buscador contiene un pequefio procesador con una memoria de 27 palabras de ocho bits. La arquitectura de programaciéa tiene cuatro registros: RO, R1, R2 y R3. Et canjun- to de instrucciones se muestra en la figura 4.27, asi como los cédigos binarios correspondien- tes a cada registro, al formato de instruccién y a los mods, los que determinan si el operan- do és un registro (bit de modo = 0) o una posici6n de memoria (bit de modo = 1). Uno de tos, ‘operandos 0 Jos dos pueden estar en registros, pero no pueden ser simulténeamente posicio- mies de memoria, Si el oparando arigen o el de destino corresponden a una posicién de memo- ia, No se utilizan los campos de origen o de destino de la instruccién, dado que en su lugar se utiliza el campo de direcciones. a. Eseribir un programa que uilice cOdigo objeto {no simbélico} para intercambiar fos conte- nidos de tos registros RO y R1. De ser necesario, pueden utilizarse los otros registros, pero no se debe emplear posicién alguna de memoria. Usar no més de cuatra fineas de cédigo (pueden ser menos). Colocar ceros en cualquier pasicién cuyo valor no interese. b, Usar cédigo abjeto para escribir un programa que intercambie los contenidos de las posi- ciones de memoria 12 y 13. Como en fa consigna anteriar, esta permitido utilizar los regis tros que sean necesarios, pero no posiciones de memoria. Nuevamente, colocar ceros en cualquier posicién cuyo valor no interese. 4.7 Un programa ARC invoca la subrutina foo, a la que le transfiere tres argumentos, a, by c. La subrutina tiene dos variables locales, m y n. Mostrar la posicién del puntero de pila y tos con- 148_prmcieios n€ ARQUITECTURA DE COMPUTADOEAS. FORMATO DE INSTRUCCION Moda Cédigode Moto des ‘operscign origen Origm tino Destino Diteccién del operand TH PATRONES BINARIOS CONJUNTO DE INSTRUCCION ‘Modo [Patrén binario] — [stnem6nico | Codigo de operecicn Significade Registro 0 LOAD 000) esting & origen o memoria Direc v STORE. 001 Destino © memoria orgen! REGISTRO ‘ADD. 10 Destino + origen més destino PATRONES BINARIOS AND or Destino « (AND) origen,destion Regio | Pauubimane] | 82ERO 100 Sellars origen = 0) ~ RO 0 JUMP lor Saliarincondicional Rr nT ‘COMP 0 esting complementa de origea we 10 RSHIFT 1 Destino « origen desplazado un lugar derecha RI in Figura 4.27 » Arquitectura de programacién de un sistema buscador ce bo'silo, tenidos de los elementos relevantes de la pila, cuando se invoca la subrutina mediante la téc- nica de utilizacién de la pila, en los puntos del programa que se indican, Nétese que la subru- tina no devuslve valor alguno. a. Justo antes del llamado, en el r6tulo x antes de a instruccién cat. b. Cuando se compteta la zana de pila para £00. c. Justo antes de ejecutar la instruccién 4d, an el rotulo = (0 sea, cuando se reinicia la rutina que invoca a foo). Utilizar la notaci6n de pila de ta figura 4.19, ! Empujar a la pila los argumentos a, b, ¢ x: eall foo 2: ld rl, tr2 foo:! Aqui comienza la subrutina ys jmpl tri5 +4, @r0 APITULG 4 + LA ARQUITECTURA DE PROGRAMACION 149 4.8 La instrucci6n sethi carga solo los 22 bits més signiticativos de un registro. Por qué? Se- ria mucho més dil que sethi cargara los 32 bits del registro completo, éCudl es el problema que surge si sethi carga la totalidad de los 32 bits? 4.9 {ual de las tres convenciones para lamado a subrutina analizadas en este capitulo es la que se utiliza en la figura 4.147 4.10 Un programa compilado para la arquitectura de programacién SPARC escribe el entero no sig- nado de 32 bits OXABCOEFO1 en un archivo y lo vuelve a leer correctamente. E| mismo progra- ‘ma compilado para Pentium también funciona en forma correcta. Sin embargo, cuando el ar- chivo se teansfiere entre maquinas, el programa lee incorrectamente al entero desde el archivo como OxO1EFCDAB. gCudl es el problema? 4.11 Gon referencia a la figura 4.25, indicar as instrueciones en lenguaje simbdtico Java para él c6- digo que se ubica entre las direcciones 0x011¢-0x0122. Utilizar al formato sintactico indica- do en las directiones 0x00e3-0x00eE dela misma figura ‘Ser necesario hacer uso de las siguientes instrucciones Java: invokespecial n (codigo de operacién 0x7): invoca un métode con indice n en el con- junto de constantes. Debe notars¢ que n es un indice de 16 bits que viene a continuacion det céidigo de operacién invokespecial. alload_0 (cédigo de operacién ox2a): colocar fa variable local 0 en la pila. 4.12 ¢E! formato de JVM para la representacion de nimeros es big enaian o litte endian? Ayuda: examinar fa primera linea del programa bytecode de la figura 4.24. 4.13 Escribir un programa para ARC que implemente el programa bytecode de la figura 4.26. Supo- nner que, en forma similar a la del c6digo de la figura, los arguments se transfleren dentro de la pila y que e! valor que se retorna vuelve dentro de la cabeza de la pita. 4.14 Suponer una implementacién circuital de JVM, que pueda ejecutar tos bytecodes de Java di- rectamente en hardware de 32 bits, a. ECuanto tréfico en bytes se genera cuando se ejecula el programa de la figura 4.267 b. Resolver el problema 4.13 y calcular ef tréfico de memoria generado por la ejecucion de di- cho programa. Comparar ese trétice con la cantidad generada por el programa planteado en el item a del presente problema. Sila mayor parte del tiempo de ejecucién de un programa se debe a sus accesos a memorla, zcudnto més rapido funcionard el programa aqui plantea- do con relaci6n al de la figura 4.26? 4.15 {Puede un programa bytecode Java tuncionar ala misma velocidad que un programa escrito en el lenguaje nativo del procesador? Justificar la respuesta en no mas de dos parrafos. 150 PRIKCIPHOS DE ARQUITECTURA DE COMPUTADORAS: 4.16 a.Escribir programas en arquitecturas de tres direcciones, dos direcciones y una direccién ‘que puedan calcular la funcion A = (B -G) * (D - £). Suponer codigos de operacidn de 8 bits, operands y direcciones de 16 bits y transferencias de datos hacia y desde memoria ‘efectuadas en conjuntos de 16 bits. Suponer, asimisma, que el cddiga de operacion debe transterirse desde la memoria por si mismo. El codigo no deberd sobrescribir ninguno de los operandos. Podrén uiilizarse todos los registros temporarios que fuesen necesarios. b. Calcular el tamafio del programa medido en bytes. c. Calcular el trafico de memoria que generard el programa al momento de ta ejecuci6n, inclu- yendo las bisquedas de las instrucciones. 4.17 Repetirel problema 4.16, pero utilizando el lenguaje simblico de ARC, Ntese que el mnemo~ nigo para la operaciGn de resta es subee, en tanto que el de la multiplicacién es smu. Capitulo 5 Los lenguajes y la maquina En el capftulo anterior se anatizaron las relaciones entre la arquitectura de programacién, el lenguaje ensamblador y el lenguaje de maquina, También se analizaron con cierto de- talle el procedimiento utilizado por las instrucciones para realizar transferencias entre re- gisteos y el movimiento de datos entre 1a memoria y la unidad central de proceso. Sin embargo, solo se trataron en forma breve los conceptos relacionados con el procedimien- to de ensamblado y con el enlace (linking) y la carga de programas. En este capitulo se pretende ampliar la visin de las relaciones entre los lenguajes de computacién y Ja mé- quina, El anélisis comienza por la compilacién, definida como el proceso de traduccién de un programa escrito en lenguaje de alto nivel a otro, funcionalmente equivalente, expresado en lenguaje ensamblador. A continuacién se trata el proceso de ensambla- do (assembly), definido como 1a traduccién det programa escrito en lenguaje ensam- blador a otro, funcionalmente equivalente, expresado en lenguaje de mAquina. El and- lisis comtinga con los procesos de enlace (linking), consistente en uniren un programa ‘unico distintos médulos que fueran ensamblados en forma separada, y de earga, lo que implica el traslado del programa a memoria y su preparacién para ser ejecutado. Final- mente, se analiza el uso de macroinstrucciones del lenguaje ensamblador, las que pueden considerarse como elementos similares a los procedimientas en el momento del ensamblado, con la diferencia de que se expanden, en el programa simbélico, en cada una de las posiciones en las que se l inyoca. 5.1 El proceso de compilacion ‘Como se verd en secciones posteriores de este capitulo, el proceso de traducir un progra- ma escrito en lenguaje ensamblador (simbélico) a lenguaje de maquina es muy directo, debido a que hay una relacién uno a une entre las sentencias del tenguaje simbélico y los cédigos de maquina equivalentes. Los lenguajes de alto nivel, por el contrario, presentan un probfema mucho més complejo. 152_priwcsp10s ne ARQUITECTURA DE COMPUTADORAS. 5.1.1 Los pasos de la compilacién Considérese una simple sentencia de asignacién, por ejemplo: A=B+ 4; La conversién de esta sentencia en una o més sentencias de lenguaje simbélico enfrenta al compilador con una cantidad de tareas relutivamente complejas: + Reconocer dentro del texto del programa los sfmbolos baisicos del lenguaje, por ejem- plo, los identificadores tales como A y B, definiciones tales como la del valor constan- te 4 y delimitadores como = y +. Esta parte de la compilacién se suele conocer como anlisis lexicogrético. + Analizar tos simbolos para reconocer la estructura de programacién subyacente. En el ejemplo, el analizador (parser) debe reconocer que ta sentencia wtilizada corres- ponde a una sentencia de asignacién del tipo: Identificador “=” Expresién en la que, posteriormente, se unalizaré Expresin con el objeto de detectar una for- ma del tipo: Identificador “+" Constante Este procedimiento suele denominarse anilisis sintactico. + Andlisis de nombres. Asociar los nombres A y B con variables particulares del pro- gramia y, posteriormente, con posiciones particulares de memoria en las que se alma- cenardn dichas variables al momento de la ejecucién del programa. + Andlisis de tipo. Determinar el tipo de todos los datos requeridos. En el ejemplo an- terior, las variables A y B y Ia constante 4 se reconocerian, en ciertos lenguajes, co- mo de tipo entero. Los anilisis de nombre y de tipo se relacionan a menudo para in- cluirlos bajo el nombre de andlisis semAntico. + Asignacién de acciones y generacién de eédigo. Es la acci6n de asociar las senten- ccias de programa con la secuencia apropiada det lenguaje ensamblador. En el ejemplo de Ja sentencia anterior, la secuencia de lenguaje simbélico podria ser la siguiente: Sentencia de asignacion simple cargar la variable B en un registro calcular el valor de la expresion asignar ld [B}], tr0, trl add rl, 4 ,tr2 st tr2, r0, (A) CAPITULO 5 » LOS LENSUAJES Y La MAQUINA 153 + Ademis de las mencionadas, existen acciones adicionales que deben ser resueltas pore! compitador, como la asignacién de variables a registros, el control del uso de registros y, si asf lo quisiera el programador, la optimizacién del programa, 5.1.2 La especificacién del mapeo Cuando se desarrolla el compilador, se debe incluir en su estructura la informacién acer- ca de la arquitectura de programacién particular del procesador para el cual se lo desarro- Ia, (Notese que la arquitectura de progcamacién sobre la que el compilador se ejecuta no necesita ser igual a la del eédigo que el compilador genera, proceso conocide como eom- pilacién cruzada (cross compilation.) Esta inclusién suele denomninarse especificacién de asignacién del compilador. Por ejemplo, quien escribe compiladores debe decidir c6- ‘mo ubicar ios distintos tipos de variables y constantes dentro de los recursos de la maqui- na, Esto puede ser funcién tanto de fa maquina como del lenguaje de alto nivel. En el len- guaje C de programacién, por ejemplo, los valores enteros pueden ser de 16 bits, de 32 bits © de algiin otro tamaiio, Mientras tanto, Java especifica que el tamaiio de todas las variables enteras debe ser de 32 bits. Para el ejemplo de la secci6n anterior, aplicado al lenguaje C, en ARC los enteros serdn convertidos en palabras de 32 bits. El autor del compilador debe tener en cuenta tambign las caracteristicas y limitacio- nes de la méquina cuando convierte construcciones desde el lenguaje de alto nivel a sen- tencias del lenguaje simbélico o a secuencias de sentencias. Por ejemplo, el conjunto de instrucciones de ARC requiere que todos los operandos aritméticos sean constantes in- mediatas o variables asignadas a registros. Por lo tanto, el compilador debe generar el c6- digo necesario para acomodar todas las variables en registros antes de poder ejecutar cualquier instruccién aritmética. Eso justifica, en el ejempto anterior, la instruceién ld [B], 8 fl Este texto se centra en el andlisis de los métodos que permiten convertir las construcciones generadas en un lenguaje comin de alto nivel en construcciones equivalentes en el lenguaje simbélico. Los detalles referidos a los andlisis lexicografico, sintéctico y semdntico se reser- van para Jos textos que tratan especfficamente el tema de compiladores. (En la seccién “Pa- ra lectura posterior”, que se encuentra al final del capitulo, se mencionan diversos textos so- bre compiladores para aquel lector que tenga interés especial en el tema.) 5.1.3 Cémo convierte el compilador las tres tipos de instrucciones a! cédigo ensamblador Se analizard en detalle la forma en que se Neva a cabo la conversiGn de los tres tipos ba~ sicos de instracciones ~para el movimiento de datos, aritméticas y de control~ desde el lenguaje de alto nivel hacia el lenguaje ensamblador. Tanto para el andlisis como para los 154 _pruncipios DE ARQUITECTURA DE COMPUTADGRAS: ejemplos incluidos se utilizaré el lenguaje C como lenguaje de programacién. Se adopta C debido a su popularidad y también a sus sintaxis y serndintica, las que, si bien son de al- to nivel, tienen cierta cercania con los conceptos de los lenguajes de bajo nivel. Ei lector ‘que no conozca el lenguaje C no deberia preocuparse por esta elecciGn, dado que la sin- taxis y la semintica de C son sencillas de entender y de trasladar a otros lenguajes de al- to nivel, Almacenamiento de variables en memoria En el ejemplo precedente, asf como en la mayor parte de los ejemplos incluidos en este texto, se ha supuesto que se puede tener acceso a las variables directamente a través de su nombre, el que se asigna a una posicién de memoria determinada en el momento de fa traducci6n del programa simb6lico, conocido como “tiempo de ensamblado” (assembly time). En el ejemplo anterior, A = B + 4, se supone que las variables A y B tienen di- recciones que se conocen recign en el momento en que se realiza la compilaci6n. De he- cho, solo las variables globales, denominadas en C como variables estéticas, tienen di- recciones conocidas en el momento de la compilaciGn. Las variables declaradas dentro de funciones o dentro de bloques que no sean explicitamente declaradas como estiticas © globales, solo toman existencia cuando se ingresa en dicho bloque o funcién, desapa- reciendo cuando la funcién o bloque se invoca por Gltima vez. Estas variables se conocen como variables locales o, en el caso de C, como variables autométicas. En la mayoria de los programas, las variables locales se emplean con més frecuencia que las variables globales. Dada la naturaleza efimera de las variables locales, una forma natural de implemen- tarlas es a través del uso de una pila tipo LIFO, de las que se han descripto en el capitulo 4. Las variables que se almacenan en la pita cobran valor cuando se crea la pila y se in- voca la funcién, en tanto que desaparecen cuando se sale por tiltima vez de dicha funcién. Si bien en el capitulo anterior se utilizé el registro puntero de pila &sp para el acceso a la pila, es habitual copiar el contenido de $sp a otro registro, Hamado puntero base $£p, el que se utiliza para el acceso a las variables de Ta pila durante la vida de la funcién, Es- to se justifica debido a que durante la ejecucién de la funcidn sucle utilizarse la pila para el almacenamiento de variables temporarias, las que continuamente se ingresan y se sa- can de la pila. Como consecuencia, se produce un desplazamiento variable entre 8p y Jos elementos almacenados en la pila. El uso de #£p implica que el compiladar puede de- terminar un desplazamiento constante entre ¥£p y un valor dado almacenado en ta pila, desplazamiento que se mantendrd fijo a lo largo del proceso, Para acceder a las variables, de la pila se utiliza el direecionamiento base. Por ejemplo, una variable en ARC ubica- da en Ia pila en una posicién que se encuentre 12 bytes por debajo de! valor de &£p pue- de cargarse en el registro $11 por medio de la instruccién ld %£p, -12, ¢r1 capiuco 5 © LOS LENGUAJES Y LA MAQUINA 155, O bien, utilizando una notacién mas comin, ld [tfp - 12], tri El uso del diseccionamiento base permite entonces que el cilculo de direcciones del tipo “sumar el contenido del registro ®£p con ~12" se lleve a cabo en una sola instrucciGn. El direccionamiento base es bastante comin como para que cualquier conjunto de instruccio- nes lo ineluya dentro de sus direccionamientos. Algunos conjuntos de instrucciones con- tienen modos de direccionamiento atin més complicados, los que se utilizan cuando es ne- cesario ef acceso a estructuras de datos comptejas almacenadas en el marco de la pila. Para insistir sobre este punto, lus variables que se almacenan en Ja pila estén asignadas a direcciones que no se conocen hasta el momento de la ejecucién. Sus direcciones en el mo- mento de la compilacién se conocen solo como desplazamientos respecto de & £p. La direc- cin real de memoria asignada ala variable solo se determina en el momento en que se ingre- sa en la funcién, No obstante, aun cuando sea mucho més comiin el uso de direcciones variables de pila como [ $£p — 12} queel de direcciones globales como A, el andlisis que sigue considerard el uso de variables globales debido a que es mucho més sencillo entender Jarelacién entre el nombre de la variable, definido en el Lenguaje de alto nivel, y su direccién especificada en el lenguaje de méquina. Con esta salvedad, se analizarin a continuacién tres tipos de sentencias habitwales en los programas: instrucciones para movimiento de datos, arit- méticas y de control de secuencia, 5.1.4 Movimiento de datas Ademis de las variables escalares més simples, la mayoria de los lenguajes de programa- cidn proveen diversos tipos de estructuras de datos complejas, incluyendo estructuras de registro fijo, como el tipo de datos struct del lenguaje C, similar a ta estructura record de Pascal, y el tipo de dato array, comiin a la mayoria de los lenguajes de programacién. Estructuras Para ejemplificar el uso de struct en C, puede considerarse la representacién de un punto definido en un espacio tridimensional por tres coordenadas enteras x, y, 2. En C, es- ta estructura se declara como struct point { int x; int y; int 2; 156_PRINCIPIOS DE ARQUITECTURA DE COMPUTADORAS. Una alternativa aesta struct se podria definir a través de la sigui struct point pt; Habiendo definido la estructura correspondiente a pt, el programador puede referirse en forma individual a cada uno de los componentes de pt, a través de notaciones tales co- mo pt-x, que se refiere al componente x de la estructura pt. El compilador acomoda- ria esta estructura en memoria en la forma de tres posiciones de memoria consecutivas. La direccién de memoria de la estructura completa se toma sobre la base de la menor de todas, 0 direccién de base de la estructura, de modo que la componente x se almace- aria en la direccién pt, ta componente y en pt + 4, y la componente 2 en pt + 8, Por lo tanto, la componente y de pt se podria cargar en el registro $1 por medio de la ins- truccién ld [pt + 4), $r2 ferl cy Arreglos La mayor parte de los lenguajes de programacién permite también la declaracién de arre- glos de objetos, esto es, un conjunto de componentes idénticos a los que se puede hacer referencia tanto en forma individual como colectiva, En C, un arreglo de 10 enteros se puede definir como int A[10]; Esta definicién dard como resultado un conjunto de 10 enteros, indexados de 029. Los componentes de una struct deben nombrarse en forma explicita durante la programacién, por ejemplo, pt . 2. No se admiten las referencias del tipo pt. 4 en las que i es una variable cuyo valor se calcula en el momento de la ejecucién. En el caso de. Jos arreglos, por otra parte, el indice del arreglo si puede calcularse en el momento de la ejecuciGn. Por ejemplo, el programador puede especificar el elemento A[ i] del arreglo, en que i es una variable cuyo valor se determina en el momento de la ejecucién, el que puede tomar cualquier valor entero entre 0 y 9. Mientras que en C el indice del primer elemento del arreglo siempre asume el valor de 0, otras lenguajes de programacién ad- miten mayor flexibilidad. Por ejemplo, en Pascal, se permiten declaraciones de arreglos del tipo Ai array (-10 .. 10] of integer Este tipo de declaraci6n da como resultado un arreglo de 21 elementos cuyos indices van desde -10 hasta +10. ‘capiruno 5 + Los LeNGUAJES ¥ LA MAQUINA_157 El acceso a los elementos del arreglo ofrece una dificultad algo mayor debido a la men- cionada necesidad de calcular el indice en el momento de la ejecucién y a la posibilidad de que los indices no se inicien en 0. La expresién general que permite calcular Ia direccién. de memoria de un elemento de un arregio en el momento de la ejecuci6n esté dada por Direccién del Elemento = BASE + (INDICE - COMIENZO) * TAMANO Expresién en la que BASE es la direeeidn de comienzo del arreglo, [NDICE es el indice del elemento deseado, COMIENZO es el indice inicial del arreglo y TAMANO es el ta- mafio del elemento individual medido en bytes. Asi, el elemento 5 del arreglo declarado anteriormente deberia tener una direccién de A + (5 —(-10)) *4=A+ 60. En el lenguaje simbélico de ARC, suponiendo BASE en 812, [NDICE en 813, CO- MIENZO en 814 y TAMANO =4, el cédigo necesario para la carga de un elemento del arreglo en memoria seria: sub %r3, $4, $r6 1 x6 « INDICE ~ COMIBNZO sll 4x6, 2, %r6 1&6 © bré * a ld [A + $r6], rl ! @rl © valor del arreglo En esta expresi6n, 811 es Ia instrucciGn de desplazamiento logico a izquierda (shift left logical), que desplaza el registro 816 en dos bits a la izquierda, para permitir el acceso de dos ceros por la derecha del registro. Nétese que el acceso a un elemento del arreglo cuesta tres instrucciones, las que pueden ser mas si TAMANO no es potencia de dos. N6- tese, asimismo, que en el lenguaje de programacién C, que especifica COMIENZO = 0, se ahorra una instruccién del lenguaje de maquina con cada acceso al arregto. Esto pro duce una notable economia en los célculos cientificos y de ingenieria, en los que son ha- bituales las referencias a arreglos. 5.1.5 Instrucciones aritméticas Las instrucciones aritméticas se implementan en forma bastante similar a lo que se espera dada su utilizacién, No obstante, en aquellas méquinas que utilizan estructura de carga/des- carga, como ARC y otras méquinas comerciales RISC, existen algunas posibles complica- ciones. Independientemente de la cantidad de registros que Ta estructora de la maquina ofrez- ca, siempre es posible que el compilador encuentre alguna instruccién aritmética que requiera mayor cantidad de registros que la disponible. En este caso, el compilador deber4 almacenar temporariamente algunas variables en la pila, debido a que se “derramaron” los registros. Los compiladores utilizan técnicas sofisticadas para determinar qué registros se en- ccuentran disponibles, como la técnica gréfico-tedrica, conocida come técnica de coloreo de registros, y para decidir cudndo el valor contenido en un registro deja de ser requerido para l almacenamiento de un valor particular, en un anélisis conocido como de “vivo o muerto”. 158_Patvctrins O€ ARQUITECTURA OE COMPUTADORAS 5.1.6 Control de secuencia Muchas arquitecturas de programaci6n utilizan bifurcaciones condicionales e incondicio- nales, asf como Jas banderas aritméticas de la CPU para la implementaci6n de sus estruc- turas de control de secuencia, En esta seccién se analiza la forma de implementacién de las sentencias de control més comunes. Lasentencia goto La sentencia de control més trivial es la sentencia goto, del tipo goto rétulo, la que a nivel de lenguaje de maquina se implementa con una instruccién de salto incondicional ba (branch always (saltar siempre): ba rotulo Lasentencia if-else La sentencia i£-e1se del lenguaje C tiene una sintaxis del tipo if (expr) sentencial else sentencia2 a que se interpreta como “si la expresién considerada toma un valor verdadero, ejecutar la sentencia I, en caso contrario ¢jecutar la sentencia 2". Por lo tanto, el compilador debe eva- luar el vator de verdad de expr y ejecutar una de dos sentencias segtin la verdad! 0 falsedad de Ia expresin expr. Supénguse, por razones de brevedad, que en el ejemplo siguiente la expresi6n a evaluares (81 == $12), La introducci6n de la instrucciGn salto por distinto, bne (branch if not equal), permite obtener este c6digo para la imptementacién de la senten- cia if-else subce ri, %r2, trO | fijar banderas, descartar resultado bne Over ! aqui va el cédigo de la sentencia 1 ba End ! salida del if-else Over ! aqui va el cédigo de la sentencia 2 End bewe Nétese que el signo del salto condicional bne, salto por distinto, corresponde a la inver- sade la expresin (8x1 == %r2), en la que se busca Ia igualdad de los dos registros. Esto se plantea asf para que el programa en lenguaje de maquina vaya directamente ala sentencia | si se cumple la condicién evaluada, en tanto que produce la bifurcacién, sal- tando por encima de esta sentencia, si la condicién no se cumple. capiruio 5 » Los LENGUAJES Y La maquina 159 La sentencia while La semtencia whi. Le en el lenguaje de programacién C tiene como sintaxis while (expresién) sentencia; Esta sentencia tiene como significado: “evaluar la expresi6n: si es cierta, ejecutar la sentencia y repetir el proceso hasta que la expresién evaluada se convierta en falsa”. Li traduccién de esta sentencia al lenguaje de maquina tiene como caracteristic: sante el hecho de que la conversiGn mis eficiente presenta la evaluacién de la expre- sién después del cédigo de la sentencia, Considérese la siguiente sentencia while en el Lenguaje C: tere- while ($rl == 12) tr3 = tr3 + 1; donde, nuevamente, se utilizan variables en registros para simplificar el cédigo. La sen- tencia det lenguaje de alto nivel se implementa en forma eficiente por medio de ba Test True: add %r3, 1, 8x3 Test: subee trl, $r2, %r0 be True Elector podri verificar que el hecho de colocar el c6digo correspondiente a la evalua- cin de la expresi6n por debajo del cédigo de la sentencia resulta mas eficiente que si se Gene la evaluacién antes del e6digo de la sentencia, La sentencia do-while El lenguaje C tiene una sentencia do-whiile, cuya sintaxis es do sentencia while (expresion); do-whi.le trabaja en forma similar a la sentencia while, excepto por el hecho de que la sentencia siempre se ejecuta una vez antes de evaluar la expresién. Se implementa exactamente de la misma forma que while, excepto por la eliminacién de Ja primera instruceién ba. ‘160 _princtetos DE ARQUITECTURA DE COMPUTADORAS La sentencia for La sentencia for del lenguaje C tiene como sintaxis for (exprl; expr2; expr3) sentencia; La definicién de esta sentencia en el lenguaje C dice que la misma equivale a expel; while (expr2){ sentencias expr3; y Por lo tanto, se implementa de la misma manera que las sentencias whi Le anteriores, pe- ro se agrega el c6digo requerido para las expresiones expr y expr3. 5.2 El proceso de ensambtado El proceso de traduccién de un programa expresado en lenguaje simbélico se conoce co- mo proceso de ensambtado. Este proceso ¢s lineal y relativamente simple, dado que hay una relacién directa y univoca entre las sentencias del lenguaje simbélico y sus correspon- dientes expresiones en el lenguaje de maquina, Esto marca una diferencia con el proceso de compilacién, por ejemplo, en el que una sentencia de un lenguaje de alto nivel dado puede traducirse como una buena cantidad de sentencias en el lenguaje de méquina, Si bien et ensamblado es un proceso lineal, es tedioso y proclive al error si se hace a mano, De hecho, el programa ensamblador es una de las primeras herramientas de soft- ware desarrolladas luego de la invencién de la computadora electrénica digital. Los ensambladores comerciales deben ofiecer, al menos, las siguientes prestaciones: + Permitir que el programador especifique la ubicacién de las variables y programas al momento de la ejecucién. (Sin embargo, en la mayoria de los casos el programa- dor no especifica una direccién absoluta de comienzo de un programa, dado que el programa puede ser movido © reubicado por el programa vinculador (linker) y, pro- bablemente, por el programa de carga (loader), de acuerdo con lo que se analizaré més adelante.) * Ofrecerle al programador ta posibilidad de inicializar los valores de los datos en me- moria antes de la ejecucién del programa, + Proveer expresiones nemotécnicas en el lenguaje de programacién para todas las ins- tsucciones del lenguaje de maquina y modos de direccionamiento, y traducir tas apiraio 5 » LOS LENUAIES Y tA rAAQUINA 167 sentencias vélidas del lenguaje simbélico hacia sus valores binarios equivalentes en el Jenguaje absoluto. + Permitir el uso de rétulos simbélicos para identificar 0 representar direcciones y constantes. + Ofrecerle al programador una forma de especificar la direccidn de comienzo de un programa, si existiera, (Por ejemplo, no habria direccién de comienzo si el médulo que se traduce es una funcién o un procedimiento.) * Ofrecer cierto grado de caélculo al momento del ensamblado, + Inclvir un mecanismo que permita la definicién de variables en un programa escrito en Ienguaje simbélico y el uso de Jas mismas en otro programa ensamblado por separado. + Proveer Ja expansién de macro rutinas, o sea, rutinas que puedan definirse una vez ¥y utilizarse tantas veces como sea necesario. A continuacién se ilustra el funcionamiento del proceso de ensamblado a través del pro- ceso de “ensamblado a mano” de un programa sencillo, expresado en lenguaje simbéli- co de ARC hacia su lenguaje de méquina. E] programa a ensamblar es similar ul de la fi- gura 4.13, que se reproduce en la figura 5.1 por razones de comodidad. Al ensamblar el programa se utilizan los formatos de codificacién para ARC que fueran presentados en la figura 4.10, la que se reproduce aqui como figura 5.2. La figura muestra la codificacién del lenguaje de maquina de ARC. Esto es, especifica el lenguaje de maquina binario que el ensamblador debe generar a partir del texto del lenguaje de programacién. 1 kote prograna guna dos nimeros sbegin sorg 2048 wain: id (x), tr la tyh, M2 addec 481, 422, O23 cargar x en el registro ari cargar y on @l registro t2 woe tel tu? st Wr3, G2] Alwacenar el registro ar3 en 2 Jmpl 411544, to 1 Rotorno wis yo 8 BO vera Figura 5.1 © Un programa simple para AAG que summa dos imeros. 5.2.1 El proceso de ensamblado y los ensambladores de dos pasadas La mayorfa de los ensambladores recorren dos veces e! texto escrito en fenguaje simbélico, por lo que se tos conace como “ensambladores de dos pasadas”. En la primera pasada el en- samblador se dedica a determinar las direcciones de todos los datos ¢ instrucciones del pro- grama y a seleccionar qué insirucci6n del lenguaje de maquina debe generarse para cada instrucci6n del lenguaje simbélico, pero sin generar ain el cédigo de maquina. 152_praycipios De ARQUITECTURA OE COMPUTADORAS op Ty a as 20292525 26 28.29 2201928272415 241312181006 om 07 ae 050469 e201 08 Tererveetto eaent (O01 ed | | gn? ion Inaeevocten de ooo] send | on? digp32 Darereaciae (alte) Erneta {0 digpio i xo]. ed ops zai” [ofo'o'o"e'o o'0'o| | fad vo]. ed on zai [a] ‘aml ra]. ee 2p), Fel | [ofolo'o'o'o.o\o'o| | raz Ta] ee op, mi Bima ep] Poreato | [ona] ‘op3_(0p=10) | [ opa (op=11) | [cond] salto 00] Serur/Saito | [010] Branch | [910600 addcs| |Go00s0 1a | |ovor ve | cae i00| setmi | | 020003 endee| |ogoi00 se | | oue:| nes 10| ariembeica 019010 arce 0110] neg 12| Memoria v1g110 emce ont] bea 200110 ert 1900] 53 A110¢0_jrpt 5R alz|vle| Figura §.2 » Formatos de instruccién y formatos PSR para ARC. Las direcciones de los datos y de las instrucciones se determinan en el momento del en- samblado mediante un contador similar al contador de programa, al que se conoce como contador de posicién (Jocation counter). A medida que se desarrolla el proceso de en- samblado, este contador de posicién leva el control de ta direccién de la instruccién 0 del elemento de datos corriente, Generalmente, se 10 inicializa a 0 al comienzo del primer pa- so y se 1o incrementa en pasos equivalentes al tamaito de cada instruccién. La directiva 01g hace que el contador se ubique en el valor especificado por la misma. Por ejemplo, en caso de encontrar la sentencia -org 1000 el contador de posicién adoptari el valor 1000, por lo que la instruceién o dato siguiente se asignard a dicha direccién. Durante esta pasada, el ensambtador realiza también cual- quier operacién aritmética necesaria ¢ inserta las definiciones de todos los rétulos y cons- tantes en una tabla de simbolos. La raz6n principal para requerir una segunda pasada tiene que ver con la necesidad de. permitir el uso de los simbolos dentro de un programa con anterioridad a que sean defi- nidos, lo que se suele conocer como referencia previa. Luego de la primera pasada, el ensamblador tendrd todos sus simbolos definidos ¢ ingresados en la tabla de simbolos, capiroto 5 + Los LEXCUAUES ¥ LA MAowINA 163 por fo que durante Ia segunda pasada podré generar el eédigo de méquina, insertando en el mismo los valores de los simbotos, ya conocidos para ese momento. A continuacién se procederd a efectuar la traduccién manual del programa de la figu- ra 5.1 al lenguaje de miquina. Cuando ef ensamblador encuentra la primera instruccién, ld [x], $21 utiliza un proceso de verificacién de coincidencia de patrones de texto para reconocer ‘que se trata de una instrucci6n de carga. De un andlisis posterior deduce que el mismo iene la forma “cargar desde una direccién de memoria especificada como un valor constante (en este caso x) més €1 contenido de un registro (en este caso $0) hacia un registro (#11 en el ejemplo)”. Esta expresi6n corresponde al segundo de los formatos de memoria representados en la figura 5.2. Al examinar el segundo formato de memo- ria se puede observar que el campo de operaciGn op para la instruccién (1d) es 11. Et destino de esta instruccién 1d se indica en el campo rd, que en este caso es 00001 por el registro $11. El campo op3 para la operacién 1d es 00000, tal como se indi- can el cuadro op3 debajo de los formatos de memoria. El campo rs1 identifica el registro, 80 en este caso, que se suma al campo simm13 para formar la direccién del operando origen. A continuacién, viene el bit i. Nétese que este bit se utiliza pa- ra distinguir el primer formato de memoria (i=0) del segundo (i=1). Por consiguien- te, en este caso, el bit i adopta el valor 1. El campo s.imm1 3 especifica la direccién del rétulo x, que aparece cinco palabras después de la primera instruccién. Dado que la primera instrucci6n se plantea en la direcci6n 2048 y, ademis, que cada palabra es- (4 compuesta por cuatro bytes, la direccién de x se encuentra 5 x 4 = 20 bytes después del comienzo del programa, La direccién de x es, por lo tanto, 2048 + 20 = 2068, re- presentado por la palabra binaria 0 1000 0001 0100. Bste patrén cabe dentro del cam- po simm13, signado y de 13 bits. La primera linea, por ende, se traduce en la siguiente combinacién binaria: 11 00001 000000 00000 1 0100000010100 La préxima instruccién tiene un formato similar, siendo su patrén binario el que se mues- tra a continuacién: 11 09910 900000 90000 1 0100000011000 es ss ss or a] mm El proceso de ensamblado contimiia hasta que se logra Ia traduccién de la totalidad de las ‘ocho lineas, segtin se muestra a continuacié: 164 Priuciptos DE ARQUTECTURA DE COMPUTADORAS ld [x], rl 1100 0010 0000 0000 0010 1000 0001 0100 ld ly], 3x2 1100 0100 0000 0000 0010 1000 0001 1000 addcc trl, $r2,%r3 1000 0110 1000 0000 6100 0000 0000 0010 st @r3, [2] 1100 0110 0100 0000 0010 1000 0001 1100 jmpl r15+4, x0 1000 0001 1100 0011 1110 0000 0000 0100 15 9000 0000 0000 0000 0000 G000 0000 1111 9 0000 0000 0000 0000 9000 0900 0000 1001 0 0000 0000 0000 0000 0000 O000 0000 0000 Como técnica general, el proceso de ensamblado se lleva a cabo leyendo las sentencias del Ienguaje simbélico en forma secuencial, desde la primera hasta la dltima, y generan- do el cédigo de maquina para cada una de las sentencias. Como se ha mencionado ante- riormente, las referencias previas causan una dificultad importante en esta metodologfa. Si se considera el fragmento de progsama de la figura 5.3, cuando el ensamblador en- cuentra la sentencia de cal 1 no sabe la ubicacién de sub_x, debido a que atin no detec- t6el rétulo correspondiente, Por consiguiente, la referencia se ingresa en la tabla de sim- bolos y se sefiala como indeterminada. La referencia se resuclve posteriormente en la secuencia del programa, cuando el ensamblador detecta ta definicién de sub_r. Mas adetante se describe el proceso de canstruccién de una tabla de simbolos. OO Geli der | punso en que se invoca la subrutina sub_e:0 srl, (w] | Punto en que se define 2a subrucine Figura 5.3 = Un ejemplo de referencia previa. .2.2 El proceso de ensamblado y la tabla de simbolos En la primera pasada de un proceso de ensamblado de dos pasadas se crea una tabla de simbolos. Un simbolo puede ser un rétulo 6 un nombre simb6lico que se refiera a un va- lor utilizado durante el proceso de ensamblado. Como ejemplo del funcionamiento de un ensamblador de dos pasadas, considérese la traduccién de! cédigo de la figura 4.14. Si se comienza a partir de fa sentencia de «begin, el programa ensamblador encuentra la sentencia org 2048 capiTuLo 5 + Los LENGUAJES ¥ LA MAQUIMA 165, Esta sentencia hace que el ensamblador coloque el contador de posiciones en 2048, con lo que el proceso de waduccién se inicia en esa direccién. La primera sentencia encontrada es astart .equ 3000 Se genera en Ia tabla de simbolos la entrada correspondiente a a_start, a la que se le asigna el valor 3000, (Debe notarse que las semencias . equ no generan cédigo alguno, por lo que no se les asigna direccién durante el ensamblado.) El proceso de traduccién continéa y el traductor encuentra la primera instruccién del lenguaje ld [length], r2 Esta instruccidn se traduce en la direccién 2048 especificada por el contadar de posicio- ines, Se procede a incrementar el contador en un valor de 4, equivalente al tamafio en by- tes de la instruceién, por lo que adopta el valor 2052. Notese que cuando cl ensamblador detecta el simbolo Length no ha encontrado atin definicién alguna de! mismo. Se gene- ra una entrada en Ja tabla de simbolos, asignada a la variable Length, como indefinida, tal como lo muestra la figura 54a. Simboto | Vator ‘Simbolo Valor a_start 3000 a start 3000 length = dength 2096 w address 2100 loop 2060 done 2088 a 3000 © Figura 5.4 ® Tabla de simbolos para el programa ARC dela figura 4.14, (a) luego de encontrar los sfmbolos. ‘a_starty length;y (D) al finalizar. El ensamblador detecta luego la segunda instruccién: ld [address], er2 El programa traduce Ia instruccién en la direccién 2052 y genera una entrada para el simbolo address en la tabla de simbolos, fijando nuevamente su valar como indeterminado, dado ‘que su definicién ain no ha sido encontrada. Incrementa luego el contador de posiciones en 4 para levarlo a 2056. La instruccién andcc se ensambla en la direcci6n 2056 y el contador de posiciones vuelve a incrementarse en el tamaiio de fa instruccién, nuevamente de 4 bytes, pa- 186_paIncrrras DE ARQUTTECTURA DE COMPUTADORAS ra llevarlo a 2060, El simbolo detectado a continuacién es Loop, que se ingresa en la tabla de simbolos con un valor de 2060, el valor del contador de posiciones. El ite simbolo de~ tectado que no se encuentra en la tabla de simbolos es done, que también se ingresa en la ta- bla de simbolos sin valor alguno, dado que tampoco ha sido definido ain, Durante ta primera pasada del ensamblador se van asignando las variables Length, address y done con los valores numéricos 2092, 2096 y 2088, respectivamente, a me- dida que se los va encontrando. Cuando se detecta el rétulo a, se lo ingresa en la tabla asigndndosele el valor 3000, El rétulo done aparece en la direccién 2088 debido a que hay 10 instrucciones (40 bytes) entre el comienzo del programa y el rétulo en cuestidn Las direcciones de los rétulos restantes se caleulan en forma similar. Si al final de la pri- mera pasada quedaran todavia rétulos sin definir, existe un error en el programa; en tal caso, el ensamblador seRalaré los sfmbolos que no fueron definidos y terminaré, Luego de creada la tabla de simbolos comienza la segunda vuelta del ensamblado. El programa se lee por segunda vez, empezando desde la sentencia de .begin, para generar en esta vuelta el cédigo objeto. La primera sentencia encontrada que genera ¢6- digo es la de 1d, en la direccién 2048. La tabla de simbolos indica que el campo de di- recciones de Ja instrucci6n 1d es (2092),., correspondiente a la direccién de la varia- ble length, por lo que se genera una palabra de eédigo utilizando el formato correspondiente a una insteuccién de memoria, tal como se muestra en la figura 5.5. La segunda pasada continda de la misma forma hasta completar la traduccién de todo el cédigo. La figura 5.5 muestra el programa ensamblado. Nétese que el desplazamiento correspondiente a las instrucciones de bifurcacién se da en palabras, y no en bytes, de- bido a que las instrucciones de bifurcacién multiplican los desplazamientos en un fac- tor de cuatro, 5.2.3 Tareas finales del programa ensamblador Luego de completar el proceso de traduccién, ef ensamblador debe agregarle al médulo traducido informacién adicional para uso de los programas de enlace y carga: + El nombre y tamafio del médulo. Si el modelo de ejecucién involucra segmentos de memoria para cOdigo, datos, pila, etc., deben especificarse los tamaiios ¢ identida- des de los distintos segmentos. * La direecién del simbolo de comienzo, si es que se define alguno en el médulo. La ma- yoria de los ensambladores y lenguajes de alto nivel proveen un rérulo especial reser- vado que el programador puede utilizar para indicar cudl debe ser cl lugar de comien- zo de ejecucién del programa. Por ejemplo, C especifica que la ejecucién se debe iniciar en la funci6n llamada main( ). En la figura 5.1, el rétulo “main” Je indica al censamblador que esa debe ser la direcci6n de comienzo de la ejecucién del programa. + Informacién acerca de simbolos globales y externos. El programa de enlace necesi- tari conocer la direccién de cualquier simbolo global definido en el médulo y expor- GaPiTULO 5 + Los LENGUAJES Y LA MAQUINA 167 Contador — Instruccién COtigo objeto de posicion yegin sors 2048 start .equ 3000 204s 18 [Leageh, 4x2 1000070 00000000 00101000 0003 100 2052 1 [address], x2 11006100 00000000 10101000 001 10000 2056 andec 43, %26,%13 10000110 1000100 11400006 c0000000) 2060 Toop: andee 11, r1,%x0 19000000 {6061090 01400000 40000001 2064 be done ‘99000070 19000000 DOOD 00000 1 2068 adidce $x, —4, 8x1 10000010 [6000000 DLITIT LL L111 108) 2072 addee &r1,%:2,%x¢ 10001000 10900000 1.07000 00000010) 2076 16 $r4,ke$ 13001010 09000001 KA0ODON0 20000000 2080 ba Loop ‘onov0ne0 tOU LL LL MLILT LH 11011 2084 addce ¥r2, 5,913 10000110 19000000 JL 600000 9300010 2088 done: jmpl_¢r15+4,420 10000001 11900017 11100000 00000100] 2082 lengths 20 ‘en690000-g9090006 vo9HGOUD 40010100 2096 address: a_start 00080006 60000000 06001011 14 1000) sorg @_start 3000 a 25] 90090900 non09000 0000000 00011001 3008 $10 JNU Toten aiieti Lett0L6) 3008 2 ‘egcne900 coav0e90 00000000 00100001 3012 $8 J Le ae ttia tti0nt| 3016 7] sa0n000 ene00000 09000000 00000111 send Figura 8.8 © Salida proveniente de la seguada pasada de ensamdlado del oragrama ARG de ia figura 4.14. tado por el mismo, asi como necesitard saber qué simbolos se encuentran indefini- dos en el médulo porque se definen como globales en otro médulo. + Informaci6n acerca de las rutinas de biblioteca a las que el médulo hace referencia. Algunas bibliotecas contienen elementos de uso comuin asf como funciones mate- iiticas u otras funciones especiales. Hay mucho mas para decir en préximas seccio- nes acerca del uso de bibliotecus. * Los valores de cualquier constante que deba cargarse en memoria. Algunos progra- ‘mas de carga esperan que la inicializacién de los datos se especifique en forma se- parada del cédigo binario. + Informacién de reubicacién. Cuando se invoca al programa de enlace, la mayorfa de los médulos 2 vincular deben reubicarse a medida que se los concatena. Todo el procedi miento de reubicaci6n de médulos es complicado debido a que algunas referencias a di- recciones pueden reubicarse y otras no. Fl tema de la reubicaciGn se analizaré més ade- ante, pero aqui se debe hacer notar que el ensamblador puede especificar cudles direcciones pueden reubicarse y cules no. 1G8_PRINCIPIOS BE ARQUITECTURA OF COMPUTADORAS 5.2.4 Ubicacién de programas en memoria Hasta ahora se ha supuesto que los programas se encuentran localizados en memoria, en una direccién especificada por una directiva . org, Esto puede ser cierto en algunos ca- sos de programacién de sistemas, cuando el programador tiene razones para querer que tun programa se ubique en una posicién especifica de memoria, En la mayoria de tos ca sos, al programacor no le interesa en qué posici6n de la memoria se carga el programa MAs atin, cuando se vinculan entre sf programas que han sido compilados o ensamblados en forma separada, es dificil o imposible que el programador sepa exactamente en qué lu- gar terminard ubicado cada médulo luego del enlace de los mismos, a medida que se los coloca uno tras otro. Por esta causa, la mayorfa de las direcciones se especifican como reubicables en memoria, excepto quizds por direcciones como las de entrada-salida, que pueden estar fijas en una direccidn absoluta de memoria, En Ja secci6n siguiente se analiza con mis detalle el proceso de reubicaciGn. Aqui, simplemente se menciona que es responsabilidad del ensamblador indicar qué simbolos son reubicables. Lu caracteristica de reubicable 0 no que tiene un simbolo determinado depende tanto del lenguaje simbélico como de las convenciones del sistema operativo. En cualquier caso, la informacién de reubicaci6n se incluye en un diccionario de reu cacién, en el médulo ensamblado, para que sea utilizado por el editor de enlace (linker) ylo el cargador. Los simbolos reubicables se sefalizan habitualmente con una “R” que aparece Inego de su valor en los listados generados por el ensamblador. 5.3 Enlace y carga La mayorfa de las aplicaciones de cualquier tamafio tienen una cantidad de médulos que han sido compilados o ensamblados por separado, Estos médulos pueden haber sido ge- nerados por distintos lenguajes de programacién 0 pueden integrar una biblioteca provis- ta como parte del ambiente del lenguaje de programacién o del sistema operativo. Cada médulo deberd prover la informacién descripta anteriormente, de modo que todos ellos puedan vincularse en forma conjunta para su carga y ejecucién. Un editor de enlace, o linker. es un programa que combina programas ensamblados por separado (llamados médulos objeto) en un tinico programa, o méduto de carga. El linker resuelve todas las referencias globales y externas y reubica las direcciones de los diferentes médulos. El médulo de carga puede ser cargado en memoria por medio de un cargador, que también puede necesitar modificar direcciones si el programa se carga en una direccién distinta a la direccién de origen de carga usada por el inker. Una técnica relativamente nueva, denominada bibliotecas de enlace dinamico (DLL, dynamic link libraries), popularizada por Microsoft en su sistema operativo Windows y presente en formas similares en otros sistemas operativos, pospone cl en- lace de algunos componentes hasta que sean requeridos efectivamente durante el mo- CAPITULO 5 » Los LENGOANES ¥ LA mAGUINA 169 mento de la ejecuci6n. En apartados posteriores de esta seccién habré mas para comen- tar acerca de las vinculaciones dinémicas. 5.3.1 Enlace (linking) Al combinar los médulos ensamblados o compilados por separado en un médulo de car- ga, el programa de enlace debe: + Resolver referencias de direcciones externas a los médulos a medida que los vincula * Reubicar cada médulo por medio de Ia combinacién mils apropiada de los mismos. Durante este proceso de reubicacién muchas de las direcciones de] méduio pueden llegar a modificarse para reflejar su nueva ubicacién, + Especificar el simbolo de comienzo del médulo de carga. + Si el modelo de memoria incluye mas de un segmento de memoria, debe especificar los contenidos ¢ idemtidades de los diversos segmentos. Resoluci6n de referencias externas Al resolver las referencias de direcciones, el programa de enlace necesita distinguir los nombres de los simbolos locales (aquellos que s¢ utilizan dentro de un Gnico médulo fuen- te) de tos nombres de los simbolos globales (los que se usan en mds de un médulo). Esto se logra mediante el uso, durante el proceso de ensamblado, de las directivas «global y -extern, La directiva «global le indica al ensamblador que debe seftalizar al simbo- lo como disponible para otros médulos objeto durante la fase de enlace. La directiva . extern identifica a un rétulo usado en un médulo pero que se encuentra definido en otro, Por lo tanto, se utiliza la directiva . global en el médulo en que se define un sim- bolo (como el médulo en el que se encuentra ubicada una subrutina) y se utiliza la direc- tiva .extern en cada uno de los médulos que haga referencia a aquel. Nétese que solo los rétulos de direcciones pueden ser globales 0 extemos. No tendrfa sentido definir co- mo global o extemo un simbolo -equ, dado que .equ es una directiva que solo se usa durante €l ensamblado, el que se habrd completado en el momento que se inicia el proce- so de enlace. Todos aquellos rétulos de un programa a tos que se haga referencia desde otros, como tos nombres de las subrutinas, contardn en el médulo fuente con una linea de formato si- ilar al siguiente: «global simbolol, simbolo2, ... Todos los rétulos restantes son locales, lo que significa que se puede utilizar el mismo r6- tulo en més de un médulo fuente sin el riesgo de confundirlos, dado que los rétulos loca- les no se utilizan luego de finalizado el proceso de ensamblado, Un médulo que se refie- 170 _prmnciptos CF ARGUITECTURA DE COMPUTADORAS re a simbolos definidos en otro modulo deberia declarar estos simbotos usando una for- ma del tipo extern simbolol, simbolo2, .... Como ejemplo de cémo se utilizan las directivas .global y «extern, considérense los dos médulos de eédigo simbélico de la figura 5.6. Cada uno de los médulos se ensambla, por separado, en un médulo objeto; cada uno con su propia tabla de simbolos, segin lo ilus- tra la figura 5.7. Las tablas de simbolos tienen un campo adicional donde se indica si un simbolo dado es extemno o global. El programa principal (main) comienza en la posicién 2048, y dado que cada una de las instrucciones tiene una longivwd de cuatro bytes, las va- riables x e y se encuentran, respectivamente, en las posiciones 2064 y 2068. E) simbolo sub se encuentra indicado como externo a consecuencia de la directiva .extern. Como parte del proceso de traduccién, el ensamblador incluye un encabezado en ef médulo con informacién acerca de los simbolos que son globales 0 externos, para que puedan ser re- sueltos en el momento del enlace. t Programa principal 1 Biblioteca de subrotin: sbegin begin -0rg 2048 ONE equ 1 rextern sub sorg 2048 mainsld [x], 82 -global sub ld yl, $23 gub: once tr3, 8x0, 83 call sub addee £3, ONE, ar} jmp tris + 4, #0 Gmpl erlS + 4, a0 x: 105 vend y: 92 vend Figura 8.6 « Un programa que invoca una subrutina de resta de dos nimerns enteros. Globav | Read Gtohov | Reubi Externa | cable | | Sienboto| vator |eixteraa | cable Baeme | ove | 1 | Wo | No No | si aus | 20:8 | Giorat | si no | sc Biblioteca de subrutinas no | si Programa principal Figura 8.7 + Tablas de simbolos para los mdulos de cédigo fuente de la figura 5.6. Ccapiruto 5 + 10s LENGUAIES ¥ LA tadouiNA 177 Reubicacién En la figura 5.6 puede observarse que los dos programas, main y sub, tienen la misma di- recci6n de comienzo, 2048. Obviamente, no pueden ocupar ambos esa misma direccién de ‘memoria. Si los dos médulos se ensamblan por separudo, no hay forma de que un progra- ma ensamblador descubra el coniicto entre las direcciones de memoria durante el proceso de traduccién. Para resolver este problema, el ensumblador define como reubicables a aquellos simbolos que pucden admitir que sus direcciones sean modificzdas durante el pro- ceso de enlace, como se muestra en los campos correspondientes de Jas tablas de simbolos de la figura 5.7. La idea es que un programa ensamblado en una direccién inicial como 2048 pueda cargarse no a partir de ella sino a partir de otra direccién como, por ejemplo. 3000, Para permitir esta modificacién, todas las referencias a direcciones reubicables in- cluidas en el programa deben incrementarse en 3000 ~ 2048 = 952. La reubicacién se rea- liza a través del programa linker, de modo tal que las direcciones reubicables se modifican en el mismo valor en que se modificé la direccién de origen de carga. En cambio, las direc- ciones absolutas, no reubicables, (tales como la direcci6n més alta posible para la pila, que vale 2" ~ 4 para palabras de 32 bits), se mantienen sin modificacién independientemente del origen de la carga. El ensamblador tiene la responsabilidad de determinar qué rétulos son reubicables cuan- do construye la tabla de simbolos. No tiene sentido determinar como reubicable un rétulo extemo, dado que el rétulo se define en otro médulo, por lo que sub no tiene entrada reu- bicable en la tabla de simbolos del programa main, en la figura 5.7, pero se sefiala como reubicable en la biblioteca de subrutinas. Asimismo, el ensamblador tiene que identificar los cédigos del médulo abjeto que deben ser modificados como consecuencia de la reubicacién. Los nimeros absolutos, por ejemplo las constantes (sefialadas por . equ, o las que aparecen en posiciones de memoria, tales como los contenidos de x € y. que son 105 y 92, respecti- vamente) no son reubicables. Las posiciones de memoria ubicadas en forma relativa a una sentencia .org, tales como x e y (jno los contenidos de x ni de y!) suelen ser reubicables. Las referencias a posiciones fijas, como podrian ser las de una rutina gréfica residente en forma permanente que puede estar eléctricamente instalada en la maquina, no son reubica- bles. Toda ta informacién requerida para reubicar un médulo se almacena en el diccionario de reubicuci6n contenido en el archivo ensamblado, por lo que se encuentra disponible pa- rac programa linker. 5.3.2 Carga El cargador (loader) es un programa que ubica el médulo de carga en lu memoria prin- cipal, Conceptualmente, las tareas del programa cargador no son complejas. Debe car- gat los diversos segmentos de memoria con los valores apropiados e inicializar ciertos registros, como el puntero de pila $sp y el contador de programa $pc, a sus valores ales. 172 PRINCIPIOS DE ARQUITECTURA OF COMPUTADORAS Si en todo momento se tiene en ejecucién un Gnico modulo de carga, el modelo fun- ciona correctamente. Sin embargo, en los sistemas operativos modemos, en todo momen- to existen varios programas que residen en memoria, y, por consiguiente, no hay forma de que el ensamblador 0 el finker conozcan cual seré la direccién en ia que van a residir. El programa cargador debe reubicar estos médulos en el momento de la carga, para to cual le sumard un desplazamiento a todo el cédigo reubicable de un médulo dado. Este tipo de cargador se conoce como cargador reubicador. Este programa no repite el tra- bajo del linker. El programa de enlace debe combinar varios médulos objeto en un tinico médulo de carga, mientras que el cargador simplemente modifica las direcciones reubi- cables que encuentra dentro de un médulo de carga dado para permitir la coexistencia en memoria de varios programas en forma simmulténea. Un programa cargador y de enlace (linking loader) ejecuta tanto el proceso de enlace come el de carga: resuelve referencias externas, reubica médulos objeto y los carga en memoria. El archivo ejecutable contiene un encabezado con informacién que describe dénde se lo debe cargar, cudl es su direccién de comienzo y sies posible que incluya informacién de reubicacién asf como puntos de entrada para cualquier nutina que deba estar disponi- ble hacia el exterior del mismo. Una aproximacién alternativa, que se basa en las técnicas de administracién de me- moria, reatiza la reubicacién por medio de la carga, en un registro base de segmento, de Ja base apropiada para la ubicacién del c6digo (o de los datos) en el correspondiente lu- gar de la memoria fisica. La unidad de administracién de memoria (MMU, memory management unit) suma el contenido de este registro base a todas las referencias de me- moria. Como resultado, cada programa puede iniciar su ejecucién en la direcci6én 0 y con- fiar en la MMU para lograr la reubicaci6n de todas las referencias de memoria en forma transparente. Bibliotecas de enlace dinamico (DLL) Volviendo a las bibliotecas de enlace dindmico, el concepto tiene una cantidad de pres- taciones atractivas. Las rutinas usadas habitualmente, como los paquetes de software pa- ra manejo de memoria o de gréficos, solo deben estar presentes en un lugar, la bibliote- ca DLL. Esto da por resultado un programa de menor tamafio, dado que no hace falta que cada programa posea su propia copia del cédigo DLL, como pasaria en otras situa- ciones. Todos los programas comparten exactamente el mismo cédigo, aun cuando se ejecotan simultineamente, Més ain, 1a actualizacién de las bibliotecas DLL para incorporar mejoras en sus pres- taciones 0 eliminar errores requiere que las correspondientes modificaciones sean incor- poradas en un solo punto, con lo que los programas que las utilizan no necesitan ser re- compilados en un paso separado, No obstante, estas mismas prestaciones se pueden convertir en desventajas porque la conducta del programa puede modificarse en forma no deseada (por ejemplo, cuando un programa se queda sin memoria por el uso de una bi- ‘earfruxo 5 ¢ 10S LeNGUAJES ¥ LA MAQUINA 173 blioteca DLL de mayor tamafio). Las bibliotecas DLL deben estar presentes en todo mo- mento y tienen que contener la versién esperada por cada program, Muchos usuarios del sistema operativo Windows deben haber visto el criptico mensaje “Falta un archivo en la biblioteca de enlace dindmico”. Para complicar atin mas el problema en la implementa- cién de Windows, el sistema de archivos presenta diferentes lugares en donde almacenar bibliotecas DLL. Estos problemas pueden tlegar a ser resueltos con poca dificultad por un usuario experto: en cambio, resultarén un problema insoluble para el usuario comtin. €jemplo de programacion Considérese el problema de sumar dos ntimeros de 64 bits cada uno utilizando el lengua- je de maquina del procesador ARC. Los dos mimeros de 64 bits pueden almacenarse en posiciones consecutivas de memoria, sumando luego, por separado, las palabras de me~ nor y mayor orden, Si se genera un arrastre en la suma de las palabras menos significati- vvas, ese arrastre deberd sumarse con la palabra més significativa del resultado. (Véase el problema 5.3 para la generacién de la tabla de simbolos y el problema 5.4 para la traduc- cin del e6digo simbélico a lenguaje de maquina.) La figura 5.8 muestra una posible codificacién. Los dos nimeros de 64 bits Ay B se almacenan en memoria en el formato big-endian, en el cual los 32 bits mas significativos se almacenan en una direccién de memoria menor que la que almacena los 32 bits menos significativos, El programa comienza cargando las dos palabras de A en los registros 8x1 y %r2, que contienen, respectivamente, las palabras més y menos significativas de A. Luego, se cargan las palabras més y menos significativas de B en los registros 8x3 y ‘x4, respectivamente. El programa invoca Ia rutina add_64, cuya funcidn es sumar A y By almacenar la palabra més significativa del resultado en 8x5 y la menos significati- vaen @r6. El resultado, de 64 bits, se almacena en C, con lo que se completa la ejecu- cién del programa. La subratina add_64 comienza sumando las dos palabras de menor orden. Si no se produce arrastre, se suman a continuaci6n las dos palabras de mayor orden y se comple- tala ejecucién de Ia subrutina. Si se genera arrastre en la suma de las dos palabras menos significativas, este debe sumarse con Ia palabra de mayor orden del resultado. Si al sumar las palabras més significativas de los operandos no se produce arrastre, el paso plantea- do consiste, simplemente, en sumar el arrastre producido en las palabras de menor orden al resultado final, En cambio, si se produce un arrastre a partir de la suma de las dos pa- labras de mayor orden, el hecho de agregar al resultado el arrastre generado en Ia suma de Jas palabras menos significativas provocard un estado final de los cédigos de condicisn en el que no se reflejard el arrastre generado en la mitad mas significativa. El e6digo de con- dicién correspondiente al arrastre se puede regenerar colocando un némero suficiente- mente grande en 8x7 y sumandolo consigo mismo. No obstante, este procedimiento puede dejar valores incorrectos en los e6digos de condicidn corespondientes an, z y v. La soluci6n completa no se detalla en este punto, pero puede decirse que los restantes 1774 _prinespios ne ANQUITECTURA GE COMPUTADORAS cédigos de condicién se pueden recuperar por medio de Ia repeticién de Ia instruccién addce antes de la operacién sobte $27, tomando en cuenta el hecho de que sigue sien- do necesario preservar el valor del cédigo de condicién c. | Realize una ouna en 64 bite: COA +B | Asignacién de registros:4r1 - 32 bits néa significativos de A 1 fr2 = 32 bits menos significatives de & 1 Wei = 32 née significatives ae a ' Sré - 32 bite menos signiticacives de a 1 Wes - 32 fis significatives de ¢ 1 fee = 32 bits menos significacives doc 1 Ae7 - Ueitizade pare raponer el bit de arzascre begin ! Comienzo del ensemble :0rg 2088 1 B1 prograna comienza en 2040 main: ld fal, te. | Buscar Ja palabra ao aignificativa de A ld (Asa), We2_—t Buscar 1a palabra cenea significertva de A la Bl, 4x3 1 Buscar 1a palabra més significativa de 8 ld [Bl], Wes! Buscar 1a palabra cenos eignificativa de B call sad_sa 1 Realizar 1a sura en ¢¢ dice Bt ars) [C) Almacenar la palabra efa significattva de ¢ st EG, [Cr4) | Almacenar 1a palabra menos significativa dec sorg 2072 La rutina add 64 comiensa en 3072 add_64; addec $12, Wet, W6 | Sunar lae palabras menos significativas bes lo_carcy Bifurcar si el arrastre vale 1 addec tri, tr3, $x$ | Sunar las palabras nia signiticativas gmpl x15 + 4, 20 | volver al progrema principal locarry: addcc tri, tr3, 4x8 | Surar las palabras mie eignificativas bes hi_carry Bifurcar si el arractre vole 1 addcc trS, 1, tr§ | Surar el arrascre gmpl 15, & #20 | volver al prograna principal Ri_carry: addce 475, 1, ¥r5 1 Sumar el arrastre nechi #3PFPFe, 47 | Preparer ¥z? para el arrascre adice (27. ar, 4x0 ! Generar arrascre Smpl 4215 + 4, 4x0 | Volver al progzana principal 1 © 3 32 bite nin eignificatives de 25 25 32 bite menog eignificatives da 25 8 HEFFFFFFF 1 42 bite mas significativos de -1 AFFErSrrr + 32 bite menos alsnificativos de -1 © | 32 bite nas significativos del resultado ° 432 bite menos aignificativos det resulcado vend 1 Fin de la traduecion Figura 5.8 * Un programa ARG que suma dos enteros de 64 capiryio 5 « Los LENSUAJES Y LA MAGUNA 175 5.4 Macroinstrucciones (Macros) Si las estructuras de llamado utilizan una convencién basada en el uso de Ia pila, sucle ser frecuente Ja necesidad de colocar y sacar de la pila una buena cantidad de registros du- rante los llamados a subrutina y sus retornos. Para poder almacenar en la pila de ARC el registro $115, se hace necesario decrementar primero el puntero a la pila (que se en- cuentra en 8x14) y luego copiar 8115 a la posicién de memoria a Ja que apunta tr14, segiin se muestra en el c6digo siguiente: addec %r14, -4, $r14 | Decrementar puntero de pila st aris, trl4 ! Salvar #r15 en la pila Este par de instrucciones podria expresarse en forma mas compacta con una notacién co- mola que se muestra: push @r15 1! Salvar @r15 en la pila Esta forma compacta asigna nombre (push) a la secuencia de instrucciones que leva a cabo la operacién, El rétulo push suele denominarse macro (por maeroinstruccién) en tanto que el proceso de traducir una macro a su equivalente en el lenguaje simbélico se suele conocer como expansién de la macroinstruccién. | Definicion de "push™ como macroinstruceson -macro push argl { Comienzo de 1a definicion addec —'Sr14, -4, Wrl4 | Decrementar puntero a pila st argi, tr14 ! Colocar argi en 1s pile vendnacre t Fin da ls definicion Figura §.9 © La definicion de la macroinstruccién push. ‘Una macro puede ser creada por medio de su definicién, como se muestra en la figura 5.9 para el caso de push. La secuencia comienza con una directiva -maero y termina con otra directiva .endmacro. En la linea .macro, el primer simbolo cs el nombre de la macroinstruccién a ser creada y los simbolos restantes son argumentos de la Iinea de co- mandos que se utilizan dentro de la macroinstruccién. En el caso de push, existe un solo argumento, al que se define como argl. Corresponde a $r15 en la sertencia “push 4r15", 04a “trl” en la sentencia “push %r1”, etc. El argumento (8x15 0 rl) correspondiente a cada caso se vincula con arg durante el proceso de ensambludo. Se pueden utilizar pardmetros formales adicionales, separados por comas, como suce- deen smacro nombre argl, arg2, arg3, ... 176_pruncteros ve anqUITECTURA DE COMPUTADORAS. os que, en el momento, requieren que se invoque la macro con la misma cantidad de pa- rémetros reates* nombre @rl, $r2, %r3, ... A continuacién de la directiva .macro sigue el cuerpo de la macroinstruccién. Pueden aparecer otros comandos cualesquiera, incluyendo otras macros, o incluso Itamados a la misma macroinstruccién, lo que permite que se expanda en forma recursiva durante el momento del ensamblado. Los pardmetros que aparecen en la linea .macro pueden reemplazar texto dentro del cuerpo de la macroinstruccién, por lo que pueden usarse pa- fa rotulos, instrucciones u operandos. Debe notarse que duramte la expansién de la macro los pardmetros formales se reem- plazan por los parémetros reales usando una simple sustitucién textual. Por consiguien- te, ta macroinstruccién push puede invocarse con argumentos referidos a registros 0 a memoria: push trl push foo El programador debe tener en cuenta esta caracteristica de la expansi6n de macroinstruccio~ nes al momento de definirlas, para que la macro expandida no contenga sentencias ilegales.. Si se requiere la expansi6n de mactoinstrucciones en forma recursiva, se hacen nece- sarias directivas adicionales. Las directivas .if y . endif, respectivamente, abren y cie- rran una secci6n de ensamblado condicional. Si el argumento de . i£ es verdadero (al mo- mento de Ja expansi6n de la macro), el cédigo que aparece a continuacién de . i€ se ensambla, hasta llegar a la correspondiente . endif. Si el argumento de . i£ es falso, el ensamblador ignora directamente el c6digo que se encuentra entre .if y -endif. El operador de condicionalidad de la directiva . i£ puede ser cualquier elemento del grpo {<.=.>,2,405). La figura 5.10 ilustra la definicién recursiva de una macroinstruccién y su expansi6n durante el proceso de ensamblado. Bl c6digo expandido suma los contenidos de los re- gistros que van desde 1-1 hasta 8x, dejando el resultado de Ja suma en 81. El argu- mento X se analiza en la linea -if. Si X es mayor que 2, la macro vuelve a ser llamada, pero con el argumento X—1. Si la macro recur s_add sc invoca con un argument igual a 4, se generan tres lineas de c6digo de acuerdo con lo que se muestra en la parte inferior de 1a figura. Cuando la macro es invocada por primera ver, X tiene como valor * W. de T: Elhacho de qus en inglés se hable de "actual parameters” hace que en a jerga se haya aceplado la ex- resin “parémetras actuales”, cuando la treduccién de “actuaf' corresponde al término “real”. ccapiruto 5 + Los venguases v ca mAguna 177 4. La macro vuelve a ser invocada con X = 3yconX = 2, punto enel cual se genera la primera sentencia addcc. Las dos sentencias addcc siguientes se generan en la me- dida en que se vuelve a recurrir dentro de la macro. Tal como se mencionara anteriormente, en el caso de un programa ensamblador que so- porta macroinstrucciones, debe existir una etapa de expansidn de las mismas, la que debe lle- vvarse a cabo antes de las dos vueltas del proceso de ensamblado, La expansiGn de las macros se realiza normalmente por medio de un preprocesador de macroinstrucciones antes del ensamblado del programa. Este proceso de expansién, no obstante, puede ser invisible al programador, dado que puede ser invocado por e] ensamblador. La expansidn de las ma- croinstrucciones requiere, generalmente, dos pasos, de los cuales el primero registra las de- finiciones de las mismas en tanto que el segundo genera las sentencias en el lenguaje simbé- Tico. No obstante, si se aceptan definiciones recursivas, el segundo paso de la expansién de las macroinstrucciones puede llegar a ser muy complicado. J. J. Donovan presenta una des- cripcitn més detallada del proceso de expansién de macroinstrucciones. { Definicion de una macre recursive smacro. recurs_add x 1 Comienzo de 1a definicion HE X>2 1 Rnsamblar si X > 2 recurs add X-1 1 Llamade recursiva sendif 1 Fin de la construccién condicional. if addce trl, tex, tr11 sumar argunento con er] sendmacro 1 Fin de 1a definicién recursadd 4 f anvocacién de 1a macroinstruccién Se expande en: addee tel, %2, addee 1303, addcc trl, 3r4, Figura §.10 « Una detinicién racursiva de una macroinstruccién y su correspondiente expansién, 5.5 Estudio de un caso: extensiones al juego de instrucciones- Las instrucciones SIMD Intel MMX™ y Motorola AltiVec™ A medida que la tecnologia de los circuitos integrados ofrece prestaciones crecientes en la estructura de los procesadores, los fabricamtes buscan nuevas formas de aprovecharlas. Una de las formas mediante las cuales tanto Tntel como Motorola capitalizaron dichas prestaciones adicionales fue la expansiGn de sus arquitecturas de programacién con nue- vos registros e instrucciones especializadas para el procesamiento de cadenas 0 bloques de datos. Intel agrega a sus procesadores Pentium la Hamada extensin MMX, en tanto que Motorola agrega Ia extensién AltiVec en sus procesadores PowerPC. Esta seccién analiza la utilidad de las extensiones y la implementacién realizada por las dos compafiias. 178 _PRINCIPIOS DE ARQUITECTURA DE COMPUTADORAS 5.5.1 Fundamentos El procesamiento de flujos de datos referidos a grificos, audio y comunicaciones requiere la ejecucién de operaciones repetitivas sobre grandes bloques de informacién. Por ejemplo, una imagen gréfica de varios megabytes puede requerir operaciones repetitivas sobre toda la imagen tendientes al filtrado, a ta mejora de la calidad de imagen, o a algin otro tipo de pro- ceso. El audio que se trasmite por una red en tiempo real puede requerir operaciones conti- uas sobre el bloque de datos a medida que se lo recibe. En forma similar, la generacién de imagenes en tres dimensiones, los ambientes de realidad virtal y aun algunos juegos requie- en una gran cantidad de poteneia de procesamiento, En épocas anteriores, a solucién adop- tada por muchos fabricantes de sistemas de computacién pasaba por incluir procesadores es- pecialmente preparados para manejar este tipo de operaciones. Si bien las soluciones adoptadas por Intel y Motorola son ligeramente diferentes en su enfoque, los resultados son relativamente similares. Los dos juegos de instrucciones se amplfan con instrucciones y tipos de datos SIMD (single instruction streanvmultiple da~ {a stream, Gnico flujo de instrucciones y multiples flujos de datos). El enfoque SIMD aplica ta misma instrucci6n a un veetor de elementos de datos en forma simulténea, El {érmino vector se refiere a un conjunto de datos, habitualmente bytes o palabras. Los procesadores vectoriales y las extensiones del procesador no son de manera alguna conceptos nuevos. Las primeras series de computadoras CRAY e IBM 370 tenian operacio- nes 0 extensiones vectoriates. De hecho, estos sistemas poseian una capacidad de procesa- miento de vectores mucho més poderosa que los primeros sistemas Intel o Motorola basados en microprocesadores. No obstante, Ins extensiones Intel y Motorola ofrecen un considera- ble aumento de velocidad en las operaciones para las cuales han sido diseftadas. Estas exten- siones se desarrollan con més detalle en el andiisis siguiente, para el cual se presenta la figu- ra 5.11 como una introduccién al proceso. La figura muestra la instruccién PADDB (Packed ‘Add Bytes) de Intel, que reatiza una suma de 8 bits sobre el vector de acho bytes contenido en el registro MMO con el vector de ocho bytes contenido en ef registro MMI, almacenan- do el resultado en el registro MMO. smo[TIITIIIT OOSOOOOO OTTO OIIIIIT OOIDIOID OILOIOIOPIONIIIL IOInITON) + + + + a + + + soa {TILITITO IITITETT OOOOTEIT TOLL Ti i11y dooLOIOT 1191197 ooToIOG) mo GiiiI TOF TIIIEIIT OIIITOOO OTTO OOTOIOOL OLiiII11 1oU100 Ti100TT) Figura 5.11 + Suma vectorial de ocho bytes a través de fe instruccién Intel PADDB mmO, mnt. §.5.2 Las arquitecturas ba: Antes de analizar las extensiones SIMD de los dos procesadores, corresponde echar una mirada a las arquitecturas de base de las dos miiquinas. Sorprendentemente, los dos pro- cesadores no podfan ser mis diferentes en sus arquitecturas de programacién. ccapfruto 5 + Los LeNGUAJES ¥ LA mown 179 El procesador Pentium Intel Ademids de los registros dedicados que se utilizan en cuestiones asociadas con el siste- ‘ma operativo, la arquitectura Pentium contiene ocho registros de 32 bits para manejo de enteros, cada uno de los cuales posee su propia “personalidad”. Por ejemplo, la arqui- tectura de programaci6n del Pentium contiene un tnico acumulador (EAX), utilizado para almacenar operandos y resultados aritméticos. El procesador incluye asimismo ocho registros de 80 bits para punto flotante, los que, como se verd, sirven también co- mo registros vectoriales pura las instrucciones MMX. El juego de instrucciones del Pen- tium deberia caracterizarlo como un procesador CISC (computadora con un conjunto de instrucciones complicado, complicated instruction set computer). El andlisis de tas arquitecturas CISC y RISC (computadora con un conjunto de instrucciones reducido, reduced instruction set computer) se desatrollarg con mas detalle en el capitulo 10. Por ahora, es suficiente con decir que las instrucciones del procesudor Pentium varian en ta- mailo desde un solo byte hasta 9 bytes, y que muchas instrucciones del Pentium ejecu- tan acciones por demas complicadas. El procesador tiene muchos modos de direcciona- miento y la mayor parte de sus instrucciones aritméticas permiten que uno de los operandos o el resultado estén almacenados tanto en memoria central como en registros de la CPU, Gran parte de la arquitectura Intel esté encuadrada en Ia decisin de permi- tir Ia compatibilidad binaria con los miembros mas antiguos de ta familia, como el 8086/8088, introducidos en el mercado en 1978. (La arquitectura del 8086 en sf misma también fue encuadrada en el propésito de plantear una compatibilidad a nivel de ten- uaje simbélico con el venerable procesador 8080, de ocho bits, creado en 1973.) El procesador PowerPC Motorola El procesador PowerPC, en contruste con el anterior, fue desarrollado por un consorcio formado por IBM, Motorola y Apple, “desde los cimientos”, resignando ta compatibilidad con dispositivos ya existentes en aras de incorporar las novedades de la teenologia RISC. El resultado fue una arquitectura de programacién con menor cantidad de instrucciones, més sencillas, y todas estructuradas én una sola palabra de 32 bits. La arquitectura inclu- ye 32 registros de uso general, de 32 bits cada uno, pura uso de enteros, y otros 32 regis- tros, de 64 bits cada uno, para utilizacién en punto flotante, La arquitectura utiliza las ins- trucciones de cargar y almacenar (load-store) para acceder a la memoria. Los operandos almacenados en memoria deben cargarse en los registros por medio de instrucciones de carga y aimacenamiento antes de poder ser utilizados. Todas las demés insteucciones deben acceder a sus operandos y resultados en los registros del procesador. Como se vera, la influencia principal que las arquitecturas basicas descriptas tie- nen sobre las operaciones en vectores se relacionan con la forma en que acceden ala memoria, 180_principios DE ARQUITECTURA DE COMPUTADOAAS 5.5.3 Registros vectoriales ‘Ambas arquitecturas incluyen un conjunto adicional de registros dedicados en los que se al- macenan los operandos y resultados de operaciones con vectores. La figura 5.12 muestra los conjuntos de registros vectoriales de los dos procesadores. Intel, probablemente por cuestio~ nes de espacio, “disfraza” sus registros de punto flotante como registros MMX, Esto signi- fica que los ocho registros de punto flotante de 64 bits del procesador Pentium cumplen do- ble funci6n, no solo como registros para aplicaciones de punto flotante sino también como registros MMX, Esta solucién tiene una desventaja: los registros pueden utilizarse para un nico tipo de operacién por vez. El conjunto de registeos debe vaciarse con una instruccién especial, EMMS (Empry MMX State, vaciar el estado del conjunto MMX), después de eje- cutar instruceiones MMX y antes de ejecutar instrucciones de punto flotante. Registros dela arquitectura — Registros de la arquitectura MMX Intel AltiVec Motorola 63 o 127 0 MM7 ‘VRSI . ‘R30 MMO . RI ‘RO. Figura 5.12 © Registros vectoriales Intel y Motorola. Motorola, quizas debido a que su procesador PowerPC ocupa menos superficie de silicio, implementa treinta y dos registros vectoriales de 128 bits cada uno como un conjunto nuevo, separado y diferente de sus registros de punto flotante. Operandos vectoriales Tanto las operaciones vectoriales de Intel como tas de Motorola pueden efectuarse sobre valores enteros de 8, 16, 32 y 64 bits, y, solo en el caso de Motorola, también en 128 bits. A diferencia de Intel, que no soporta mds que vectores de valores enteros, Motorola tam- bién admite operaciones y mimeros de 32 bits en punto flotante. Ambos registros vecto- riales pueden Ilenarse o empaquetarse con datos de 8, 16, 32, 64, y, en el caso de Moto- rola, también de 128 bits. Para el caso de operandos de ocho bits, esta arquitectura representa un paralelismo de 8 o 16 vias, dado que el procesattor opera simulténeamente sobre 8 o 16 bytes. La naturaleza SIMD de la operacién vectorial puede expresarse di- ciendo que el procesador realiza la misma operaci6n sobre todos los objetos de un regis- tro vectorial dado, capfruuo 5 Los Lexeuaes v La méquma 181 Carga y descarga de los registros vectoriales El enfoque CISC de los procesadores Intel se observa también cuando se analiza ta for- ma de carga de sus operandos en los registros vectoriales. Existen dos instrucciones que permiten la carga y la descarga de datos hacia y desde los registros vectoriales, MOVD y MOVO, las que mueven palabras de 32 y 64 bits, respectivamente. (Intel emplea una pala- bra cuyo tamafio es de 16 bits.) La sintaxis es. MovD mn, myni2_jmover dos palabras a un registro vectorial. MovD—mma/n2, «m mover dos palabras desde un registro vectorial. ova mn, mm/n64—jmover cuatro palabras a un registro vectorial. ovQ—am/m64, sm jwover cuatro palabras desde un registro vectorial. donde ‘+ mm representa uno de los acho registros vectoriales MM. + mmim32 representa uno de los registros enteros, un registro MM o una posicién de memoria. + mmim64 representa uno de los registros MM o una direccién de memoria, ‘Como se verd més adelante, en las operaciones aritméticas vectoriales de Intel uno de sus coperandos puede estar almacenado en memoria. Las operaciones de carga y descarga de los procesadores Motorola se mantienen fieles a su enunciada filosofia RISC. Las operaciones de carga y descarga vectorial constituyen la sinica forma de acceder a un operando almacenado en memoria. No hay forma de mover un ‘operando entre los registros vectoriales y algtin otro registro. Todos los operandos deben car- garse desde memoria y descargarse hacia memoria. Los eédigos de operacién tipicos son Ivebx vb, xA10, £8 ;cargar byte en el registro vectorial vp, indexado lvehx oD, rAL0, x8 ;cargar media palabra en el registro vectorial vp, indexado. lvewx vO, rAI0, xB :cargar palabra en el registro vectorial vb, indexado. lve vO, rAL0, 2B ;cargar palabra doble en el registro vectorial vD. en los cuales vD representa uno de los 32 registros vectoriales. La direccién de memoria del operando se calcula a partir de (rA|0 + ©B), en la que x y cB representan cual- quier par de registros enteros r0-r32, y donde el simbolo | 0 significa que puede reem- plazarse rA por el valor cero, Las palabras de 8 bits (byte), 16 bits (media palabra), 32 bits (palabra) y 64 bits (palabra doble) se obtienen desde su direccién de memoria. (El ta- mario de las palabras del PowerPC es de 32 bits.) El uso de la palabra “indexado” en la lista anterior se refiere a la posici6n dentro del registro vectorial en que se almacenarin los datos de 8, 16 y 32 bits. Los bits menos sig- 182 _pnmerios DE ARQuITECTURA DE COMPUTADORAS nificativos de ta direccién de memoria especifican el indice a utilizar en el registro vec- torial. Por ejemplo, si los tres tiltimos bits de la direccién son O11, estarian especificando que cl byte debe almacenarse en el tercer byte del registro. Los otros bytes det registro vectorial quedan indefinidos. Las operaciones de almacenamiento (store) trabajan tal como lo hacen las instruccio- nes de carga (load). La funcién de fas mismas es almacenar en memoria el valor de uno de los registros vectoriales. 5.5.4 Operaciones de aritmética vectorial Las operaciones de aritmética vectorial forman el coraz6n del proceso SIMD. Del andli- sis de las mismas surgiran, por un lado, una nueva forma de aritmética, la aritmeética de saturaci6n, y por el otro, algunas operaciones exéticas y nuevas. Aritmética de saturacin ‘Ambos procesadores vectoriales ofrecen la opcién de utilizar la Hamada aritmética de saturacién en lugar de la aritmética mds familiar que opera en formato al médulo, y que fuera analizada en los capitulos 2 y 3. La aritmética de saturacién funciona en la misma forma que la aritmética de complemento a dos en tanto no se produzca desbor- de en los resultados. Cuando los resultados obtenidos superan los limites permitidos, tanto maximo como minimo, el resultado se mantiene en el valor maximo o minimo permitide. Por ejemplo, una representacién de ocho bits en complemento a dos satura en +127 en su extremo superior y en -128 en su limite inferior. Las representaciones de ocho bits sin signo saturan en +255 y en 0. Si el resultado de una operacién aritmética desborda esos limites, entonces este s¢ recorta o “satura” en la frontera, La necesidad de utilizar este tipo de aritmética surge en el procesamiento de la infor- macién de color. Si el color se representa por un byte, en el que 0 representa el negro ¥ 255 representa el blanco, la saturaci6n permite que el color se mantenga como blanco pu- ro 0 negro puro luego de unu operacidn, en lugar de invertirse si se diera el caso de un desborde en uno u otro sentido. Formatos de instruccién Asf como las dos arquitecturas tienen distintos enfoques en lo que hace a sus modos de direccionamiento, también difteren en sus formatos de instrucciones SIMD. Intel sigue utilizando instrucciones de dos direcciones, donde el primer operando, origen, puede ser un registro MM, un registro entero o memoria, en tanto que el segundo operando, desti- no, es un registro MM. op mm, emB20r64 ym om OP am/m32/64 ‘capfriio 5 + Los LENSUAIES LA MACtTWA 183 Motorola requiere que todos sus operandos se encuentren en los registros vectoriales y utiliza instrucciones de tres operandos: oP va, va, Vb (,Ve] 7 Vd & Va OP Vb [OP ve] Este enfoque tiene la ventaja de que no se requiere sobreescribir ningun registro vectorial. Ademés, algunas instrucciones pueden utilizar un tercer operando Ve. Operaciones aritméticas Quizas no sorprenda demasiado que lus instrucciones MMX y AltiVec sean bastante si- milares, Ambus arquitecturas permiten operaciones sobre operandos de 8, 16, 32 y 64 bits, y, en el caso de AltiVec, también de 128 bits. La tabla 5.1 muestra ejemplos de la diversidad de operaciones que ofrecen ambas tecnologias. Algunas de las razones prin- cipales para que esto ocurra son: la necesidad de ofrecer a los potenciales usuarios aquellas operaciones que pudiesen considerar necesarias y utiles en sus aplicaciones particulares, Ia cantidad de silicio disponible para la ampliacién y la arquitectura bisi- ca de programacién. Operacién Operandos (bits) Aritmética Suma y vesta de enteros, con y sin signo (B) 316, 32, &, 128 Médulo, saturada ‘Suma y resta de enteros, almacenar arrastre. de salida en registro vectorial (M) 32 Médulo Muthtplicacién entera, almacenar mitad ms o menos significativa (1) 16 16x16 - “Multiplicacién eniera: Vd = Va *Wb + Ve (B) 16-8x8 Médulo, saturada 32 16x16 Desplazamiento a izquierda, a derecha, a derecha con signo (B) 8, 16, 32, 64 (I) = Rotacién a izquierda, derecha (M) 8, 16,32 = ¥,NGY. 0, NOR, XOR(B) 64(1), 1280) = Mutltplicacién de enteros sobre cualquier otro Médulo, saturada operando, almacenar resultado completo, 16-8x8 con y sin signo (M) 32-16x16. Maximo, minimo. Vde~Max.Min(Va, Vb) (M) 8, 16, 32, Con y sin signo ‘Suma vectorial sobre palabras. Sumar_ ‘Variados Médulo, saturada Jos elementos de vector, sumar esta sua al objeto del segundo vector, colocar el resultado on el tercer registro vectorial (M) Operaciones vectoriales de punto flownte, TEEE punto suma, resta, producto-suma, etc. (M) 32 Alotante Tabla 5.1 « Instrucciones ariméticas MIM y Alles. 184_PRINCIPIOS DE ARQUITECTURA DE COMPUTADORAS: 5.5.5 Operaciones de comparaci6n de vectores El paradigma habitual de las operaciones condicionales -comparar y bifurcar segdn uaa condicién determinada— puede no funcionar en operaciones vectoriales, dado que cada operando sobre el que se ejecute la comparacién puede dar resultados diferentes. Por ejemplo, la comparacién por igualdad de dos vectores formados por palabras puede dar resultados como CIERTO, FALSO, FALSO, CIERTO. No hay forma adecuada de emplear instrucciones de bifurcaci6n para seleccionar diferentes bloques de cédigo en funcién de ia verdad o falsedad de las comparaciones. Como consecuencia, las compa- raciones vectoriales tanto en las tecnologias MMX como AltiVec dan por resultado la generacidn explicita de CIERTO o FALSO. En ambos casos, CIERTO se expresa con una palabra formada totalmente por unos y FALSO se expresa con una palabra formada por ceros, almacenada en el operando de destino, Por ejemplo, las comparaciones entre bytes dan por resultado FFH o 00H, los edlcutos de 16 bits dan FFFFH 0 OOOOH, y re- sultados similares para otros operandos. Estos valores formados por todos unos o todos ceros pueden utilizarse luego como méscaras para actualizar valores. Ejemplc: comparar por igualdad dos vectores formados por bytes Considérese la comparacién de dos vectores MMX formados por bytes con el objeto de determinar la igualdad de los mismos. La figura 5.13 muestra el resultado de ta compa- raciGn: cadenas de unos cuando la comparaci6n es exitosa y ceros donde falla, Esta com- paraciGn puede utilizarse en operaciones subsiguientes. Considérese la sentencia condi- cional de un lenguaje de alto nivel: if (mm0 == mm1) mm2 = mm2 else m2 La comparacién de la figura 5.13 produce la mscara que puede utilizarse para contro- Jar la asignacién de bytes. Se realiza una operacidn logica AND entre el registro mm2 y Ja mascara contenida en mmo, y se almacena el resultado en mm2, tal como se muestra en la figura 5.14, Puede implementarse una gran variedad de operaciones condiciona- ies por medio de ta utilizacién de distintas combinaciones de operaciones de compara- cin y de méscaras. sso TIILIITT 06000005 60000000" 1015T6ID GOTOAOIS THA TOTO|TOLOINET TOA ION mat (TIESTITT THAITENT 90000500 FOTOTOIO_OTOLOTE WIIOIOTS TTOLOIOT OOTOTeTD + 4 4 t t 4 4 + smo TILETITT OGOOSOEE TILT LIINTTTT SoDEOHTT TTT GOESTUTT TOSOOTTD Ga I ay mw) © Gi Figura 6.13 + Comparacién por igual de dos vectores MMX formados par bytes, ‘oarivuno § + uns LenouAJEs ¥ LA MKGUTNA 185 TATIET_ GoHgHSH LTT TAT GouooOHO TITTLE oHTTNE, SoRTTIOD TOOL AgPeTIOL OITODIAS AOTOIOTS_ SPIO COTS TIGTOTaT Gorge] + L t t L L 1 1 nz] figura S.14 © Asignacién consicional de un vector MMX formado par bytes. age Operaciones de permutacién de vectores La arquitectura de programacién AltiVec incluye también una instruccién muy dil que permite permutar, o reordenar, los contenidos de un vector en forma arbitrasia, almace- nando el resultado en otro registro vectorial. 5.5.6 Conclusiones de los casos de estudio Las extensiones SIMD de los procesadores Pentium y PowerPC ofrecen operaciones po- derosas que pueden utilizarse para el procesamiento de bloques de datos. A la fecha de ediciGn de la presente* no existen extensiones de compilacién para estas instrucciones. Como consecuencia, aquellos programadores que quieran usar estas extensiones tienen que estar dispuestos a programar en lenguaje simbélico. Surge un problema adicional debido a que no todas las versiones de los procesadores Pentium o PowerPC contienen estas extensiones, las que solo aparecen en algunas ver- siones especializadas. Dado que el programador puede verificar la presencia de las exten- siones, en su ausencia el programador debe escribir una versin “manual” del algoritmo. Esto implica generar dos conjuntos de instrucciones, uno que utiliza las extensiones y otro que utiliza la arquitectura basica de programa Los lenguajes de programacién coma C o Pascal permiten que la arquitectura de bajo nivel de fa computadora sea tratada como un ente abstracto. Los lenguajes simbélicos, por otra parte, adoptan un aspecto tuertemente dependiente de la arquitectura subyacente. La arquitectura de programacién se hace visible al programador, quien es responsable por el uso de registros y por las Hamadas a subrutinas. Parte de la complejidad de ta programacién en lenguaje de maquina se administra a través de macroinstrucciones, las cuales difieren de las subvutinas 0 tunciones ‘en que tas macroinstrucciones generan cédigo al momento del ensamblado, mientras que las ‘subrulinas se resuelven en el momento dela ejecucién. de T:Los autores se refieren a la edicién original en ingtés, afio 2000. 186 _Pnivcipios De ARQUITECTURA DE COMPUTADORAS Un programa de enlace combina médutos ensamblados por separado en un Gnico modula de carga, lo que normalmente implica eédigo reubicable. Un programa cargador coloca el médulo de carga en memoria y comienza la ejecucién del programa. El cargador puede necesitar reubi- ‘ar s6digo si detecta la superposicién en memoria de dos o mas maulos. En la practica, los detalles de ensamblada, entace y carga son luertemente dependientes del sistema y de! lenguaje, Alguncs ensambladores simples tan solo producen programas binarios Sjecutables, pero en la mayor parte de los casos, el ensamblador generaré informacian adicia-~ nal para permitir el enlace de los médulos por parte de un linker. Algunos sistemas proveen car- ‘gadares enlazadores que combinan las tareas de enlace y de carga. Otros separan el enlace de la carga. Algunos cargadores solo pueden cargar un pragrama en la dlrecciGn especificada en el archiva binario, mientras que es més habitual que los cargadores reubicadores puedan reu- bicar los programas en una directién especiticada en el mamento de la carga. Los formatos de archivo que soportan estos procesas también dependen del sistema operativo. Antes del desarrollo de los compiladares, los programas se esctibfan directamente en len- guaje simbélico, Hoy en dia, el tenguaje simbético no es de uso habitual debido a que los com- piladores para lenguajes de alto nivel generan cédigo eficiente, aun cuando el lenguaje de ha- jo nivel sigue siendo importante para entender algunos aspecios de la arquitectura de la computadora como, por ejemply, la forma de vincular programas que fueron compilados para distintas convenciones de llamada, y para aprovechar las extensiones de arquitecturas de pro- gramacién como, por ejemplo, tas MMX y Altivec. Para lectura posterior Los textos de A. V. Aho y otros, y de W. M. Waite y L.R. Carter tratan el tema de los compiladores y la compitacién. Existen muchisimas referencias sobre el tema de la programacién en lenguaje sim- bélico. J. J. Donovan es un clésico en lo que hace a ensambladores, linkers y cargadores. A. Gill y ‘otros analiza el procesador 68000. EI de J. Goodman y K. Miller es un buen texto de estudio, con ‘ejemplos tomados de la arquitectura MIPS. El apéndice de D. A. Patterson y J. L. Hennessy también analiza la arquitectura MIPS. El texto de SPARG Intemational Inc. trata especificamente la definicion det procesador SPARC y su lenguaje de maquina, Aho, A. V.,R. Sethi y J.D. Ullman, Gompiiers, Addison-Wesley, 1985. Donovan, J.J, Systems Programming, McGraw-Hill, 1972, Gill, A. E. Corwin y A. Logar, Assembly Language Programming for the 68000, Prentice Hall, 1987, Goodman, J.y K. Miller, A Programmer's View of Computer Architecture, Saunders College Publishing, 1993 Patterson, D. A. y J. L. Hennessy, Gomputer Organization and Design: The Hardware/Software Interface, 2 ed., Morgan Kaufmann, 1998. ‘SPARC International Inc., The SPARC Architecture Manual: Versién 8, Prentice Hall, 1992, Waite, W. M. y L. R. Carter, An Introduction to Compiler Construction, Harper Collins, 1993. ccapiruio 5 + 10s LeNGUAIES ¥ LA tadouiNa 187 Problemas 5.1 Crear una tabla de simbolos para el segmento de programa ARG que se muestra a continua- ci6n, usando un formato similar al de la figura 5.7. Utilizar “U" para los simbolos indefinidos. x sequ 4000 sorg 2048 ba main sorg 2072 main: sethi x, 8x2 srl 412, 10, tr2 lab: st x2, (k] addce trl, -1, trl Foo: st rl, [k) andce trl, Brl, %r0 beg lab5 jmpl 815 + 4, 8x0 cons: vdub 3 5.2 Traducir a cédigo objeto el c6digo ARC del programa siguiente. Asumir ta direccin (4096),, ‘como valor inicial de x. x vequ 1024 addcc rd +k, ted id fela, tS addce | trld, -1, trld st $15, [x] 5.3. Crear una tabla de simbolos para el programa de la figura 5.8, siguiendo un criterio similar al de la figura 5.7 5.4 Traducir a codigo objeto la subrutina add_64, de la figura 5.8, incluyendo las variables a, By c. 5.5 Un desensamblador es un programa que lee un médulo objeto y recrea el médulo fuente en lenguaie simblico. Dado el siguiente cédigo objeto, desensamblarto para obtener las senten- cias correspondientes del tenguaje simbdlica ARC. Dado que el cédigo objeto no contiane in- formacién suficiente para determinar tos nombres de tos simbolos, se les asignardn ordena- ddamente as letras del abecedario a medida que sean necesarias. 188 5.6 57 [PRINCIPIOS DE ARGUITECTURA BE COMPUTADORAS. 1000 0016 1000 0000 0110 0000 0000 0001 1000 0000 1001 0001 0100 0000 0000 0110 9000 9010 1000 0000 0000 0000 9000 0011 1000 1101 9021 0001 1010 0900 0000 1010 0001 0000 3041 1111 1111 1111 1111 1100 1000 0001 1100 0011 1110 0000 0000 0010 Dadas las siguientes macroinstrucciones push y pop, sien un programa se utilza push in- mediatamente después de pop pueden aparecer instrucciones innecesarias. Expandir las de- finiciones de las macroinstrucciones mostradas e identificar las instrucciones innecesarias, sbegin smacro push arg] addcc = Srl4, -4, $14 st arg, $rl4 -endmacro, smacro pop agi ld ‘rid, argl addcc = rid, 4, Srid -endnaero tComienzo de programa .org 2048 pop wl push rz send Escribir una macroinstrucci6n return que cumpla la funcion de la sentencia jmpl tal como se la usa en ta figura 5.5 Enla figura 4.16, el operando x de seth se completa desde el ensamblador, La sentencia no funciona como se espera si x > 2% debido a que solo hay 22 bits en el campa imn22 del for- mato sethi. Para poder colocar una direccién arbitraria de 32 hits en #x5 al momento de la ejecucién, puede utiizarse sethi. para los 22 bits superiores, usando luego addec para los 10 bits inferiores. Esto cequiere agregar dos nuevas diractivas, .high22 y . 1ow10, las que construyen las palabras binarias para los 22 bits més significatives y para los 10 bits menos significativos deta direceién, respectivamente. La construccién sethi -high2?2 (#PFFF FEF), ¢r} se expands a sethi #3FEFEF, tri CAPITULO 5 « LOS LENGUAJES Y_LA MAnuINA 189 en tanto que la estructura addce trl, -lowl0(#FFFF FFFF), 811 se expande a addec trl, #3FF, trl Reescribir la rutina de llamado de la figura 4.16 utlizando .high22 y . 1owi0 de modo que funcione adecuadamente sin importar la posici6n de x en memoria. 5.9 Supéngase tener disponible para su uso la Futina add_64 de la figura 5.8. Se requiere escribir tuna rutina ARC llamada add_128 que sume dos némeros de 128 bits, haciendo uso de la ru- tina add_64. Los dos operandos de 126 bits se encuentran almacenados en memoria, an di- recciones que empiezan en x e y, respactivamente, en tanto que of resultado se almacena en la direccién de memoria que comienza en 2. 5.10 Escribir una macroinstrucciOn llamada subec cuya utilidad sea similar a la de addec, que realice ta resta del primer operando origen manos el segundo. 5.11, Cuando se produce la expansién de las macroinstrucciones no recursivas, en el momento del ensamblado 0 an el momento de la ejecucién? Cuando se produce la expansi6n de las ma- croinstrucciones recursivas? 5.12. Un programador de lenguaje simbélico propone inerementar la prestacion de la macro push, de- finida en ta figura 5.9, por medio del agregado de un segundo argumento, arrg2. El segundo ar- gumento reemplazaria a la instructién addce tr14, -4, %r14 con addce arg?, 4, arg2. Explicar qué es lo que esta intentando el programader y que peligras se esconden en este enfoque. Trayecto de datos y control Los capitulos anteriores permiticron examinar la computadora desde el nivel de las apli- caciones, desde el nivel de los lenguajes de alto nivel y desde el nivel del lenguaje de miquina (segtin la clasificaci6n de la figura | 4). En el capitulo 4 se introdujo el concep- to de arquitectura de programacién: un conjumto de instrucciones que realiza operacio- nes sabre los registros y sobre la memoria, En este capitulo se analiza la parte de la ma- quina que es responsable de la implementacién de estas operaciones: la unidad de control de fa unidad central de proceso, En este contexto, se analiza la maquina en el marco de su microarquitectura (el nivel correspondiente al control microprogramado o cableado de Ia figura 1.4). La microarquitectura estd constituida por la unidad de control ¥ los registros accesibles al programador, las unidades funcionales del tipo de la unidad aritmético-légica y todo otro registro adicional que la unidad de control pueda requerit. Una arquitectura de programacién determinada puede implementarse con microar- quitecturas diferentes. Por ejemplo, la arquitectura de programacién Pentium de Intel se ha implementado en distintas formas, aun cuando (odas soportan la misma arquitectura de programacién. No solo Intel ha implementado una arquitectura de programacién Pen- tium, sino que lo han hecho también varios competidores como AMD y Cyrix. Algunas de las microarquitecturas pueden apuntar a mejorar la velocidad de ejecucién del juego de instrucciones, otras pueden apuntar a disminuir el consumo de energia y otras ms pueden tener como objetivo disminuir el costo del procesador. La posibilidad de modifi- car la microarquitectura sin modificar Ia arquitectura de programacién implica que los fabricamtes pueden aprovechar lus nuevas lecnologias de fabricacién de memorias y de cireuitos integrados en general, para ofrecer a sus usuarios compatibilidad en los desa~ rrollos de software. Un programa se ejecuta sin modificacién sobre diferentes procesa- dores siempre que los procesadores implementen la misma arquitectura de programa- cin, independientemente de ia microarquitectura subyacente. Este capitulo tiene como objetivo examinar dos enfoques de microarquitectura total- mente diferentes: el de las unidades de control microprogramadas y el de las unidades de control cableadas, para lo cual se mostrard cémo puede implementarse un subconjunto del procesador ARC utilizando estas dos técnicas de disefio. 192_pmncirios = anquiTecTuAA DE COMPUTADORAS 6.1 Fundamentos de fa microarquitectura La funcionalidad de una microarquitectura se centra en el ciclo de biisqueda y ejecu- cidn de una instrucci6n, el que, de alguna manera, puede pensarse como el coruzdn de la maquina. Tal como se analizara en el capitulo 4, los pasos involuerados en el ciclo biisqueda-ejecucién son los siguientes: 1. Buscar en memoria la siguiente instrucci6n que debe ejecutarse. 2. Decodificar el e6digo de operacién. 3. Silos hubiera, leer los operandos desde memoria o desde registros. 4, Ejecutar Ia instrucci6n y almacenar tos resultados, 5. Volver al paso 1. La ejecucién de estos cinco pasos es responsubilidad de la microarquitectura. Es la mi- croarquitectura la que busca a la instruccién que debe ser ejecutada, determina de qué instruccién se trata, localiza los operandos, ejecuta la instrucci6n, almacena los resulta- dos y, finalmente, repite la secuencia para la instrucci6n siguiente. La microarquitectura de una maquina inctuye una seecién de datos, que contiene regis- tros y una unidad aritmeético-l6gica, y una seecién de control, como se ilustra en la figura, 6.1, La secci6n de datos se conoce habitualmente come trayecto de datos. El control mi- croprogramado utiliza un microprograma especialmente dedicado a estos efectos, no visi- ble al usuario, el que implementa las operaciones sobre los registros y sobre otros sectores de la méquina. A menudo, el microprograma contiene muchos pasos de programa que en su conjunto implementan una tinica (macro)instrucci6n, Las unidades de control cableadas adoptan como enfoque el de generar los distintos pasos requeridos para implementar una ‘operacién como estados sucesivos de una maquina de estados finitos, por lo que el diseiio de las mismas involuera técnicas de diseiio digital convencionales (como las que se plantean en el apéndice A), En cualquiera de los dos casos, los trayectos de datos se mantienen casi sin modificacién alguna, aun cuando puede haber diferencias minimas para admitic las Trayecto de datos (Seccién de datos) Figura 6.1 » Microarquitectusa vista desde ol ato nivel cariruio G + TRAYECTO ox uATOS ¥ CONTROL 193 distintas formas de control. Al disefar la unidad de control de ARC, primero se analizaré el enfoque microprogramado y luego se desarrollard una estructura cableada, En ambos casos, el trayecto de datos seré el mismo. 6.2 Una microarquitectura para ARC En esta seccién se considera el enfoque microprogramado para disefiar la unidad de control de ARC. El enfoque comienza describiendo el trayecto de datos y sus seitales de con- trol asociadas. En la figura 6.2 se repiten el conjunto y el formato de instrucciones de ARC descrip- loser el capitulo 4. El juego de instrucciones incluye 15 instrucciones agrupadas en cua- tro formatos definidos por los dos bits mas significativos de la instruccién codificada. Asimismo, se muestra el formato del registro de estado del procesador (&psx) 6.2.1 El trayecto de datos La figura 6.3 ilustra un trayecto de datos en ARC. El mismo contiene 32 registros de da- tos accesibles por el usuario (80-231), el contador de programa (pc), el registro de instrucciones (ix), la unidad aritmético-I6gica (ALU), cuatro registros temporarios no accesibles al nivel de Ia arquitectura de programaci6n (&temp0-%temp3) y las cone- xiones entre estos elementos, En Ta figura se simplifica la representacién de los conjun- tos de Tineas bajo la forma de un nimero acompaiiado por una barra diagonal sobre la nica linea que representa al conjunto completo. Los registros $r0-8x31 son accesibles directamente por el usuario. El registro 80 siempre contiene un 0, y esto no pede modificarse. El 8pc es el contador de programa, que apunta a la direccién a ser lefda desde la memoria principal. El usuario tiene acceso directo al contador de programa solo a través de las instrucciones al y jmp1. Los re- gistros temporarios se utilizan para interpretar el conjunto de instrucciones de ARC, por To que no son accesibles para el usuario, El registro %ix contiene la instruccién en eje- cuci6n, y tampoco es accesible al usuario. La unidad aritmético-ldgica La unidad aritmético-I6gica puede realizar una de 16 operaciones sobre los buses Ay B, de acuerdo con la tabla de la figura 6.4, Para cada operacién realizada en la unidad arit- mético-légica, el resultado de 32 hits se coloca en el bus C, a menos que quede bloquea- da por el multiplexor que maneja el bus C como consecuencia de colocar en él una pala- bra proveniente de la memoria de la maquina. Las instrucciones ANDCC y AND, ejecutan un producto légico, bit a bit, de los bits ho- mélogos en los operandos presentes sobre los buses A y B. Debe tenerse en cuenta que 194 prancipios nf anqurrecruna OE COMPUTADORAS wecminico Sigaltiendo a oe | Seivar un rogtetro on navorta sett | cargne low 27 bite ake oigoiticativos an on Fogieure es ‘oree | Suna iogice Bit por bir ‘ormce_[ cporacion ibsiee HoR bit por Bie sei [ Beeplatanfonto a sarmenn (ain agro) ‘onit | tteaade © eubroeinn Soot | Saleo y ectace (retorte Seade sobitlon) be | salto por igual ‘Boog | salto por negative bea | deleo of bay arrestre ore | Soleo of hay donborde iap30 Bun 1608 =a 1] feo] Formate] [eval seve. ] (ep copraen] [ona toomity | (sond]saivo [eo] sexes /setve | [ous] branch] | o1s000 ‘oeat0 ts | {soci} be or] enue. $03] sont | | a13008 eoowto we _|| tea} seo 10] Aetenacseo oieeso fa] mesoete. biot0 11606 Figura 6.2 * Conjunto de instrucciones y su tarmato en ARC. solo aquellas instrucciones cuyo cédigo simbélico termina en CC afectan a ios eédigos de condicién, por lo que ANDCC afecta el contenido del registro de estado, mientras que AND no lo hace. (Pueden producirse situaciones en las que se desee realizar operaciones aritméticas y lgicas sin afectar a los cédigos de condicién). Las instrucciones ORCC y OR realizan la suma légica bit a bit de los bits correspondientes a los operandos presen- tes en los buses A y B. Las instrucciones NORCC y NOR realizan la operacién légica nox de los bits homélogos de los operandos presentes sobre los buses A y B, Las instruccio- hes ADDCC y ADD Ilevan a cabo Ia operacién de suma aritmética de los operandos pre- sentes en los buses A y B, utilizando la representacién de complemento y signo de los mismos, fruLo 6 » TRAYECTO DE DATOS Y cowTMaL 195, fp aa at Fad 32 Pe steenp0 ttenpl asttene? bf anton Linea de conuol 32f de) multiplexor Datos desde memoria principal pedtoud: ‘euoWout 2 sore, L. Fijar cédigos de condicign. Figura 6.3 » Trayecto de datos en ARC. La instruccién sx (desplazamiento l6gico a derecha) desplaza el contenido del bus A hacia la derecha en una cantidad de bits especificado por el dato presente en el bus B (desde 0 hasta 31 desplazamientos). Se introducen ceros en los bits mas significativos del resultado desplazado, en tanto que los bits menos significativos se descartan, LSHIFT2 196. PRINCIPIOS DE AROUITECTURA OE COMPUTADORAS y LSHIFT1O desplazan a izquierda el contenido del bus A, en dos y diez posiciones, res- pectivameme, completando con ceros los bits menos significativos. SIMM13 recupera los 13 bits menos significativos de la palabra contenida en el bus A y coloca ceros en los 19 bits restantes. SEXT13 realiza ta extensi6n de signo de los 13 bits menos significativos de la palabra contenida sobre el bus A para crear una palabra de 32 bits. Esto significa que si el bit més significativo del grupo de 13 bits es 1, se copiargn unos en los 19 bits restantes del resultado. En caso contrario, los 19 bits se completardn con ceros. La instruccién INC incrementa el valor contenido enel bus Aen I, en tanto que la instruccién INCPC incrementa el valor del bus A en cuatro, lo que se utiliza para aumentar el contenido del contador de programa en una palabra (cuatro bytes). INCPC puede wilizarse sobre el contenido de cualquier regis- tro conectado con el bus A. La instruccién RSHIPTS desplaza en cinco lugares hacia la derecha al operando que se encuentra en el bus A, copiando en los cinco bits libres de 1a izquierda el bit més si nificativo original (el bit de signo det operando inicial). El efecto producido es el de una extensi6n de signo sobre los cinco bits mAs significativos. Al aplicarse tres veces conse- cutivas sobre una instruccién de 32 bits, la operacién, ademas, coloca el bit mAs signifi- cativo del campo COND del formato de saltos (véase Ia figura 6.2) en la posicién del bit 13, Esta operacién es util para la decodificacién de instrucciones de salto, de acuerdo con lo que se analizarg en este mismo capitulo, mas adelante, En este caso, la extension de signo producida no tiene significado o consecuencia alguna. Cada una de las operaciones aritméticas o légicas puede implementarse exclusiva- mente con estas operaciones de la unidad aritmético-l6gica. Por ejemplo, una opera- ci6n de resta se resuelve obteniendo el complemento a dos del sustraendo (usando la instruccién NOR y sumando | al resultado por medio de la instruccin INC), tras lo cual se suman los dos operandas. Se puede desplazar un nimero a izquierda suman- dolo consigo mismo. Una operacién de “no hacer nada”, requerida frecuentemente so- Jo para pasar datos a través de la unidad aritmético-l6gica sin modificarlos, puede Ile- varse a cabo a través del producto légico de un operando consigo mismo y el descarte del resultado obtenido a través del uso del registro $r0. Una operacién Idgica de XOR puede efectuarse mediante las instrucciones ¥, Oy NOR, haciendo uso de los. teoremas de DeMorgan (véase el problema 6.5). La unidad aritmético-légica genera los cédigos de condicion ¢, n, 2 y v, que re- sultan ciertos cuando se produce, respectivamente, un arrastre, un resultado negativo, un resultado nulo y un desborde, Estos cédigos de condicién solo se modifican a tra- vés de las instrucciones que asi lo indican en Ia tabla de Ia figura 6.4, En estos casos se genera una sefial (SCC) que le indica al registro $psx que debe actualizar sus cd- digos de condicién. ‘La unidad aritmético-I6gica puede implementarse en distintas formas. Para simplificar 1 anzlisis se considera, inicialmente, un enfoque basado en una tabla de biisqueda (LUT, lookup table). La unidad aritmético-légica tiene dos entradas de datos A y B de 32 bits ca capirino 6 + Tmavecto OE naros ¥ coxrRa. 197 vracién Modifica codigos Fy Fy Fy Fo Operaciér de condicion ANDCC (A, B) oRcc (A, B) NORCC (A, B) ADDCC (A, BY SRL (A, By AND (A, B) OR (A, 8) NOR (A, B) ADD (A, B) LSHIFT2 (A) LSHIET1O (A) STMOM13 (A) SEXT13 (A) INC (A) INCPC (A) RSHIPTS (A) =~ ce oo--oe--co - oc -e-e-o-e-o-e BERSSSSSSE RR eHKS Figura 6.4 » Operaciones aritméticas en ARC. dana, una salida de datos C de 32 bits, una entrada F de control de cuatro bits, una salida de cédigos de condicién de cuatro bits (N, V, C, Z) y una sefial (SCC) que actuatiza los bits del registro ¢psr. La unidad aritmético-I6gica puede descomponerse en una cascada de 32 tablas de bésqueda que implementan cada una de las operaciones aritméticas y Iégicas, se- guida de un circuito controlador de desplazamientos (barre! shifter) que implementa los desplazamientos. El diagrama en bloques comespondiente se muestra en la figura 6.5. El cireuito controlador de desplazamientos provoca el desplazamiento de la palabra de entrada en una cantidad de bits arbitraria (entre 0 y 31 posiciones), de acuerdo con To que determinen las entradas de control. Los desplazamientos se producen por nive- les, y en cada nivel se observa un bit diferente de la entrada que indica la cantidad de desplazamientos (Shift Amount, SA). La figura 6.6 presenta una configuracién parcial, a nivel de la estructura Iégica de compuertas, del controlador de desplazamientos. A partir de la parte inferior del circuito se puede ver que las salidas de la etapa inferior coinciden con las entradas a dicha etapa si el bit SA, vale 0. Si el bit SA, vale |, cada posicién de la salida tomaré el valor de su vecino inmediato a derecha o a izquierda, de- pendiendo de la direccidn del desplazamiento, la que a su vez. se indica en la entrada de desplazamiento a derecha (Shift Right). En el nivel superior inmediato, se vuelve a apli- car el mismo método, pero con dos diferencias: se debe considerar el bit SA, y se tiene que dupticar la cantidad de desplazamientos. El proceso se repite hasta observar el bit SA, en el nivel superior. En las posiciones que no tienen entradas asignadas se colocan ceros. Con esta estructura se puede imple- mentar cualquier desplazamiento entre 0 y 31 bits, a derecha 0 a izquierda, 198 _principios OE ARQUTTECTURA DE COMPUTAODRAS byay by 439 bya bryan 0 4+ Fos HA ie We » ALU ALU | ALU ALU LUT, LUTy9 Lut, LUT) J J] fe af =) a) af Conteolador de Semido del desplazamiento esplazamiema Cansidad de desplazamientos (SA) | vy {1 v v v vox co ZL Fijarcitigos de condiviba (SCO) Figura 6.5 * Diagrama en bloques de la unidad aritmético-légica de 32 bits. on a a ggg HE Detaeniee on * 4 * Figura 6.6 + Esquema circuital del control de dasplazamisnto, capimuio 6 + TRAvECTO DE OATGS ¥ CONTROL 199 Cada una de las 32 tablas de busqueda de Ia unidad aritmético-I6gica se implementa casi en forma idéntica, usando las mismas entradas a la tabla de busqueda, excepto por algu- nos cambios requeridos en ciertas posiciones para las operaciones, por ejemplo, de INC © INCPC (véase la figura 6.7). Las primeras entradas de cada tabla de busqueda se ilustran cen a figura 6.7, La tabla de busqueda que controla et circuito de desplazamientos se cons- cuye en forma similar, si bien las entradas a su tabla de basqueda son diferentes. Fy Py Fy Fy Arse @ 6] % Arrasire Ae enrato ie sald o000 G dofo o 0000 o o1tfo oO 0000 0 10}o0 0 8 0000 0 1t}i oo Z)}oo000 1 oofo o o000 1 otfo o 0000 + 10/0 Oo oo00 4 Filioo 0003 6 oo0J/o o ooo1 oO otf1 0 ooo1 6 10ol1 oO gijooo1 o ritli o ZY }oo0o01 1 volo o ooo; 1 otli oO Figura 6.7 ° Tabla de verdad para la mayoria de las tablas de biisqueda. Los eédigos de condicién n, 2, v y ¢ se implementan en forma directa. Los bits n y ¢ se obticnen directamente de la salida c,, del circuito controlador de desplazamiento y de la po- sicién de arrastre que sale de Ia tabla de busqueda LUT, de la unidad aritmético-légica, respectivamente. E! bit 2 se determina a partir de la operacién NOR ejecutada sobre las salidas del circuito de desplazamiento. El bit z vale 1 solo si todas las salidas del mismo son cero simultiineamente, Bl bit de desborde (v, overflow) adopta el valor | si el arras- tre ingresado a la posicién més significativa de la palabra difiere del arrastre generado desde dicha posicién, to que se implementa con una compuerta XOR. Solo aquellas operaciones que terminen en “Cc” deberian modificar los cédigos de condicién, por lo que debe existir una sefial que indique esa situacién, a que se identifi- ca come SCC (set condition codes, modificar cédigos de condicién). Esta sefial es cierta cuando tanto F, como F, son falsas. Los registros Todos los registros estin implementados con circuitos biestables D activados por flanco ne- gativo (véase el apéndice A), Esto significa que las salidas no cambiarén hasta que la sefial ‘200 _principios DE ARQUITECTURA DE COMPUTADORAS de sincronismo no sufra una transicién desde su nivel alto a su nivel bajo (el flanco de cafda del reloj). Todos los registros adoptan un formato similar, por lo que solo se analizaré el di- seffo del registro $11. Todos los registras del tayecto de datos son de 32 bits de ancho y, por consiguiente, se requieren 32 bits para el disefio de $1.1, el que se ilustra en la figura 6.8. tad dom dba —a—a—rr Ge qt Ud auf, r J ste cen cc ae YN L of loved A we A senate ects, Saeasnar Saran Figura 6.8 = Disefio del registro #r1. Laentrada CLK al registro $2.1 se introduce en una compuerta Y junto con la linea de se- leceién correspondiente (c,) del decodificador C, Esto asegura que $11 solo cambia cuando la seccidn de control asf lo determina. Las entradas de datos a $r1 se toman di- rectamente de las Iineas correspondientes desde el bus C. Las salidas se escriben sobre las lineas correspondientes de los buses A y B a través de compuertas buffer de tres esta- dos, las que se encuentran “desconectadas eléctricamente” salvo cuando sus entradas de habilitacién toman el valor 1. Las salidas de los buffers se transfieren hacia los buses A y B, por medio de las salidas a, y 6, de los decodificadores A y B respectivamente. $i ni a, ni b se encuentran en su nivel alto (equivalente a un | 16gico). las salidas de $1r1 se des- conectan eléctricamente de ambos buses A y B debido a que los buffers correspondientes estén inhibidos. Gu Entrattas de datos desde el bus C % 4 Registro de instrucciones tix Campos de insiniceién |] ct owe a me 203 bie a2 Figura 6.9 Salidas hacia la unided de control desde el registio $i. ‘aphywio 6 + Taavecro ne paras ¥ conTagt 207 Los demas registros adoptan un esquema similar, salvo por algunas excepciones. El regis- tro 810 siempre contiene un 0, el que no puede modificarse. Por consiguiente, el registro $20 no tiene entradas desde el bus C, ni tampoco desde el decodificador C y, por ende, ‘no requiere lip flops (véase el problema 6.11). El registro %ix tiene salidas adicionales que corresponden a los campos rd. rs1, rs2, op, op2, op3 y bit 13 de las respectivas instrucciones, segtin se muestra en la figura 6.9. La unidad de contro! utiliza estas salidas en a interpretacién de las instrucciones, tal como se verd en la seccidn 6.2.4. El contador de programa solo puede contener valores que sean miiltiplos de 4, por 1o que los dos bits menos significativos de $pe pueden ser conectados eléctricamente a cero. Los decodificadores A, B y C de la figura 6.3 simplifican la seleccién de los registros. Las entradas de los decodificadores, de seis bits, seleccionan un Gnico registro para cada uno de los buses A, B y C. Existen 2°= 64 posibles salidas desde los decodificadores, pe- ro solo hay 38 registros de datos. El indice asignado a cada registro (en base 10 ala iz~ qnierda de cada uno de ellos) en la figura 6.3 indica el valor que debe colocarse en las en- tradas del decodificador para seleccionar el registro correspondiente. La salida 0 del decodificador C no se utiliza debido a que el registro x0 no puede ser escrito, Los indi- ces mayores a 37 no se corresponden con ningtin registro y pueden utilizarse cuando no se requiere conectar registro alguno a los buses. 6.2.2 La seccién de control La figura 6.10 muestra la totalidad de la arquitectura microprogramada de ARC. La figu- ta ilustra el trayecto de datos, In unidad de control y las conexiones entre ellas. En el co- 1az6n de In unidad de control, una memoria de lectura (ROM) de 2048 palabras de 41 bits contiene los valores de todas las Ifneas que deben controlarse para implementar cada ins- trucci6n a nivel del usuario, En este contexto, Ia memoria de lectura suele considerarse como una memoria de control (control store). Cade palabra de 41 bits es una microins- trucci6n. La unidad de control es la responsable de la biisqueda de las microinstruccio- nes y de su ejecucién, en forma bastante similar a la forma en que se buscan y ejecutan tas instrucciones de ARC a nivel del usuario. La ejecucién de microinstrucciones se controla a través del registro de instrucciones de microprograma (MIR, microprogram ins- truction register), del registro de estado &psr y de un mecanismo que permite determinar cual es la siguiente microinsiruccién a ejecutar, formado por la unidad de saltos de control (CBL, Control Branch Logic) y el multiplexor de direcciones de la memoria de con- trol. No se requiere contador de programa para almacenar Ia direccién de la préxima instruccién del microprograma, dado que la misma se recalcula en cada ciclo de reloj, Jo que significa que no debe almacenarse para futuros ciclos. Cuando la microarquitectura inicia !a operacién (por ejemplo, en el momento del en- cendido), un circuito de inicializacién (que no se muestra en la figura) coloca la micro- palabra de ta direcci6n 0 de la memoria de control en el registro de instrucciones de mi- croprograma, para su ejecucién. A partir de ese punto, se seleccionan las micropalabras a ‘202 _Prmicseio$ DE ARQUITECTURA DE COMPUTADORAS ‘Seecibn cayesto) de datos Seccida de coniol ‘ ae, MUxA [eee cea 2 sect cel | aloo fi mene © 20477 Rigel + A00(REbe| At *esp2| 9: Goro ty ae $e RUIRUIDN) THEN como 16s Rise} © ADOGRLAEL ALIEN tas Spe nian cor0 124 Aes SP RLIR[I3]] THEN GOTO Los Hr yinmn Goro 12: Ripe] = INCeC(REpe 91 GOTO 0; de eatte: ba, ber captruvo 6 + TRAYECTD OE Daros y cantnot 207 eae ce sera, con enone, ‘Rete ADI sb pean ge ero lea co rigor 2 Colao resncxgen ste eh A beg campo sine pn a ceeon gen 1 Gla Srecebe de re {vere campo aca pol el amp 2 (spain 25 beats dereta {Coker aie Seino tbe 18 1 gheyrandn sobre cine (ohne clue Srl pr are dedi de eso 1 alee deco esto 1 At etc pain 1 sel ign de et 2 mes ( ipcaivsde teny0 elvan 1 pen tna ned ego ID 9 deeb (risecensia designe alin 208: de RSBIFTS ‘over cam COND a7} zande es eee RSIS 1 Lxenemsin ce gna no ates a oper. | alainsraston cota? 1 ibsimcercén reese? ict te {tae seieato por nose get i tyeorarel to sistent pene "hae nec pr bos ose deus (ear ee ted oad pr bees 1 ects Bear ocr py emperr i aet Figura 6.15 © Continuacion. Si bien el lenguaje microensambiador es en realidad un lenguaje simbélico, no es el mis- mo tipo de lenguaje ensamblador anatizado en el capitulo 4. El lenguaje ensamblador de ARC es visible al usuario y se utiliza para la codificacién de programas genéricos. Este Tenguaje microensamblador se utiliza para la codificacién del firmware y no es accesible al usuario. El tinico propdsito del firmware es el de interpretar el conjunto de instruccio- nes visible por el usuario. Una modificacidn en el conjunto de instrucciones del procest- dor involucra cambios en el firmware, en tanto que una modificaci6n a nivel del softwa- re escrito por el usuario no influye sobre el firmware. ‘Cada sentencia del microprograma de la figura 6.15 esté antecedida por un ntimero de- cimal que indica la direccién de la micropalabra correspondiente en la memoria de control de 2048 palabras. La direccién termina en un separador representado por dos puntos (:). 208_pmincirtos n= ARQUITECTURA OE COMPUTABORAS A continuacién de la direcci6n aparece el campo que contiene las sentencias de operacién, el que finaliza con un punto y coma. Luego del campo de operacién se admite un campo opcional de comentarios, el que se inicia con una barra inclinada (/). El campo de comen- tarios termina al finalizar el rengtén. Se admite mas de una operaci6n por linea, siempre que todas lus operaciones puedan realizarse en un tnico ciclo de instruccién. Las operaciones aritmetico-l6gicas se obticnen de la figura 6.4; ademds existen algunas otras, las que se ve- rin mis adelante, Notese que las 65 sentencias estén planteadas en una secuencia I6gica, més que numérica, Antes de iniciada la ejecucién por parte del microprograma, el contador de programa se inicializé con la direccién de comienzo del programa cargado en Ia memoria principal. Esto puede ocurrir como resuitado de una secuencia de inicializacién en el momento del encendido de la computadora, o bien desde el sistema operative durante el funcionamien- to normal del sistema, La primera tarea en Ia ejecucién de un programa a nivel del usuario es la de cargar la instruccién a la que apunta el contador de programa, desde Ia memoria principal hacia el registro de instrucciones IR. Obsérvese en la figura 6.10 que las lineas de direccién a la memoria principal se toman desde el bus A. En la linea 0 del microprograma se carga el contador de programa en el bus A, y se genera una operacién de lectura de la memoria. La notacién “R{ x)” representa el “registro x”, expresi6n en la que x puede reemplazar- se por alguno de los registros del trayecto de datos, de modo tal que “R[1]” representa al registro @r1, “R[ ix ]” representa al registro Gir y “R[ x51" identifica al registro que aparece en el campo de cinco bits x61 de una instruccién (segsn la figura 6.2). La expresién “AND(R[pe],R[PC)”, interpretada en forma literal, simplemente realiza el producto Wégico del contador de programa consigo mismo. En sentido légico, esta operacién no parece ser demasiado Util, pero puede ser til el andlisis de sus efectos secundarios. Con el objeto de colacar pe en el bus A, hace falta elegir una operacién de la unidad aritmético-I6gica que utilice el bus pero que no afecte los cédigos de condicién. De la variedad de alternativas posibles, se elige arbitrariamente la operacién correspon- diente al producto I6gico AND. Debe notarse que el resultado del producto légico se des- carta debido a que el multiplexor del bus C de la figura 6.10 solo permite que la informa- ci6n que sale de la memoria principal pase al bus C durante una operacién de lectura. Una operacién de lectura requiere normalmente mas tiempo para completar su ejecu- cién que el tiempo requerido para la ejecucién de una microinstruccién, El tiempo de ac- ceso a la memoria principal varia segdn la organizaci6n de la memoria, tal como se anali- zard en el capitulo 7. Con el objeto de considerar las variaciones en los tiempos de acceso de la memoria, el cireuito que incrementa las direcciones de la memoria de control (CSAL) no leva a cabo el incremento de ta direccién hasta que no se haya recibido una sefial de reconocimiento (ACK) que indique que la memoria ha completado su operacién. El flujo de contro? dentro de! microprograma se trasfiere a Ia sentencia cuyo niimero de identificncién sea cl siguiente en sentido creciemte, salvo que se detecte una operacién de GOTO o de DECODE. En tal caso, en el ciclo siguiente se carga el MIR con la micro- Garitwo 6 » TRavECTO GE DATOS ¥ conTROL 209 palabra | (linea 1). Nétese que algunas de las semtencias de microcédigo de la figura 6.15 ‘ocupan mis de un renglén de texto en la figura, pero son parte de una misma microins- truccidn. Véanse, por ejemplo, 1os casos de las lineas 1283 y 1601. Ahora que la instruccién se encuentra en el registro de instruccién como resultado de la operacién de lectura ejecutada en ta linea 0, el paso siguiente es el de la decodificaci6n de los campos correspondientes al cédigo de operacién. Esta operacién se realiza ejecu- tando un salto hacia el microcédigo, de 256 posibilidades diferentes, segun lo indica la pa- labra clave DECODE en la linea | del microprograma, La direccién del salto, de 11 bits, se construye, como ya s¢ ha dicho, agregando un I a la izquierda de los bits 30 y 31 del con- tenico del registro de instrucciGn, seguido por los bits 19-24 del registro, seguidos por 00, Luego de decodificar los campos del eédigo de operacién, la ejecucién del microcédigo continéa en funciGn de cudl de las 15 instrucciones de ARC esté siendo interpretada. En un ejemplo de la forma de funcionamiento de la operacién de decodificacién, con- sidérese la instruccién addcc. De acuerdo con el formato de instrucciones aritméticas de la figura 6,2, el campo op es 10 y el campo op3 es 01 0000. Si se agrega un 1 alla iz- quierda de la palabra binaria correspondiente a op, seguido del valor binario de op3, y seguido por 00, la direcci6n de DECODE es 110.0100 0000 = (1600),,. Esto significa que as microinstrucciones que interpretan la instruccién addec comienzan en la posicién 1600 de la memoria de control. En la prictica, existe una cantidad de direcciones de DECODE que no deberfan apare- cet nunca. No hay instrucci6n aritmética que responda a un formato binario 111111 en el ‘campo op3, pero en previsidn de que esta situacién se produjese, quizas debido a un pro- grama errante, se deberi colocar en la direceién de DECODE 110 1111 1100 = (1788), una rutina de microcédigo capaz de lidiar con la instruceién ilegal. Estas locaciones se han dejado en blanco en el microprograma de la figura 6.15. Las instrucciones de formato SETHI /Branch y Call no tienen campo de operandos op3. Los formatos SETHI/Branch solo poseen campos op y op2, en tanto que Call. solo ofrece un campo op. Con el objeto de mantener un mecanismo simple de decodifica- ci6n, pueden crearse entradas duplicadas en la memoria de control. Considerando el forma- to SETHE, si se sigue la regla determinada pare obtener la direccisn de DECODE, esta di- receiGn deberd tener un 1 en su bit més significativo, seguido por 00 en el campo op, seguido.a su vez por 100, que identifica a SETHI en las posiciones 19-21 de la palabra, se- ‘Buidos por los bits de las posiciones 22-24 del registro de instruccién, final mente seguidos por 00. Se obtiene como resultado la palabra binaria 100100xxx00, en la que xxx puede adoplar cualquiera de tos valores posibles dependiendo del campo imm22. Los tres bits xxx pueden adoptar 8 valores diferentes, por lo que ser necesario duplicar oédigos SETHI en las posiciones de memoria identificadas como 100 10008000, 100 10000100, 100 1000 1000, 100 1000 1100, 100 1001 6000, 100 1001 0100, 100 1001 1000 y 100 1001 1100. Las direcciones de DECODE en los formatos de bifurcacién (Branch) y llamado (Call) se cons- truyen en posiciones duplicadas en forma similar. La figura 6.15 representa solo la versién de cada conjunto de cédigos duplicados ubicada en la direccién numéricamente més baja. ‘210 _PRINCIPIOS OE ARQUITEGTURA DE COMPUTADORAS, Si bien este método de decodificacién es simple y rapido, se pierde gran cantidad de memoria de control. Como solucién alternativa que desperdicia mucho menos espacio en la memoria de control, se puede modificar el decodificador de 1a memoria de control de modo tal que todos tos formatos de salto de SETHI apunten a la misma posicién, El mis- mo criterio puede usarse para resolver las instrucciones con formato de bifurcacién (Branch) y Hlamado (Call). En la microarquitectura del ejemplo, se prefiere la solucion ms simple aun cuando haya que pagar el precio de una memoria de control mas grande. Se analizard ahora la forma en que se implementa la instruccién 14. El microprogra- ma comienza en la posici6n 0, aun cuando en este punto no sabe cudl es el c6digo de ope- racién al que apunta el contador de programa en la memoria principal. La linea 0 del mi- croprograma comienza la operacién de lectura, tal como lo indica la palabra clave READ, con lo que se produce la carga de una instrucci6n desde Ia direccién de memoria principal, ala que apunta el contador de programa, hacia el registro de instrucciones. Para este caso, se supondrd que el registro de instrucciones contiene el formato de 32 bits siguiente: 1 g0010 00000 00101 1 0.0000 0101 0000 op xd op3 rs simm13 Este formato corresponde a la traduccién de! cédigo simbdlico ARC 1d &r5 + 80, %r2. En consecuencia, en la linea ! se realiza el salto a la direccién (111 0000 :0000), = (1792),., En la linea 1792 se inicia la ejecucién de la instruccién 14, En esta linea, 1792, se analiza el valor del bit de direccionamiento inmediato 4. En este ejemplo, i = 1 por lo que se transfiere e] control a la palabra ubicada en 1794. Si el valor de i hubiese sido 0, el control se hubiera transferido a la siguiente palabra, la que en este caso es 1793. La I nea 1792 suma los registros indicados en los campos rs1 y rs2 de la instruccién, anti- cipindose a la forma no inmediata de la instruccién 14, lo que solo tiene sentido si i = 0. Dado que este no es el caso, el resultado almacenado en &tempo se descarta al momento de la transferencia de control a la linea 1794, Esta situacidn no genera ninguna sefializa- cién con respecto a tiempos, ni produce tampoco efectos secundarios indeseados, dado que ADD no modifica los eédigos de condicién. En la palabra {794 del microcédigo, se rescata el campo simm1 3 (utilizando exten- siGn de signos, segiin io indica la operacién SEXT13), el que, en la palabra 1795, se su- ma con el registro indicado en el campo rst. Se transfiere luego el control a la palabra 1793, en la que se produce Ia operaci6n de lectura, Se avanza ahora a la palabra 2047, en Ja que se incrementa el contador de programa con anticipacién a la lectura de la siguien- te instrucci6n a ser rescatada desde la memoria principal. Dado que las instrucciones acu- pan cuatro bytes y deben estar almacenadas en posiciones de memoria cuyo valor sea miiltiplo de cuatro, el contador de programa se incrementa en cuatro unidades. Se devuel- ve el control a la Iinen 0 del mictocédigo, en Ia que se repite el proceso. Se requiere asi un total de siete microinstrucciones con el objeto de interpretar la instruccién 1d. A con- tinvacién, se repite dicho conjunto de microinstrucciones. CAP(TULO G » TRAYECTO DE DATOS ¥ CONTROL 211 Oy Ajte1 © ANOCRIPGL.RExeI)+ ABAD; /Leeruns nance de ARC dado meron 1, aeeane’ Salt (256 pout cancion tes de oer 17591 AfeeepO] < ADD(RCeML].RLz#21)2 —/Cileuardlecineigen 3 TR[23] MuEN Gone 1798; 796, Rivenpo] — SeRr19URESE)1? 1 lace ange sin par eee 50 1795. ftenpD) — ADD(RCea],Rfeampays; —Caeulr desi ogo 17836 RUed] = ANDGR(teno0 RL LeMPDID; Concrete oign ste ts A 2047s Rize] — EHCECCRIpeId; GOO 0; !Teerementar pe yempooas de nuevo Las instrucciones restantes, excepto en el caso de las insirucciones de salto, se interpretan en forma similar a Ia interpretacién que se acaba de realizar para la instruccién 1d, En las ins- trucciones de salto se requiere alguna decodificacin adicional debido a que el tipo de salto queda determinado por el campo COND del formato de las instrucciones de salto (bits 25- 28), campo que no se utiliza durante la operaciGn de decodificacién. La solucién que aqui se utiliza consiste en desplazar los bits del campo COND hacia IR [13] de a uno por vez, sal- tando Iuego a distintas locaciones del microcédigo segiin el formato binario de COND. Para las instrucciones de salto, la operacién DECODE de la Ifnea | del microprograma transfiere el control a la linea 1088, Estas instrucciones de salto requieren mas espacio que las cuatro palabras admitidas para cada instruccién, por lo que desde la linea 1088 se devuelve el control a la linea 2, en la que se inicia una seccién suficientemente grande de memoria disponible para almacenamiento de control. Las Iineas 2-4 rescatan los 22 bits que corresponden al desplazamiento del salto, colo- can en cero los 10 bits més significativos y almacenan el valor obtenido en el registro tempo. Esto se logra corriendo 8x en 10 posiciones a la izquierda, almacendindolo en ‘temp0.y, por tiltimo, corriendo el resultado nuevamente en 10 bits, ahora a la derecha. ‘Debe notarse que el desplazamiento puede ser negativo, por lo que las operaciones sobre el mismo se realizan con extensisn de signo. RSHIFTS implementa la extensién del sig- 1no.)* Las lineas 5-7 desplazan 8ix en 15 bits a la derecha de modo de alinear el bit mas significativo del campo COND ( IR[ 28] ) con la posicién (IR 13]), lo que permite que una operacién de Jump on IR[23] = 1 analice el vator de cada bit. En forma alter- nativa, se podria desplazar el campo COND de IR{ 31] de aun bit por vez y utilizar la condicién Jump on n para verificar cada bit. (Nétese la existencia de un ligero error en. Ja forma en que se actualiza el contador de programa en la linea 12. El problema 6.21 pue- de dar la explicaci6n.) El proceso de decodificacién del salto se inicia en la linea 8. El mismo se resume en la figura 6.16. Si TR[ 28], que se encuentra ahora en IR[ 13 ] vale 1, la instruccién es ba. Ja que se cjecuta en la linea 12, Nétese que el control vuelve a la linea 0, en lugar de saltar a la nea 2047, para evitar el doble incremento del contador de programa en la misma instrucci6n. ~ Ni. de T: Debe observarse con cuidade la utlizacién del mismo término (desplazamiento) para traducir tanto la oparacién realizada {shit en inglés) evanto la designacion del dato (offset) que, en una instruccion de salto, identifica el destino de dicho salto, 212 _pRIvCsPI0s DE AROUITECTURA DE COMPUTADORAS Linea 8—» IR[28) IR(27]<— Linea Linea 12 IR[26) <— Linea 13 cond 2 ‘ 28 27 25 25| salto 0001) be tne [oe] ras} <— tina ts [0 01] bes 0110) bneg ¥ | 011 i] bus 100 0} ba tia 1 [seg] [ove] ese Figura 6.16 + Arbo! de decodificacion para las instrucciones de salto y sus cortespondientes lineas de microprograma, Si TR(28] = 0, se desplaza 8ix un bit a la izquierda a través de la suma del registro consigo mismo, de modo de alinear IR{ 27 } en la posicién IR[ 13}. El bit IR[27] se verifica en la linea 9. Si su valores cero, se ejecuta Ia instruccién be en la linea 10; en ca so contrario, se desplaza tir a la izquierda, verificando el estado del bit IR[26] en la linea 13. Las instrucciones de salto restantes se interpretan en forma similar. Traducci6n del lenguaje microensamblador Un microprograma escrito en lenguaje microensamblador debe traducirse al cédigo ob- jeto binario antes de ser almacenado en la memoria de control, tal como se debe traducir un programa escrito en lenguaje simbélico antes de almacenarlo en memoria principal en 1a forma de un programa objeto binario, Cada linea del microprograma de ARC corres- ponde exactamente a una patabra de la memoria de control, y no existen en el programa referencias hacia detante sin identificar. De tal manera, el microprograma ARC se puede ‘ensamblar Iinea por linea en un tinico paso. Considérese el ensamble de la linea 0 del mi- ‘croprograma que se muestra en la figura 6.15: R{ir] AND (R[pe],R{pe}); REA Los campos de la micropalabra de 41 bits se pueden completar en la forma siguiente: Gapinu.o 6 » TRAVECTO DE Dares ¥ coNTROL 213 A B c M M M v u uaw AX BX © __XDR_ALU COND __JUMPADDR 1.9.0,0.0 eh1'0 00.0 qot.0.0:1,9 aJoifofo'u.c aJo oofo'occo000 000) El producto légico del contador de programa consigo mismo se inicia cargando el mencio- nado registro en ambos buses A y B, con lo que se transfiere una palabra a través de la uni- dad aritmético-légica, sin modificarla. Los campos A y B tienen el formato correspondien- te al contador de programa (32, = 10 0000,). Los campos AMUX y BMUX contienen ‘ceros dado que las entradas a estos multiplexares se toman desde el registro MIR. El regis- tro de destino de la operacién de lectura és el registro de instrucciones IR, cuya identifica- cidn binaria corresponcle a 37,, = 10 O101, en el campo C. El campo CMUX contiene un cero debido a que ta entrada al CMUX se toma desde el MIR. Se requiere realizar una ope- racién de lectura de memoria, por lo que el campo RD contiene un { en tanto que el cam- po WR contiene un 0. El campo ALU contiene 0101, lo que corresponde a la operacién 16- gica AND, Nétese que los cddigos de condicién no se ven afectados, lo que sf ocurriria si se hubiese utilizado la instruceién ANDCC. FI campo COND contiene 000 dado que el con- trol se debe transferir a la micropalabra siguiente, por lo que la palabra binaria del campo JUMP ADDR no tiene importancia, Este campo, arbitrariamente, se completa con ceros. La segunda micropalabra implementa el salto de 256 vias. En este caso, todo lo que importa es que en el campo COND dela operacién DECODE aparezca el valor 111 y que no se afecte el contenido de registros, memoria o cédigos de condicién. Ei formato bina- rio correspondiente es ahora: A B c M M M u u uRW AX BX __C__XDR ALU COND __JUMPADDR. loo cea dl|ococoal|oc oo aloes a1 ijocooo000000| La linea | podria admitir una cantidad de formatos diferentes y funcionar de todos mo- dos. Por ejemplo, en los campos A. B y JUMP ADDR pueden aparecer distintas combi- naciones binarias cuando se lleva a cabo una operacién de DECODE. El uso de ceros pa- ra completar dichos campos es simplemente una decisién arbitraria. El campo ALU es O101, correspondiente a Ia instruccién AND, lo que no afecta los cédigos de condi Pueden usarse, alternativamente, otros cédigos de operacién que no afecten los de condicién. El resto del microprograma se traduce en forma similar. La figura 6.17 ilustra el mi- croprograma traducido integramente, excepto en aquellos lugares en los que deberfan aparecer cédigos duplicados debido a instrucciones de salto 0 a cédigos correspondien- tes a “instrucciones ilegales”. 214 _PAINCIPIOS DE ARQUITECTURA DE COMPUTADORAS Considérese el agregado de una instruccidn a la implementacién microprogramada det conjunto de instrucciones de ARC. Dicha instruccién, llamada subcc, resta su segundo operando del primero en notacién de complemento a dos, utilizando el formato aritméti- coy un campo op3 de 001100. ‘Se requiere modificar el microprograma para agregar la nueva instruccién. Se inicia el proceso determinando la direccién de comienzo de subec en la memoria de control, para To que se agrega un 1 a la izquierda del campo op, cuyo valor es 10, seguido por el campo ‘0p3, cuyo valor es 00 1100 y, finalmente, por 00. El resultado de esta construccién es Ja pa- Jabra binaria 110 0011 0000, que coresponde a la direccién (1584),, dentro de la memoria de control, Ahora, corresponde crear el cédigo microensamblado, el que resulta similar al de 1762 100103] 1763 Joo 0000) 1792 [900000 loo 0000) 190001) 0c0000) hooaoy| hoo000| 100003] 119000 ¢lo0000000000) 11090)12 000000000000) Loo oioji1100000010) a B c Direccidn de M M M almicenamiento u URW AX 8 XC XDR_ALU COND _JUMPADDR. 0 [2.000 00)0]1. 0000 o]o]1 0010 2)0]:]o]o 1 0 100000 000000000 4100000 10/0000 d|0(0 00000000 101/11 1J00 000000000) 1152 {10010 1)ol000009)0(00000o;jojof: 0102 1023111121114 1280 {1 0.0000/0l1000090001111)o)ol010 10 Jo 0000000000000) (281 [10010 10f1.00101[0100001/o)o}011 00 oo 0000000000000) i282 10006 1010000101000 1)/o)o)0\1 00 olo0.a\00000000000) 1283 [1 00000/0}10000 1Joj1 009 0 d/o)olo}1 00 oft 1 9}0096 0000009) 1600 [0 0406.9)0|00 000 0lo)0 0000 dfofofolo10ij01, 10010090101 1601 |9 0.000.9/1]00000o}1/0 0000 oj1jojojo9 i afi 101121221121) 1602 [1 0010 1/o|000900|0/1 0000 1/ol0\01 1 0000 lod 000000000 1603 [0.0000 0]1]1.0000 1]o)00000 ojajolofoo1 afr 20f12112222224) 1604 [6 0.090 0/0/0000 00|00G 000000010111 0111001000110) 1605 00.090 0!1/000000)0c0000 1/000 000)210[111111111)) 1606 [1.010 1/00 00000]0100001l0]1 0110000 0000000000) 1607 000000|1200001/o}000000)x)oolo 0001 1022113213119) 1608 |. 0 0.00 0|o/00000 lo} 000 0d)0fa|alo10 320111001 0020104 1609 foo 0001100 0000h)o000 002000031 1011122111111] 1610 | 00101000000 ofa]: 00001) 0/011 01 1)00000000 000000) 1611 J000000:10000 100000 00)1/c}o00i)1 101112121224 1624 0000090100000 9\0}00 0000}0001010 110111 001011019) 1625 [90.000 0]1/00000|1/o00000)1 0/001 ofr 1022111111123) 1626 [100.10 [010.00 0.00(0/10 0001/0)0\0]1.0 1 10 000 0000000000) 1627 [00.00 00)111 0000/0000 090)1/olo}001 of: 1011111121113) 1688 [9 0.0.00 0}0l0 000 00/0/00 0000)/0)010101 01/00011010011914) 1689 {00.0000|1000009h/000000)/lo01001 1011111111111) 1690 [10010 1/00. 000 09|0|100001)o)ol0'1 01 1}000|00000000009) 1691 000 00)1|1 0000 1Joj000000)/oloo100110/11111121191] 1760 Jo 0.00 0 0/0l0.0000 olola000 00/0001 93)10111011100010) 1761 0.0.90 00/1/0000 ola|1 0.00 oo} 0/011 090,11 cj00000000000) lo} lo} olo}o) 1 o| ololo) | al o}ofo| Figura 6.17 » Microprograma ensamblaco del subceniunto de instrucciones de ARG. Gapituio 6 » TRAVECTO NE DATOS Y CONTROL 215 A B c M M M u u URW AX 8 XC __XDR ALU COND _JUMPADDR 1793 [10000 1ifo1 0000 [ofa 0 ocodififo fi1ai1iiin] 1794 |100101\9}0 0000 olds 0 000 x)olold loo000000000) 1795 {0.0000 0|3/10000 Joli 0 000 x/olold 1100000901) 1808 [0000.0 0f3/0000091N1 0 9001/0010 1100010010) 1809 {1001.9 1J00000000]109101/0|010 loo000101000) 40 [1.9019 .3}0/0 00000010910 x\q0)0 lb 0000000000) 44 |1.0010 10/0 0000010910 1/¢0}0 lb0000000900) 42|100101J00000000109102/000 ln oco 0000009 43 |100101/9000000d1 00201000 no 000000009) 44 [10060 1]o00000 01/0 00000003, ia22221212]] 1810 [1001 01/o)00000 001 ¢ 000 afo0}9] oon 00000000) 1811 }000¢ 00)1[1 0900 1J02.0 000 afolo}o} 11100010001 1088 [9 6.00 0 01000000 c100.0 000 oloo|a] loo000000020) 2[100101/00 0000010200001} ol0l loo 000000000) 3 [10000100 000001010000 1}ojafaI loo0000000 4 [1.0000 1100000 001q10 000 alo}a}a| 0000000000 5 [1.00101/o/0 coc 0010119010 sfo}alo| lood0000000 6 [1.00210 1/0)0 s00 001011 00 10 1Jolalo| looo0000000 7 [10910 1/0)0 00000101 0010 afa}alo| loo00000000 8 [1.0010 1/01 0020001 0010 fololo| loop00001109) 9 [1002101101 00200)010010 t/o09| loo000001:03] 10 L001 01/1 0010902 00101/00 loooo0001100) 11 ]200809/q)00000 0000000000 2221111111] 12 |100060)0]106001]01 0000000 0000000000) 13 |100201/9100101J01 00101100 0090001000) 14 |900000/000000q 0000000109) 00000001100) 15 0000000000 000)q0 2 0000/0109) 1212112211] 16 00.000 000000001000 000 dfoldlg} 00000010021 17 Jo0000900000009)000000 0/0) 0000000110 18 00000 000 00000100 0000400} a dati21ii 19 00.000 000 00900)}00 0000009} lo000000110 20 |000 000/010 000 00/0090 000 0010} 22111111 2087 [100 009}0|0009 0011 00000 0)9)0) lavoaooa000 Figura 6.17 * Continuacién. la instruccién add almacenada en la posicién 1600, con la excepcién previsible de com- plementar a dos el sustraendo antes de realizar la operacién. BI sustraendo se complementa con la instrucci6n NOR, suméndole luego un | a través de la operacién INC. Se completa la resta utilizando el eédigo correspondiente a addcc. La coditicacién de subce en microcé- igo es la siguiente: 2504: Rleempol < SexTI9eRLEEHY? Pobtener el ype 2 TF 1833] THEN GoTo 1586; {EI segundo operande en ot odo iamadixa 3505: RltompO) @ RLes2); 2 Obtener operand ids con extension de sign ABBE: Afeempd] + NOR(R(eempO}, mI0}); — FObIenerel complements aneo dl sesvsendo 3887: Romp] « THCY RI te=pO]); GOTO 26037 /Obtene el complement a dos del susesendo En tanto que el micracédigo binario correpondiente resulta ser: 216 _PRINCIROS DE AROUITECTURA DE COMPUTADORAS a B c M M M u u uRW AX BX ¢__XDR_ALU COND _UMPADOR 1584 [roo 1 sfojoo'coodjol1'00001/o[o)ol1 1002 02)110002 10010) 1585 [ooo 0 oofooc00|i|1 0090 11o[ofol1 00 0 00}o0 000000000) 1586 [10.000 1Jofo.0000 qfol1:00.00 r}ofdlolo1 fo o0Jo00 00000000] 1587 [10°00 0 1Jofo.0.00 0.ofo[1'0'0 00 2)o/ofol11 01 1011001000013) 6.2.5 Traps e interrupciones Se define un frap como el procedimiento autamitico de llamada generado por el hardwa- Fe como consecuencia de una condiciGn excepeional que se produce durante la ejecucién de un programa, por ejemplo una instrucci6n ilegal, un desborde por encima o por deba- jo de los limites de representacién admisibles, una divisién por cero, ete. Cuando se pro- duce un trap, se transfiere el control a un administrador de traps, rutina que es parte del sistema operativo. Este administrador podria, por ejemplo, imprimir un mensaje y final zar el programa agresor. Una forma de manejar traps puede consistir en modificar el microcédigo, posible- mente para verificar los bits de estado. Por ejemplo, puede verificarse el bit v para ver si se produjo un desborde. En ese caso, el microcédigo podria cargar en el contador de pro- grama (si hubiese ocurrido un srap) la direcciGn de comienzo de la rutina de administra- ci6n de estas situaciones. Normalmente, existe una seccién fija de memoria destinada a las direcciones de co- mienzo de los administradores de trap, en las que se almacena una Gnica palabra para ca- da rutina de administraci6n. Bsta seccién de la memoria conforma una tabla de saltos que transfiere el control a los administradores, tal como lo ilustra la figura 6.18. Se usa una tabla de saltos para permitir que la direccién absoluta de cada situacién pueda in- luirse en el microcddigo, en tanto que los destinos de los saltos pueden modificarse a ni- vel del usuario para manejar cada situacién en forma diferente, Un trap histéricamente habitual es el que tiene que ver con las instrucciones de pun- to flotante, las que pueden ser emuladas por el sistema operativo si no han sido directa- mente implementadas en e! hardware del sistema. Las instrucciones de punto flotante po- seen sus propios cédigos, pero, si no se han implementado en el hardware (esto significa que el microcédigo no las conoce), generarén un frap por instruccién ilegal en el momen- toen que se intente su ejecucién, Cuando se produce una insteuccién ilegal, se transfiere. el control al administrador de instrucciones ilegales, el que verifica si el problema surgié a partir de una instruccién de punto flotante. De ser asi, transfiere el control a la rutina de emutacidn de punto flotante adecuada, segtin la causa que produjo el trap. Si bien actual- mente las unidades de célculo en formato de punto flotante vienen incorporadas dentro de los procesadores integrados, este método se sigue utilizando en otras aplicaciones en capiruio 6 » TRavEeTo DE naTos y ConTROL 217 Direceién Contenido. = Administrador 60 JUMP TO 2000_| Instruccisn invatida 64 JUMP TO 3000__| Deshorde (por exceso) 68 n JUMP TO 3600_| Desborde (por debajo del ninimo) TUMP TO 5224 | Divisién por cero 16 JUMPTO4I80 | Disco 80 SUMP TO 5364_| Impresora 84 JUMP TO 5908 | Tecludo 88 JUMP TO 6048 | Temporizador Figura 6.18 » Una tabla de saltos para las rutinas de atencién de interrupciones y administradores de traps. Jas que se extiende ef conjunto de instrucciones con otras, como, por ejemplo, las exten- siones gréficas de una arquitectura de programacién. Las interrupciones son situaciones similares que se producen luego de algiin evento circuital considerado como excepeién, como el accionamiento de una tecla en un tecla- do por parte del usuario, un llamado telefonico entrante en un médem, una falla de ali- mentacién, una temperatura inapropiada para el funcionamiento normal, etc. Los traps son de naturaleza sincrénica con la ejecucién de un programa, en tanto que las interrup- ciones son asinerénicas. Asi, un trap se producird siempre en el mismo punto de un mis- ‘mo programa que se ejecuta con ef mismo conjunto de datos, mientras que la ocurrencia de interrupciones es précticamente impredecible. Cuando se presiona una tecla en un teclado que funciona por medio de interrupcio- nes, la electrénica del teclado activa una linea de interrupciones sobre el bus, tras lo cual la CPU activa una linea de acuse de recibo ni bien se encuentra lista para atender ef llamado (aquf entra en juego el tema del arbitraje del bus, que se analiza en el ca- pitulo 8, el cual tiene relacién con la eventual existencia de mds de un dispositive inte- rrumpiendo simuttdncamente). El circuito del teclado se identifica ante la CPU como el responsable de [a interrupci6n, por medio de la colocacién de su vector de interrup- eiones en el bus de-datos. La unidad de proceso coloca el contador de programa y el re- gistro de estado en la pila. Se utiliza el vector de interrupeién para acceder en forma in- dexada a ia tabla de saltos, la que contiene las direcciones de comienzo de las diferentes rutinas de atencién de las interrupeiones. Cuando se inicia la ejecucién de alguna rutina de atencién de una interrupcién ode un trap, la misma procede a rescatar en la pila aquellos registros que piensa modificar, rea- liza su tarea, recupera los registros previamente almacenados y, luego, regresa al progra- ‘mia interrumpido. El proceso de retorno desde un trap es diferente al de retorno desde una subrutina, dado que el acceso a un trap difiere del Hamado a una subrutina (debido a que también debe salvarse y luego rescatarse el registro 8psr). En la arquitectura ARC se 218 PRINGIPIOS BE AROUITECTURA DE COMPUTADORAS utiliza la instruccién rett (véase el capitulo 8) para retornar desde una interrupcién 0 desde un ‘rap. Una interrupcidn puede llegar a interrumpir a otras interrupciones, por lo tanto, Io primero que puede requerirse de una rutina de atencién de interrupeiones es que eleve su prioridad (usando una instruccién especial en modo supervisor) para evitar la posterior aceptacién de otras rutinas de menor priotidad 6.2.6 Nanoprogramacién Si la memoria de control es ancha y tiene una gran reiteracién de las mismas palabras, puede ahorrarse espacio de memoria de microprograma colocando una copia de cada pa- labra de microcédigo en un elemento de nanoalmacenamiento, usando la memoria de microprograma como indice a la memoria de nanocédigo. Por ejemplo, en el micropro- grama de la figura 6.15, las lineas 1281 y [282 son iguales. Las lineas 3, 4 y 40.2 44 son iguales, y asf en una cantidad de otras microinstrucciones, especialmente en los microcd- digos duplicados correspondientes a los saltos y a las instrucciones ilegales. La figura 6,19(a) ilustra los requerimientos de espacio de la memoria utilizada origi- nalmente para el microcédigo. Consta de 2048 palabras, cada una de las cuales tiene 41 bits, dando como resultado una capacidad de 2048 x 41 = 83.968 bits. Sup6ngase que en toda Ia memoria hay 100 micropalabras tinicas (el microprograma de la figura 6.15 esti incompleto, por lo que no permite la medici6n directa de la cantidad de microcédigo Gni- co). La figura 6.19(b) ilustra una configuracion que utiliza nanocédigo, en 1a que se lo- gra ahorro de espacio si en la secuencia de microcédigo original existe una cantidud de patrones binarios que se repiten. Las micropalabras Gnicas (100 en este caso) forman ut, nanoprograma, cl que se almacena en una memoria de lectura de 100 palabras de 41 bits cada una. El microprograma accede ahora en forma indexada al nanocodigo. El microprogra- ma tiene la misma cantidad de palabras independientemente de si se utiliza nanocédi- go 0 no; pero, cuando se utiliza nanocddigo, en la memoria de control se almacenan punteros a aquel en lugar de las palabras de 41 bits. Ea este caso, la memoria de con- trol tiene ahora 2048 palabras de un tamaiio de log,(100) = 7 bits. La complejidad del rea de almacenamiento, cuando se utiliza nanoalmacenamiemto, es de 100 x 41 + 2048 x 7 = 18.436 bits, lo que representa un ahorro importante en la superficie con relacién al planteo microcodificado original. Para un valor pequefio de m y un valor grande de 7, siendo m la longitud del nano- programa, se puede imaginar un gran ahorro de memoria. Esto libera un drea que puede utilizarse con algin otto objetivo, posiblemente para mejorar la eficiencia, No abstante, en lugar de acceder solo al microcddigo, ahora se debe acceder al microcédigo y, lue- g0, al nanocédigo. La maquina funcionard mas lentamente pero ocupando un espacio menor. iTuLo 6 + TRAYECTO HE DATOS ¥ CONTROL 219 k= hlogs) | = [log(100)] Micropro rama /Microprograma| original 2048 palabras 2048, palabras w= 41 bits suigupdouru got Area de microprograna =n x k= 20487 = 14.336 bits Area de nanoprograma =m w = 10041 = 4100 bits Area total = 14.336 + 4100 = 18.436 bits @ b) Figura 6.19 © 4a) Micropragramacién versus (b) nanopregramacién, 6.3 Control cableado Una alternativa a la unicad de control microprogramada es el uso de un disefio cableado, en el que se realiza una implementacién directa utilizando flip flops y compuertas légicas, en lugar de usar un elemento de almacenamiento y un mecanismo de seleccién de micropalabras. Los pasos de un microprograma se reemplazan por los estados de una maquina de estados finitos. Con el objeto de administrar la complejidad del disefio de una soluci6n cableada, se sue- Ie utilizar un lenguaje descriptor de hardware (HDL, Hardware Description Language) con el objeto de representar la estructura de control. Un ejemplo de este tipo de Tenguajes es VHDL, acrénimo de VHSIC Hardware Description Language (donde VHSIC, a su vez, es otro acrnimo de Very High Speed Integrated Circuit). El lenguaje VHDL se ut za para describir una arquitectura en un nivel muy elevado, pudiendo ser compilado hacia disefios de hardware a través de un proceso conocido como compilacién en unidad de control cableada a ser considerada en este capitulo, se utilizard, por ser mis apro- piado, un lenguaje HDL de menor nivel, el que habitualmente se conoce como lenguaje de transferencia de registros (RTL, Register Transfer Language). El lenguaje HTLIRTL a ser definido en esta seccién recuerda ligeramente al lenguaje AHPL (A Hardware Programming Language) desarrollado por F. J. Hill y G. R. Peter- son. La idea general es la de expresar una secuencia de control como una serie de senten- cias numeradas, cada una de las cuales puede, luego, traducirse directamente en un dise- fio de hardware. Cada sentencia consiste en una parte de datos y una de transferencia, como se observa a continuacién: (220 _PRINCIPIOS DE ARQUITECTURA DE COMPUTADORAS 5: A ¢ ADD (B,C)? Sector de datos GOTO {10 CONDITIONED ON IR{12]} ! Sector de control La sentencia se rotula “5” con lo que se pretende indicar que viene precedida por la sen- tencia “4” y sucedida por la sentencia “6”, a menos que se genere una transferencia de control que rompa la secuencia. La flecha a izquierda indica una transferencia de datos, en este caso hacia el registro A. La construccién “ADD (B,C)” indica que los registros B y C se suman en un cireuito combinatorio. Los comentarios se inician con un signo de admiracién (5) y se terminan en cl final de la linea, La sentencia GOTO indica una trans- ferencia de control, En este caso, se transfiere el control a la sentencia 10 si el bit 12 del registra IR es cierto; en caso contrario, se transfiere el control a la sentencia cuya nume~ raci6n es la inmediata superior (6 en este caso). MODULE: MOD_4 COUNTER. INPUTS: x. Predmbulod gyrpyrs: 2[2)- MEMORY: 0: 2 0,0; GOTO { CONDITIONED ON x, 1 CONDITIONED OW R}. dp 2 Ol; GoTO {0 CONDITIONED ON x, Sentencios 2 CONDITTONED ON 212 1,0; GOTO {@ CONDITIONED ON x, 3 CONDITIONED ON x}. 3: Be LL coro 0. END SEQUENCE. Epilogo END MOD_4 COUNTER. Figura 6.20 » Secuencia de HDL para un contader médulo 4 con reinicializactén, La figura 6.20 muestra la descripcién HDL de un contador médulo 4. E] contador produce la secuencia de salidas 00, 01, 10, 11 y se repite en tanto la linea de entrada x valga 0. Sila Iinea de entrada pasa a valer 1, el contador vuelve al estado 0 at final del siguiente ciclo de feloj. La comaes el operador de concatenacisn y, por lo tanto, la sentencia“ 2 <- 0,03" asigna ef patrén 00 ala salida 2 de dos bits. ‘La secuencia HDL esti formada por tres secciones: el predmbulo, las sentencias nume- Tadas y el epflogo. El predmbulo utiliza la palabra clave “MODULE” para designar al médu- loy declara las entradas por medio de la palabra clave “INPUTS”, las salidas con la pala- bra clave “OUTPUTS” y la cantidad de sefiales de ambas, asi como cualquier necesidad adicional de almacenamiento, con la palabra clave “MEMORY” (ninguna en este ejemplo). Las sentencias numeradas aparecen luego del presmbulo. El epilogo completa la secuencia con la palabra clave “END SEQUENCE”, La frase clave “END MOD_4 COUNTER” com- capiruno 6 » TmAvECTO DE Davos v conTROL 221 pleta Ia descripcidn del médulo. Cualquier cosa que aparezcu entre “END SEQUENCE” y “END MOD_4 COUNTER” ocurre en forma continua, independientemente de los mimeros de sentencia. No hay sentencias de este tipo en el ejemplo. ‘Al traducir la descripcién HDL en un disefo, el proceso puede descomponerse en par- tes separadas para las secciones de control y de datos. La seccién de control maneja la forma de realizar las transiciones entre una sentencia y otra. La seccién de datos esté re- lacionada con la generaci6n de las salidas y el cambio de los valores de cuatquier elemen- to de memoria. seeaéx DEDATOS: SECCTON DE CONTRO, “ ct Ct it Figura 6.21 © Disafio l6gico del contador médulo 4 descripto en HDL. Se considerard primero la secci6n de control. Esta tiene cuatro sentencias numeradas, por lo que se utilizardn cuatro flip flops, uno para cada sentencia, como lo ilustra la figura 6.21. Se suele mencionar este tipo de disefio como cadificacién “one hot” debido a que, en cada momento, uno y soto uno de los flip flops contiene un valor cierto. Si bien cuatro estados pue- den codificarse con solo dos flip flops, existen estudios que muestran que este tipo de codifi- caci6n da por resultado, aproximadamente, un ‘rea de circuito similar a la de una implementa- in codificada en forma més densa, Més importante atin es el hecho de que las transferencias entre un estado y el siguiente son generalmente mis simples y pueden ser implementadas con Circuitos combinatorios sencillos, 1o que a su vez implica una mayor velocidad de reloj para la soluci6n de codificacién “one hor” que para circuitos codificados més densamente. Al disefiar la seccién de control, se dibujan primero los flip flops, se aplican los rétu- Tos que sean necesarios y se conectan las entradas de reloj. El paso siguiente consiste sim- plemente en recorrer en orden las sentencias numeradas y en agregar la I6gica apropiada para lograr las transiciones. De la sentencia 0 existen dos posibles transiciones a las sen- tencias 0'0 1, condicionadas por x 0 su complemento, respectivamente. La salida del flip flop 0 se conecta entonces a las entradas de los flip flops 0 y 1, a través de compuertas Y que toman en cuenta el valor de la entrada x. Nétese que la compuerta Y que lleva al flip {flop 1 tiene un circulo en una de sus entradas, indicando en forma simplificada que la en- twada.x debe ser negada por un inversor antes de ingresar a la compuerta Y. ‘222 _prmcwios DE ARQUITECTURA DE COMPUTADORAS Se utiliza una distribucién similar de compuertas l6gicas pura las sentencias 1 y 2, en tanto que no se requiere Idgica en Ia salida del flip flop 3 debido a que Ia sentencia 3 re- tora incondicionalmente a la sentencia 1. Se ha completado la seccién de control, la que puede funcionar ahora en forma auténoma, Sin embargo, no se tendran salidas hasta tan- to se implemente la seecién de datos, El diseiio de la seceién de datos, que se describe # continuacién, resulta ser uivial en es- te caso, Los dos bits de la salida Zcambian en cada sentencia, por lo que no hay necesidad de condicionar la generacién de la salida con el estado. Sole deben generarse los valores co- mrectos de salida para cada una de Jas sentencias. El bit menos significative de Z es 1 en las sentencias | y 3, por lo que las saticdas de los correspondientes flip flops de control se suman I6gicamente en una compuerta © para generar Z[ 0 |. El bit mds significativo de Zes cierto cen las sentencias 2 y 3, por lo que nuevamente, utilizando una compuerta O, se procede a su- mar tas salidas de los correspondientes flip flops de control para producir Z[11. El circuito completo del contador de médulo 4 se representa en la figura 6.21. Puede utilizarse ahora ef lenguaje HDL para deseribir la seccidn de control de ta mi- croarquitectura de ARC. No hay necesidad de disefiar ta seccién de datos, debido a que su aspecto ya ha sido definido en la figura 6.10. La seceidn de datos es la misma tanto en a soluciéa microprogramada como en la cableada, Tal como en Ja solucién microprogra- mada, las operaciones a ser realizadas por la unidad de control cableada son las que se describen a continuacién: 1. Buscar la siguiente instrucci6n a ser ejecutada desde memoria. 2. Decodificar el cédigo de operacién. 3. Leer, si los hubiera, los operandos desde memoria principal o desde registros 4, Bjecurar la instruccién y almacenar los resultados. 5. Volver al primer paso. El microcédigo de la figura 6.15 puede servir como guia para entender lo que se requiere hacer. El primer paso consiste en buscar en la memoria principal la siguiente instruccién del nivel de usuario. La sentencia HDL que se muestra a continuacién describe la operacién: 0: ir « AND (pc, pc); Read = 1 La estructura de esta sentencia es muy similar a la de la primera linea del microprogra- ‘ma, lo que no debe sorprender ya que se trata de la misma operacién que debe ejecutarse sobre el mismo trayecto de datos. Ahora que se ha procedido a la busqueda de la instraccién, el paso siguiente es deco- dificar su cédigo de operacién, Aqui es donde entra en juego la potencia de una solucién cableada. Dado que cada instrucci6n tiene un campo op, puede decodificarse ese cumpo primero y, luego, decodificar los campos op2, op3, cond, de acuerdo con lo que resul- te apropiado para la instruccién, capiruuo 6 « TAAYECTO OE DATOS ¥ CONTROL La siguiente linea de lu secuencia de control decodifica el campo op: 11 Goro {2 conprttoxeo ox TRUST )+IRTIOT. ‘¢ couprrroweD ov TRTST}x2R(307 4 CONDITIONED OW 1R[21)-IRI3U), 10 CONDITIONED OF 14{ 31 )*IRI301) Formato para instrucciones de aalto/aethi: op-00 Formste pera instracciones de Llansda: op=01 Formato pare instrucciones aritctticas: op-10 Famate para instruccionos de senoria: opel! El simbolo de producto “x” indica una operacién de producto légico. Se transfiere asi el control a alguna de las cuatro sentencias numeradas 2, 4, 8 0 10, de acuerdo con el for- mato binario del campo op. La figura 6.22 muestra una descripcién completa de la secci6n de control en lenguaje HDL. Puede llegar a requerirse una decodificacién adicional segdn del valor del campo op. En la Ii- nea 4, correspondiente al formato Call, no se requiere decodificacién adicional. La instruccién call se imptementa en las sentencias 4-7, similares a las de la versién microprogramada, En la sentencia 2, se requicre decodificacién adicional sobre el campo op2, el que se verifica para determinar si lu instruccién es sethi oes un salto, Dado que hay nada mas que dos posibilidades, solo se requiere verificar un bit de op2 en la linea 2. La linea 3 im- plementa sethi, mientras que Ja linea 19 implementa las instrucciones de salto. La Ifnea 8 comienza con la seccién de cédigo correspondiente al formato de instruc ciones aritméticas. La linea 8 rescata el segundo operando origen, que puede ser inme- diato 0 directo y que puede requerir extensién de signo de 32 bits (en el caso de addcc) no. La Iinea 9 implementa las insteucciones de formato aritmético, condicionadas por el campo op3. La functén XNOR da un resultado cierto si sus argumentos son iguales; en caso contrario, su resultado es falso, Esto es itil cuando se realizan comparaciones. En Ia linea 10 se inicia la seccién de cédigo que corresponde a las instrucciones de memoria, La linea 10 obtiene el segundo operando origen, el que puede ser tanto un ce- gistro como un operando inmediato, La linea 11 decodifica el campo op3. Dado que las tinicas operaciones sobre memoria son 1d y st, el campo op3 requiere la verificacion de un solo bit (ER[21}). La linea 12 implementa la instrucciéa 1d, en tanto que la ins- ttuccidn st se implementa entre las lineas 13 y 18. Por iltimo, Sa linea 20 incrementa el contador de programa y transfiere nuevamente el contro! a la primera sentencia, Ahora que estd definida la secuencia de control, el préximo paso es el disefto de la 16- gica de la secci6n de control. Dado que hay 21 sentencias, hay 2I flip flops en la seccion de control, tal como lo ilustra la figura 6.23. Para cada uno de los 21 estados se genera una sefial de control (CS), la que se usa en la seccién de datos del controlador cableado. En [a figura 6.24, la seccién de datos del controlador cableado genera las sefiales que controlan el trayecto de datos. Existen 27 compuertas O que cortesponden a las 27 sefia- Tes de control del trayecto de datos, (Haciendo referencia a la figura 6.10. existen 27 se- fates que se originan en la secci6n de control y que terminan en el trayecto de datos.) La sefial AMUX se coloca en I nada mds que en las lineas 9 y 11, correspondientes a las operaciones que colocan rs1 en el bus A. La suma Idgica de las sefiales CS, y CS, ge- nera la seital AMUX. En forma similar, rd aparece sobre el bus Cen las lineas 3,9 y 12, por lo que la suma Iégica de las seftales CS,, CS, y CS,, genera la salida CMUX. 224 PRINCIPIOS UE ARNUITECTURA SE COMPUTADORAS. MODULE: ARG_COMTROL_ ET. OUTPUTS: ¢, u,v, 2. 1 Pifadas por 18 enidad aritmbtico-légies WENORE: RCIEIES2), po{32]. {2(32], ceepOLs?1, cempl{32]. tenp2[32], ‘vesp3132) er Sz © anpeps, per; Read & iy # Basquoda do Le inotruoesén 1 Desodificn: campo o7 1s Goro {2 conpITIoUED OW TFTST}xIF{30), 1 rormate benen/eetas: epe00 4 connyrrommp on Zr(31}*iz130), | Poreato de Llazada: opeot ' # coorrionsp oN ir(31)xieI30], | Forzato aritabticot 9p-10 410 CONDITIONED OW {e(31}de130]). | Formato memOKLar opel | becoditice cazpo 092 2 coro 19 coxmrrtaueD OM ZETA}. 1 3s mira) © Aelina22]; ' ‘oro 20. 4: R15) & anpine, ped | Llamada: salvar contador de progrena an regietro 15, Se teapo & anptir, {e) 1 Desplazar a isqulerda el cempo atap30 Komato de salto, paste 6 Linea 19 6: compo & nov(ie, in). Deaplazer cuevanente Tr pe & a0D{pe, temp); Goro e Selto © eubrotine 1 colocar el magusdo operands origen en tonp0 of 01 formate ox aritmitice 81 compo ( seems; 42) COWOTIIONED ON A(13eHOR(LE(1#822}), | addce ‘R{xs2) conprrzowen on TEES )»mORir{ 194223}, 1 addce S913 (LF) CORDIFTONED OW £5(13}xOR(ir]19:22]), | Inatruceiones R[xa2) cowmrriowen ow Te[T3}x0R(ir(19:22})}. 1 seitaiefeas restantes 1 Socodificar ol campo op? para e1 forcato ariteetice 3: Rica ¢ [ADOCC(M(THL 1, texpO) CONDITIONED ON XVOR(ERI19:2¢], 010000), + sddce suoce ktrst}, tempo) CONDITTONED ON KOR(ER(19124], 010001), 1 andee (ORCC(R(F61), toxpO) COHDEFrOND on suEDR{ TRI I9<24}, 010830), 1 ores BRLGi[eAL}, LompO) CONDITIONED ON HHORGTRL19:247, 100110), t art AD{Atee1], kemps | CONDITIONED ON HRORLIRTI9+245, 173060))s oro 20. E carga en tempt ot soguido opersndo origen of el forsate es ce aeaorie Os tempo & (SexT13{i2) CONDITIONED OW x12), raz) CONDITIONED Ow TITY. 2s tempo ABDIRE eR, temp0). | Decodisteee €1 cengo opi para el foranco 49 nesoria coro {12 coxorstonzn on 4eT3T}, tid 13 coyorttonéo ow ist21)}. as 22: Rnd) AvOCteRpO, tempo); Read 1; co70 20. 1s i & RERIORS (AE), Ms tr & Asmrensctey. a5: ie RSRIETSie}. ag: ie © ASHIETS(AE Yi te © sensei! 18: x0 & anp(tenpd, Rivaz}): Weite © 1; como 20. 19: pe & (| Taatrucctonen ao aio Aoo(e. compo) CoNDITENED OM £2128) + TeITOpTRpe + Se(29pde1 27 phe 26 oe + ie[z8 pict z7 nicl 26 pde[ spa + Fe[28pdri27petrizepdeL2spV, mncpctpe) coubirrenen on f[2epdra7s + ael29)xirt27 pds (Ze pe + Eee piel 2 aiel26paE IEPA > Se (201x527 det 26 ie [251002 coro 0. 20: po & ImePC {pe}; COTO 0 2D SEQUENCE. END ARC_ CONTROL, HUT, Figura 6.22 « Descripcién HDL de fa unidad de control de ARC. ' 1 ORC (RI a1], teNpO) COROYTZONED ON XHOR(IR|19424}, 010110}, + ornee t ie CAPITULO 6 + TRAYECTO DE DATOS ¥ CaNTROL 225 am30) raza rian} foo} p a 6.23 © La seccidn de control cableado en ARC: generacién de las sefales ce contra La sefial BMUX es mas compleja. Dado que rs2 aparece sobre el bus B en las Iineas 8, 10 y 18, se obtiene BMUX a través de Ia suma logica de CS,, CS\y ¥ CS\_, No obstante, en la yea 8, BMUX se encuentraen | (indicando que rs2 sale al bus B) solo si IR[13] = 0 y si IR[19 22) se encuentran todos en cero (sc trata de los cuatro bits menos significa- tivos del patron correspondiente a op3 en la instruccién addec : 010000). La figura ilus- tra Ia I6gica correspondiente a este caso. Asimism6, en la linea 10, la sefial BMUX vale t sole st IR[13] = 0. Nuevamente, la figura 6.24 ilustra la légica correspondiente, 226 _pRuNCIPios DE ARQUTECTURA DE COMPUTADORAS mpi 9 Figura 6.24 + La secci6n de control cebleada en ARG: sefales que van desde la seccidn de datos de la unidad ‘de control al trayecto de datos. (No se detallan las Areas sombreadas.) La sefial de lectura (Read) se coloca en 1 en fas lineas Q y 12, por Io que se la obtiene a partir de la summa logica de CS, y CS,,, La sefial de escritura (Wrire) solamente se genera en la linea 18, por lo que no necesita légica alguna, mas que ta nea CS,5. EI control de ta unidad aritmético-Iégica se realiza a través de cuatro sefiales: ALU(0], ALU[!], ALU[2] y ALU[3], las que corresponden a Fy, Fy, Fy y F, de la tabla de operacién de la unidad aritmético-ldgica de la figura 6.4. Estas cuatro sefiales requie- ren valores en cada una de las 20 lineas del programa HDL. En la finea O, la operaci6n de la unidad aritmético-Iégica es un producto tégico Y, que comesponde a ALU[3:0] = 0101. La linea 1 no especifica operacidn aritmético-légica alguna, por to que en forma arbitraria se elige una que no produzca efectos secundarios, como la operacién AND (0101). Si se sigue por ¢l mismo camino y se toman en cuenta las sentencias condicionadas (CON- DITIONED ON), se obtiene la Igica correspondiente a las seftales ALU[3:0], que se indica en la figura. Las sefiales de control se envian al trayecto de datos, en forma simitar al control que realiza el MIR sobre el trayecto de datos en la definicién microprogramada de la figura 6.10. Las soluciones cableada y microprogramada pueden considerarse como intercam- biables, excepto por los costos involucrados. En la solucién cableada soio se tienen 21 flip flops, contra 2.048 x 41 = 83.968 flip flops en ia solucién microprogramada (si bien es cierto que el uso de una memoria de lectura ocuparfa menos espacio por permitir Ia uti- ‘captruup 6 + TRavecto of paros v cowmmo, 227 lizacién de elementos de almacenamiento mis pequeiios que un flip flop). La cantidad de I6gica combinatoria adicional es comparable. La soluci6n cableada es mas veloz.con res- pecto a la ejecucién de las instrucciones de ARC, en especial en la decodificacién de | instrucciones con formato de salto, pero se hace més dificil sa modificacién una vez ini ciada su fabricacién. Considérese el agregado de la misma instruccién subce del ejemplo anterior a la imple- mentacién cableada del conjunto de instrucciones de ARC. Tal como en el caso anterior, la instrucci6n subce utiliza el formato aritmético y un campo op3 de 001100. Soto se requiere la modificacin de la linea 9 del cédigo HDL, en ta que se inserta ta expresiGn: ADDCC (R(esLJ, INC_1 (FempD)) CONDITIONED ON xNOR (TR[19:24], 001100, | subce amtes de la linea correspondiente al addee. Las sefiales que requieren modificaci6n son ALU[ 3:0]. La construccién INC_1 de la linea precedente indica que deberia crearse un sumador combinatorio, que podria es- tar definido en algin otro médulo HDL. (En una unidad de control cableada, existe gran flexibilidad en cuanto a lo que se puede hacer.) ° 6.4 Estudio de un caso: el lenguaje de descripcién de hardware VHDL Esta secci6n presenta una breve descripcién de VHDL (VHSIC Hardware Description Language, en ta que VHSIC es el acrénimo de Very High Speed Integrated Circuit; lite- ralmente, lenguaje de descripcién de hardware para circuitos integrados de muy alta ve- locidad). Los lenguajes descriptivos de hardware (HDL), como VHDL y AHPL, son len- guajes que se utilizan para la descripcidn de los circuitos de computadoras, enfocados principalmente al disefio de los dispositivos logicos y de los circuitos integrados. En el caso de VHDL, no obstante, pueden especificarse los disefios en muchos niveles tes. Por ejemplo, la unidad de control implementadu en este capitulo podria especificar- seen VHDL. Se anatizan primero los fundamentos que Hevaron al desarrollo de VHDL, tras lo cual se describen algunas de sus propiedades. Luego, se analiza una especificacién VHDL de la funcién mayoria. ‘228 _PRINCIPIOS OF ARQUITECTURA DE fOMPUTADORAS: 6.4.1 Antecedentes VHDL surgié como resultado de la colaboracign entre el Departamento de Defensa de ios, Estados Unidos y muchas industrias estadounidenses. E] Departamento de Defensa, prin- cipalmemte a través de su Agencia de Desarrollo Avanzado (DARPA, Defense Advanced Research Products Agency), descubrié, a fines de los afios 1970, que el diseio y fabric: cién de cirouitos integrados se estaba volviendo tan complejo que se hacia necesaria la creacién de un conjunto de herramientas de disetio imegradas, tanto para el disefio como para la simulaci6n, Se hacia sentir que las hercamientas debian permitir que el usuario Pudiese especificar un circuito o sistema a panir de su nivel mis alto, el de su comporta- miento, bajando desde ahf a los menores niveles correspondientes al disefio y configura- cidn de los circuitos integrados reales, Mas atin, todas estas especificaciones debian ser pasibles de verificacién por medio de simuladores y otros tipos de elementos de verifica- cin de reglas. La primera definicién de requerimientos del lenguaje fue generada por el Departa- mento de Defensa en 1981, como reconocimiento de la necesidad de un enfoque mas consistente en el disefio de hardware de computadoras. Fl contrato para ei desarrollo de la primera versi6n del lenguaje fue adjudicado a un consorcio formado por IBM, Texas Instruments ¢ Intermetrics, una empresa de ingenieria de software especializada en el di- sefio c implementacién de lenguajes de programacién. El consorcio entregé en 1985 una versién preliminar para ser probada y comentada, Una version mas actualizada se envié al IEEE en 1986 para su normalizaci6n, obtenién- dose como resultado la norma IEFE 1076-1987. En 1993 se aprobé una nueva versi6n, TEEE 1076-1993, para resolver algunos problemas menores y agregar algunas prestacio- nes nuevas. Se mida por donde se mida, VHDL es un éxito, con gran cantidad de usuarios tanto dentro como fuera de la comunidad de contratistas del Departamento de Defensa, Los ac- tuales requerimientos del Departamento de Defensa implican que cualquier cireuito inte- grado de aplicacién especifica (ASIC, Application Specific Integrated Circuit) debe venir acompaiado de su modelo VHDL. con propésitos de prueba y simulacién, Casi todos los fabricantes de herramientas de disefio asistido por computadora incluyen en sus sistemas soporte para VHDL. 6.4.2 ZQué es VHDL? En los términos mas basicos, VHDL es un lenguaje descriptive de hardware que puede utilizarse para la descripcién y modelizacién de sistemas digitales. VHDL tiene implici- ol sentido del tiempo y puede administrar la progresién de eventos a lo largo del tiem- po. A diferencia de la mayorfa de los tenguajes de procedimiento de uso comin, VHDL. soporta ejecucién concurrente y es controlado por eventos. capiTuro G » TAAYECTO OE DATOS ¥ CONTROL 229 Ejecucin concurrente El concepto de ejecucién concurrente significa que, « menos que se realicen esfuerzos es- peciales para especificar una ejecucién secuencial, todas las semtencias de una especifi- cacién VHDL se ejecutan en paralelo. Esta es la forma en que debiera ocurrir, dado que cuando se alimenta eigctricamente un sistema digital, el sistema funciona “en paralelo”. Esto es, la corriente eléctrica circula por los circuitos de acuerdo con las leyes de la fisi- ca y de la l6gica, sin ningin sentido implicito referido a “quien leg6 primero” Sistema manejado por eventos VHDL opera con sefiales que se propagan a través de sistemas digitales y, por fo tanto, de- be soportar légica y naturalmente el concepto de los cambios de estado como funcién del tiempo. Porque tiene sentido del tiempo, soporta conceptos como “luego de”, “hasta que” y “espera”. Como sistema controlado por eventos, inicia su funcionamiento por medio de la ejecucién de cualquier cédigo de inicializacién, y luego registra todos los cambios en los valores de las sefales, de Oa 1 y de 1 a0, que ocurran en las entradas y salidas de sus componentes, Registra estos cambios, o eventos, en una cola ordenada cronolégicamen- te, conocida como cola de eventos. Examina estos eventos, y si un evento dado produce algiin efecto sobre algtin componente, evaliia dicho efecto. Si el efecto produce la ocurren- cia de nuevos efectos posteriores, el simulador coloca estos nuevos eventos en la cola, y et proceso continiia hasta, y a menos, que no haya otros nuevos eventos para procesar. Niveles de abstraccion y descomposicion jerarquica Coma se ha mencionado, las especificaciones para VHDL pueden escribirse en casi cual- quier nivel de abstraccién, desde el nivel puramente algorftmico, en el que se especifica el comportamiento a partir de algoritmos formales, hasta el nivel I6gico, en el que la con- ducta se especifiea a través de expresiones booleanas. Més ain, una especificacién VHDL puede estar constituida por una jerarquia de compo- nentes, Jo que significa que un componente puede contener componentes. los que a su vez también pueden contener componentes, Esto representa un modelo del mundo fisico, en el que, por ejemplo, una placa de eircuito impreso puede contener circuitos integrados, los que usu vez estén compuestos por médulos, que tambign contienen submédulos, hasta llegar al nivel inferior de las compuertas I6gicas individuales y, mas abajo atin, al de los transistores. 6.4.3 La funcién mayoria y su descripcidn en lenguaje VHDL Se analizard ta forma en la que puede utilizarse VHDL para implementar un componente digital sencillo. Esto se realizaré a través de varias implementaciones de la funcién ma- yorfa, la que produce un | en la salida si mAs de la mitad de sus entradas valen 1, entre- (230 _PRINCIPIOS DE ARQUITECTUAA DE COMPUTADORAS: gando un 0 en caso contrario. Es una fancién aril en ¢l andlisis de tolerancia de fallas, en Jos que miltiples sistemas realizan la misma operacién sobre el mismo conjunto de datos y “votan”, por lo que si uno de los sistemas se desvia de los demas, su salida se ignora. La funcién mayoria se analiza en forma detallada en el apéndice A. Su tabla de verdad se muestra en las figuras A.15 y A.16 y se reproduce en este capitulo como figura 6.25. wraeteminn[ aac | F minino ofooo|o age 1foor]o Lt I 2/010] 0 sforr]a Farcien afio00]o maveria sfio1]4 1 6Jito]o mfiiada F a) b) ¢) Figura 6.25 La funcign mayoria: (a) tabla de verdae, {b) implementacién ¥-0, (c) representacién coma caja negra. En VHDL, la especificacién de cualquier componente, como la funcién mayorfa, se di- vide en dos partes, una que define la entidad y otra que corresponde a la arquitectura. Estas dos partes concuerdan, de alguna manera, con las partes sintéctica y semdntica de Ja especificacién de un lenguaje. La entidad describe la interfaz del componente sin men- cionar nada acerca de su estructura interna, La arquitectura describe su comportamiento interno, A continuaci6n se presenta una especificacién de entidad de la funcién mayoria implementada con tres entradas: - - Interfaz entity MAJORITY is port : (ALIN, BLIN, CLIN: in BIT F_OUT : out BIT); end MAJORITY Las palabras clave se destacan en negrita y fos comentarios se inician con "=~" y se termi- nan al final del rengi6n. Las distintas sentencias se separan con punto y coma, La especificacién de entity describe simplemente las seffales de entrada y salida a la caja negra de la figura 6.25c. La declaracin part describe el tipo de entradas que in- gresan y salen de la entidad. Los modos de port incluyen in para sefiales que ingresan ala entidad, owt para las que salen de fa misma, e Anout para sefiales bidireccionales, Para port existen también otros modos que estén orientados a aplicaciones especiales. capiruto 6 + TRAYECTO DE GATOS ¥ conTAL 231 Habiendo especificado la interfaz. al componente, se puede plantear ahora el funcio- namiento interno del mismo utilizando la especificacién de arquitectura: Modelo conductista correspondiente a la funcién mayoria - Cuerpo architecture LOGIG_SPEC of MAJORITY is begin -- Caleular la salida usando una expresion booleana F_OUT (mot A_IN and B_IN and C_IN) or (ALIN and not B_IN and C_IN) or (ALIN and BLIN and not C_IN) or (A_IN ana BIN and C_IN) after 4 ns; end LOGIC_SPEC Este modelo describe la relaci6n entre la deciaraci6n de la entidad de MAJORITY (la fun- cién mayoria) y su arquitectura. Los nombres A_IN,B_IN.C_IN y F_OUT del mo- delo de la arquitectura deben coincidir con los nombres utilizados en la declaraci6n de la entidad. Este tipo de especificacién arquitecténica se denomina conductista, debide a que de- fine la funcién de entrada-salida en base al enunciado de una funciGn explicita de trans- ferencia, Esta funci6n es una expresi6n booleana que implementa la funcién booleana de las figuras 6.25a y b. Debe notarse, no obstante, que aun en este nivel de especificacién se puede incorporar un retardo de tiempo entre entradas y salidas por medio de la palabra clave after. En este caso, el evento que genera el valor de F_OUT se dispuraré 4 ns después de un cambio en cualquiera de los valores de entrada. ‘También es posible especificar la arquitectura en un nivel mds cereano al hardware por medio de la especificaciGn de compuertas i6gicas en lugar de ecuaciones I6gicas. En este caso se habla de un modelo estructural. El siguiente es un ejempto de tal especificacién Modeto estructural del componente mayoria En la generacién dei modelo estructural de la entidad MAJORITY convendrd seguir el disefio de compuertas especificado en Is figura 6.25b. El modelo se inicia con la descrip- ci6n de un conjunto de operadores 16gicos, en una construccién especial de VHDL cono- cida como un package (paquete), El paquete se supone almacenado en una biblioteca de trabajo llamada WORK. A continuacién de la especificacién del paquete se repite la declaracion de entity, y luego, con las declaraciones del paquete y de la entidad, se es- pecifica el funcionamiento interno del componente por medio de 1a especificacién de la arquitectura a nivel estructural: (232 PRINCIPIOS DE ARQUITECTURA DE COMPUTADORAS: ~- Declaracion del paquete en la biblioteca WORK package LOGIC_GATES is component AND3 port (A, B, C : in BIT; X : out BIT); end component; component OR4 port (A, B, C, D: in BIT; X : out BIT); end component; component NOT port (A : in BIT; X + out BIT: end component; -- Interfaz entity MAJORITY is port (ALIN, BLIN, CLIN F_OUT + out BIT); end MAJORITY cuerpo -- Usa los componentes declarados en el paquete LOGIC_GATES -- en la biblioteca woRK Importar todos los componentes de WORK.LOGIC_GATES use WORK.LOGIC_GATES .all architecture LOGIC_SPEC of MAJORITY IS ~- Declarar las sefiales utilizadas internamente en la funcion MAJORITY signal A_BAR, B_BAR, C_BAR, Il, 12, 13, T4: BIT; begin -- Conectar las compuertas logicas WoT 1: NOT1 port map (A_IN, A_BAR); NOT1 port map (B_IN, B_BAR); NOT1 port map (C_IN, C_BAR); AND3 port map (A_IN, BIN, C_IN, 1); AND3 port map (A_IN, B_BAR, C_IN, 12); AND3 port map (A_IN, BIN, C_BAR, 13); )_4: AND3 port map (A_IN, B_IN, C_IN, 14); OR_1: OR4 port map (Ii, 12, I3, 14, F_OUT); end LOGIC_SPEC; La declaraci6n package provec tres compuertas, una compuerta Y de tes entradas, AND3, una compuerta O de cuatro entradas, OR4, y una compuerta inversora, NOT1. Las arquitecturas de estos elementos se suponen declaradas en alguna parte del paquete, La declaracién entity se manticne inalterada, como se poxiria suponer. dado que espe- cifica MAJORITY como una caja negra. El cuerpo de 1a especificacién se inicia con una cldusula use, que importa todas las declaraciones del paquete LOGIC_GATES incluidas en la biblioteca WORK. La decla- capiruio 6 TRAYECTO DE DATES ¥ coMTROL 233 racién signal define siete seftales binarias BIT que se utilizarén internamente. Estas se- fiales se usan para interconectar los componentes dentro de 1a arquitectura. Acontinuacién se dectaran las tres compuertas inversoras, NOT_1, NOT_2 y NOT_3, las cuales se corresponden con el modelo NOT de compuerta inversora, Se especifican sus seflales de entrada y salida luego de las palabras clave port map. Las sefiales a la entrada y salida de las compuertas I6gicas se configuran de acuerdo con el orden en que fueron declaradas dentro del paquete. El resto del cuerpo de la especificacién conecta las compuertas NO, las compuertas Y y la compuerta O, tal como se muestra en la figura 6.256. Nitese que esta forma de especificaciGn de la arquitectura separa el disefio y la imple- mentacién de las compuertas légicas del disefio de la entidad MAJORITY. Seria posible tener diferentes implementaciones de las compuertas légicas en diferentes paquetes y uti- lizar cualquiera de ellas simplemente reemplazando la cldusula uses: 6.4.4 Sistema logico de nueve valores Este tratamiento breve de VHDL solo ofrece una pequefia imagen del alcance y del po- der del lenguaje. El lenguaje completo contiene herramientas para especificar sefiales de reloj y distintos mecanismos de temporizaci6n, procesos secuenciales y diferentes tipos de sefiales. Existe una norma IEEE que define un sistema lgico de nueve elementos, co- nocida como STD_ULOGIC, IBBE 1164-1993. La misma contiene los siguientes valo- res légicos: type STD_ULOGIC is ( 'U!, — No inicializado ‘x', — Porzando desconocido ‘0’, — Forzando 0 ‘1’, — Forzando 1 ‘g', — Alta impedancia ‘Wi', — Desconocide débil ‘Lt, — Cero débil ‘4H’, — Uno débil — Irrelevante Sin entrar en demasiado detalle, estos valores le permiten al usuario detectar defectos 16- gicos dentro de un disefio y rastrear en él la propagacién de sefiales no inicializadas 0 débites. 234 PRINCIPIOS OF ARGUITECTURA DE COMPUTADORAS. Una microarquitectura consiste en una seccién de control y un trayecto de datos, El trayecto de datos contiene registros de datos, una unidad aritmético-I6gica y las conexiones entre dichos elementos. La seccién de contra! contiene reyistros para las microinstrucciones (nara el caso de una solucién micropragramada) y para los cédigos de condicién, asf como un controlador. El controlador puede ser microprogramado a cableado. Un controtador microprogramado interpre- ta microinstrucciones por medio de la ejecucién de un micraprograma almacenado en una me- moria de contral. Una unidad de control cableada esta organizada como un conjunto de flip ‘ops, que mantienen intormacién de estado, y logica combinatoria, que implementa las transi- ciones entre Ins estados. La solucién cableada es veloz y requiere poca electrdnica en comparacién con fa allemnati- ‘va microprogramada. Esta Gltima es llexibte y simplilica el proceso de madificacién det canjun- to de instrucciones. La memoria de contral consume una gran porcidn de hardware, la que pue- de seducirse en un disefio que tome en cuenta el uso de la nanoprogramatiOn. La nanoprogramacién agrega retardo al ciclo de ejecuciOn de tas microinstrucciones. Decidir en- tre una solucién microprogramada y una cableada lleva a soluciones de campromiso. La solu- ci6n micropropramada es grande y lenta pero es flexible y pesmite una implementacién simple, en tanto que la soluctén cableada es répida y pequefia pero dificil de madificar, dando coma re- sultarto implementaciones mas complejas. Para lectura posterior M. V. Wilkes y otros es Un clasico referido a micraprogramacién. J. Mudge cubre el tema de fa mi- croprogramacién en las computadoras DEC POP 1 1/60. A. Tanenbaum y M. Mano proveen ejemplos instructivos de arquitecturas microprogramadas. FJ. Hilly G. R. Peterson presentan un tratamiento tutorial del lenguaje descriptor de hardware AHPL y del control cableado en general. R. Lipsett y otros, y Z. Navabi describen ef lenguajé comercial VHDL y ofrecen ejemplos de su utilizacién. 0. Gajski ‘cubre varios aspectos de la compilacion de siticio. Gaiski,D., Silfcon Compilation, Addison Wesley, 1988. Hil, FJ. y G. R. Peterson, Digital Systems: Hardware Organization and Design, 3¢ed., John Wiley & Sons, 1987. Lipset, R., C. Schaefer y C. Ussery, YHOL: Hardware Description and Design, Kluwer Academic Publishers, 1989, Mano, M., Digital Design, 2? ed., Prentice Hall, 1991, (Traduccién al espafiol disponible: Disefio ai- gital, Prentice Hall, 1987.) Mudge, J. Craig, “Cesign Decisions for the PDP 11/60 Mid Range Minicomputer”, en: Computer En- gineering, A DEG View of Hardware Systems Design, Digital Press, 1978. Navabi, Z., VHDL: Analisys and Modeling of Digital Systems, McGraw-Hill, 1993. capivuio 6 + TRAYECTO DE OATDS ¥ CONTROL 235 Tanenbaum, A., Structured Computer Organization, 3 ed., Prentice Hall, 1990. (Traducci6n al espafiol disponible: Organizacién de computadoras, un disefio estructurado, 4 ed., Prentice Hall, 2000.) Wilkes, M. V., W. Redwick y D. Wheeler, “The Design of a Gontrol Unit of an Etectronic Digital Com- puter", en: Proc. JRE, vol. 105, 1958, p. 21. Problemas 6.1 Disefia una unidad aritmético-l6gica de un bit, utlizando et circuito de ta figura 6.26, el que permite realizar las operaciones de suma aritmética, Y, 0 y NO sobre las entradas Ay 8, de un bit cada una. En cada operacién se genera una salida Z de un bit, en tanto que la operacién de summa también genera un arrastre, El arrastre serd O para las operaciones Y, O y NO. Diseffar la Unidad aritmético-1égica de un bit ulilizando los componentes que aparecen en el diagrama, In- dicar las conexiones entre los componentes. No agregar compuertas, multiploxores ni elemen- 410 adicional alguno. Nota: El sumador completo recibe dos entradas de un bit (Xe ¥) y un arrastre de entrada, y produce una suma y un arrastre de salida, Db [> Decodifcudor 224 > Ler | [> oo Selecciém Fo 1 de Funcicn Fy 1a} | rastre xT ye te salida “Rrrosre se enrada de datos p Fain FA | Funcioa Arvastre 00 [anpas) de eauada “} Aneasie de salida | [ Suns 01 [andra 10 fora) 1 fRovay Figura 6.26 © Una uaidad aritmético-Iogica de 1 bit. 6.2 Diseftar una unidad aritmético-légica que reciba dos operandos de 8 bits Xe Yy que produzca una salida Zde 8 bits. Existe una entrada de control C de dos bits en la que 00 selecciona la ope- raci6n Y, 01 selecciona la operacién 0, 10 selecciona NOR y 11 selecciona XOR. Al disefiar fa ‘unidad aritmético-I6gica deberdn seguirse estos procedimientos: (1) dibujar un diagrama en bloques de acho unidades aritmético-l6gicas de un bit, cada una de las cuales aceplard uno de los bits de Xy de ¥, y los dos bits de control, produciendo la correspondiente salida Zde un bit; (2) crear una tabla de verdad que describa la unidad aritmético-I6gica de un bit; (3) disefiar una de las unidades aritmeéticas de un bit utiizando un multiplexor de 8 entradas de datos. (236 _PRINCIPIOS De AROUITECTURA DE CUMPUTADORAS, 6.3 Disefiar una unidad de contro! para un videojuego sencillo en el que aparece un caracter en fa Pantalla que caza objetas. Considerar el problema como una maquina de estados finitos, deta ‘que soto se pide representar el diagrama de transiciones de estados. No se pide desarrollar el Circuito de la maquina. La entrada a la unidad de control es un vector de dos bits, en el que 00 indica mover a izquierda, 01 indica mover a derecha, 10 indica no mover y 11 indica detener- se. La salida Zes 11 sila méquina esta detenida, y es 00, 01 0 10, de acuerdo con los patro- hes de entrada, Una vez que la maquina se detiene, permanace en ese estado indefinidamente. 6.4 En la figura 6.3 no hay conexién desde la sallda del decodificador C al registro #0. Justificar el motivo, 6.5 Con referencia alla figura 6.27, los registros 0, 1 y2 son registros de uso general. El registro 3 Se inicializa al valor +1, el gue puede ser modificado par el microcddigo. Se requiere la certe- za de que el mismo no se modifica, Habilitaciones de salida BusA Bus B atte dt RusA BR Funciéo ADDIA, B) AND(A, B) Figura 6.27 Una microarquitectura pequetta. a. Escribir una secuencia da control que cafcute la diferencia entre fos contenidos de los regis tros Oy 1, en representacién de complemento a 2, y deje el resultado en el registro 0. Sim- bélicamente, se puede expresar lo pedido como FO < r0-r1. No modificar registro alguno excepto r0y ri (si hiciera falta). Completar la tabla siguiente con ceros o unos (usando ce- 0 cuando el valor a asignar sea irrelevante). Suponer que si no se selecciona registro al- ‘guno para los buses A 0 B, el bus adopta el vator 0. CcapfruLo 6 « TRAYECTO OE OATOS ¥ cawTnoL 237 Tiempo b. Escribir una secuencia de control que calcula la XOR de los contenidos de los ragistros 0 y 4, dejando el resultado en el registro 0. Simbdlicamente, se puede expresar lo pedide como 10 —XOR(10, r1). Utilizar el mismo estilo de solucién que para la parte a. 6.6 Escribirel formato binario de tas microinstrucciones que se indican. Usar el estilo de la figura 6.17. Ulilzar 0 como valor a asignar a cualquier campo que no sea necesario, 60: R [temp0] f Eseriwwra—>| Registro de 32 bits Rel >] 32 Salida de datos Se apilan cuatro registros de modo que la salida del registro superior es la entrada al segundo registro, ef que a su vez entrega sus salidas en la entrada del tercer registro, el cual, a Su vez, (genera con su salida la entrada al cuarto registro. La entrada a la pila se asigna al registro su- perior, an tanto que la salida de la pila se toma desde la salida del registro superior {no del in- {erior). Existen dos lineas de control adicionales, push y pop, que provocan el ingreso de los datos a la pila y la extraccién de los datos desde !a pila, respectivamente, cuando la linea co- Frespondiente vale 1. Sininguna de las (Ineas es 1, 0 sl ambas son 1 en forma simulténea, no ‘se altera el contenido de la pila. 6.16 En la linea 1792 del microprograma de ARC, aparece un Goro condicional al final de ta linea, en tanto que en la linea 8 aparece al principio de la misma. gInteresa la posicién de una sen- ‘encia de Gono dentro de una linea de microcédigo? 6.17 La figura 6.29 ilustra una microarquitectura particular. El trayecto de datos tiene cuatro regis- tros y una unidad aritmético-l6gica. La seccién de contral es una maquina de estados finitos, ania que existe una memoria de acceso aleatorio (RAM) y un registro. En esta microarquitec- tura, un programa compilador traduce directamente un programa de alto nivel hacia el micro- digo; no hay un formato simb¢lico ensamblador intermedio, por fo que tampoco hay ciclos de biisqueda ni de ejecucion. Se requiere escribir el microcédigo que implementa las instrucciones indicadas al pie del pro- blema. El microcédigo deberia estar almacenado en las posiciones 0, 1, 2 y 3 de la memorla de acceso aleatorio. Si bien no hay lineas que asi lo indiquen, deberd interpretarse que los bits y 70n ambos 0 cuanda G,C, son 00, Esto significa que sino hay posibilidad de salto, tas li- eas A, y A,sS0n ambas O. Nota: Cada bit de los campos A, By G corresponde directamente a ‘un registro, Asi, la palabra 1000 selecciona el registro R3, no el registro 8, inexistente. Existen algunas complicaciones en lo que hace a la resolucion de los saltos en esta microarquitactura. Las mismas no deberian afectar a la generaci6n deb microcédigo. (240 PRUNcIPIOS OF ARGUITECTURA GE COMPUTADORAS: O: RI © ADD (R2, R3) 1: Saltar por negativo a (15)io 2: R32 © AND (RI, R2) 3 Saltar a (20),, a wma [a ts pe, ‘UQEORP EIIGAA ORS PESO | _ Jang Wang YSU ATTY Pe ‘oanEaaa Ope 0d ones 3p upya2auip 3957) jn operas 4 on 3p uptaoanp se57) ‘xyes 9p uptoaanp ssp, Lupaoaup eux 257) epFHPHIOD "Y BRIERE OP STOUT BIOS spas epmoap euBOIAOWES spUPIAIGA | sng gen ¥ SIG TY pues % I99E ¥ MON FZ Holbaye os2008 2p EUOMIDYE RAND ty mystty Rysty a ‘ano Fengioo ap a1e Figura 6.29 « Un ejemplo de microarquitectura. caviro.o 6 « raayeoro bE oaras ¥ cowrnot_ 241 6.18 En la linea 2047 del microprograma ARC que se muestra an la figura 6.15, .se comportaria en forma diferente el programa si se eliminara la parte de la Instruccién que incluye el GOTO 0? 6.19 En la microprogramaci6n horizontal las micropalabras son anchas (de muchos bits), en tan- 10 que en la microprogramacién vertical las palabras son angostas. En general, as palabras de microcédige horizontal se pueden ejecetar répidamente pero requieren mucho mas espacio que las micropalabras verticales, las que llevan mas tiempo de ejecuciOn. Si se convierte el formato de microcédigo de la figura 6.11 en un formato més horizontal, por medio de la ex- pansién de los campos A, By C para que contengan un solo bit para cada uno de los registros en lugar de una versién codificada en 6 bits, se podrén eliminar los decodificadores A, By C de la figura 6.3. Esto permite incrementar la frecuencia de {uncionamiento pero aumenta también al tamafio de la memoria de microprograma. a. eQué ancho tendrdn las nuevas palabras del microcédigo horizontal? b. eCuales el porcentaje de incremento de tamafio del microcédigo? 6.20 Con referencia a la figura 6.7, Indicar las entradas a las tablas de busqueda LUT, y LUT, {con x > 0) de la unidad aritmético-l6gica para una instrucciéa INC(A). 6.21 En algunas arquitecturas existe una parte especial del hardware que actualiza el contador de programa, tomando en cuenta que los dos bits menos significativos son siempre 0. En este ca- pitulo no se ha planteado la existencia de circuito alguno para actualizar el contador de pragra- ‘ma, y el microcédigo incluido en las lineas 2-20 de la figura 6.15, correspondiente a las ins~ ‘trucciones de salto, presenta un error en cuanto a la forma an que se actvaliza el contador de programa (especiticamente en ta linea 42) debido a que tos dasplazamientos de los saltos se expresan en términos de palabras. Identiticar el error e indicar la forma de repararlo. Capitulo 7 Memoria En las tiltimas décadas, la velocidad de procesamiento de las unidades de proceso, me- didas por la cantidad de instrucciones ejecutadas en un segundo, se ha duplicado cada 18 meses sin variar su precio. La memoria de las computadoras ha experimentado un inere- mento similar, pero considerando un pardmetro diferente, cuadruplicando su tamafio ¢a- da 36 meses por el mismo precio. No obsiante, la velocidad de las memorias ha ido au- mentando a nizén de menos de un 10% anual. Asf, mientras la velocidad de procesamiento aumenta en Ja misma proporcidn en que aumentael tamafio de las memo- rias, también avmenta la brecha entre la velocidad del procesador y la velocidad de las memorias, ‘A medida que aumenta la brecha entre las velocidudes de procesador y de memoria, las soluciones arquitect6nicas buscan tender un puente sobre esa brecha. Una computa dora tipica snele contener distintos tipos de memorias, que van desde la memoria cara y répida de los registros internos (véase el apéndice A) hasta las memorias baratas y Yentas de los discos removibles. La interaccién entre estos diferentes tipos de memoria se apro- vecha de forma tal que se logra un comportamiento, por parte de la computadora, equi- valente al que tendria si tuviera una memoria tnica, grande y répida, cuando en realidad conticne una variedad de tipos de memorias que operan de un mado altamente coordina- do, Este capitulo comienza con un andlisis de alto nivel sobre la forma en que se organi- zan estos distintos tipos de memorias en lo que se conoce como jerarquia de memorias. 7.1 Las jerarquias de la memoria La memoria de una computadora digital convencional se encuentra organizada bajo un riterio jerésquico, como el que ilustra la figura 7.1. En a cima de la jerarqufa se encuen- tran los registros, de velocidad similar a la de Ia unidad de proceso, pero grandes y con- sumidores de una importante cantidad de energia de alimentacién. En un procesador se encuentran habitualmente unos pocos registros, del orden de algunos cientos © menos. Al fondo de la jerarquia aparecen las memorias secundarias y los elementos de almace- namiento “off line”. tal como Jos discos magnéticos rigidos y las cintas magnéticas, en ‘244 PRINCIPIOS DE ARQUITECTURA DE COMPUTADORAS: Jos que el costo por bit almacenado es bajo en términos monetarios y de energfa consu- mida, pero cuyo tiempo de acceso es muy alto comparado con el de los registros. Entre. Jos registros y los elementos de almacenamiento secundario se ubican otros tipos de me- ‘morias que tienden a salvar la brecha entre ambos extremos. Répida y cara fE2EX Rendimiento Registros y costo recientes Memoria secundaria (discos) Almacenamiento fuera de linea (cintas) Lenta pero barata La feracqula de las memorias, A medida que se recorre la estructura jerdrquica, se obtiene una mayor eficiencia a cam- bio de un mayor costo, La tabla 7.1 ilustra algunas de las propiedades de los componen- tes de las diferentes jerarquias de memoria, consideradas a fines del siglo xx (finales de los affos noventa). Nétese que el costo tipico, al que se arriba multiplicando el costo por Mbyte por le cantidad de memoria utilizada en una mquina, es similar para cada uno de los escalones de la jerarquia. Nétese asimismo que el tiempo de acceso varia en factores aproximadamente de 10, excepto para el caso de los discos, cuyos tiempos de acceso son del orden de 100.000 veces mayores que los de la memoria principal, Este gran desajus- te influye fuertemente sobre la forma en que el sistema operstivo debe manejar la wans- ferencia de bloques de datos entre discos y memoria principal, como se verd a lo largo del capttulo.* “A. de T: Debido a las consideraciones planteadas al comienzo del capitulo por tos autores, al momento de 'a publicacién de ta presente edicin en espaiiol, os tamafios y costos de la tabla 7.1 estén totalmente desac- twalizados. Los 64 Mb de memoria cuestan menos de § 20. siendo habituat el uso de 256 Mb en una ‘mAquina convencional. Andlagamente, por $ 200.- se obtienen discos del orden de 40 GB o mejores. capinno 7 + Memoria 245 Tipo de memoria | Tiempo de acceso | Costo por Mbyte | Tamafio tipico | _ Costo utilizado | aproximado Registros Tas ‘Alto TKD 5 Cache 5.20 ns $100 1 Mb. 3100 Memoria principal 60-80 ns S110 64 Mb $70 Discos 10 ms 50,05 46GB $200 Tabta 7.1 » Propiedades de ls distintas jerarqulas de memoria (valores estimativos afo 1999). 7.2 Memoria de acceso aleatorio Esta seccin analiza la estructura y funcionamiento de la memoria de acceso aleatorio (RAM, random access memory). En este contexto, el término aleatorio significa que puede accederse a cualquier celda de memoria en el mismo tiempo, independientemente de su posicién en 1a estructura de la memoria. La figura 7.2 muestra el comportamiento funcional de una celda de memoria RAM utilizada en una computadora tipica. En la figura se representa al elemento de memoria como un flip flop D, con los controles necesarios para que la celda pueda ser selecciona- da, lefda y escrita, Existe una linea de datos (bidireccional) para la entrada y salida de los datos. Durante el andlisis de los circuitos integrados de memoria RAM se utilizaré un modelo de celda similar al que se muestra en la figura. Nétese que esta ilustraci6n no re- presenta necesariamente la implementacién fisica real, sino solo su conducta funcional. Existen muchas formas de implementar una celda de memoria, Tectura oh foux Seleccién Entrada y salida de datos Figura 7.2 © Descripci6n funcional dei comportamianto de una celda de memoria de acceso aleatorio. Los circuitos de memoria de acceso aleatorio basados en flip flops, como el de la figura 7.2, se conocen como circuitos de memoria estatica (SRAM, static RAM), debido a que el contenido de cada posicién de la memoria se mantiene en tanto se mantenga la alimen- ‘246_PANNCIPIOS OF AROUITECTURA DE COMPUTADORAS tacién eléctrica del circuito integrado. Los circuits integrados de memoria dinémica, Namados DRAM, utiliza un capacitor que almacena una pequefia cantidad de carga eléctrica, y en el cual el nivel de carga representa un 00 un 1. Los capacitores son mucho més chicos en tamafio que los flip flops y, por consiguiente, un circuito integrado de me- moria dindmica basada en capacitores puede almacenar en la misma superficie una can- tidad de informacién mucho mayor que una memoria estética. Dado que las cargas de los capacitores se van disipando en el tiempo, las memorias dinimicas requieren que la car- ga de sus celdas sea restablecida, o refrescada, en forma peridica y con frecuencia. Las memorias dindmicas pueden suftir descargas prematuras como resultado de la inte- racci6n con rayos gamma, cuya ocurTencia es natural, Este evento es estadisticamente raro, por lo que un sistema puede estar funcionando por dfas antes de que ocurra un error. Por esta raz6n, las primeras computadoras personales no utilizaban circuitos de deteccién de errores, dado que esas méquinas solian apagarse al final de cada dia y, por lo tanto, habfa posibilidad de acumulacién de errores no detectados. Esto permitié que los precios de las computadoras personales se mantuviesen en un rango competitive. Como consecuencia de las drdsticas dis- ‘minuciones de precios de las memorias dindmicas, y de la creciente utilizacién de las compu- tadoras personales en aplicaciones como cajeros automiéticos y servidores de red, hoy es co- min la utlizacién de circuitos de deteccién de errores en las computadoras personales. En la proxima seccién se analiza la estructura de las celdas de memorias dinamicas de aceeso aleatorio y cémo se las organiza dentro de un circuito integrado, 7.3 Organizacién de un circuito integrado La figura 7.3 muestra un esquema simplificado de las conexiones de un circuito integrado de memoria RAM. En los terminales A,-A,,,, se aplica una palubra de direcciones de m bits, formada por mn lineas numeradas desde O hasta m-1. Simulténeamente, se activa la se- fiat TS (Chip Select) junto con WR (para la escritura de un dato en memoria) o con WR (pa- ra la lectura de un dato desde 1a memoria). Las barras por encima de los simbolos CS y WR indican que el cireuito integrado se selecciona cuando CS = 0 y que se producira una operacién de escritura cuando WR = 0. Cuando se lea informacién desde un circuito inte- grado, la palabra de datos de w bits aparecerd en las lineas de datos Dy-D, , luego de un pe- iodo de tiempo Ty (el retardo de tiempo medido desde el momento en que se validan las Iineas de direccién hasta el instante en que se tienen tos datos disponibles en ia salida), Cuando se escriben datos en un circuito integtado, las lineas de datos también deben man- tenerse estables (validas) por un periodo de tiempo Ty. Nétese que las lineas de datos de Ja figura 7.3 son bidireccionales, como ocurre normalmente en los sistemas de memoria, Las Ifneas de direcci6n A,-A,,., del circuito integrado de la figura 7.3 forman una di- fecci6n, la que se decodifica a partir de una direcci6n de m bits 2 una de 2" direcciones dentro del circuito integrado, cada una de las cuales se asocia con una palabra de w bits. El circuito imegrado contiene, por lo tanto, 2” x w bits, capiruiy 7» MEMORIA 247 Circuito foto | de HF oD memoria ry Figura 7.3 » Distribucién simpliticada de conexiones en un circuito inlegrado de memoria ‘de acceso aleatario. yD, [2] Pe wR Re Palabra wR Palabra 1 cs jmteprado «s) TR Palabra 3 cs ala, 2 Qa Figura 7.4 * Una memoria de cuatro palabras con cuatro bits por palabra y organizacién 20. Se analizaré ahora el problema de crear una memoria RAM que almacene cuatro palabras de cuatro bits cada una, Una memoria de acceso aleatorio puede considerarse como una coleccién de registros. Se pueden usar cuatro registros para almacenar las palabras y, lue- 0, se puede introducir un mecanismo de direccionamiento que permita la sclecci6n de una de las palabras para su lectura 6 escritura, En la figura 7.4 se muestra un disefio posi- ble de esta memoria, Dos lineas A, y 4, seleccionan Ia palabra a ser lefda o escrita, a tra- vés del decodificador 2-4, Las salidas de los registros pueden interconectarse en forma s¢- gura sin el riesgo de un cortocircuito dado que el decodificador asegura que a 1o sumo se 248 _panitapins OF ARQUITECTURA DE COMPUTADDRAS selecciona un registro por vez, y los registros deshabilitados se desconectan eléctricamen- te por medio del uso de buffers de tres estados. La linea de seleccidn de componente (Chip Select) no hace falta en el decodificador, pero se la utiliza porque posteriormente seri ne- cesaria para la construcci6n de memorias més grandes. La figura 7.5 muestra un esquema simplificado de la memoria RAM. {til By Ba By Dp tg tthe, we|— qeEE SC 3 Qr 21 Oo Figura 7.5. Version simplificada de la mernoria RAM de cuatra palabras ce cuatro bits. Existen dos formas précticas para organizar la memoria genérica de la figura 7.3. En los circuitos integrados més pequefios es habitual el uso de un solo decodificador para selec cionar una de 2" palabras, cada una de las cuales contiene w bits. No obstante, esta orga- nizaci6n no es econdmica en los actuales circuitos integrados de memoria. Debe tenerse en cuenta que un circuito integrado de 64 M x I requiere 26 Ifneas de direccionamiento (64 M = 2”), lo que significa que un decodificador convencional requerirfa 2”* compuer- tas Y de 26 entradas cada una, lo que representa un costo elevado en términos de super- ficie requerida, y esto tan solo para la decodificacién. Dado que Ja forma de la mayorfa de los circuitos integrados es practicamente cuadra- da, una estructura de decodificacién alternativa reduce significativamente la complejidad del decodificador al realizar las decodificaciones de las filas y de las columnas en forma separada. Esta organizacién se conoce como estructura 2-1/2D. La organizacién 2-1/2D es por lejos la preferida en el disefio de circuitos integrados de memorias RAM. La figu- ra 7.6 ilustra la estructura de una memoria RAM de 2° palabras por un bit, con organiza- cién 2-1/2D. Las seis Iineas de direcciones se dividen en forma pareja entre un decodifi- cador de filas y un decodificador de columnas (el decodificador de columnas es, en realidad, la combinacién de un multiplexor con un demultiplexor). Se utiliza una tinica linea bidireccional para la entrada y la salida de los datos. Durante una operaci6n de lectura, se selecciona una columna integra, la que se ingresa al multiplexor de columnas, el cual selecciona un dnico bit que serd enviado al exterior de la memoria. Durante una operacién de escritura, e! demultiplexor de columnas orien- ta al Unico bit a ser escrito hacia la columna correspondiente, mientras que el decodifica- dor de filas define la fila en Ia que deberd escribirse dicho bit. En la préctica, para reducir la cantidad de terminales, el circuito integrado presenta solo m/2 terminales de direccionamiento; por consiguiente, las direcciones de fila y de columna se multiptexan en el tiempo sobre esos m/2 terminales de direccién, En este ca- so, se ingresa primero la direccién de fila, de m/2 bits, junto con una sefial de s capinuuo 7» MEMORIA 249 Decodificador de Flas ‘woo para datos {uno para seleccidn. Decodificador de eolumnnas (MUX/DEMUX) © Davos Figura 7.6 » Oiganizaci6n 2-1/20 de una memoria de 64 palabras por 1 bit mo de filas, RAS (row address strobe). La direccién de filas se almacena en el circuito integrado y se decodifica, Posteriormente, se ingresa la direccién de columnas, también de m/2 bits, junto con una sefial de seleccién de columnas, CAS (column address strobe), Pueden existir otras terminales de entrada que sirvan para controlar las funciones de ac- tualizacién de! circuito integrado y otras funciones de la memoria. ‘Aun con esta organizacién 2-1/2D y fraccionando la direccién en componentes para las filas y las columnas, se necesita una cantidad importante de entradas y salidas sobre Jas compuertas légicas del decodificador, y el némero (aun grande) de terminales de di- reccidn exige una gran cantidad de espacio para la conexién de los circuitos integrados de memoria sobre los circuitos impresos en los que van montados. Con el objeto de redu- cir todavia més tos requerimientos de entradas y salidas, se pueden usar Arboles decodi- ficadores, los que se analizan en la seccién 7.8.1. La seccién 7.9 trata de una nueva ar- quitectura de memoria que ingresa las I{neas de direccién en forma serie a través de una nica terminal de entrada at circuito integrado. Si bien las memorias RAM dinimicas son muy econémicas, las memorias estiticas ofrecen mayor velocidad. Los ciclos de refresco, los circuitos de deteccién de errores y las bajas potencias de operacién de Ins memorias dinémicas generan una diferencia de velocidades que es, aproximadamente, del orden de 1/4 de la velocidad de tas memorias estiticas, pero las memorias estiticas también implican un costo significative. La eficiencia de ambos tipos de memorias (estaticas y dinémicas) puede mejorarse. Normalmente, se suele acceder en secuencia a un conjunto de palabras que constituyen un bloque. En esta situacién, los accesos a memoria se pueden entrelazar de modo tal que mientras una memoria accede a la direccidn A, otras memorias acceden 14.4 Aga Ages? ete, De esta forma, el tiempo de acceso a cada palabra aparenta ser varias veces menor que el real, ‘250 _PRINtiPtos ne ARQUITECTURA DE CoMPUTADORAS 7.3.1 Construccién de una memoria grande a partir de memorias pequefias Se pueden construir médulos de memoria RAM de mayor tamafo, partiendo de memo- rias de menor tamaiio, Es posible el incremento tanto del tamafio de la palabra como de Ja cantidad de palabras por médulo. Por ejemplo, pueden combinarse acho médulos de memoria de 16M x | bit para formar un médalo de 16 M x 8 bits, asi como pueden com- binarse 32 médulos de 16 M x | bit para formar una memoria de 64 M x 8 bits. Como ejemplo, considérese el circuito imegrado de 4 palabras de 4 bits de la figura 7.5, el que serd utilizado como bloque constructivo para formar, primero, un médulo de 4 pulabras de 8 bits y, posteriormente, un médulo de 8 palabras de 4 bits. Se desea incre- mentar el tamaio de la palabra de cuatro bits y también el niimero de palabras. Consi- dérese, primero, el problema de incrementar el ancho de ta palabra desde cuatro bits a ocho, Esto se puede lograr en forma simple utilizando dos circuitos integrados, interco- nectando las lineas CS de ambos, para que sean seleccionados en forma conjunta, y conectando sus lineas de datos, en la forma en que se muestra en la figura 7.7. Dy Dg Ds Dy Dy By Dy Dy cs +. wR Ay Memoria de Memoria de | “ 4 palabras 4 palabras v x 4 bils x4 bits | Y 2) Qs Os Os 25 22 Q1 Oo Figura 7.7 * Dos memorias de cuatro palabras por cuatro bits utilizadas para crear una memorla de cuatro palabras de acho bits. Si ahora se considera el problema de aumentar la cantidad de palabras de cuatro a ocho, Ja figura 7.8 muestra una configuracién que resuelve este problema. Las ocho palabras se distribuyen entre las dos memorias de cuatro palabras. La linea de direcciones A, se hhace necesaria dado que ahora hay que direccionar ocho palabras. Un decodificador pa- rala linea A, selecciona, por medio del uso de las respectivas lineas de C5, el médulo de memoria superior 0 el inferior, tras lo cual se decodifican las restantes lineas de direc- ciones (A, y A,) dentro del médulo seleccionado, La correcta combinacién de ambos planteos permite Hevar tanto el tamafio de ta palabra como el de la memoria hasta limi- tes arbitrarios. By Dy Dy Dy wR + ‘Memoria de Ay 4 palabras Ay x4bits cgh_ Decodlifieador cH_ dat at 4 1 6 —r ‘Memoria de 4 palabras x4bits CS r 23 2: Qs Oo Figura 7.8 © Implementacion de una memoria de ocho palabras de cuatro bits con dos memorias de cuatro palabras de cuatro bits cade una. 7.4 Médulos comerciales de memoria Los circuitos integrados de memoria disponibles comercialmente suelen estar organizados en configuraciones normalizadas. La figura 7.9 muestra ocho circuitos integrados de 2° bits, configurados en un médulo de memoria estructurado fisicamente en una sola Ifnea (SIMM, single in line memory module), que forman un médulo de memoria de 2 x 8 bits (1 Mbyte). Los contactos eléctricos (numerados del 1 al 30) se hallan fisicamente alinea- dos. Para una memoria de 2” posiciones se requieren 20 lineas de direcci6n, a pesar de lo cual el médulo soto provee 40 lineas de direccién (A0-A9). Las direociones de fila y de co- lumna, cada una de ellas de 10 bits, se cargan por separado, aplicdndose las correspon- dientes seftales de seleccién de direccién de columna (RAS) y de fila (CAS) una vez que al médulo recibe en forma valida Ia porcién correspondiente de la direccién. Si bien esta organizacién parece duplicar el tiempo necesario para acceder a una direccién de memo- ria particular, en general el tiempo de acceso se mejora dado que solo puede hacer falta ac- tualizar la direcei6n de fila 0 de columna. Las ocho lineas de datos DQ1-DQ8 forman un byte que se lee o escribe en paralelo. Con el objeto de formar una palabra de 32 bits, se hacen necesarios cuatro médulos de tipo ‘252_paIMciPins OF ARQUITECTURA DE COMPUTADORAS "ADAY—Enntade dinccones TAS Wanitscicn de dneeiones de cokmeas DO}-DOS Brvadyssida de dane Sinemenin Habiliscion de deeiones de ilse Alena -$ Vol ‘ers Hebiiaciga de seis arnt SaSsabnaeSeckerdierde ed ale Figura 7.9» Méduto de memoria SIMM (adaptado de Texas Instruments, 1991). ‘SIMM. Tal como en e! caso de otras sejtales “activas en bajo”, la linea de habilitacién de es- critura Write Enable se identifica con una barra encima de su simbolo (W), lo que significa. que la escritura se produce cuando se coloca un cero en Ja linea. Ea caso contrario se pro- duce una lectura. La sefial RAS también genera una operacién de refresco, la que debe rea- fizarse al menos cada 8 ms para permitir la recuperacién de las cargas de los capacitores. 7.5 Memoria de lectura Cuando un programa de computadora se carga en la memoria, se mantiene en la memo- ria hasta que se lo sobrescriba o hasta que se apague Ia energia eléctrica. Para algunas aplicaciones, el programa no cambia nunca, por eso se to puede fijar en una memoria de lectura (ROM, read only memory), Las memorias de lectura se usan para almacenar pro- gramas en videojuegos, calculadoras, hornos de microondas y controladores de inyeccién de combustible, entre muchas otras aplicaciones. La memoria de lectura es un dispositivo simple. Todo Io que se requiere es un deco- dificador, algunas Ifneas de salida y unas pocas compuertas légicas. No hay necesidad de lip flops 0 capacitores. La figura 7.10 muestra una memoria de lectura en ta que se alma- ‘cenan cuatro palabras de cuatro bits (0101, 1011, 1110 y 0000). Cada entrada de direc- cionamiento (00, OL, 10, 11) corresponde a una de las palabras almacenadas. En aplicaciones de gran volumen, las memorias de lectura se programan en el proce- so de fabricacién, Como alternativa, para aplicaciones de bajo volumen © para uso en capiruto 7+ Memonta 253 Posici6n | Palabra tenacena| oo | oi or | ton T 10 i110 Babilitacion 11 | 0000 @ a 2 0 Figura 7.10 » Ura memoria de lectera que almacena cuatro palabras de cuatro bits. prototipos, se utilizan habitualmente memorias programables (PROM, Programmable ROM), las que permiten que el usuario genere sus contenidos por medio de un dispositi- vo de no muy alto precio conocido como programador de PROM. Desafortunadamen- te para las industrias que hacen uso de estas memorias, los programadores de memorias PROM también permiten su lectura, por lo que se puede duplicar el contenido de una me- moria PROM en otro circuito integrado, 0, lo que es peor atin, se puede descifrar su con- tenido haciendo un proceso de ingenieria inversa, para después modificar y reproducir el contenido de la memoria hacia nuevos circuitos de contraband. Si bien la memoria PROM permite que el disefiador demore la decisién acerca de los contenidos a almacenar en ella, este tipo de memoria solo puede grabarse una vez. En ciertos casos puede ser modificada, pero Gnicamente cuando ¢h patrén de datos existente 5 un subconjunto del nuevo patrén de datos a grabar. Las memorias PROM borrables (EPROM) pueden rescribirse varias veces tras ser borradas con radiacién ultravioleta (en el cuso de las memorias UVPROM), a través de una ventana que se monta sobre la cép- sula del cireuito integrado. Las memorias PROM de borrado eléctrico (EEPROM) per- miten que sus contenidos sean modificados eléctricamente,* Las nuevas memorias flash pueden rescribirse eléctricamente decenas de miles de veces, y se usan ampliamente en ‘cémaras digitales de video y en programas de control de decodificadores tele tre otras aplicaciones, Las memorias PROM ée utilizardn en secciones posteriores de este texto para integrar tunidades de control y unidades aritmético-Idgicas, Como ejemplo de este tipo de apli- caci6n, considérese el disefio de una unidad aritmético-Iégica que realice las cuatro ope- ivOs, cn * Wl. de F: La diferencia entve fas memorias UWPROM y EEPROM esté dada por varias caracteristicas, No solo €s diferente el proceso de borrado (en un caso mediante radiaci6n ultravilata, en el atro via corriante eléc- triea), sino que tambign son distintos los procesos de escritura, dado qua las UVPRON, al igual que las PROM se graban en un dispositive espectfico, en lanto que las EEPROM oueden grabarse sin ser extraicas dal circuito en que se encuentran. Por otra part, a vide Util, en ciclos de escritura, de las EEPROM es muy inferior ata de tas UVPROM, por lo que sus dmbitos de aplicacin suelen ser totalmente diterentes. ‘254 _PRINCIPIDS DE AROUITECTURA OE CoMPUTADORAS Operando A g ALT A16 |Funcién of 2 00 |sumar 3 Saliclas 0 1 |Restar Operando | 419 10. fstuipicur B Alz iividir san ' ! pi alg Sits Selecciin as de funcién L_—]Al? Figura 7.11 * Una tabla de biisquedas que implementa una unidad aritmético-togica de ocho bits. raciones aritméticas basicas, suma, rest, producto y cociente, sobre datos de acho bits, operando en médulo 256 (salida de 8 bits). Se puede generar una tabla de verdad que enumere todas las 2'° posibles combinaciones de los operandos y las 2? combinaciones de funciones, y colocar esa tabla de verdad en una memoria PROM por medio de su gra- bacidn en un dispositivo programador. Esta solucién de fuerza bruta, que implementa una tabla de biisquedas, no es tan po- co practica como puede parecer y se utiliza en una grun cantidad de situaciones, La me- moria no requiere tener un tamafio muy grande. Hay 2° x 2* combinaciones de los dos ‘operandos de entrada, y hay 2? funciones, por lo tanto la memoria PROM requiere un to- tal de 2" x 2°x 2? = 2'* palabras, lo que a los efectos priicticos representa una memoria pe- quefia. La configuruci6n de la unidad aritmético-I6gica implementada por medio de la memoria PROM se muestra en la figura 7.11. Las Iineas de direcciones se utilizan para los operandos y para las entradas de seleceidn de funcién, en tanto que las salidas se ge- neran simplemente recuperando el valor previamente calculado y almacenado en Ia posi- cin direccionada. Este enfoque es més répido que la implementaci6n circuital de Ias fun ciones, pero no puede extenderse a palabras formadas por muchos bits sin aplicar algiin tipo de descomposicién. Las computadoras de hoy trabajan en forma habitual con ope- randos de 32 y més bits, con lo que una unidad aritmético-I6gica implementada con una PROM requeriria 2"? x 2” x 2? = 2% palabras, lo que adn es prohibitivamente grande, 7.6 Memoria cache ‘Cuando se ejecuta un programa en una computadora, la mayor parte de las referencias de memoria se hacen con respecto a una pequefia cantidad de direcciones. En general, ¢1 90% del tiempo de cjecucién se consume en aproximadamente el 10% det cddigo. Esta propie- dad se conoce como principio de localidad. Cuando un programa hace referencia a una Jocacién de memoria, muy probablemente vaya a acceder de nuevo a ella en el corto pla- captruio 7 + MEwonia 255 0, 1o que se conoce como localidad temporal. En forma similar, existe una Localidad es- pacial, en la cual se plantea que tras una referencia a una posicion de memoria dada, es ‘mucho més probable que se acceda a posiciones cercanas a ella que a posiciones lejanas a la misma, La localidad temporal se produce debido a que los programas, en general, con- sumen mucho tiempo en iteraciones o en actividades recursivas, por lo que recorren Ta misma secci6n de cédigo una enorme cantidad de veces. La localidad espacial se deriva de lu tendencia a almacenar los datos en zonas contiguas. Si bien el planteo referido al 10% del cédigo surge del total de las referencias a memoria, dentro de ese 10% los ucce- sos tienden 4 estar agrupados, Por consiguiente, para un imervalo de tiempo dado, 1a ma- yor parte de los accesos a memoria se producen en un conjunto de posiciones alin menor al 10% del tamato del programa. El acceso a memoria suele ser lento en comparacién con la velocidad de la unidad cen- tral de proceso, por lo que la memoria genera un cuello de botella importante en el rendi- :nto de la computadora. Dado que la mayorfa de las referencias de memoria provienen de un conjunto pequeito de locaciones, se puede aprovechar el principio de localidad para mejorar dicho rendimiento, Con este objetivo se puede colocar entre la memoria principal y Ta unidad central de procesos una memoria cache, pequefia pero répida, con el objeto de almacenar los contenidos de las direcciones las que se accede con mayor frecuencia, Durante la ejecucién de un programa, se analiza primero el contenido de la memoria ca- che, y se accede a la palabra requerida si estuviese presente en la misma. Si la palabra ala que se hace referencia no est presente en la memoria cacke, se genera una posicién vacia y se carga fa palabra requerida en esa pasicisn desde la memoria principal, tras lo cual se. accede en la memoria cache a !a palabra solicitada. Si bien este proceso lleva mas tiempo que ef acceso directo a la memoria principal, el rendimiento general mejora cuando se lo- gra que una proporci6n alta de aecesos a la memoria se satisfaga desde la memoria cache. Los sistemas modemnos de memoria pueden tener distintos niveles de memoria cache, alos que se suele distinguir como nivel t (L1), nivel 2 (L2) y, alin en ciertos casos, nivel 34L3). En muchas implementaciones, la memoria cache de nivel 1 viene incorporada di- rectamente en el circuito integrado de la CPU. Entre los procesadores comerciales, tanto el Pentium Intel como el PowerPc G3 de Motorola-IBM incluyen 32 Kbytes de memo- ria cache de nivel | en el circuito imegrado del procesador.” CPU ; cpu Memoria 00|MH2 | Memoria 400 MHz principal principal 10MHz Cache 10 MHz, Bus 66 MHz Bus 66 MHz Sin memoria cache ‘Con memotia cache Figura 7.12 © Ubicaci6n de una memoria cache en un sistema de computacién. (256 PRINCIPIOS OF ARQUITECTURA DE COMPUTADDRAS La memoria cache es més veloz que la memoria principal debido a una cantidad de razo- nes diferentes. Se puede utilizar una electrénica més répida, lo que implica también un costo mayor en términos monetarios, de tamaito y de requerimientos de alimentacién eléctrica, Dado que la memoria cache es pequefia, este incremento de costos es, a su vez, relativamente moderado. Una memoria cache tiene menor cantidad de direcciones que la ‘memoria principal y, como resultado, tiene un Arbol de decodificacién poco profundo, lo que reduce el tiempo de acceso, Ademis, la memoria cache se encuentra ubicada, tanto fisiea como légicamente, mds cerea de la CPU que la memoria principal, Jo que evita los retardos en las transferencias sobre un bus compartido. La figura 7.12 itustra una situaci6n tipica. A la i2quierda de Ia figura se muestra una computadora simple, sin memoria cache. Esta computadora posee una CPU con una fre- cuencia de reloj de 400 MHz, pero se communica a través de un bus de 66 MHz, con una ‘memoria principal que soporta una frecuencia maxima de reloj de 10 MHz. La sincroni- zacién de la CPU con el bus requiere normalmente algunos poces ciclos de reloj; por consiguiente, la diferencia de velocidades entre la memoria principal y la CPU puede es- tar en el orden de 10 veces 0 mayor. Tal como se muestra a la derecha en la figura 7.12, se puede intercalar una memoria cache cercana a la CPU, de modo tal que Ta uni dad de proceso pueda manejar accesos ripidos sobre un trayecto directo a fa memoria cache a 400 MHz. 7.6.1 Memoria cache de asignacién asociativa El proceso de asignacién de las direcciones de memoria principal a las direcciones de memoria cache ha llevado al desarrollo de distintos mecanismos de hardware. Ei usuario ‘no necesita conocer el mecanismo de conversién, lo que tiene la ventaja de permitir la in- trodueci6n de las mejoras en la memoria cache sin la necesidad adicional de modificar los programas de aplicacién. Los diferentes métodos de asignacién de memoria cache influyen sobre el costo y el rendimiento, y no hay un dnico métado que resulte ser el mejor y el mas adecuado para todas las situaciones. En esta secci6n se analiza el esquema de asignacién asociativa. En la figura 7.13 se ilustra un esquema asociativo para un espacio de memoria de 2” pala- bras, divididas en 2°” bloques de 32 palabras por bloque. La memoria principal no est fisicamente dividida de esta manera, pero esta es la visi6n que tiene la memoria cache de la memoria principal. Los bloques de memoria cache, o lineas de cache, como también se las conoce, tienen tamafios que van desde 8 hasta 64 bytes. La informacién ingresa y egresa de la memoria cache de a una linea por vez, utilizando las técnicas de entrelazado de memoria analizadas con anterioridad. La memoria cache de este ejemplo consiste en 2" Iineas en las que se pueden colocar los bloques cle memoria principal. Existen mds bloques de memoria principal que Iineas de memoria cache, y cualquiera de los 2 bloques de memoria principal puede colocarse en cualquier linea de la memoria cache (a raz6n de un nico bloque en cada linea en un mo~ capiruis 7 + MEMORIA 257 Vatideg Sede sigue T Linea 0 Bloque 0 | rafiioeue a Linea t Blogue | Oo Linea 2 | : Bloque 128 Linea 21 Bloque 129 Memoria cache Memoria principal Figura 7.13 « Un esquema de asignacién asociativa para una memoria cache. mento dado de tiempo). Para mantener la pista acerca de cual de los posibles 2”” bloques de memoria se encuentra en cada linea, se agrega a cada una de ellas un campo de identifica- cidn o etiqueta (ag), de 27 bits, la que lleva un identificador cuyo rango va desde 0 hasta 227-1, El campo de etiqueta se ubica en los 27 bits més significativos de los 32 bits presen- tados a la memoria cache como direccién, Todas las etiquetas se almacenan en una memo- ria especial, en la que se los puede buscar en paralelo. Cada vez que se almacena un bloque nuevo en Ia memoria cache, su etiqueta sé almacena en la posicién correspondiente de la memoria de etiquetas. ‘Cuando se carga por primera vez un programa en la memoria principal, se limpia la memoria cache y, en consecuencia, durante la ejecucién de un programa se requiere un bit de validez para indicar si la linea contiene un bloque que pertenece © no al programa que se esta ejecutando. Asimismo, existe un bit de suciedad (dirty bir) que controla si se ha producido la modificaci6n de algtn bloque durante su aimacenamiento en la memoria cache. Si una Ifnea se modifica, debers ser reescrita en la memoria principal antes de que sea utilizada nuevamente con otro bloque. Unc referencia a una locacién que se encuentra en a memoria cacke da por resultado un acierto; en caso contrario, ¢l resultado es una falla, Cuando se carga por primera vez un pro- grama en la memoria, los bits de validez.se colocan todos en cero. Por consiguiente, la primera instrucci6n a ser ejecutada provocard una falla de la memoria cache, dado que hasta ese momento no habrd absolutamente nada del programa en la memoria cache. Se ubica en memoria principal el bloque que causé la falla y se lo coloca en la memoria cache. En una memoria cache de asignaci6n asociativa, cada bloque de memoria principal puede asignarse a cualquier linea. La asignaciéa de los bloques de memoria principal se realiza por medio de 1a particién de la direecién en campos, uno para la etiqueta y otro para la palabra (también conocido como campo “byte") en la forma siguiente: (258. Phuncrmtas DE ARQUITECTURA DE COMPUTADORAS. Etiqueta Palabra 27 Cuando se hace referencia a una direccién de memoria principal, la clectr6nica de la me- moria cache intercepta esa referencia y busca dentro de la memoria de etiquetas para ver si el bloque requerido se encuentra almacenado en ta memoria cache. Para cada una de las Itmeas, se verifica si su bit de validez es 1, y en caso afirmativo, se compara el campo de etiqueta de la direccién buscada con el campo de etiqueta de ta linea. Todas las etique- tas se analizan en paralelo, usando una memoria asociativa (que es algo diferente de un esquema de asignacién asociativa; en la seccidn 7.8.3 se analizan las memorias asociati- vas). Si alguna etiqueta de la memoria de etiquetas coincide con el campo de etiquetas de la referencia 2 memoria principal, se extrae la palabra de la linea desde la posici6n indi- ‘cada por el campo de palabra. Si ta palabra a que se hizo referencia no se encuentra en la memoria cache, se deberd traer desde la memoria principal el bloque de memoria que con- tiene Ja palabra buscada, recuperando luego esa palabra referida desde Ia memoria cache, Se actualizan los campos de etiqueta, validez y suciedad, y se retoma la ejecucién del programa. A continuacién se describe la forma en que se procede a asignar a la memoria cache el acceso a la direcci6n de memoria (AQ3SFO14),,. Los 27 bits mas significativos de la direccién forman el campo de etiquetas, en tanto que ios cinco bits restantes forman el campo de palabra, segin se indica: Etiqueta Palabra 101000000011010111110000000/10100 Si la palabra direccionada esté en ta memoria cache, se la encontrard en la posici6n (14), de una linea cuya etiqueta es (501 AF80),,, obtenida con los 27 bits mAs significativos de la direcci6n, Si la palabra direccionada no se encuentra en la memoria cache, se copiaré el bloque correspondiente al campo de etiquetas (501 AF80),, desde la memoria principal a alguna de las lineas disponibles en la memoria cache, con lo que luego podra satisfe- cerse desde la memoria cache la referencia a memoria que provocara la falla. Si bien este esquema de asignacién es lo suficientemente poderoso como para satisfa- cer una amplia gama de situaciones de acceso a memoria, existen dos problemas de im- plementacién que limitan su rendimiento, En primer lugar, el proceso de decodificar cual de las lineas debe liberarse cuando se trae un nuevo bloque hacia la memoria cache puede ser complejo, Este proceso requiere una cantidad importante de electronica, ademas de in- twoducir retardos en los aocesos a memoria. Un segundo problema surge del hecho de que Ja busqueda en ta memoria cache requiere la comparacién del campo de etiquetas con ta totalidad de las etiquetas (2'*) de la misma, En las secciones 7.6.2 y 7.6.3 se describen métodos alternativos que permiten reducir el nimero de comparaciones requeridas. capiruwo 7+ wemonin 259 Politicas de reemplazo en memorias de asignacién asociativa Cuando se requiere almacenar un bloque nuevo de memoria principal en una memoria cache de axignacién asociativa, se debe identificar alguna linea disponible para el alma- cenamiento. Si hay Iincas sin uso, tal como ocurre cuando se inicia la ejecucién de un programa, se puede usar simplemente la primera linea cuyo campo de validez sea 0. Cuando todos los bits de validez de todas las lineas de la memoria cache valen 1, debe li- berarse alguna de las Iineas activas para permitir cargar ¢] nuevo bloque. Existen cuatro politicas o criterios de reemplazo que se utitizan con mayor frecuencia, las que se cono- cen respectivamente como criterio del elemento menos recientemente usado (LRU, least recently used), criterio de “el primero que entra es el primero que sale” (FIFO, first in first out), criterio del menos frecuentemente usado (LFU, least frequently used) yun Giltimo criterio aleatorio. Una quinta técnica que se utiliza solo con propésitos de andlisis es Ia del reemplazo éptimo. Para el criterio LRU de reemplazo del elemento usado menos recientemente se agre- geen cada linea una identificacién de tiempo, la que se actualiza cada vez que se accede alla linea, Cuando se debe liberar una linea para incorporar un nuevo blogue, se descarta el contenido de la Iinea usada menos recientemente, la que se reconoce a través de la edad de su identificacién temporal, utilizéndose esa linea para almacenar el nuevo bloque. El esquema LFU, que reempiaza la linea menos frecuentemente sada, funciona en forma simitar, excepto por el hecho de que se actualiza una linea por vez mediante un contador de frecuencia adosado a cada linea. Cuando se requiere cargar un bloque nuevo, se libe- ra aquel que muestra la menor tasa de utilizacién. La politica FIFO reemplaza lineas en forma ordcnada, una tras otra en el orden en que se las encuentra fisicamente ubicadas dentro de la memoria cache. La técnica aleatoria simplemente elige una linea al azar. La politica del reempluzo éptimo no es practica pero se usa con propésitos compara tivos para determinar la eficiencia de las otras técnicas de reemplazo con respecto a la mejor posible, Esto significa que solo se puede determinar la politica optima de reempla- zo una vez. que el programa ha sido efectivamente ejecutado, por lo que su utilidad en la ejecucién de un programa es minima. A partir de estudios realizados, se puede determinar que la técnica del reemplazo del elemento menos frecuentemente usado (LFU) es solo ligeramente mejor que la politica aleatoria, La técnica LRU se suele preferir debido a la posibilidad de su implementacion eficiente. La secci6n 7.6.7 analiza una implementaci6n simple de la técnica de reempla- 20 de la Iinea menos reciertemente utitizada, Ventajas y desventajas de la asignaci6n asociativa de la memoria cache La técnica de asignacién asociativa tiene la ventaja de que cualquier bloque de memoria puede colocarse dentro de cualquier Iinea de la memoria cache. Esto significa que, sin in- teresar qué tan irregulares sean las referencias a programa y a datos, si se dispone de una ‘260_ercipios De ARQUITECTURA DE COMPUTADORAS linea para el bloque, el mismo puede almacenarse en la memoria cache. Por consiguien- te, se hace necesaria una cantidad considerable de electrénica para la administracién y el control de Ia memoria cache. Cada linea debe tener una etiqueta de 27 bits que identi que su posicién dentro de ta memoria principal, y las etiquetas deben buscarse en parale- lo. Considerando el ejemplo precedente, la memoria de etiquetas debe tener un tamafio de 27 x 2" bits; ademés, como se ha dicho, se requiere el mecanismo que permita la bis- queda en paralelo de a memoria de etiquetas. Las memorias en las que puede reulizarse Ja bisqueda de contenidos en paraleto se conocen como memorias asociativas o direc- nabtes por contenido. El anilisis de este tipo de memorias se reserva para una sec- cidn posterior de este capitulo. Si se restringe la posicién de memoria cache en la que se puede ubicar cada uno de los bloques de memoria principal, es posible eliminar la necesidad de usar una memoria aso- ciativa. Este tipo de memoria cache se conoce como de asignacién directa y se analiza en la seccién siguiente. 7.6.2 Memori cache de asignacién directa La figura 7.14 muestra un esquema de asignaci6n directa para una memoria de 2” pala- bras. Al igual que antes, la memoria se divide en 27 bloques de 2° = 32 palabras por blo- que, y la memoria cache consiste en 2" Iineas. Hay muchos més bloques de memoria principal que Iineas de memoria cache, por lo que se pueden asignar 2°/2" = 2" bloques de memoria principal a cada linea de la memoria cache. Con el propésito de mantener el control de cual de los 2'° bloques posibles se encuentra en cada linea, se agrega un cam- po de etiquetas de 13 bits, el que contiene un identificador cuyo rango va desde 0 hasta 2A, Suciedad Valiger 94 Bsiqueta COT nea 0 Blogue 0 jot I Linea 1 Bloque t U1 Linea 2 Blowe 2 } CPs ae Memoria cache Memoria principal Figura 7.14 + Un esquema de asignaci6n directa para una memoria cache, capiruig 7 + MEMORIA 261 El esquema se conoce como de “asignacién directa” debido a que cada linea de memo- sia cache se corresponde con un conjunto explicito de bloques de memoria principal. En una memoria cache de asignaci6n directa, cada bloque de memoria principal se asigna a una tinica linea, pero cada linea puede recibir mas de un bloque. La asignacién de los bloques de memoria principal a las lineas de la memoria cacke se realiza a través de la particidn de la direccién en campos asignados a la etiqueta, la linea y la palabra, en la forma siguiente: Exiqueta Linea Palabra 13 bits 4 bits S bits La direecién de memoria principal, de 32 bits, se parte en un campo de etiqueta de 13 bits, seguido de otro campo de 14 bits que define la linea y este, a su vez, seguido por un campo de palabra de 5 bits. Cuando se hace referencia a una direccién de memoria principal, el campo de {inea identifica en cudl de las 2" lineas puede encontrarse el bloque, si es que e tuviese dentro de ia memoria cache. Si el bit de validez.es 1, se compara el campo de et quotas de la direccién de referencia con el campo de etiquetas de la linea. Si los campos de cetiqueta coinciden, la palabra se toma desde la posicién de la linea especificada en el cam- po de palabra, Si el bit de validez es 1 pero los campos de etiqueta no coinciden, se vuelve acscribir la linea a memoria principal si el bit de suciedad vale I, y se lee el nuevo bloque desde 1a memoria principal hacia la linea de la memoria cache. Para un programa que te- ign se inicia, e! bit de validez valdré 0, por lo que el bloque directamente se escribe en la linea. Se coloca el bit de validez de esa Ifnea en 1 y se reinicia la ejecucién del programa. Se considerard ahora, como ejemplo, la forma en que se asigna en la memoria cache el accesoa la direcci6n (AO35F014),, de memoria principal. La patabra binaria se divide segiin el formato de palabra ilustrado anteriormente. Los 13 bits mds significatives for- ‘man el campo de etiqueta, los 14 bits siguientes forman el campo de linea y los dltimos cinco bits forman el campo de palabra, segtin se muestra a continuaci6 Eriqueta Linea Palabra 1010000000110/1011111000000 Si la palabra buscada est en la memoria cache, se encontrar en la posicién (14), de la Iimea (2F80),,, la cual tendré a su vez una etiqueta de (1406),,. Ventajas y desventajas de la asignaciGn directa de memoria cache El esquema de asignacién directa de memoria cache es relativamente simple de implemen- tar, La memoria de etiquetas en el ejemplo anterior es de solo 13 x 2"* bits de tamafio, 0 sca, menos de la mitad del tamafio de la memoria de asignacién asociativa. Mas adn, no hay ne- cesidad de una biisqueda asociativa, dado que el campo de linea de la direcci6n de memo- ‘262 _pnimcipios DE ARQUITECTURA DE COMPUTADORAS. tia principal presentada por la CPU se utiliza para dirigir la comparacién hacia la nica lf nea en que se podria encortrar el bloque, si realmente estuviese en la memoria cache. Esta simplicidad tiene un costo. Considérese qué ocurre cnando un programa hace re- ferencia a posiciones de memoria separadas por 2" palabras, lo que coincide con el ta- mafio de la memoria cache. Este patrén puede aparecer en forma natural si se almacena una matriz en memoria por filas y se ta accede por columnas. Cada referencia a memoria dard por resultado una falla, lo que obligard a leer todo un bloque hacia la memoria ca- che atin cuando solo haga falta usar una tnica palabra, Peor atin, se utilizard en realidad nada mas que una pequefia fraccién de la memoria cache disponible. Se puede ver que cualquier progrumador que escriba un programa de esta manera me- rece obtener el peor rendimiento posible, pero, de hecho, las operaciones répidas sobre matrices utilizan dimensiones que son potencia de dos (esto posibilita el empleo de ins- trucciones de desplazamiento para reemplazar las instrucciones ms costosas de multipli- cacién y divisiGn que se requieren para la indexaci6n de matrices). De tal manera, el peor escenario referido al acceso de posiciones de memoria que difieren en 2" direcciones no ¢s tan improbable. Para evitar esta situaciGn sin pagar et alto precio de implementacién de una matriz, totalmente asociativa, se puede utilizar un esquema de asignacién aso- ciativa por conjuntos, el que combina aspectos de las asignaciones directa y asociativa. El método de asignacién directa por conjuntos se describe en la seccién siguiente. 7.6.3 Asignacién asociativa por conjuntes de la memoria cache El esquema de asignacién asociativa por conjuntos combina la simplicidad de la asigna- ci6n directa con la flexibilidad de la asignacién asociativa. La asignacién asociativa por conjuntos es més préctica que la asignacién completamente asociativa debido a que la porcién asociativa queda limitada a solo algunas Iineas que forman un conjunto, tal co- mo se muestra en la figura 7.15. En este ejemplo, dos bloques forman un conjunto, por lo que se tiene una memoria cache asociativa de das vias. Si hay cuatro bloques en cada conjunto, se tendré una memoria cache asociativa de cuatro vias, Dado que hay 2" lineas en la memoria cache. existen 2/2 = 2" conjuntos. Para asig- nar una direcci6n a un conjunto se utiliza un esquema de asignacién directa, en tanto que, dentro del conjunto, se utiliza una asignacién asoci: El formato de la direcci6n tiene 13 bits en el campo de conjunto, lo que identifica al conjunto en el que se encontrarfa la palabra a la que se quiere acceder si estuviese en la memoria cache. El campo de palabra tiene cinco bits, al igual que antes, y queda un campo de etiquetas de 14 bits, el que com- pleta ios 32 bits de la direccién, tal como se muestra a continuaciGn: Etiqueta Conjunto Palabra 14 bits 13 bits 5 bits cApiTuLO 7 = MEMORIA_263 Validez Suciedad _Eti { Suriedad_Friqueta ae 32 palabras ; CLEBET inca Bloque 0 pablo Conjunto 0 i Linea | Bloque 1 4 4 Conjunto | Lines 2 : Bloque 2! Conjoa21| I -| Linea 24-1 Bloque 2341 Memoria cache Bloque 277=1 Memoria principal Figura 7.15 « Un esquema de asignacin asociativa por conjuntos para una memoria cache, Para ejemplificar cémo se ve una direccién de memoria principal desde una memoria cache asociativa por conjuntos, considérese nuevamente la direccién (A03SFO14)1s. Los 14 bits més significatives forman el campo de etiqueta, el que viene seguido por 13 bits del campo de conjunto y por otros 5 bits para el campo de palabra, de acuerdo con la si- guiente estructura: Etiqueta Conjunto Palabra 10100000001101/0111110000000/10100 Aligual que antes, solo la memoria cache conoce la forma en que se divide el campo de direcciones, con lo que tas traducciones de direcciones resultan abstractas para el resto de la computadora, Ventajas y desventajas de la asignacién asociativa por conjuntos En ei ejemplo precedente, ia memoria de etiquetas se incrementa en tamatio solo ligera- mente con respecto al ejemplo de la asignacién directa, a 13 x 2" palabras, y en cada refe- rencia de memoria solo deben analizarse dos etiquetas. El esquema de memoria cache aso- ciativa por conjuntos se utiliza en los procesadores actuates en forma casi universal 7.6.4 Rendimiento de 1a memoria cache Notese que se puede reemplazar répidamente la electrénica requerida para la asignacin directa de memoria cache por electrdnica relacionada con la asignacién asociativa, sin necesidad de hacer otras modificaciones en la computadora 0 en sus programas. Al cam- biar de métado solo cambia el rendimiento del tiempo de ejecucién. DE ARGUITECTURA DE, COMPUTADORAS El rendimiento durante el tiempo de ejecucién es el objetivo planteado por el uso de una memoria cache, existiendo una cantidad de cuestiones que deben analizarse con respecto a las causas que conducen a provocar la transferencia de una palabra o bloque entre la memo- ria cache y ia memoria principal. Las politicas de lectura y escritura de la memoria cache se resumen en la figura 7.16, Estas politicas dependen de si la palabra buscada se halla o no en la memoria cacke. Si se esté llevando a cabo una operaci6n de lectura en la memoria ca- che, y la palabra requerida se encuentra en dicha memoria, se esté en presencia de un acier- to de la memoria cache, con lo que la palabra buscada se transfiere inmediatamente a la CPU, Cuando ocurre una falla de memoria cache, se produce la tectura hacia la memoria cache del bloque completo de memoria principal que contiene la palabra requerida. Lectura Escritura de cache de cache Los datos Los datos Los datos Los datos estan en no estén en. estén en novestin en memoria cache —_- memoria cache memoria cache memoria cache Enviar ‘Carga inmediata: — Escritura inmediata: —Eseritura con alaCPu enviar I palabra escribir datos tamtoen —_asignacin: tracr la tan pronto se llend memoria principal Inea ata memoria lalinea de cache como en memoria cache, luego 0 cache sactualizar Completar ta tinea o decackey luego Eseritura diferida: Eseritura sin enviar a palabra enviar los datos soto ala asignacién: memoria cache, Diferir Setualizar solo escritura de memoria _-emoria principal principal hasta haber limpiado el bloque. Figura 7. olticas de leclura y escritura de memoria cache. En algunas organizaciones de memoria cache, la palabra que produce una falla se trans- fiere a la CPU ni bien se la lee hacia la memoria cache, en lugar de esperar a que se com- plete ia transferencia del resto de la linea. Este esquema se conoce como operacién de carga inmediata (load-through). Si la memoria principal no utiliza técnicas de entreta- zado, y si la patabra requerida corresponde a a diltima posici6n del bloque, no se consi- ‘gue ninguna mejora de eficiencia porque antes de transferir la palabra a la CPU ya se ha producido la transferencia de toda la linea de memoria cache. Si la memoria principal es entrelazada, puede organizarse el criterio de direccionamiento para que las transferencias hacia la CPU siempre produzcan una mejora en el rendimiento. carirunn 7 + mewona 265 En las operaciones de escritura, si la palabra esté en la memoria cache, puede haber dos copias de la palabra, una en ta memoria cache y otra en la memoria principal. Si am- bas se actualizan en forma simulténea, se produce lo que se conoce como una operacién de escritura inmediata (write through). Si se difiere la escrivura hasta después de La lim- pieza total de la Iinea de memoria cache, Ia operaciGn se define como una operaci6n de eseritura diferida (write back). Aunque el elemento de datos no se encuentre en la me- moria cache cuando se produce el proceso de escritura, existe la posibilidad de ingresar en Ja memoria cache el bloque que contiene la palabra y actualizarlo, lo que se conoce como un proceso de asignacién y eseritura (write-allocate), o de actualizarlo en memo- ria principal sin involucrar en el proceso a la memoria cache, lo que se identifica como una eseritura sin asignaci6n (write-no-allocate). Algunas computadoras oftecen memoria cache separada para instrucciones y datos, co- nocida como memoria cacke fraccionada, fo que representa una variante de la arquitec- tura Harvard, en Ja que las instrucciones y tos datos se almacenan en secciones diferentes de la memoria, Dado que las lineas correspondientes a las instrucciones nunca pueden es- tar sucias (a menos que el e6digo sea del tipo automodificable, lo que no suele ser frecuen- te), la memoria cache para tas instrucciones es més simple que la memoria cache para los datos, En apoyo de esta configuracién, los estudios realizados muestran que la mayor par- te del teifico de memoria sale de la memoria principal. Estadisticamente, hay solo una ope- racién de escritura de memoria por cada cuatro operaciones de lectura, Esta afirmacién se justifica si se piensa que las instrucciones que se ejecutan en un programa solo se leen des- de la memoria principal y no se escriben nunca excepto cuando lo hace el cargador del sis- tema, Ademés, las operaciones normalmente involucran ta lectura de dos operandos y el al- ‘macenamiento de un tinico resultado. lo que significa que hay dos operaciones de lectura por cada operacién de escritura. Una memoria cache que solo maneje lecturas y que trans- fiera las escrituras directamente a la memoria principal también puede ser efectiva, aunque ‘no tan efectiva como una memoria cache totalmente funcional. No es sencillo definie cudtes son las mejores técnicas de lectura y escritura de una me- moria cache. La organizacién de la memoria cache se optimiza para cada arquitectura de computadora y para la combinacidn de programas que la computadora ejecuta. La orga- nizacién y los tamafios de la memoria cache se determinan normalmente a partir de los resultados de procesos de simulacién que verifican la naturaleza del wafico de memoria. 7.6.5 Tasas de acierto y tiempos de acceso Dos valores que caracterizan el rendimiento de una memoria cache son la tasa de acier- tos y el tiempo efectivo de acceso. La tasa de aciertos se calcula dividiendo la cantidad de veces en que se han encontrado efectivamente en Ia memoria cache las palabras reque- ridas por el total de referencias a memoria. Et tiempo efectivo de acceso se calcula di diendo el tiempo total consumido en el acceso a memoria (sumando los tiempos de acce- so de la memoria principal y 1a memoria cache) por el mimero total de referencias a memoria, Las ecuaciones correspondientes son las siguientes: (256 _PRINcIPiS DE ARGUITECTURA DE COMPUTADORAS: ‘Tasa de acienos = N° de-veces que Ia palabra buscada esté en cache, N° total de accesos a memoria (N* aciertos)(Tiempo por acierto) + (N° fallas) (Tiempo por fala) ‘Tiempo efectivo de acceso = re 1N* total de accesos a memoria Considérese el cAleulo de la tasa de aciertos y del tiempo efectivo de acceso de un pro- grama que se ejecula en una computadora en la que se dispone de una memoria cache de asignacién directa, con cuatro lineas de 16 palabras. La distribucién fisica de la memoria cache y de la memoria principal se muestran en la figura 7.17. El tiempo de acceso a la memoria cache es de 80 ns, en tanto que el tiempo requerido para transferir un bloque desde la memoria principal a la memoria cacke es de 2.500 ns, Se supone que Ia arqui- tectura utiliza carga inmediata y que la memoria cache estd vacia en el instante inicial. Se ejecuta un programa desde la posicién de memoria 48 hasta la 95, tras lo cual el progra~ ma repite 10 veces un azo entre lus direcciones 15 y 31 antes de detenerse, Linea 0 Bloqued | 0-15 Linea 1 Bloque 1 | 16-31 Linea 2 Bloque 2 | 32-47 Linea 3 | Bloque 3 | 48-63 Cache Bloque4 | 64-79 Bloque 5 | 80-95 Memoria principal Figura 7.17 « Un ejemplo de una memoria cache de asignacién directa En la figura 7.18 se registran los eventos que suceden durante Ja ejecucién del programa. Dado que la memoria al comienzo se encuentra vacia, la primera instruccién a ejecutar- se provoca una falla, Se produce entonces una falla en la direcci6n 48, fo que provoca la carga del bloque numero 3 de memoria principal en la linea ndmero 3 de la memoria ca- che, El primer acceso a memoria tarda 2.500 ns en completarse. Como se utiliza el pro- cedimiento de carga inmediata, la palabra que provocé la falla en la direccién 48 se trans- fiere ala CPU mientras se carga et resto de! bloque en la linea de memoria cache. El préximo evento contiene 15 aciertos, entre las direcciones 49 y 63. En forma similar, se registran los eventos que siguen, y se obtiene como resultado un total de 213 aciertos y 5 fallas. El numero total de accesos es de 213 + 5 = 218. La tasa de aciertes y el tiempo. efectivo de acceso se calculan en la forma siguiente: capiyuio 7+ Memonta 267 213 97.79% 28 “Tiempo efectivo de acceso = 2/3* 80 ns *$*2:500 95. «136 ns 218 Si bien la tasa de aciertos es del 97,7%. el tiempo efectivo de acceso del modelo usado en el ejemplo es, aproximadamente, un 75% mayor que el tiempo de acceso propio de la memoria cache. Esto se debe i] tiempo apreciablemente largo que se pierde cuando se tiene acceso a un bloque desde la memoria principal Evento | Posicién] Tiempo Comentario 1 Falla 48 | 2500ns Bloque de memoria 3 a ranura de memoria cache 3 15 Aciertos | 49-63 | 80nsx15=1200ns UFalla 64 | 2500ns Bloque de memoria 4 a ranura de memoria cache 0 15 Aciestos | 65-79 | 80nsx15=1200ns UFalla 80 | 2500ns Bloque de memoria 5 a ranura de memoria cache 1 15 Aciertos | 81-95 | 80nsx15=1200ns Cras |15 | 2500s Bloque de memoria 0 a ranura de memoria cache O {Falla [16 | 2500ns Blogue de memoria 1 ranura de memoria cachet 15 Aciertos | 17-31 | 80nsx1$=1200as DAcientos | 15 80nsx9=720ns ‘Ultimas nueve iteraciones de] 1oz0 144 Acieros| 16-31 | SOasx144=1i.5; ‘Total de aciertas = 213 Total de fallas = 5 Figura 7.18 » Tabla de eventos para un programa que se ejecuta sobre una arqultectura con una memoria cache de asignacion directa. 7.6.6 Memorias cache multinivel ‘A medida que fue creciendo el tamafio de ias circuitos integrados de silicio, asi como la den- sidad de integracién de los elementos que lo componen, se hizo posible incluir la memoria cache en el mismo circnito integrado que el procesador. Dado que la velocidad de procesa- miento interna del circuito integrado es mayor que la velocidad de comunicacién entre cir- cuitos integrados, una memoria cache integrada en el mismo circuito que el procesador pue- de ser mas répida que una memoria cache externa al circuito procesador. No obstante, la tecnologia actual no ofrece Ia densidad suficiente como para colocar toda la memoria cache en el mismo circuito integrado del procesador. Por tal motivo, se han desarrollado memo- ias cache de maltiples niveles en las cuales el nivel mds répido, L1, se integra en el mis- ‘mo circuito integrado que contiene al procesador, en tanto que el resto de la memoria se.co- oca fuera de dicho circuito integrado. Las memorias cache de datos e instrucciones se ‘mantienen separadas en el nivel L, en tanto que en el nivel L2 se implementan unificadas, To que significa que la misma memoria contiene tanto datos como instrucciones. (268_ pRINCIPIOS DE ARQUITECTURA DE COMPUTADORAS Con el objeto de calcular la tasa de aciertos y el tiempo efective de acceso en una me- moria cache muhinivel, deben analizarse los aciertos y las fallas de ambas memorias. Las ecuaciones siguientes indican la tasa de acierios general y el tiempo efeectivo de acceso general para una memoria cache de dos niveles, 4, es la tasu de aciertos de la memoria cache integrada al procesador, H, es la tasa de aciertos de la memoria externa y Ty €5 ¢t tiempo efectivo de acceso del conjunto. El método puede extenderse a cualquier nimero de niveles. H, = ih? de veces en que la palabra buscada esté en la memoria cache integrada) ‘ {N? total de accesos a memoria) 1H, ~ GN” de veces en que la palabra buseada esta en la memoria cache externa) (N" de veces en que Ia palabra buscada no estf en Ia memoria integrada) Tye = (0N° de aciertos de memoria integrada){ Tiempo de aciento de la memoria integrada) + (N* de aciertos de la memoria extemna)(Tiempo de acierto de la memoria externa) + (N? de fallas de 1a memoria externa) (Tiempo de falla de la memoria externa)] 1 Némero total de accesos a memoria 7.6.7 Administracin de la memoria cache La administracién de la memoria cache presenta un problema complejo para el programa- dor de sistemas. Si una posici6n de memoria determinada representa un elemento de en- trada-salida, como puede ocurrir en los sistemas de entrada-salida mapeada en memoria, no deberfa aparecer en la memoria cache bajo ningtin punto de vista, Si se la coloca en la memoria cacke, el valor en el elemento de entrada-satida puede cambiar, y ese cambio puede no verse reflejado en el valor del dato almacenado en la memoria cache, Esto se co- noce como “informacién rancia: la copia de los datos almacenada en la memoria cache es vieja comparada con el valor presente en la memoria principal. De la misma forma, en ambientes multiprocesadores de memoria compartida (véase el capitulo 10), en los que mis de un procesador puede acceder a la misma memoria principal, tanto el valor almace- nado en la memoria cache como el valor almacenado en la memoria principal pueden vol- verse rancios debido a ia actividad de uno 0 més de uno de los procesadores del sistema, Como minimo, la memoria cache de un ambiente multiprocesador deberfa implementar tuna politica de escritura inmediata para aquellas Ifneas de la memoria cache asignadas a posiciones de memoria compartidas, Por estas razones, y por otras, Ia mayoria de las arquitecturas modernas admiten que el programador del sistema tenga algdn grado de control sobre la memoria cache. Por ejemplo, la memoria cache del procesador Motorola PPC 601, que normalmente utiliza, una politica de escritura diferida (write back), puede usarse con el formato de escritura inmediata sobre determinadas lineas. Ouras instrucciones permiten especificar lineas co- mo no almacenables en memoria cache, 0 permiten marcarlas como invalidas, como cargadas 0 come eliminadas. capfruyo 7 + memoria 269 Internamente a la memoria cache, las politicas de reemplazo (para memorias asocia- tivas y asociativas por conjuntos) necesitan ser implementadas eficientemente. Una im- plementacién eficiente del algoritme de reemplazo LRU se logra con el Algoritmo Neat Little (origen desconocido). Siguiendo con el ejemplo de a memoria cache utilizada en la secci6n 7.6.5, se construye una matriz en la que cada linea de Ia memoria cache se re- presenta por una fila y una columna, como lo muestra la figura 7.19. El contenido inicial de todas las celdas es 0, Cada vez que se accede a una linea, se escribe un | en cada cel- da de la fila de la tabla que corresponde a esa linea. Luego se completan con ceros todas las celdas de la columna correspondiente a esa linea. Cada vez que se requiere una Ifnea, Ja fila que solo contiene ceros es 1a mds antigua y, por consiguiente, es la préxima en ser utilizada, Al comienzo del proceso, hay més de una fila que contiene solo ceros, por lo que hard falta disefiar un mecanismo de desempate. En este caso, un método que funcio- na, que se utilizard en el resto det ejemplo, es el que elige la primera fila que tenga todas las celdas en 0. El ejemplo de la figura 7,19 muestra 1a configuracién de la matriz. a medida que los bloques se acceden en el orden 0, 2, 3, 1,5, 4. Inicialmente, la matriz. se completa con ce- ros. Luego de una referencia al bloque 0, la fila comespondiente a dicho bloque se llena con unos y la columna correspondiente se ena con ceros. En este ejemplo, el bloque 0 se coloca en la Kinga 0, pero en otros casos, podria aparecer en cualquier otra ubicacién. I proceso sigue hasta que, al final de la secuencia 0, 2, 3, 1, se han utilizado todas las If- reas de la memoria cache. Con el objeto de ingresar el bloque siguiente (bloque 5) a ‘a memoria cache, deberd liberarse primero alguna de las Iineas. La fila correspondiente a la Iinea 0 solo contiene ceros, por lo que esta linea es la menos recientemente usada. Et bloque 5 se ingresa en la linea 0. En forma similar, cuando se carga en la memoria cache 1 bloque 4, Ia linea que se escribe es la nimero 2. Linea de cache O12 3 o123 0123 sofopopofo) offi] epyep Eifefoyefo] tfofefofo] «{olofelo %fo[ofofo] 2fofofofo] zfafayo[y £s(ofofolo alofofolo| 3[o[ofole Tnicial ——-Accesalbloque:0 0.2 o123 O123 O123 5123 ee eer ey bstorer ofofolo] aa fofiya| sfofoli[s| sfofefoha aAa{afefo] zx Tofe[o] 2fefofoyo] 2a]ifolr alti }o] sf fof fe] sfofoli fo] sfofofofo} 023 O2at O23515 023,154 Figura 7.19 © Secuencia de funcionamiento del algoritmo Neat Little de reemplaza LAU para una memoria ‘cache con cvatroIineas. El acceso a los bloques de memoria principal se realiza ‘ena secuencia 0, 2,3, 1.5, 4. 270_PAMC\PI0 DE AROUTTECTURA DE COMPUTADORAS 7.7 Memoria virtual ‘A pesar de los enormes avances en la creacién de memorias cada vez mayores en espa- cios cada vez menores, Ja memoria de una computadora parece ser algo asi como el es- pacio de un armario, ya que por muy grande que sea nunca es suficiente, Un método eco- némico para expandir el tamafo de la memoria principal es aumentar dicho tamafio con espacio en disco, lo que define uno de los aspectos de la memoria virtual que se analiza en esta seccién. El almacenamiento en disco aparece muy cerca del fondo de la estructu- ra jerdrquica de memoria, con un costo por bit menor que el de la memoria principal; por este motivo, es razonabte usar almacenamiento en disco para contener aquellas porcio- nes de un programa a de una seccidn de datos que no cabe integramente en la memoria principal. En un aspecto diferente de la memoria virtual, el uso de la memoria logra gran flexibilidad con el manejo de esquemas comptejos de asignacién de memoria. Estos dos aspectos de la memoria virtual se analizan a continuacién, 7.7.1 Superposiciones (overlays) Una primera aproximacién a la utilizacién de almacenamiento en disco para aumentar el tamaiio de la memoria principal hace uso de superposiciones. En las superposiciones, un programa en cjecucién sobrescribe su propio cédigo con otro cédigo, en ta medida de lo necesario. En este escenario, el programador tiene la responsabilidad de administrar el uso de ta memoria, La figura 7.20 muestra un programa que contiene una rutina principal y tres subrutinas A, B y C. La memoria fisica es menor que el tamafio del programa pero mayor que cualquier rutina individual. Una estrategia que permite manejar la memoria usando su- perposiciones consiste en modificar el programa para que pueda Mevar el control de cud- les son las subrutinas que estan en memoria y para que pueda leer el cédigo de la subnut naa medida que la requiera. En general, la rutina principal sirve como elemento de control (driver) del sistema en su conjunto. El controlador permanece residente en memoria mien tras fas demas rutinas se cargan y se descargan a medida que se hace necesario. La figura 7.20 muestra un grafico de partictones creado para el programa del ejem- plo. El gréfico de particiones identifica cudtes de las rutinas pueden superponerse a otras sobre [a base de los distintos lamados entre las subrutinas, Para este ejemplo, la rutina Principal se encuentra siempre presente y supervisa al subconjunto de subrutinas que se encuentra en memoria. Las subrutinas B y C se mantienen en la misma partici6n porque Binvoca a C, pero la subrutina A tiene una particién propia porque solo Ia invoca el pro- grama principal. La particién puede superponerse entonces sobre la particién 1, en tan- to que la particién 1 puede superponerse sobre la particién 0. Si bien este método funcionard correctamente en una variedad de situaciones, una so- lucién més prolija seria la de permitir que el sistema operativo administre las particiones. No obstante, cuando se carga més de un programa en memoria, las rutinas que manejan las superposiciones no pueden funcionar sin interacturar con el sistema operativo para carina 7 + MEMOWA 271 Programa compilado Memoria fisica lRuxina prinipal Menor ‘Subrutina A famatio que el programa Subrutina B Grifico de partcién Subrucina C Figura 7.20 » Gréfico de particiones de un programa con una rutina principal y tres subrutinas, determinar cudles son las porciones de memoria disponibles. Este escenario introduce un elevado nivel de complejidad en el manejo del proceso de superposiciGn, debido a que ‘ocasiona una fuerte interacci6n entre el sistema operative y cada programa, El método de paginacién, que se describe en Ta seccién siguiente, es una alternativa, ya que puede ser manejado por el sistema operative, 7.7.2 Paginacién El proceso de paginacién es una forma de superposiciGn automética administrada por el sistema operativo. El espacio de direcciones se divide en bloques de igual tamafio, llama dos paginas. Las péginas tienen normalmente un tamaiio que es potencia de dos. como, por ejemplo, 2°° = 1.024 bytes. El proceso de paginacién hace que la memoria fisica pa- rezca mayot de lo que es en realidad, por medio de la asignacién del espacio de direccio- nes de la memoria fisica a alguna porcién del espacio de direcciones de la memoria vir~ tual, el que normalmente se encuentra almacenado en un disco. La figura 7.21 ilustra un esquema de asignacién de memoria virtual, donde ocho paginas virtuales son asignadas a cuatro marcos de pagina. La implementacién de la memoria virtual debe manejar referencias que se realizan fuera de la porci6n de espacio virtual asignada al espacio fisico. La siguiente secuenc de eventos ocurre generalmente cuando se hace referencia a una posicién de memoria virtual que no esté en la memoria fisica, lo que se denomina falla de pagina. 1. Se identifica uno de los marcos para su sobreescritura. El contenido del marco se escribe en memoria secundaria si hubiese habido cambios, para poder rescatar los, cambios antes de sobrescribir el marco. 272. pnuwcipios os AROUTTEETURA DE COMPUTADORAS Direcciones vinwales Memoria vinual 06-1023 [| Piginao Direcciones 1024-2047 | “Pagina ¥ Memoria fisica icas 2048-3071 | Pagina 2 Marcoue pigina 0] 0- 1023 3072-4095 | Pagina 3 ‘Marcode péigina 1] 1024 2087 4096-5119 | Pagina 4 ‘Marce de pigina 2 | 2048 - 3071 5120-6143 | Pagina $ Marco de pigina 3} 3072 4095 6144-7167 | Pagina 6 7168-8191 | Pagina 7 Figura 7.21 » Esquema dé asignacién entre una memaria vital y una memoria tsica. 2. Se ubica en la memoria secundaria la pagina virtual a la que se desea acceder, lit que se escribe en memoria fisica, en el marco determinado en el punto 1. 3. Se actualiza la tabla de paginas (véase la figura 7.22) para asignar la nueva secciGn de memoria virtual a la memoria fisica. 4, Se contimia con Ia ejecucién, Para la memoria virtual de la figura 7.21, existen 2 = 8192 posiciones virtuales, por lo que el programa en ejecucién debe generar direcciones de 13 bits, las que se interpretan como un numero de pagina de 3 bits y un desplazamiento, dentro de la pigina, de 1Obits. Dadoel ni- mero de pagina de 3 bits, se debe determinar si la pégina se encuentra en uno de los cuatro marcos o si se encuentra en memoria secundaria, Con el objeto de llevar el control de las pa- ginas que estén en la memoria fisica, se debe administrar una tabla de paginas, como la que se ilustra en Ia figura 7.22, y que corresponde a la asignaci6n de la figura 7.21. La tabla de paginas tiene tantas entradas como paginas virtuales existen, El bit de pre- sencia indica si la pagina correspondiente esté 0 no en memoria fisica. El campo de direc- cién de disco es un puntero a la posicién en la que puede encontrarse ia pagina correspon- diente en una unidad de disco. El sistema operativo normalmente administra los accesos a disco, por lo tanto, Ia tabla de paginas solo requiere mantener las direcciones de disco que el sistema operativo asigna a los bloques cuando el sistema arranca. Las direcciones de dis Co Normalmente no cambian durante el curso del célculo, El campo de marco de pagina in- dica cudl de los marcos de pagina fisica contiene una pagina virtual, si la pagina se encuen- tra en memoria fisica, Los campos de marco de pigina son invilidos para aquellas paginas que no se encuentran en memoria, y que se indican con “xx” en la figura 7.22. Con el objeto de traducir una direccién viral en una direceién fisica, se toman los dos bits del marco de la tabla de paginas y se agregan a la izquierda del desplazamiento de 10 bits, to que genera la direcci6n fisica de la palabra referida. Considérese la situacién de la figura 7.23, en la que se hace referencia a la direccién virtual 1 0011 0100-0101. Los tres capiruio 7 + wemonia 273 Bit de presencia Maren de pagina Pégina # DirecciOn de disco y (1001011100 00 TIVOTTTOO1O [xx TOHOO10N | OF Bit de presencia: 0: La pagina no est en la memoria fisica wade oe -]>J2|-TeI-T>]-] <= ‘o00TOOT TTT fax 1h La pling estén Ia O1orToOTOT| TT Toio0T 1001 | xx 06110101100 [xx ‘1010007011 [1 Figura 7.22 Tabla de paginas para una memoria virtual. bits més significativos de la direccién virtual (100) identifican Ja pSgina. La palabra bina- ria que aparece en el campo de marcos de pagina (11) se agrega a la izquierda del despla- zamiento de 10 bits (11 0100 0101), con io que Ia direcci6n resultante (1111 0100 0101) indica cual es la direccién de memoria fisica que contiene la palabra referida. El tiempo que requiere la carga de un programa en memoria puede ser relativamente largo. De hecho, puede ocurtir que el programa entero no se ejecute nunca, por Io tanto, el tiempo requerido para cargar el programa desde un disco a memoria puede reducirse si se carga solo la porcién del programa que se requiere en un determinado intervalo de tiempo. El esquema de paginacién por demanda no carga ninguna pagina en memoria hasta que no se produzca una falla de paginaciGn. Luego de tener un programa ejecutén- dose durante un cierto tiempo, la memoria fisica contiene solo aquellas paginas que es- tn siendo usadus (e! conjunto de trabajo), por 1o que la paginaci6n por demanda no tie- ne un impacto significative sobre programas que funcionan durante largo tiempo. Pfgina _Despluzamiente 100]1191000 101] Direecisn virtual : 3 i 3 0 ‘i007 OT 100 00 11101770010 | x TOITOOIONIT | OF ‘GOOOTOOTITA |x ‘orortioo101 {1 Toroor i007 | Xx 10110101 160 | xx 7 [orore0gror | 10 “Tabla de piginas 1101000108 Figura 7.23 » Traduccién de una dlreccién virtual hacia una direccién fisica. 274 PRINCIPIOS DE ARQUITECTURA DE COMPUTADORAS 0 [0 [ 01001011100 | xx 0 [G] 01001011100] xx 117 [ior 6010 [00 1 [7 [itrornv0010 [00] 2 [o | rorroonorns | xx 2 [1 [rormoorornt [or | 3 [0] 0001001111 [xx] Luego 3 a [0000100111 | xx} Luego 4 [eo [ororrtoor08 | xa] 4° fle 4 POT ororT1o0101 | xx | & fallaen 5 [efroroort1001 [xx] 5 ToL roroorr 1001 [xx] PE? 6 [0 | cor1o101 100 xx 6 [0 [ 0110101100] xx 7 [o [ororoonror7 [xx 7 fo fororooo101 [xe 0 [OT 01001011100 | xx 0 [0 [or001011 100 [x 1 [7 [oroor0 [00 1 [0 [aire tr0010 [ax af Prono for 2 [1 [poniooron | or 3 [1 [ooo 007111 | 10) eral en 3 [1 | coomtootiT [70] 4 [0 [OrOr 700101 [35] péina v3 + { Lf 01011100701 | TH 5 [0 [roroorrs00r [xx 5 {7 { 1orcorti001 [00 6 [0 [oorror0r100 [xx 6 {0 [ 00110101700 | xx 7 [0 [orarooor0n | xx 7 [| evoro0o1017 [xx Figura 7.24 » La configuracién de la abla de péginas cambia con fa ejecucién de un programa, Inicialmente, {a tabla esta vacia. En la configuraci6n final, hay cuatro paginas en la memoria sica Considérese nuevamente la asignacién de memoria de la figura 7.21. El tamatio del espa- cio de direcciones virtuales es de 2'* palabras, en tanto que el espacio de direcciones fisicas es de 2! palabras. Existen ocho paginas de 2" palabras cada una, Se supone que la memo- fia se encuentra vacfa en su estado inicial y que se utiliza paginacién por demanda para un programa que se ejecuta entre las direcciones 1030 y 5300. La secuencia de ejecucién accederd a las paginas 1, 2, 3, 4 y 5, en ese orden. La politica de reemplazo de paginas es FIFO (first in first out, primero que entra, primero que sale). La figura 7.24 ilustra Ia con- figuracion de la tabla de péginas a medida que se avanza en la ejecuci6n. El primer acceso memoria generard una falla de pagina en la direccién virtual 1030, que se encuentra en la pagina 1. La pagina se trae hacia la memoria fisica, y se actualiza Ia tabla de paginas con el bit de validez y el campo de marco de paginas correspondientes. Se continua la ejecucién, hasta que se requiere cargar la pagina 5, la que fuerza la sulida de la pagina | debido ala politica de reemplazo utilizada, La configuracién final de ta tabla de paginas que se mues- tra en la figura 7.24 es la que se obtiene luego del acceso a la posicién 5300. 7.7.3 Segmentacién De acuerdo con el andlisis realizado hasta e! momento, la memoria virtual es unidimen- sional, entendiéndose con este concepto que las direcciones pueden crecer hacia arriba 0 hacia abajo. La segmentacién divide el espacio de direcciones en segmentos que pueden ser de tamafio arbiteario. Cada segmento tiene su propio espacio unidimensional de di- caviruno 7 + memoria 275 recciones. Esto permite mantener tablas, pilas y otras estructuras de datos como entida- des légicas que crecen sin entrar en conflicto unas con otras. La segmentacién admite es- quemas de proteccién, de modo tal que un segmento determinado pueda ser definido como “de lectura solamente” para evitar cambios, 0 “de ejecucién solamente” para evi- tar que sea copiado sin autorizaci6n, Este esquema también impide que los usuarios in- tenten escribir datos en zonas de programa. Cuando se utiliza Iu segmentacién en fa memoria virtual, e] tamaio del espacio fisico de direcciones de cada segmento puede ser muy grande, por lo que la memoria fisica a dedicar a cada segmento no se define hasta que no se la necesita. La figura 7.25 ilustra una memoria segmentada, El cédigo ejecutable de un programa procesador de texto se encuentra cargado en el segmento 0. Este segmento se marca co- mo “de ejecucién solamente” y se protege contra escrituras. En el segmento 1 se encuen- tra el espacio de datos del usuario 0, por Jo que se 1o marca como de lectura y escritura exclusivo para cl usuario 0, de modo tal que ningain otro usuario pueda tener acceso al érea, El segmento 2 se utiliza para el espacio de datos del usuario 1, por lo que se lo iden- tifica como de lectura y escritura para el usuario 1. Ambos usuurios, 0 y 1, pueden utili- zar el mismo procesador de texto, caso en el cual el cédigo del segmento 0 se comparte, pero cada usuario tiene su propio espacio de datos. Espacio de direcciones Segmento #0, cupad para el cédigo del solo para ¢jecucién procesador de palabra ‘Segmento #1, 0 Espacio de datos de lecturwescritura para.el usuario #0 ‘por parte del usuario #0 Libre Segmento #2 ‘Ocupade, Espacio de datos de leewra/esertura ZEEE | Benacio ds dee por parte del usuario #1 Libre p Sin usar Figura 7.25 Una memoria segmentada permite que dos usuarios compartan el mismo procesador de texto. Segmentacién no es lo mismo que paginacién, Con el procedimiento de paginacién, el usuario no ve la superposicién automatica. Con la segmentaci6n, el usuario conoce dénde s¢ encuentran Jos limites del segmento. El sistema operativo administra la proteccién y la asignacién, en consecuencia, el usuario comin no necesita tratar con los aspectos admi- nistrativos, No obstante, un usuario mas sofisticado, como un programador de computa- doras, puede encontrarse frecuentemente con el tema, tal como ocurre cuando un puntero ‘2 un arreglo intenta superar los limites de un segmento por culpa de un programa errante. Con el objeto de determinar una direcci6n en una memoria segmentada, el programa debe especificar un ntimero de segmento y una direceién dentro del mismo, El sistema operativo traduce la direcci6n segmentada del usuario en una direcci6n fisica. usuari 276_PRINEIPIOS DE ARQUTTECTURA DE COMPUTADORAS. 7.7.4 Fragmentacién Cuando se enciende una computadora, pasa por una secuencia de inicializaciGn que car- ga el sistema operativo en memoria. Una porcién del espacio de direcciones puede estar reservada para los dispositivos de entrada-salida, por lo que el resto queda disponible pa- ta ser usado por el sistema operativo. Esta porcidn remanente del espacio de direcciones puede estar solo parcialmente completa con memoria fisica: el resto comprende una z0- na muerta, a la que nunca podré accederse por cuanto no hay electrSnica que responda a las direcciones de esa zona muerta, La figura 7.26a ilustra el estado de una memoria inmediatamente antes de la secuencia de inicializacién. El “Srea libre” es la zona de memoria de que dispone el sistema operativo para la carga y ejecucién de programas. Durante el curso de la operacion, se cargan y se eje- cutan programas de distintos tamafios. Cuando un programa finaliza su ejecucién, el espa- io de memoria asignado al mismo se devuelve al sistema operativo. A medida que se pro- duce la carga y ejecucién de los programas, el rea libre se va subdividiendo en un conjunto. de pequefias areas, ninguna de las cuales tiene el tamafio suficiente como para contener un programa, salvo que algunas o todas las dreas libres se combinen en un solo sector de tama- fio mayor. Este problema, conocido como fragmentacién, se contrapone con el criterio de la segmentacién, dado que los segmentos deben aparecer asignados dentro de un tnico es- pacio lineal de direcciones. ‘Sistema Sistema Sisterna opera an coe Programa A. Programa A Area libre ‘Area libre Progam 8 Treeona Area libre ‘Area libre ‘Area libre Programa C Programa C fe | LS] insite Espacio para Es entrada salidn entrada centradaesalida @ wo © Figura 7.26 = (a) Area libre de memoria luego ds {a iniciatizacion, (b) luego de la fregmentaci6n, (c) luego de ta fusion de dreas libres, La figura 7.26b ifustra el problema de la fragmentacién. Cuando el sistema operativo ne- cesita encontrar un drea libre to suficientemente grande como para contener un progra- ‘ma, es muy poco probable que encuentre algo de tamaiio exacto, En general, el drea libre capirung 7+ MEMORIA 277 serd mayor que el tamaiio del programa, 10 que produce como efecto la subdivisién de las ‘reas libres en areas més pequefias, en la medida que ios tamaiios de los programas no coincidan con los tamafios de las areas libres. Un método de asignacién de programas a esas dreas libres consiste en la técnica del primer lugar libre (first fi), en el cual se ana- lizan las dreas libres hasta que aparezca una cuyo tamaiio sea suficiente como para satis- facer las necesidades del programa. Otro método es el del mejor lugar libre (best fit), en el cual se utiliza el drea libre que desaproveche la menor cantidud de espacio. Este segun- do método aprovecha mejor el espacio de memoria que el anterior, pero tiene como des- ventaja el mayor tiempo requerido para revisar todas las éreas libres, Independientemente det algoritmo utilizado, el proceso de asignacién de programas 0 datos en reas libres tiende a producir espacios libres menores (véase la obra de D. Knuth). Esto hace diffcil poder encontrar un area libre de direcciones contiguas lo sufi- cientemente grande como para satisfacer las necesidades del sistema operative. Una aproximaci6n a la solucién det problema unifica areas libres adyacentes en un tinico es- pacio libre de mayor tamaiio. En el ejemplo de ta figura 7.26b, las dos dreas libres adya- centes se combinan en un dnico espacio libre, como fo muestra la figura 7.26¢. 7.7.5 Memoria virtual versus memoria cache La memoria virtual se divide en pAginas; estas son relativamente grandes cuando se las compara con los bloques de memoria cache, los que no suelen tener un tamafio mayor a algunas palabras. La memoria cache mamiene copias de los bloques mds fuertemente usados, los que tambign se encuentran en memoria principal y en la imagen de memoria virtual que se almacena en un disco magnético. Cuando en una computadora que tiene tanto memoria cache como memoria viral se hace referencia a memoria, la electrénica de la memoria cache encuentra dicha referencia primero y satisface el requerimiento si la palabra esté efectivamente en la memoria cache. Si la palabra requerida no est en la me- moria cache, el bloque que la contiene se transfiere desde ta memoria principal hacia la memoria cache y se utiliza ta palabra de referencia desde In memoria cache. Si la pagina que contiene la palabra no esté en la memoria principal, se la carga en memoria principal desde una unidad de disco, tras lo cual se transfiere el bloque que contiene la palabra a la memoria cache para permitir satisfacer ta referencia, El uso de memoria virtual puede provocar algunas interacciones intrincadas con la memoria cache. Por ejemplo, dado que en un mismo momento puede haber més de un programa utilizando la memoria cache y la memoria virtual, las estadisticas de tiempos de ejecucién para dos procesos de un mismo programa ejecutindose sobre el mismo con- junto de datos pueden dar resultados diferentes. Asimismo, cuando se hace necesario reescribir a memoria principal un bloque sucio, es posible que el marco de pagina que contenfa Ia pigina virtual correspondiente ya haya sido eliminado. Esto obliga a cargar ‘uevamente la pagina en la memoria principal desde la memoria secundaria, con el obje- to de limpiar el bloque sucio desde la memoria cache hacia la memoria principal. ‘778 PRINGIPIOS DE ARQUITECTURA DE COMPUTADORAS 7.7.6 El buffer de traduccion anticipada (Translation Lookaside Butter - TLB) El mecanismo de memoria virtual es una solucién efegante al problema del acceso a progr mas y archivos de datos de gran tamafio, pero trae asociado un inconveniente significativo, Pa- raacceder a un valor almacenado en memoria se requieren, al menos, dos referencias a memo- ria. Una referencia comresponde a la tabla de paginas para encontrar el marco de p§gina fisica, en tanto que la otra referencia corresponde al valor real de! dato, Una solucién a este problema se logra a través de un buffer de traduccién anticipada (TLB, translation lookaside buffer). EI TLB consiste en una memoria asociativa pequefia ubicada generalmente dentro de 1a CPU, la que almacena las traducciones més recientes realizadas desde la memoria vir- tual a Jas direcciones fisicas. La primera vez que se traduce una determinada direcci6n virtual hacia una direccién fisica, esta taduecién se almacena en el TLB. Cada vez que la CPU genera una direccién virtual, se analiza el contenido del TLB para ver si contie- ne la direcci6n generada, Si el némero de pagina virtual existe, ef TLB devuelve el nd- mero de pagina fisica, el que puede ser inmediatamemte enviado a la memoria principal (aun cuando, normalmente, la memoria cache capturaria la referencia a memoria princi- pal satisfaciendo el requerimiento desde la misma). La figura 7.27 ilustra un modelo de buffer de traduccién anticipada. El elemento con- tiene 8 entradas de un sistema de 32 paginas y 16 marcos de pagina, El campo de pagina virtual tiene 5 bits porque hay 2° = 32 paginas. Asimismo, el campo de pagina fisica tie ne 4 bits debido a que hay 2*= 16 marcos de pagina, Nimero de Nilmera de Valider, pagina virtual pagina fisica g1001 1100 tout 1001 o0110 1 1 0 @ Toe i{ otro of 1 9 Figura 7.27 In butter de traduociGn anticipada que contiene 8 entradas de un sistema ce 32 péginas virtuales y 16 marcos de pagina. Las fallas del TLB se manejan en forma similar a las demas fallas de memoria, Cuan- do se produce una falta en el buffer de traducci6n, se envia Ia direccién virtual al siste- ma de memoria virtual, donde se la busca en la tabla de paginas de la memoria princi- pal. Si se la encuentra en la tabla de paginas, se actualiza e} TLB, para que una proxima referencia a esa pAgina no se convierta en una nueva falta de TLB. caphruio 7 » mewonia 279 7.8 Temas avanzados Esta seeci6n analiza dos temas de importancia practica en el disefio de sistemas de memo- ria: los Arboles decodificadores y las memorias direccionables por contenido. Los prime- 105 se hacen necesarios en memorias de gran tamaiio, las dhtimas, en memorias cache as0- ciativas, por ejemplo un TLB, en otras situaciones en las que deban realizarse bisquedas de datos en funcién de su valor mAs que en funcién del lugar en el que se encuentran al- macenados. 7.8.1 Arboles decodificadores Los circuitas decodificadores (véase el apéndice A) no resultan practicos cuando se re- quieren grandes tamafios debido a limitaciones practicas en la cantidad de entradas y sa- lidas, Bt circuito decodificador de la figuea 7.28 ilustra el problema. Para N bits de direc- ciones, cada compuerta Y requiere N entradas. Cada linea de direccién debe enviarse a2” compuertas Y. La profundidad del circuito es de dos niveles de compuertas. 4% dy 4 “4 a Figura 7.28 « Un decodiicadar convencional. El circuito que se muestra en la figura 7.29a representa un 4rbol decodificador, que re- duce la cantidad de entradas y salidas por medio del aumento del ndimero de niveles 16- gicos del circuito. En este caso, cada compuerta Y tiene F entradas (en este ejemplo, F = 2), y solo la linea de direcciones que se ingresa en el nivel mds alejado (a, en este caso) se envia a 2%/2 compuertas Y. El ntimero de niveles ha sido incrementado a fog,(2"). El gran requerimiento de salidas en los bits de direcciones menos significativos puede ser un problema, pero se soluciona en forma sencilla, sin incrementar la cantidad de niveles del circuito, por medido del agregaco de ampliticadores de corriente (buffers) en los pri- meros niveles, segdn se muestra en la figura 7.29b. ‘280 _pnuncipiog DE ARQUITECTURA CE COMPUTADORAS. Por consiguiente, la cantidad de niveles de un érbol decodificador de direcciones de me- moria es de log ,(2"), la cantidad de Iineas de entrada es 2", y la cantidad maxima de en- tradas y salidas a cada compuerta légica dentro del decodificador es F. Amplificadores {>— | de comriente de salida Dt: cS" oP iD oP 7 ab HI 4 gt { 4, el ds 7 a as a 4s oe: Leo Re: @ ® 10! decoditicadar con compuertas de dos entradas y dos ‘cargas en las satidas, 7.8.2 Decodificadores para memorias de acceso aleatorio muy grandes Cuando se trabaja con memorias de acceso aleatorio de gran tamafio, y sino se emplea el esquema de decodificacién 2-1/2D, se utilizan arboles decodificadores con el objeto de mantener dentro de Ifmites razonables la cantidad de entradas y de salidas. En una me- moria de acceso aleatorio se identifica cada posicién de memoria que pertenece a un es- pacio de 2" posiciones con una Unica palabra de M bits. Con el objeto de acceder a una posicién en particular, se presenta la palabra de direcciones en la entrada de un arbol de- codificador de M niveles y 2" hojas. Comenzando desde la base del drbol (el nivel supe- rior del mismo), en cada nivel de orden i se toma una determinacién referida al bit i de la palabra de direcci6n. Si en el nivel i el bit es 0, se circula por et 4rbol hacia la izquierda; en caso contrario, se avanza hacia la derecha, La hoja de destino esté en el nivel M ~ 1 (contando desde 0) y existe una sola hoja por cada direccién de memoria. La estructura en forma de &rbol da por resultado un tiempo de acceso que es logaritmi- co con respecto al tamafio de la memoria, Esto es, si la memoria contiene 4’ palabras, el capiruto 7 + MeMoma 281 tiempo de acceso de la memoria resulta ser Ol/og,], donde F es el fan out de las compuer- tas l6gicas del Arbol. (Aqui se supone nuevamente que se trabaja con un fan out de dos.) Pa- ra una memoria de tamaiio N, se requieren M = [log NJ bits de direcci6n para identificar univocamente cada palabra. A medida que erece el nimero de palabras en a memoria, la longitud de la palabra de direcciones crece en forma logaritmica, de modo tal que se agre- ‘ga un nivel de profundidad al 4r'vol decodificador cada vez que el tamafio de la memoria se duptica. Como ejemplo practice. considérese una memoria de 128 Mpalabras, que requie- re 27 niveles de decodificacién (dado que 2” = 128 Mpalabras). Si se supone que las com- puertas ldgicas del drbol decodificador conmutan en 2 ns, puede accederse a cualquier di- receién en 54 ns. La figura 7.30 muestra un drbol decodificador de cuatro niveles para una memoria de acceso aleatorio de 16 pulabras. Como ejemplo de funcionamiento del érbol, supéngase que la direecién a seleccionar es 1011. Bl bit nds significativo es 1, por lo que se circula hacia la derecha del nivel 0, como lo indica la flecha. El siguiente bit més significativo es un 0, por lo que desde el nivel | se circula hacia Ia izquierda; el bit siguiente ¢s un 1, con lo que se vuelve a circular hacia la derecha, lo mismo que en el caso del bit menos signi- ficativo, lo que permite encontrar el elemento direccionado a la altura del nivel 3. yon oo. ovo too 9K 0D>1 U10 OO11 1M OF 0179 OTF 1eB0 sHOF TOIO OAL 4100 HOH LO 2111 Figura 7.30 © Un arbol decodificador para una memoria de zoceso aleatorio de 16 palabras. 7.8.3 Memorias de direccionamiento por contenido {asociativas) En una memoria de acceso aleatorio convencional, se aplica una direcci6n a la memoria, con lo que se permite ¢1 acceso a 1a posicién dada para su lectura o escritura. En una me- moria direccionable por contenido (CAM, contents addressable memory), conocida también como memoria asociativa, se aplica a la entrada de la memoria una palabra for-

También podría gustarte