Organización del Procesador José Acosta Temas a Tratar Estructura del CPU Registros Ciclo de Instrucción Ciclo Indirecto Segmentación de instrucciones Tratamiento de Saltos Referencia: Organización y Arquitectura de Computadores William Stallings 7 ed. Cap. 12 Estructura del CPU Funciones Captar Instrucción: leer la instrucción de la memoria Interpretar Instrucción: decodificación para determinar acción necesaria Captar datos: leer memoria o de dispositivos E/S Procesar Datos: ejecución de operaciones aritméticas o lógicas Escribir Datos: los resultado se escriben en la memoria o dispositivos E/S CPU: Bus del Sistema Registros Unidad Aritmético Lógica (ALU) Unidad de Control de Programa (UC) Bus de Control Bus de Bus de Datos Direcciones Bus del Sistema Estructura Interna del CPU Flag de Estados Interno del CPU Desplazador Complementador Aritmética & Lógica Bus de Control .. . Registros Unidad de Control de Programa (UC) Registros Registros Visibles por el usuario Registros de Control y Estado Uso general Contador de Programa (PC) Datos Registro de Instrucción Direcciones Puntero de segmentos Registro de Dirección de Memoria (MAR) Puntero de pila Registro Intermedio de Memoria (MBR) Registros índice Códigos de condición (Flag de Estados/PSW) Registros Consideraciones de Diseño Tamaño Suficiente como para poder contener la dirección/dato mayor Cantidad Menor cantidad requiere mayor acceso a memoria Mayor cantidad no reduce accesos a memoria (salvo RISC) Generalmente entre 8 a 32 Uso Generales o Específicos? Influyen en el diseño del repertorio de instrucciones y en la flexibilidad de programación Registros Flag de Estados/Indicadores/PSW Indicador Uso Sign Si está activo indica que el resultado de operación o de comparación son negativos. Zero Está activo si el resultado de operación es cero o resultado de comparación igual. Carry Indicador de arrastre del bit de mayor orden, (operaciones de suma y resta) Equal Si está activo indica que el resultado de comparación es la igualdad Overflow Señala desbordamiento aritmético Interrupt Este bit controla el estado del sistema de interrupciones enmascarables. Cuando está activo (1) permite las interrupciones; el estado inactivo (0) las deshabilita. Supervisor Indica si el procesador trabaja en modo supervisor o usuario Registros Ejemplos de Registros Registros de Datos D0 D1 D2 D3 D4 D5 D6 D7 Registros Generales AX - Acumulador BX - Base CX - Contador DX - Datos Registros Generales EAX EBX ECX EDX AX BX CX DX ESP EBP ESI EDI SP BP SI DI Punteros e Índices Registros de Direcciones A0 A1 A2 A3 A4 A5 A6 A7 SP – Punt. Pila BP – Punt. Base SI – Índice Fuente DI – Índice Destino Segmento CS - Código DS - Datos SS - Pila ES - Extra Estados del Programa Registro FLAGS Puntero Instrucciones Estados del Programa Estados del Programa PC PSW Puntero Instrucciones Indicadores MC68000 8086 80386 - Pentium Ciclo de Instrucción Ciclo de Captación Inicio Busca siguiente Instrucción Decodifica Instrucción Ciclo de Ejecución Ejecuta Instrucción Parada Buscar siguiente instrucción de la memoria y transferirla al registro de instrucciones Modificar el contador de programa para que apunte a la siguiente instrucción Determinar el tipo de instrucción Determinar la posición de memoria de la palabra contenida en la instrucción (si corresponde) Buscar la palabra desde la memoria (si corresponde) y colocarla en un registro de la CPU Ejecutar la instrucción Volver al primer paso para comenzar la siguiente instrucción Ciclo de Instrucción Ejemplo Sumar el contenido de la palabra de memoria 940 con el contenido de la palabra de memoria 941 y almacenarlo en esta ultima posición Ciclo de Instrucción Ejemplo Fetch instrucción 1: El PC señala la posición de memoria 300 La instrucción de esta posición se carga al IR (esto implica el uso de MAR y MBR) Ciclo de Instrucción Ejemplo Ejecución instrucción 1: Los primeros 4 bits de IR (“1” hex) indican que el acumulador AC se va a cargar con un dato de la memoria Los 12 bits siguientes especifican la dirección (es decir “940”). Ciclo de Instrucción Ejemplo Fetch instrucción 2: El registro de PC se incrementa y se capta la siguiente instrucción (posición de memoria 301) Ciclo de Instrucción Ejemplo Ejecución instrucción 2: Los primeros 4 bits (“5”) indican que la instrucción es de suma entre el acumulador y una memoria Los siguientes 12 bits indican la dirección de memoria (“941”). El contenido de AC y el de la posición 941 se suman y el resultado se almacena en AC Ciclo de Instrucción Ejemplo Fetch instrucción 3: El registro de PC se incrementa y se capta la siguiente instrucción (posición de memoria 302) Ciclo de Instrucción Ejemplo Ejecución instrucción 3: Los primeros 4 bits indican (“2”) que el acumulador se debe almacenar en una memoria Los siguientes 12 bits indican la dirección de la memoria (“941”). El contenido de AC se almacena en la posición 941 Ciclo Indirecto Las instrucciones pueden requerir accesos a memoria para búsqueda de datos El direccionamiento indirecto requiere mayor acceso a memoria Dependiendo de ciertas condiciones se pueden saltar a ejecución de sub rutinas o interrupciones del programa FETCH INTERRUPCION INDIRECTO EJECUCION Ciclo Indirecto Diagrama de Flujo Indirección Captar instrucción Indirección Captar operando Almacenar operando Operandos Múltiples Calcular dirección de instrucción Decodificar operación de instrucción Calcular dirección de operando Instrucción terminada captar siguiente instrucción Operación de Datos Buscar mas datos de cadena o vector Resultados Múltiples Calcular dirección de operando No Interrupción Comprobar interrupción Interrupción Ciclo Indirecto Captar Instrucción Depende del diseño de la CPU y comprende: PC contiene dirección de prox. instrucción 1 Dirección movida a MAR 2 Dirección puesta en bus de direcciones 3 Unidad de Control dispone lectura de memoria 4 Resultado puesto en bus de datos, copiado a MBR y luego a IR 5, 6, 7 PC incrementado en 1 8 1 2 3 5 8 4 7 6 Ciclo Indirecto Captar Datos Se examina IR Si existe direccionamiento indirecto, se ejecuta ciclo indirecto: N bits de la derecha del MBR transferidos a MAR 1 Unida de Control dispone lectura de memoria 2 Resultado (dirección del operando) transferida a MBR 3 2 1 3 Ciclo Indirecto Ejecución Puede tener varias formas, dependiendo de la instrucción ejecutada Puede ser: Leer/escribir en Memoria Entrada/Salida Transferencia entre registros Operaciones de ALU Ciclo Indirecto Interrupción Simple y predecible Se guarda valor actual de PC para permitir reasumirlo después de la interrupción Valor de PC copiado a MBR 1 Se carga ubicación especial en la memoria (e.g. stack pointer) en MAR 2 MBR se escribe en memoria 3 Se carga PC con dirección de rutina de interrupción 4 Siguiente instrucción (primera de la rutina de interrupciones) puede ser captada 5 5 4 1 2 3 Segmentación de Instrucciones Cambios en la organización del procesador incide en la mejora de sus prestaciones Uno de ellos es la segmentación de instrucciones o Pipelining (entubamiento) Se semeja una línea de producción compuesta por etapas independientes entre si y que pueden ejecutarse en simultaneo Se aceptan nuevas instrucciones antes que terminen de ejecutarse las anteriores Segmentación de Instrucciones Prefetch Dos etapas independientes La primera capta instrucción y lo almacena hasta que la segunda esté libre Cuando ocurre, la primera está libre para captar nuevas instrucciones mientras que la segunda está ocupada Esto se conoce como Prefetch y supone la reducción del tiempo de instrucción a la mitad Pero ocurren retrasos por mayores tiempo de proceso al ejecutar y/o por acceso a subrutinas o interrupciones Se añaden mas etapas para mejorar la performance Segmentación de Instrucciones Prefetch Esperar Esperar Nueva Dirección Instrucción Instrucción Captar Resultado Ejecutar Instrucción Instrucción Captar Descartar Visión Simplificada Visión Ampliada Resultado Ejecutar Segmentación de Instrucciones Pipelining Seis Etapas: DI (FI) Captar Instrucción CO (DI) Decodificar Instrucción (CO) Calcular Operandos (FO) Captar Operandos (EI) Ejecutar Instrucción FI SI NO FO Actualizar PC (WO) Escribir Operando Traslape de Etapas Salto Incondicional? Vaciar Cauce EI WO SI Salto o Interrupción? NO Segmentación de Instrucciones Pipelining – Diagrama de Tiempos Segmentación de Instrucciones Efecto de Saltos – Diagrama de Tiempos Segmentación de Instrucciones Diagrama de Tiempos Alternativos Segmentación de Instrucciones Factores de Aceleración Factor de Aceleración Factor de Aceleración K = 12 etapas n = 30 instrucciones K = 9 etapas n = 20 instrucciones K = 6 etapas Numero de Instrucciones n = 10 instrucciones Numero de Etapas Tratamiento de Saltos Tratamiento de Saltos Flujos Múltiples Prefetch destino del salto Buffer de bucles Predicción de saltos Salto retardado Nunca se salta Siempre se salta Según Codops Switch saltar/no saltar Tratamiento de Saltos Asegurar flujo estable de instrucciones en las etapas iniciales del cauce Esto es afectado por instrucción de salto condicional No se puede predecir si va a ocurrir en tanto no se ejecute la instrucción Se plantean aproximaciones para tratar su tratamiento: Flujos Múltiples Prefetch destino del salto Buffer de bucles Predicción de saltos Salto retardado Tratamiento de Saltos Flujos Múltiples & Prefecth Destino Flujos Múltiples Utiliza dos pipelines o cauces Se hace Prefetch del salto a otro pipeline Puede generar retardos por competencia de acceso a registros Pueden entrar otros saltos en el prefetch Prefetch destino del salto Se hace prefetch del destino del salto y de la instrucción siguiente al salto Si se produce el salto ya se tiene la dirección de destino Tratamiento de Saltos Buffer de Bucles Buffer de bucles Utiliza una memoria pequeña y rápida con las “n” instrucciones mas recientes Gestionada por la etapa de Fetch Si hay salto, se busca destino en el buffer Optimo para saltos o loops Dirección de salto 8 Buffer de Bucles (256 bytes) Instrucción a decodificar en caso de acierto Bits de dirección mas significativos comparados para determinar si hay acierto Tratamiento de Saltos Predicción de Saltos Nunca se salta: se asume que no ocurre salto y se hace fetch a siguiente instrucción Siempre se salta: siempre se hace fetch de la instrucción destino Según código de operación: algunas operaciones terminan mas frecuentemente en salto que otras (75%) Switch saltar no saltar: basado en histórico de saltos, bueno para loops Tratamiento de Saltos Predicción de saltos – Diagrama de Flujos Leer la siguiente instrucción de salto condicional Leer la siguiente instrucción de salto condicional Predecir que no habrá salto Predecir que habrá salto NO SI Hay salto? Hay salto? SI NO Leer la siguiente instrucción de salto condicional Leer la siguiente instrucción de salto condicional Predecir que habrá salto Predecir que no habrá salto SI NO Hay salto? NO Hay salto? SI