Estructura de Computadores 2 [08/09] Entrada/Salida en procesadores MIPS GAC: Grupo de Arquitectura de Computadores Dpt. Electrónica e Sistemas. Universidade da Coruña. Bibliografı́a Computer Organization and Design: The hardware/software interface (3rd ed.), David A. Patterson and John L. Hennessy. Morgan Kaufmann Publishers, Inc. (También disponible en castellano: Estructura y diseño de computadores: interficie circuiterı́a/programación) 1. Introducción Filosofı́a RISC (Reduced Instruction Set Computer) • Instrucciones de pocas etapas (buscando además longitud fija de instrucciones) • instrucciones de carga/almacenamiento (load/store) • reducido número de métodos de direccionamiento • juego de instrucciones pequeño Ejemplos RISC: MIPS, Sun SPARC, HP PA-RISC, IBM PowerPC, Alpha, ARM. . . Objetivos de diseño: velocidad, coste (diseño, fabricación y testeo), tamaño, consumo eléctrico, fiabilidad, versatilidad (sistemas empotrados) Principios básicos: • simplicidad favorece regularidad • más pequeño ⇒ más rápido • hacer el caso más frecuente lo más rápido posible 2. MIPS: Arquitectura básica y ensamblador E/S asignada en memoria (MMIO) Dos modos de funcionamiento: kernel y usuario La mitad superior del espacio de direcciones sólo accesible en modo kernel : direcciones a partir de 0x8000 0000. Esta región incluye: • Código para el manejo de excepciones • Datos solo accesibles al SO • Direcciones de E/S asignadas en memoria: a partir de 0xf f f f 0000 Organización de memoria Organización de un stack frame Registros del MIPS y convención sobre su uso Operandos de instrucciones MIPS Category Arithmetic add MIPS assembly language Example Meaning add $s1, $s2, $s3 $s1 = $s2 + $s3 Three operands; data in registers subtract sub $s1, $s2, $s3 Three operands; data in registers Instruction addi $s1, $s2, 100 lw $s1, 100($s2) sw $s1, 100($s2) store w ord lb $s1, 100($s2) load byte sb $s1, 100($s2) store byte load upper immediate lui $s1, 100 add immediate load w ord Data transfer $s1 = $s2 + 100 $s1 = Memory[$s2 + 100] Memory[$s2 + 100] = $s1 $s1 = Memory[$s2 + 100] Memory[$s2 + 100] = $s1 $s1 = 100 * 2 16 Used to add constants Word from memory to register Word from register to memory Byte f rom memory to register Byte f rom register to memory Loads constant in upper 16 bits branch on equal beq $s1, $s2, 25 if ($s1 == $s2) go to PC + 4 + 100 Equal test; PC-relative branch branch on not equal bne $s1, $s2, 25 if ($s1 != $s2) go to PC + 4 + 100 Not equal test; PC-relative slt $s1, $s2, $s3 if ($s2 < $s3) $s1 = 1; else $s1 = 0 Compare less than; for beq, bne Conditional set on less than branch Unconditional jump $s1 = $s2 - $s3 Comments set less than immediate slti jump j jr jal jump register jump and link $s1, $s2, 100 if ($s2 < 100) $s1 = 1; Compare less than constant else $s1 = 0 2500 $ra 2500 Formato de instrucciones del MIPS go to 10000 Jump to target address go to $ra For sw itch, procedure return $ra = PC + 4; go to 10000 For procedure call Modos de direccionamiento Qué se guarda y qué no en una subrutina leaf_example: addi $sp, $sp, -4 sw $s0, 0($sp) int leaf_example (int g, int h, int i, int j) { int f; f = (g + h) - (i + j); return f; add $t0, $a0, $a1 add $t1, $a2, $a3 sub $s0, $t0, $t1 add $v0, $s0, $zero } lw $s0, 0($sp) addi $sp, $sp, 4 jr $ra #adjust stack #save reg $s0 #g+h in $t0 #i+j in $t1 3. E/S en MIPS E/S asignada en memoria 3.1. E/S con interrupciones Eventos o situaciones excepcionales en flujo de ejecución del MIPS: 1. Petición de dispositivo de E/S Origen: Externo. Terminologı́a MIPS: Interrupción 2. Llamada al sistema desde espacio usuario Origen: Interno. Terminologı́a. MIPS: Excepción 3. Desbordamiento aritmético (overflow ) Origen: Interno. Terminologı́a MIPS: Excepción 4. Uso de una instrucción no definida Origen: Interno. Terminologı́a MIPS: Excepción 5. Problema hardware Origen: Interno o Externo. Terminologı́a MIPS: Excepción o Interrupción Para el manejo de excepciones e interrupciones MIPS utiliza el coprocesador 0. Identificación del motivo de excepción mediante un registro de estado (Registro de causa o Cause register ) del coprocesador 0 (no usa interrupciones vectorizadas). Otro registro de estado (Registro de estado o Status register ) permite habilitar/deshabilitar interrupciones. Otro registro guarda la dirección de la instrucción interrumpida, es decir, del contador de programa: EPC register (Exception Program Counter ). Los registros del coprocesador 0 son accesibles por medio de las instrucciones mfc0 (move from coprocessor 0 ) y mtc0 (move to coprocessor 0 ): mfc0 mtc0 $k0, $13 $0, $12 # Reg. $k0 de CPU cargado con contenido de reg causa # Reg. zero de CPU almacenado en reg estado # (se borra a cero) La instrucción rfe (return from exception) habilita de nuevo las interrupciones (bit Interrupt Enable en registro de estado) antes de devolver el control tras la ejecución de una rutina de servicio. Un salto incondicional a la dirección de la instrucción siguiente a la que habı́a sido interrumpida devuelve el control tras haber atendido la excepción. Algunos registros del coprocesador 0 del MIPS Principales bits del registro de estado del C0 del MIPS Principales bits del registro de causa del C0 del MIPS Códigos de causas de excepción La arquitectura MIPS fija una dirección de memoria como dirección de comienzo del manejador de excepciones: 0x8000 0080. Manejo de una excepción en MIPS