Publicado el 5 de Julio del 2017
1.125 visualizaciones desde el 5 de Julio del 2017
1,1 MB
7 paginas
Creado hace 15a (01/06/2009)
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 cir-
cuiterí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
Registros del MIPS y convención sobre su uso
Organización de un stack frame
Operandos de instrucciones MIPS
Formato de instrucciones del MIPS
MIPS assembly languageCategoryInstructionExampleMeaningComments add add $s1, $s2, $s3 $s1 = $s2 + $s3Three operands; data in registers Arithmetic subtract sub $s1, $s2, $s3 $s1 = $s2 - $s3Three operands; data in registers add immediate addi $s1, $s2, 100 $s1 = $s2 + 100Used to add constants load word lw $s1, 100($s2)Word from memory to register store word sw $s1, 100($s2)Word from register to memory Data load byte lb $s1, 100($s2)Byte from memory to register transfer store byte sb $s1, 100($s2)Byte from register to memory load upper immediate lui $s1, 100Loads constant in upper 16 bits branch on equal beq $s1, $s2, 25Equal test; PC-relative branch Conditional branch on not equal bne $s1, $s2, 25Not equal test; PC-relative branch set on less than slt $s1, $s2, $s3Compare less than; for beq, bne slti $s1, $s2, 100Compare less than constant jump j 2500 go to 10000Jump to target address Uncondi- jump register jr $raFor switch, procedure returntional jump jump and link jal 2500For procedure call$s1 = Memory[$s2 + 100] Memory[$s2 + 100] = $s1$s1 = Memory[$s2 + 100] Memory[$s2 + 100] = $s1 $s1 = 100 * 216 if ($s1 == $s2) go to PC + 4 + 100 if ($s1 != $s2) go to PC + 4 + 100 if ($s2 < $s3) $s1 = 1; else $s1 = 0 set less than immediate if ($s2 < 100) $s1 = 1; else $s1 = 0 go to $ra $ra = PC + 4; go to 10000Modos de direccionamiento
Qué se guarda y qué no en una subrutina
int leaf_example (int g, int h, int i, int j) {
int f;
f = (g + h) - (i + j);
return f;
}
leaf_example:
addi $sp, $sp, -4 #adjust stack
#save reg $s0
sw $s0, 0($sp)
add $t0, $a0, $a1 #g+h in $t0
add $t1, $a2, $a3 #i+j in $t1
sub $s0, $t0, $t1
add $v0, $s0, $zero
lw $s0, 0($sp)
addi $sp, $sp, 4
jr $ra
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 $k0, $13 # Reg. $k0 de CPU cargado con contenido de reg causa
mtc0 $0, $12 # 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 Inte-
rrupt 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 inte-
rrumpida 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
Comentarios de: Entrada/Salida en procesadores MIPS (0)
No hay comentarios