Final AC
- Clase 1 Subrutinas
- Clase 2 Subrutinas
- Clase 3 Interrupciones
- Clase 4 Entrada/Salida
- Clase 5 Comunicación CPU-Impresora
- Clase 6 Segmentación de Intrucciones
- Clase 7 Seguimos con Segmentación de Intrucciones
- Clase 8 Memoria
- Clase 9 Memoria Cache
- Clase 10 Buses del Sistema
- Clase 11 Procesadores SuperEscalares
Clase 1 Subrutinas
Temas de la clase
Programas, Subrutinas, Pasaje de Parámetros, Funcionamiento de la pila, Push/Pop,
Subrutinas
- Misma idea de los procedimientos en Pascal.
- También tiene una definición determinada. Encabezamiento y final. Cuerpo del procedimiento (instrucciones).
- Vamos a ver esto para el simulador.
Lo unico que es fijo es los 2000h que es el programa principal
Pasaje de parámetros a subrutinas
- Procedimientos (subrutinas), en general requieren datos de entrada y proveen datos de salidas.
- Parámetros son estos datos pasados a y desde el procedimiento.
- Estos parámetros pueden ser pasados de dos maneras:
- Por valor
- Por referencia
Parámetros por valor
- Es eso: se pasa el valor de una variable al procedimiento.
- Son sólo parámetros de entrada.
- Independientemente del uso de este valor por parte del procedimiento, éste no puede ser modificado.
Parámetros por referencia
Esto es util cuando tenemos muchos parametros ya que en lugar de pasar muchos parametros pasamos la direccion de memoria de un arreglo.
- Aquí es pasada la dirección de la variable y no su valor.
- Es necesario cuando hay que modificar el valor del parámetro (retorno).
- En general menos eficiente que pasar por valor. Tenemos la dir y hay que acceder a memoria para buscar el dato.
- Pero más eficiente cuando hay que transferir un arreglo datos entre proc. Así se pasa la dir del arreglo.
¿Dónde se pasan los parámetros?
-
Vía registros
- El número de registros es la principal limitación
- Es importante documentar que registros se usan
-
Vía memoria
- Variables definidas en el programa (“globales”)
- Se usa un área definida de memoria (RAM).
- Difícil de estandarizar
-
Vía pila (stack)
- Es el método más ampliamente usado.
- La pila (o stack) es una zona de memoria (RAM) destinada a este uso específico.
- Lo usa la mayoría de los lenguajes de alto nivel.
- Independiente de memoria y registros.
- Hay que comprender bien cómo funciona porque la pila (stack) es usada por el usuario y por el sistema.
- Aunque es más complicado, en general los registros son recursos muy preciados.
Funcionamiento de la Pila
-
Zona de memoria destinada a un uso específico
Uso del sistema
: salva la dirección de retorno cuando es llamada una subrutina o se produce una interrupción por hardwareUso del usuario
: pasaje de parámetros
-
Cada vez que se ejecuta un programa, el SO inicializa el reg SP apuntando a la pila
- El simulador inicializa SP=8000H
Operaciones de apilar/desapilar
- PUSH: apila datos. El SP apunta al último dato almacenado, por lo tanto primero se decrementa y luego almacena el dato.
- POP: desapila datos. Desapila el dato y luego incrementa el SP. Operación inversa a la anterior.
- PUSH y POP apilan y desapilan datos de 16 bits (2 bytes).
Push | Pop |
---|---|
Llamada al procedimiento y pasaje de parámetros por pila
En el programa principal
...
Push Parámetro 1
Push Parámetro 2
Call Nombre
...
Uso de registros con la pila (1)
- SP = Stack pointer (Puntero de pila).
- Apunta al último dato almacenado en la pila:
- Por el usuario con push y pop
- Por el sistema al salvar la dirección de retorno en el llamado a una subrutina o cuando se produce una interrupción (la veremos más adelante).
Uso de registros con la pila (2)
- BP = Base pointer (Puntero base). Como SP no es un registro base o índice, no puede ser usado para direccionar entre corchetes. No está permitido [SP].
- Para direccionar la pila se usa BP. Así si se ejecutan instrucciones push y pop se modifica SP; si hay una llamada a procedimiento también se modifica SP.
- BP está manejado por el usuario.
BX es como BP pero solo para usar con la pila
Se pueden apilar direcciones sin usar un pull
Nosotros como programadores movemos el stack pointer con push y pop y el sistema lol mueve cada vez que hay un call
y un ret
Sumar dos datos pasados Por en Registros y Por Valor
Lo mismo de arriba pero por referencia
Una suma donde los parametros se pansan por valor en la PILA
Aca BX se salva pero no es necesario si no se pide en el enunciado
Porque BX y no SP?, Porque es el unico registro que permite el direccionamiento indirecto (Lo de poner corchetes y quedarnos con los valores basicamente)
Clase 2 Subrutinas
Ejercicio 1
Ejercicio 2
Ejercicio 3
Algunos numeros de aca estan mal igual, no hace falta ver este ejercicio.
Sumar la cantidad de caracteres
Ejercicio 7
Clase 3 Interrupciones
Interrupciones
- La funcionalidad dentro de un sistema de cómputo es implementada por hardware que ayuda al procesador.
- Cada dispositivo opera a su propio ritmo, pero hay necesidad de sincronizar la operación del procesador con estos dispositivos.
Interrupciones (2)
-
Una solución: el procesador pregunta a c/dispositivo su estado (si hay dato disponible). Cuando el dato está disponible el procesador puede leerlo y procesarlo. (Polling)
-
Desventajas:
- El procesador malgasta tiempo preguntando continuamente si hay algún dato disponible.
- Hay que esperar a los dispositivos más lentos.
Interrupciones (3)
Mejor solución: cuando un dispositivo necesita la atención del procesador, envía una señal para avisarle, es decir, produce una interrupción. Este mecanismo permite alterar la secuencia normal de procesamiento. Recordar otros mecanismos (jmp, call).
Interrupciones por hardware
- Son las generadas por dispositivos de E/S.
- Son las “verdaderas” interrupciones.
- El sistema de cómputo tiene que manejar estos eventos externos “no planeados” o “asíncrónicos”.
- No están relacionadas con el proceso en ejecución en ese momento.
- Son conocidas como interrupt request.
Traps
Interrupciones por hardware creadas por el procesador en respuesta a ciertos eventos como:
- Condiciones excepcionales: overflow en punto flotante.
- Falla de programa: tratar de ejecutar una instrucción no definida.
- Fallas de hardware: error de paridad de memoria.
Interrupciones por software
Muchos procesadores tienen instrucciones explícitas que afectan el estado del procesador en la misma manera que int por hardware. Generalmente usadas para hacer llamadas a funciones del SO. Esta característica permite que las subrutinas del sistema se carguen en cualquier lugar.
- No requieren conocer la dirección de la rutina en tiempo de ejecución.
- Son más cortas que Call.
- Hay sistemas que no permiten hacer una llamada directa a una dirección de la función del SO, pues es una zona reservada.
- Se pueden reubicar fácilmente.
¿Qué pasa si no las tuviera?
Al cargar un programa habría que “mirar” todas las llamadas al BIOS y SO y reemplazar en el código las direcciones de todas estas funciones invocadas.
Interrupciones por Software vs Hardware
Interrupciones por Hardware
Diagrama de Estados de un ciclo de Intrucción con Interrupciones
Esto no se toma pero es para saberlo
Ciclo de interrupción
- Añadido al ciclo de instrucción.
- El procesador comprueba si se ha generado alguna interrupción.
- Indicada por la presencia de una señal de interrupción.
- Si no hay señales de interrupción, capta la siguiente instrucción.
- Si hay alguna interrupción pendiente:
- Se suspende la ejecución del programa en curso.
- Guarda su contexto (próxima instrucción a ejecutar y otros).
- Carga el PC con la dirección de comienzo de una rutina de gestión de interrupción.
- Finalizada la rutina de gestión, el procesador retoma la ejecución del programa del usuario en el punto de interrupción.
Escenario de trabajo
- El procesador tiene una única entrada de interrupciones.
- ¿Cómo solucionamos tener varias entradas de interrupciones?
- Existe un dispositivo: controlador de interrupciones (PIC).
- Interrupciones priorizadas.
¿Como trabaja el PIC?
- El PIC recibe un pedido de interrupción de un dispositivo externo y prioriza éste con otros pedidos que pueden llegar o estar pendientes.
- Un pedido de interrupción es enviado al procesador, por la línea INTR.
- El procesador contesta por la línea INTA y solicita un puntero de 8 bits para la tabla.
- El procesador recibe el puntero y lo usa para acceder a la tabla de vectores (direcciones) donde se encuentra la dirección del servicio.
- Accede a la tabla y obtiene la dirección buscada.
- Salva en la pila la dirección actual, los flags y salta a la dirección del servicio.
Vectores de Interrupción
- 00 ⟶ 255 - 00h ⟶ FFh hay 256 entradas en la tabla.
- Cada entrada en la tabla son 4 bytes, que tienen la dirección del servicio que atiende a la interrupción.
- Los 16 bits más altos están siempre en cero.
- Los restantes 16 bits tienen la dirección lógica/física. Las direcciones en el simulador son de 16 bits. Ej. 0000XXXXh
- De las 256 posibles interrupciones: 4 están usadas por interrupciones de soft:
- Tipo 0 (INT 0): finaliza la ejecución de un programa.
- Tipo 3 (INT 3): puntos de parada en el programa.
- Tipo 6 (INT 6): espera un carácter del teclado y lo almacena en la dirección apuntada por BX. (Entrada estándar).
- Tipo 7 (INT 7): escribe en pantalla. BX = dirección de comienzo del bloque de datos. AL = No de datos. (Salida estándar).
- El resto de las interrupciones (entradas en la tabla) están libres para ser utilizadas.
Perifericos Internos
- PIO: puertos paralelos de e/s
- HAND-SHAKE:
- PIC: controlador de interrupciones
- TIMER: contador de eventos
- CDMA: controlador de acceso directo a memoria
Perifericos Externos
- Barra de led’s.
- Barra de interruptores (microswitchs).
- Impresora.
Controlador de interrupciones (PIC)
- Puede manejar hasta 8 interrupciones.
- INT0 ⟶ INT7, por hardware (sin espacios)
- Esquema de prioridades:
- 0 = más alta prioridad
- 7 = más baja prioridad
PIC: registros internos
- Todos son de 8 bits
- ISR: registro de interrupción en servicio. Indica cuál es la interrupción que está siendo atendida. Ej. Si se atiende INT0 se pone en 1 el bit 0; si se atiende INT7 se pone en 1 bit 7.
- IRR: registro de petición de interrupción. El bit asociado se pone en 1 cuando hay un pedido de int y va a 0 cuando es atendida.
- IMR: registro de máscara de interrupción. Permite enmascarar cada una de las entradas, bit 0 ⟶ INT0, si se pone en 1 se enmascara INT0 (no se atiende).
- INT0…INT7: contiene el valor del vector. Este número multiplicado por 4 = entrada en la tabla.
- EOI: se envía el comando de final de interrupción (end of interrupt) 20h = comando al final de la rutina de hard.
Acceso a los registros del PIC
No creo que lo tomen
Se acceden a partir de la dirección 20h.
- EOI = 20h
- IMR = 21h
- IRR = 22h
- ISR = 23h
- INT0 = 24h
- INT1 = 25h
- INT2 = 26h
- INT3 = 27h
- INT4 = 28h
- INT5 = 29h
- INT6 = 2Ah
- INT7 = 2Bh
Interrupciones por hardware
- int0: conectada a la tecla F10, que produce una interrupción al ser pulsada.
- int1: se conecta a la línea OUT del TIMER, se produce una interrupción con cada pulso del mismo.
- int2: se conecta a la línea INT de HAND.
- int3: se conecta al controlador de acceso directo a memoria.
Interrupciones por software Imprimir Mensaje
Interrupciones por software Leer desde Teclado
En AL van la cantidad de elementos que voy a imprimir
Interrupción por Hardware con tecla F10
Codigo | Acceso a los registros del PIC |
---|---|
ORG 40
IP_F10 DW RUT_F10
ORG 40: porque vamos a instalar la interrupción en el lugar 10 de la tabla de vectores. Como cada entrada ocupa 4 bytes, la dirección es 4*10. Aquí va la dirección de la primera instrucción del servicio que atiende a la interrupción. Esta dirección tiene una etiqueta RUT_F10, pero vemos que es 3000h.
MOV AL, 0FEH # En Binario es 11111110
OUT PIC+1, AL
- Estas dos instrucciones cargan en el registro IMR el valor FEh, poniendo el bit 0 en 0 y los restantes bits en 1, enmascarando todas las interrupciones menos la INT0 que corresponde a la tecla F10.
- 0FEh = lleva un 0 al principio para indicar que el resto de las letras corresponden a un número y no al nombre de una variable.
¿Como sabemos que INT0 corresponde a la tecla F10?
Por el siguiente grafico
Grafico del PIC | Interrupciones por Hardware |
---|---|
MOV AL, N_F10
OUT PIC+4, AL
Estas dos instrucciones escriben en el registro INT0 del PIC, el valor de la posición en la tabla de vectores; en este registro se buscará dicha posición para la interrupción producida por F10. Recordemos que se accede al registro en la dirección 24h (PIC+4).
MOV DX, 0
En DX vamos a contar cuántas veces fue presionada la tecla F10. Acá inicializamos la cuenta en 0.
STI y CLI
- Las instrucciones STI y CLI activan y desactivan, respectivamente, interrupciones. Cuando se activa la bandera I permite que por el terminal INTR del procesador, se produzca una interrupción.
- Cuando se desactiva el bit impide que se produzca la interrupción por el terminal INTR.
- INTR es un terminal del procesador.
MOV AL, EOI #OUT 20H,20H
OUT EOI, AL
- La CPU debe indicarle al controlador cuando ha completado el servicio de cada interrupción de hardware. Por lo tanto, al final de la rutina de servicio de la interrupción habrá que escribir en el registro de comandos, un número (comando) que indique el final de la interrupción.
- La dirección del registro coincide con el valor a escribir.
IRET
- La instrucción IRET es una instrucción especial para retorno y se utiliza para retornar de las interrupciones de software y hardware.
- La instrucción IRET es como una instrucción RET, porque recupera de la pila la dirección de retorno.
- Es diferente porque también recupera una copia del registro de banderas de la pila.
- La instrucción IRET extrae 6 bytes de la pila: 4 para la dirección de retorno y 2 para el registro de banderas.
TIMER
- Posee dos registros de 8 bits.
- COMP: registro de comparación que determina el módulo de la cuenta del timer.
- CONT: registro contador, muestra la cuenta de los pulsos de la señal aplicada a la entrada INT del periférico. Cuando coincide su valor con el registro COMP, provoca una salida del TIMER.
- Direcciones de registros: 10h y 11h
- Frecuencia: 1 Hz
Clase 4 Entrada/Salida
Problemas de Entrada/Salida
- Gran variedad de periféricos con varios métodos de operación.
- Transmisión de diferentes cantidades de datos.
- A diferentes velocidades.
- Usan diferentes formatos de dato y tamaño de palabra.
- Todos más lentos que la CPU y la RAM.
- Necesidad de módulos de E/S (con alguna “inteligencia”).
Módulo de Entrada/Salida
Dispositivos Externos
Basicamente todo lo que no es memoria y CPU
- e/s básicos
- monitor/pantalla, mouse, teclado
- almacenamiento
- disco duro, CD, DVD
- impresión
- impresora, escáner
- comunicación con dispositivos remotos
- módem, acceso/interfaz de red
- multimedia
- micrófono, parlantes
- automatización y control
- sensores, alarmas, adquisición de datos
Características de un puerto
- Interfase entre el periférico y el módulo de E/S
- Señales de Control, Estado y Datos
- Señal de Control: función a realizar
- Ej: INPUT ó READ, OUTPUT ó WRITE
- Señal de Estado: READY/NOT READY
- Control lógico: manejo de direccionamiento
- Transductor: conversión del datos
- Buffer: adaptación (1, 8 o 16 bits)
- Señal de Control: función a realizar
Funciones de un módulo de E/S
- Control y temporización de uno o más dispositivos externos
- Interpretar las órdenes que recibe de CPU y transmitirlas al periférico
- Comunicación con la CPU (registros) y Memoria
- Controlar las transferencias de datos entre CPU y el periférico (convertir formatos, adaptar velocidades)
- Comunicación con los dispositivos (periféricos)
- Informar a la CPU del estado del periférico
- Almacenamiento temporal (buffering) de datos
- Detección de errores
Diagrama en Bloques de un módulo de E/S
Capacidades de un módulo de E/S
- Ocultar las propiedades del dispositivo a la CPU.
- Ej: temporizados, formatos, electromecanismos …etc
- Ocuparse de uno o varios dispositivos.
- Controlar o no las funciones del dispositivo.
- Canales de E/S ó procesador de E/S (manejo de parte importante de la carga del procesamiento). Presentes en Mainframes.
- Controlador de E/S ó controlador de dispositivo (manejo primitivo). Presentes en microcomputadoras.
Operación de Entrada o Salida
Requiere:
- Direccionamiento
- E/S mapeada en memoria
- E/S aislada
- Transferencia de información
- Lectura o escritura
- Gestión de la transferencia
- Mecanismos de sincronización y control de la transferencia de datos
Direccionamiento de E/S
-
E/S asignada en memoria (memory-mapped)
- Dispositivos de E/S y memoria comparten un único espacio de direcciones.
- E/S se parece a la memoria de lectura/escritura.
- No hay órdenes específicas para E/S.
- Variedad de órdenes de acceso a memoria (programación eficiente).
-
E/S aislada
- Espacios de direcciones separados.
- Necesidad de líneas especiales de E/S y de memoria.
- Órdenes específicas para E/S.
- Conjunto limitado de instrucciones.
E/S Aislada
Diagrama 1 | Diagrama 2 |
---|---|
Recordemos, todas las instrucciones que vimos eran de la forma:
- MOV mem, reg
- MOV reg, mem
- MOV reg, reg
Son entre el procesador y memoria
Ahora tenemos instrucciones:
- IN AL, puerto: Lee un byte de la dirección de e/s puerto.
- IN AL, DX: Lee un byte de la dirección de e/s almacenada en DX.
- OUT puerto, AL: Escribe un byte de AL en la dirección de e/s puerto.
- OUT DX, AL: Escribe un byte de AL en la dirección de e/s contenida en DX.
Cuando la UC decodifica OUT o IN, activa las líneas del bus de control
- iow = input/output write
- ior = input/output read
Cuando la UC decodifica MOV, activa las líneas del bus de control
- mwr = memory write
- mrd = memory read
Se puede ver en el simulador.
Este no lo vamos a usar
E/S Mapeada en Memoria
- Las direcciones de e/s están mapeadas en las direcciones de memoria.
- Las direcciones de e/s pertenecen al espacio de memoria.
- No se distingue una posición de e/s de una posición de memoria.
Ventaja:
Puedo usar todo el conjunto de instrucciones del µp, porque todas las posiciones son tomadas como direcciones. No hay instrucciones como IN y OUT.
Desventaja:
Ocupa espacio de memoria
Esto puede que entre :/
Técnicas de gestión de E/S
- E/S Programada con espera de respuesta
- E/S con interrupciones
- E/S con acceso directo a memoria (DMA)
E/S programada
- Intercambio de datos entre la CPU y el módulo
- La CPU tiene control directo sobre la operación de E/S
- Comprobación del estado del dispositivo
- Envío de comandos de lectura/escritura
- Transferencia de datos
- La CPU espera que el módulo E/S termine la operación
- Por lo tanto la CPU permanece ociosa durante un período de tiempo (no deseable)
E/S con Interrupciones
- La CPU no tiene que esperar la finalización de la tarea de E/S, puede seguir procesando.
- No se repite la comprobación de los estados de los módulos.
- El módulo envía un pedido de interrupción a la CPU cuando está listo nuevamente.
PIO
- 2 puertos paralelos de 8 bits: A y B.
- Se puede programar c/bit por separado como entrada o salida.
- 4 registros internos de 8 bits:
- 2 de datos, PA y PB.
- 2 de control CA y CB, para programar los bits de PA y PB.
Las direcciones de los registros son (P de port y C de configuración):
- PA ➔ 30H
- PB ➔ 31H
- CA ➔ 32H
- CA = un bit en 0 selecciona como salida a la línea correspondiente en PA.
- CA = un bit en 1 selecciona como entrada a la línea correspondiente en PA.
- CB ➔ 33H
- CB = controla de la misma manera a PB.
Codigo
Clase 5 Comunicación CPU-Impresora
Comunicación CPU - Impresora
- La comunicación con la impresora es a través de 8 líneas entrantes (8 bits) por donde la CPU envía el código ASCII del carácter a imprimir.
- Otra línea entrante es STROBE por donde la CPU avisa que el carácter ASCII enviado es válido y hay que imprimirlo. Si no está presente esta señal no se lleva a cabo la impresión.
- Por último, una línea saliente BUSY (1 bit) indica cuando la impresora está libre o ocupada; la impresión se lleva a cabo cuando la impresora está libre. El estado ocupado es cuando está imprimiendo, en el estado libre la CPU envía caracteres para imprimir.
CPU - PIO - Impresora
- El Puerto B (8 bits) del PIO se conecta a la impresora a las entradas del carácter ASCII, o sea el carácter a imprimir la CPU lo envía a este puerto.
- El bit 0 del Puerto A (PA0) se conecta a la línea de ocupado (BUSY) de la impresora y el bit 1 de este mismo puerto (PA1) se conecta a la entrada de la señal de STROBE.
Secuencia de impresión
-
Si la impresora está libre PA0 (bit 0 de PA) en 0, entonces enviar el carácter ASCII a imprimir a PB. En caso contrario, esperar.
-
Generar la señal de STROBE que valida el dato en PB. PA1 está en 0, llevarla a 1 y luego otra vez a 0. Tiene que pasar de 0 a 1 y de 1 a 0, generando así un pulso.
-
Volver a 1) si hay más caracteres a imprimir.
Podes tener por consulta de estado o por interrupciones, en comparación con el PIO que siempre es con consulta de estado
CPU - HAND - Impresora
Tiene inteligencia solo para comunicarse con la impresora.
Transferencia desde memoria → periférico
- La transferencia ocurre después que la CPU “determinó” que el dispositivo de E/S está listo.
- Esto último puede ser por consulta de estado o a la espera de un pedido de interrupción.
- ”Sobrecarga” se produce porque hay que ejecutar varias instrucciones por cada dato transferido.
- Instrucciones se necesitan para incrementar el puntero a memoria y para llevar la cuenta de la cantidad de datos transferidos.
- Con interrupciones esto se complica más, porque cada vez que hay una interrupción, existen instrucciones para salvar el contexto y luego instrucciones para retornar al punto de interrupción.
Acceso directo a memoria –> DMA
- Para transferir una “gran cantidad de datos” (ej. multimedia) la estrategia utilizada es otra.
- La transferencia de datos entre la memoria y el dispositivo externo es realizada sin la intervención de la CPU.
- La operación es controlada por otro dispositivo: controlador de acceso directo a memoria (CDMA).
- Realiza las mismas funciones que hace la CPU para transferir datos a la memoria. Para cada palabra de datos transferida genera el direccionamiento y todas las señales necesarias para el manejo del bus.
Etapas de la transferencia DMA
Parar la cpu es mas eficiente que guardar todos los registros y estar haciendo interrupciones
- Se distinguen 3 etapas:
- Inicialización: interviene la CPU. Configuración de dispositivos, direcciones, a qué dispositivo transferir, etc.
- Transferencia de datos: no interviene la CPU.
- Finalización: interviene la CPU.
El CDMA es mejor porque no tiene que salvar nada en la pila, solo se ocupa de transferir datos
Modos de transferencia por DMA
- Modo ráfaga (burst): cuando el CDMA toma el control del bus, transfiere un bloque de datos y no libera el bus hasta terminar.
- Modo robo de ciclo: el CDMA toma el control del bus, transfiere el dato y luego devuelve el control del bus. Luego la CPU ejecuta una instrucción y, si el CDMA necesita hacer otra transferencia, vuelve a pedir el uso del bus y transfiere el dato. Así se van alternando entre ejecución (CPU) y transferencia (CDMA).
- Modo transparente: el CDMA transmite en aquellos casos en los que la CPU no utiliza los buses al realizar movimiento entre registros.
El segundo es el mejor en teoria
Controlador de DMA (CDMA)
- Realiza transferencia de datos de memoria-memoria o memoria-periférico y a la inversa.
- Trabaja por robo de ciclo.
- Tamaño máximo del bloque a transferir: 64 kbytes.
Registros de CDMA
- RF: Registro de direcciones fuente. Se carga en él la dirección del bloque de memoria a transferir.
- RFL → 50H
- RFH → 51H
- RD: Registro de direcciones destino. Se carga en él la dirección destino del bloque. Memoria-memoria.
- RDL → 54H
- RDH → 55H
- CONT: Registro contador. Indica el número de bytes a transferir.
- CONTL → 52H
- CONTH → 53H
- CTRL → 56H
- ARRANQUE → 57H
Una vez cargados los valores adecuados en los registros, para arrancar la transferencia programada hay que poner en 1 A0=A1=A2 del registro de arranque, esto pone a 0 C0. Si se desea detener momentáneamente la transferencia se pone C0 a 1. Pero ponerlo en 0 no “rearranca”.
- CTRL: registro de control.
- Campos del registro:
- TC: Bit de control.
- X: Reservados o no especificados (C6, C5, C4).
- MT: Modo de transferencia.
- ST: Sentido de transferencia.
- TT: Tipo de transferencia.
- STOP: Detiene la transferencia en curso.
- Escritura
- C0: STOP
- 0: No se usa
- 1: Detiene la CPU la transferencia en curso.
- C1: TT = Tipo de transferencia
- 0: Memoria-Periférico o al revés
- 1: Memoria-Memoria
- C2: ST = Sentido de transferencia. Solo si C1 = 0.
- 0: Periférico-Memoria
- 1: Memoria-Periférico
- C3: MT = Modo de transferencia
- 0: Transferencia por demanda
- 1: Transferencia en modo bloque
- C4…C7: no se usan
Clase 6 Segmentación de Intrucciones
Segmentación de cauce: Conceptos básicos
- La segmentación de cauce (pipelining) es una forma particularmente efectiva de organizar el hardware de la CPU para realizar más de una operación al mismo tiempo.
- Consiste en descomponer el proceso de ejecución de las instrucciones en fases o etapas que permitan una ejecución simultánea.
- Explota el paralelismo entre las instrucciones de un flujo secuencial.
Ejemplo de estrategia
- Similar a la línea de armado en una planta de manufactura.
- El producto pasa por varios estados en el proceso de producción.
- Por lo tanto, varios productos pueden ser manipulados simultáneamente (cada uno en estados distintos).
- Se puede comenzar el proceso nuevamente (entrada a la línea de producción) antes de que salga el producto final de la misma.
Mal | Bien |
---|---|
Características
- La segmentación es una técnica de mejora de prestaciones a nivel de diseño hardware.
- La segmentación es invisible al programador.
- Necesidad de uniformizar las etapas:
- Al tiempo de la más lenta.
- El diseño de procesadores segmentados tiene gran dependencia del repertorio de instrucciones.
Tareas a realizar por ciclo
- Búsqueda (F, Fetch)
- Se accede a memoria por la instrucción.
- Se incrementa el PC.
- Decodificación (D, Decode)
- Se decodifica la instrucción, obteniendo operación a realizar en la ruta de datos.
- Se accede al banco de registros por el/los operando/s (si es necesario).
- Se calcula el valor del operando inmediato con extensión de signo (si hace falta).
- Ejecución (X, Execute)
- Se ejecuta la operación en la ALU.
- Acceso a memoria (M, Memory Access)
- Si se requiere un acceso a memoria, se accede.
- Almacenamiento (W, Writeback)
- Si se requiere volcar un resultado a un registro, se accede al banco de registros.
Formato de Intrucción
Prestaciones del cauce segmentado
Teórica: El máximo rendimiento es completar una instrucción con cada ciclo de reloj.
Si K es el número de etapas del cauce ⇒
Vel. procesador segmentado = Vel. secuencial × K
El incremento potencial de la segmentación del cauce es proporcional al número de etapas del cauce.
Incrementa la productividad (throughput), pero no reduce el tiempo de ejecución de la instrucción.
¿Qué sucede en cada etapa?
Riesgos en MIPS
- Estructurales
- Dependencia de datos
- Dependencia de control
Riesgos Estructurales
Cuando dos o más instrucciones intentan usar el mismo recurso de hardware a la vez.
Riesgos por Dependencia de Datos
Dependencia verdadera: cuando una instrucción depende de los resultados de otra instrucción, de manera que ambas no pueden ejecutarse de forma solapada.
RAW: Read After Write
DADD R1, R6, R7
AND R4, R5, R1
Soluciones de Riesgos RAW (Soluciones a la dependencia de datos)
Inserción de Instrucciones NOP (Solución por Software)
Reordenación de código (Solución por Software)
Deteción del Cause (Solución por Hardware)
Adelantamiento (Forwarding)(Solución por Hardware)
En lugar de esperar a que termine, uso el dato del registro temporal
R1 Contiene 45 + el contenido de R2. El simulador lo pone al revez. Primero espera (RAW) y despues se ejecuta (EX)
LOAD O STORAGE SIEMPRE EN LA VERDE SE LIBERA EL REGISTRO
- Recordar que sin forwarding los datos están disponibles en la primera mitad de la etapa WB (violeta).
- Pensar también que al ser una instrucción de load (LD) el dato para forwarding está disponible en la etapa MEM (verde). No es un ADD que el dato está disponible en la etapa EX (roja).
- En las dos figuras anteriores se muestra la dependencia de datos separada por dos instrucciones.
- El primer caso sin forwarding y el segundo con forwarding.
- Vemos que con la “separación” de dos instrucciones, desaparece la dependencia de datos.
- Viendo cualquiera de las dos figuras anteriores, no podemos decir si está habilitado ó no el forwarding. La “separación” entre instrucciones elimina la dependencia.
Clase 7 Seguimos con Segmentación de Intrucciones
Riesgos de Control
Soluciones por Software
Soluciones por Hardware
La mejor estrategia que no existe es de identificar si es un salto o no en la etapa amarilla (IF)
BTB: Branch Target Buffer
- En la etapa ID se comprueba si el salto se lleva a cabo ó no y donde saltar.
- No se puede comprobar antes porque primero hay que decodificar la instrucción.
- Si en la etapa IF se pudiera saber si hay que saltar ó no, el pipe tomaría el camino correcto.
- ¿Pero cómo saber si la instrucción es un salto si todavía no fue decodificada?
- Se “agrega” en la etapa IF una memoria “muy rápida” (BTB) donde se almacenan las direcciones (IP) de memoria donde están los saltos solamente. Si saltó ó no la última vez y la dirección donde saltó.
- Cada vez que se busca una instrucción se comprueba si esta dirección está en la tabla (BTB). Si está es porque es un salto.
- Así sabemos que es un salto, sin decodificar, y si saltó y donde la última vez.
Resumen de todos los pasos
El Paso siguiente - RISC
- Computadoras de repertorio reducido de instrucciones.
- Características principales:
- Gran número de registros de uso general ó mejorar tecnología de compiladores para optimizar el uso de los registros.
- Repertorio de instrucciones limitado y sencillo.
- Énfasis en la optimización de la segmentación de instrucciones.
Inconvenientes del CISC
- El software resulta mucho más caro que el hardware
- El nivel del lenguaje era cada vez más complicado.
- Salto semántico
- Diferencias entre operaciones HLL y operaciones de la Arquitectura
- Todo esto conduce a:
- Repertorios de instrucciones grandes
- Más modos de direccionamiento
- Varias sentencias de HLL implementadas en el Hardware
- Por ejemplo, el CASE del VAX
Finalidad del CISC
- Facilitar el trabajo del escritor de compiladores.
- Mejorar la eficiencia de la ejecución:
- Secuencias complejas de operaciones en microcódigo.
- Dar soporte a HLL más complejos.
Características de la ejecución
- Se han realizado estudios sobre programas escritos en HLL.
- Operaciones realizadas
- Funcionamiento del procesador e interacción con memoria
- Operandos usados
- Tipos y frecuencia de uso
- Organización de la memoria y modos de direccionamiento
- Tipos y frecuencia de uso
- Secuenciamiento de la ejecución
- Organización del control y del cauce
Estudios dinámicos: se miden durante la ejecución del programa.
Buffer Circular
Clase 8 Memoria
Sistema de Memoria
- Los programadores desean acceder a cantidades ilimitadas de memoria rápida.
- Solución práctica:
Jerarquía de memoria
- organizada en niveles que son ubicados en distintos lugares físicos
- fabricados con tecnologías diferentes que se gestionan de manera independiente
Jerarquía de Memoria
- Objetivo: la velocidad del sistema deberá ser, aproximadamente, la del nivel más rápido al costo del nivel más barato.
- A medida que nos alejamos de la CPU, cada nivel inferior es más grande, más lento y más barato que el nivel previo (o superior) en la jerarquía.
- Debe haber correspondencia de direcciones en los distintos niveles.
Propiedades a cumplir
- Inclusión
- Los datos almacenados en un nivel han de estar almacenados en los niveles inferiores a él.
- Coherencia
- Las copias de la misma información en los distintos niveles deben contener los mismos valores.
¿Porqué funciona la jerarquía?
Principio de localidad de referencias
- Localidad Temporal: los elementos de memoria referenciados recientemente (datos o instrucciones), volverán a serlo en un futuro próximo => subo la palabra de nivel.
- Localidad Espacial: los elementos de memoria cuyas direcciones están próximas a los últimos referenciados serán referenciados. => subo un bloque (con la palabra) de nivel.
Memoria Cache
Funcionamiento de la cache
- La CPU solicita contenido de 1 dirección de memoria.
- La cache ¿tiene ese dato?
- Si es así, la obtiene de la cache (rápidamente).
- Si no está, se lee el bloque que contiene esa dirección desde la memoria principal y copia en la cache.
- Después, la cache entrega el dato requerido a la CPU.
La cache incluye etiquetas para identificar qué bloque de la memoria principal está en cada una de sus líneas.
Ubicación de un bloque
Correspondencia directa. Un bloque sólo puede estar almacenado en un lugar de la caché.
- Nº línea caché = Nº bloque ref. mod Nº líneas caché
Correspondencia totalmente asociativa. Un bloque puede almacenarse en cualquier lugar de la caché.
Correspondencia asociativa por conjuntos. Un bloque puede almacenarse en un conjunto restringido de lugares en la caché.
- Un conjunto es un grupo de líneas de la caché.
- Nº conjunto = Nº bloque ref. mod Nº conjuntos caché
Correspondencia Directa: ventajas y desventajas
- Simple.
- Poco costosa.
- Hay una posición concreta para cada bloque dado:
- si un programa accede a dos bloques que se corresponden a la misma línea (diferentes bloques de memoria principal) de forma repetida, las pérdidas de cache (desaciertos) serán muy grandes.
Correspondencia Asociativa: ventajas y desventajas
- Un bloque de memoria principal puede colocarse en cualquier línea de la cache.
- La etiqueta identifica unívocamente un bloque de memoria.
- Todas las etiquetas de las líneas se examinan para buscar una coincidencia.
- Búsqueda costosa (en tiempo principalmente).
Corres. asoc. por conjuntos: ventajas y desventajas
- Combina lo mejor de las otras correspondencias
- La cache se divide en un grupo de conjuntos.
- Cada conjunto contiene un número de líneas
- N vías, con N=2, 4, 8 … etc.
- Cada conjunto contiene un número de líneas
- Un bloque determinado corresponderá a cualquier línea de un conjunto determinado.
- El bloque B puede asignarse en cualquiera de las líneas del conjunto i.
Política de reemplazos
- Algoritmos de sustitución
- En correspondencia directa:
- el que ocupa el lugar del nuevo
- En correspondencia asociativa:
- LRU (menos recientemente usado)
- FIFO (más antiguo)
- LFU (menos frecuentemente usado)
- Aleatoria
- En correspondencia directa:
Algoritmos de sustitución
Correspondencia directa
- No hay elección.
- Sólo hay una posible línea para cada bloque.
- Se necesita una sustitución de esa línea (sí o sí).
Correspondencias asociativas
- Los algoritmos deben implementarse en hardware (para conseguir velocidad).
Menos recientemente usado (LRU)
- Requiere controles de tiempos
- En correspondencias asociativas por conjuntos de 2 vías. ¿Cuál de las 2 líneas es la LRU?
Primero en entrar - primero en salir (FIFO)
- Requiere controles de acceso.
- Se sustituye aquella línea que ha estado más tiempo en la cache.
Menos frecuentemente usado (LFU)
- Requiere controles de uso.
- Se sustituye aquella línea que ha experimentado menos referencias.
Aleatoria
- Se sustituye una línea al azar.
Política de escritura
- Se debe evitar inconsistencia de memorias en el caso de escrituras.
Tener en cuenta:
- La CPU escribe sobre una línea de cache
- El bloque de memoria principal correspondiente debe ser actualizado en algún momento.
- Un módulo E/S puede tener acceso directo a la memoria principal.
- En procesamiento paralelo, las múltiples CPU pueden tener caches individuales.
Política de escritura: en acierto
-
Write-through (Escritura inmediata):
- Se actualizan simultáneamente la posición de la caché y de la memoria principal.
- Con múltiples CPU, observar el tráfico a memoria principal para mantener actualizada cada caché local.
- Se genera mucho tráfico y retrasa la escritura.
- Se actualizan simultáneamente la posición de la caché y de la memoria principal.
-
Write-back (Post-escritura):
- La información sólo se actualiza en la caché.
- Se marca como actualizada ⇒ bit de “sucio”.
- La memoria principal se actualiza en el reemplazo y puede contener información errónea en algún momento.
- La información sólo se actualiza en la caché.
Política de escritura: en fallo
-
Write allocate:
- La información se lleva de la memoria principal a la caché. Se sobreescribe en la caché.
- Habitual con write-back.
- La información se lleva de la memoria principal a la caché. Se sobreescribe en la caché.
-
No-write allocate:
- El bloque no se lleva a memoria caché. Se escribe directamente en la memoria principal.
- Habitual con write-through.
- El bloque no se lleva a memoria caché. Se escribe directamente en la memoria principal.
Clase 9 Memoria Cache
Me dormi, no explico nada relevante creo xd
Clase 10 Buses del Sistema
Estructuras de interconexión
- Todas las unidades han de estar interconectadas.
- Existen distintos tipos de interconexiones para los distintos tipos de unidades:
- Memoria
- Módulo de E/S
- Procesador
Interconexión de la memoria
- Recibe y entrega datos.
- Recibe direcciones (ubicación de trabajo).
- Recibe señales de control
- Leer
- Escribir
- Temporizar
Problemas de un único bus
- Conectar gran número de dispositivos a un bus produce Retardos de propagación
- Si el control del bus pasa de un dispositivo a otro, puede afectar sensiblemente a las prestaciones.
- La mayoría de los sistemas utilizan varios buses para solucionar estos problemas.
- Jerarquía de buses
Clase 11 Procesadores Superescalares
Procesadores Superescalares
Segmentado de Cause
Procesador Superescalar Segmentado
Bueno, como tengo que repasar, voy a emprezar con las clases
Final 1
Pregunta 1
a) ¿Qué métodos para pasaje de argumentos podemos utilizar en una computadora? b) ¿Cuáles son las diferenciasa en la terminación de una subrutina y un gestor de interrupción?
Pregunta 2
a) Esquematice y describa la estructura interna de un Controlador Programable de Interrupciones. b) Describa cómo funciona la gestión de E/S programa con espera de Respuesta
Pregunta 3
a) ¿
1. Explique los métodos de pasaje de argumentos a procedimientos o funciones.
El pasaje de argumentos a procedimientos o funciones pueden ser:
Vía Registros
: El número de registros es la principal limitación. Es importante documentar qué registros se usan.Vía Memoria
: Se usa un área definida de memoria (RAM). Difícil de estandarizarVía Pila (Stack)
: Es el método más ampliamente usado. El verdadero “pasaje de parámetros”. Independientemente de memoria y registros. Hay que comprender bien cómo funciona porque la pila es usada tanto por el usuario como por el sistema.
2. ¿Qué es una pila? Describir el comportamiento con anidamiento de múltiples procedimientos/funciones utilizando pila.
La pila o stack es una estructura de datos que sigue el principio LIFO y se utiliza para gestionar la ejecución de programas y el uso de memoria de manera eficiente. Es un bloque de direcciones de memoria reservado para esta funcionalidad.
Consta de dos operaciones básicas:
- PUSH -> Agregar (apilar) un elemento en la parte superior de la pila.
- POP -> Retirar (desapilar) el elemento superior de la pila.
Cuando anidamos múltiples procedimientos o funciones utilizando una pila, se está agregando llamadas a funciones dentro de otras funciones. Cada vez que se llama a una nueva función, se agrega un nuevo “marco de pila”, que contiene variables locales, parámetros, la dirección de retorno, y cualquier otra información necesaria para la ejecución de esa función.
A medida que las funciones anidadas se completan, sus marcos de pila se retiran de la pila, y el control regresa a la función que las llamó.
Se debe:
1)
Salvar el estado del BP2)
Salvar el estado de SP3)
Reservar espacio para datos locales (opcional)4)
Salvar valores de otros registros (opcional)5)
Acceder a parámetros
Luego, para retornar:
- Los registros salvados deben ser descargados en orden inverso
- Si se reservó espacio para variables locales, se debe reponer SP con el valor de BP que no cambió durante el procedimiento
- Reponer BP
- Volver al programa que llamó al procedimiento con RET.
1. ¿Qué es una interrupción? ¿Cuál es la función de un controlador de interrupciones?
Una interrupción es el mecanismo mediante el cual se puede interrumpir el procesamiento normal de la CPU. Pueden ser origen interno o externo a la misma.
La función de un controlador de interrupciones es gestionar y coordinar las interrupciones. Se encarga de determinar qué dispositivo o evento generó la interrupción, priorizarlas en caso de múltiples interrupciones simultáneas y luego redirigir el flujo de ejecución del procesador hacia un programa de manejo de interrupciones específico.
2. Describa el mecanismo de interrupción.
El mecanismo de interrupción funciona de la siguiente manera:
1) Generar la interrupción
: Un dispositivo o componente del sistema detecta un evento que requiere atención, por lo que genera una señal de interrupción.2) Interrupción del procesador
: Cuando se genera una interrupción, el procesador suspende temporalmente la ejecución del programa actual y cambia su enfoque hacia el controlador de interrupciones.3) Guarda el estado
: Antes de manejar la interrupción, el procesador guarda el estado actual del programa en ejecución. Esto incluye la posición del programa en la que se detuvo, los registros de la CPU y otros datos relevantes.4) Rutina de manejo de interrupciones
: El controlador de interrupciones determina la naturaleza de la interrupción y consulta una tabla de vectores de interrupción que contiene direcciones de memoria de rutinas específicas de manejo de interrupciones. Estas rutinas son porciones de código que se encargan de gestionar el evento específico asociado con la interrupción.5) Ejecución de la rutina de manejo
: El procesador comienza a ejecutar la rutina de manejo de interrupciones correspondiente. Esta rutina se encarga de procesar el evento que generó la interrupción. Una vez que la rutina ha sido ejecutada, el control es devuelto al punto en el programa donde se detuvo inicialmente.6) Restauración del estado
: Después de que se maneja la interrupción, el procesador restaura el estado previo guardado, incluyendo los registros y la posición del programa, permitiendo que el programa original se reanude como si la interrupción nunca hubiera ocurrido.7) Continuación de la ejecución
: Con el estado restaurado, el programa original continúa su ejecución desde el punto en el que se interrumpió.
El mecanismo de interrupción permite a los sistemas manejar eventos en tiempo real, realizar tares de gestión de dispositivos y responder eficazmente a situaciones imprevistas sin detener por completo la operación del sistema.
3. ¿Cuáles son las diferencias en la terminación de una subrutina y un gestor de interrupción?
La subrutina regresa al programa principal utilizando la instrucción de retorno RET. En cambio, un gestor de interrupción lo hace después de manejar dicha interrupción, o con la instrucción de retorno IRET.
La instrucción IRET es similar a una instrucción RET, por utilizar la pila, pero recupera una copia del registro de estado y la dirección de retorno
4. Explique características y tratamiento de interrupciones múltiples.
Las interrupciones múltiples se refiere a la situación en la que ocurren varias interrupciones mientras se está manejando una interrupción previa.
Las características a tener en cuenta son:
Prioridad de interrupciones
: Las interrupciones suelen tener un nivel de prioridad asignado. Cuando se producen múltiples interrupciones, el sistema debe determinar cuál de ellas se manejará primero en función de su prioridad.Máscara de interrupciones
: En algunos sistemas, es posible desactivar temporalmente ciertas interrupciones (de menor prioridad) utilizando máscaras de interrupción.Nivel de anidación
: El sistema debe ser capaz de manejar múltiples niveles de anidación de interrupciones. Si se está manejando una interrupción y ocurre otra de mayor prioridad, el sistema debe ser capaz de suspender temporalmente la primera interrupción, manejar la segunda y luego regresar al manejo de la primera.Protección del estado del sistema
: Durante un manejo de una interrupción, se deben tomar medidas para proteger el estado actual del sistema.
Esto generalmente implica guardar los registros y datos críticos antes de comenzar a manejar la interrupción y restaurarlos después de que se haya completado el manejo de la interrupción.
El tratamiento de interrupciones múltiples puede variar, pero en general sigue un enfoque de manejo de interrupciones en cascada. Los pasos que suele seguir son los siguientes:
1)
El sistema determina la prioridad de las interrupciones en cola y selecciona la de mayor prioridad para manejarla primero.2)
Se guarda el estado actual del sistema, incluidos los registros y otros datos relevantes, para que pueda restaurarse más tarde.3)
Se ejecuta la rutina de manejo de la interrupción correspondiente a la interrupción seleccionada.4)
Después de que se complete el manejo de la interrupción, se restaura el estado del sistema que se guardó previamente.5)
Si aún quedan interrupciones en cola, el sistema selecciona la siguiente interrupción de mayor prioridad y repite el proceso.6)
Cuando no quedan interrupciones en cola o cuando se han manejado todas las interrupciones necesarias, se reanuda la ejecución normal del programa.
5. Describa las características y el funcionamiento de un PIC.
Un PIC (Controlador Programable de Interrupciones) es un dispositivo usado para combinar varias fuentes de interrupciones sobre una o más líneas del CPU, mientras que permite que los niveles de prioridad sean asignados a sus salidas de interrupción.
Los PICs tienen un conjunto común de registros:
- IRR, petición de interrupciones, especifica qué interrupciones están pendientes de reconocimiento, suele ser un registro interno que no puede ser accedido directamente.
- ISR, interrupción en servicio, especifica qué interrupciones han sido reconocidas, pero todavía están esperando por un final de interrupción (EOI).
- IMR, máscara de interrupciones, especifica qué interrupciones deben ser ignoradas y no reconocidas.
- INT0…INT7, cada uno de estos registros se relaciona con un vector de interrupción.
El funcionamiento de un PIC implica varios pasos:
1) Detección de interrupciones
: El PIC monitorea constantemente las líneas de interrupción de los dispositivos periféricos y otros eventos en busca de cambios en su estado. Cuando se detecta una interrupción, se genera una solicitud de interrupción hacia el procesador.2) Priorización
: Si hay múltiples interrupciones pendientes, el PIC selecciona la de mayor prioridad según su configuración. Esto se basa en las prioridades asignadas a las líneas de interrupción.3) Enmascaramiento
: Antes de notificar al procesador sobre una interrupción, verifica si la línea de interrupción está habilitada o enmascarada. Si la línea está enmascarada, la interrupción se ignora.4) Vectorización
: Una vez que se determina la interrupción que debe atenderse, el PIC envía un vector de interrupción a la CPU. Este vector contiene información sobre la fuente de la interrupción y apunta a la dirección de memoria de la rutina de manejo de interrupciones correspondiente.5) Procesamiento de interrupción
: La CPU recibe el vector de interrupción y ejecuta la rutina de manejo de interrupciones asociada. Esta rutina es la encargada de gestionar la interrupción, guardar el estado necesario y realizar cualquier acción requerida.6) Fin de interrupción (EOI)
: Después de manejar la interrupción, la CPU envía una señal de Fin de Interrupción (EOI) al PIC para indicar que ha completado el manejo de la interrupción actual. Esto permite que el PIC se prepare para la siguiente interrupción si la hubiera.
6. Describa las distintas fuentes de interrupción (tipos de interrupción) que conozca y el tratamiento a realizar cuando hay múltiples interrupciones.
Las interrupciones son el mecanismo mediante el cual se puede interrumpir el procesamiento normal de la CPU. Estas pueden ser de origen interno o externo a la CPU. Las interrupciones pueden ser:
Por Hardware
: Son las llamadas “verdaderas” interrupciones. Son generadas por dispositivos de E/S (como teclado o mouse) para señalar eventos (como la pulsación de una tecla). El tratamiento implica determinar la fuente de la interrupción, ejecutar la rutina de manejo correspondiente y, si hay múltiples interrupciones de hardware, priorizarlas según su importancia y manejarlas secuencialmente en función de su prioridad.Traps/Excepciones
: Son interrupciones por hardware creadas por el procesador en respuesta a ciertos eventos como: condiciones excepcionales (overflow en la ALU), falla de programa (tratar de ejecutar una instrucción no definida), fallas de hardware (error de paridad de memoria) o, accesos no alineados o a zonas de memoria restringidas.Por Software
: Son generadas por instrucciones explícitas que afectan al procesador de la misma manera que las interrupciones por hardware, generalmente usadas para hacer llamadas a funciones del sistema operativo
Cuando hay múltiples interrupciones puede que al atender una se inhabiliten las otras, por lo que las interrupciones se manejan en orden secuencial, o que se hayan definido prioridades, por lo que una interrupción de prioridad más alta puede interrumpir a un gestor de interrupción de prioridad menor, cuando se ha gestionado la de mayor prioridad el procesador vuelve a las interrupciones previas, y terminadas todas las rutinas de interrupción se retorna a la ejecución normal.
7. Describa las limitaciones existentes al paralelismo a nivel de instrucciones.
El paralelismo a nivel de instrucciones es una técnica que permite que múltiples instrucciones se ejecuten en paralelo dentro de un procesador. Algunas de sus limitaciones son:
Dependencias de Datos:
Las dependencias de datos ocurren cuando una instrucción depende de los resultados de una o más instrucciones anteriores. Esto puede limitar la cantidad de instrucciones que pueden ejecutarse en paralelo, ya que algunas de ellas deben esperar a que se completen las instrucciones precedentes.Dependencias de Control:
Las dependencias de control se refieren a las instrucciones condicionales, como las instrucciones de salto condicional. El procesador no puede prever de antemano cuál será la próxima instrucción a ejecutar hasta que se resuelva la condición.Limitaciones de Ancho de Bande de Memoria:
El acceso a memoria principal es una operación que puede restringir el paralelismo a nivel de instrucción. Si el procesador necesita acceder repetidamente a la memoria, es posible que deba esperar a que se completen las operaciones de lectura/escritura antes de poder avanzar con otras instrucciones.Tamaño de Ventana de Ejecución:
La cantidad máxima de instrucciones que se pueden emitir y ejecutar en paralelo puede ser limitada por cuestiones de diseño de hardware o por la arquitectura del procesador.Saltos y Llamadas a Subrutinas:
Las instrucciones de salto y las llamadas a subrutinas cambian el flujo de ejecución y pueden requerir la cancelación de instrucciones en vuelo que ya no son válidas debido al salto. Esto puede llevar a penalizaciones de tiempo significativas.
8. ¿A que método de atención lo conocemos como de interrupciones vectorizadas?¿Cuándo, por qué, para qué y cómo utiliza una de las denominadas interrupciones por software?
En el método de interrupciones vectorizadas, cuando se produce una interrupción, se utiliza un vector de interrupción para direccionar directamente la ejecución del procesador a la ubicación de memoria de la rutina de manejo de interrupciones correspondiente. Se utiliza el número de identificación de la interrupción como índice para buscar en la tabla de vectores, luego el procesador salta directamente a esa dirección de memoria y comienza a ejecutar la rutina de manejo de la interrupción.
9. Esquematice y describa la estructura interna de un controlador programable de interrupciones y describa cómo funciona la gestión E/S programada con espera de respuesta
Componentes de la estructura interna de un controlador programable de interrupciones:
IRR (Interrupt Request Register):
Registro de petición de interrupción, indica con bit en 1 las interrupciones demandadas hasta el momento.ISR (In Service Register):
Registro de interrupción en servicio, indica con bit en 1 cuál es la interrupción que está siendo atendida.IMR (Interrupt Mask Register):
Registro de máscara de interrupciones, permite el enmascaramiento selectivo de cada una de las entradas de interrupción, indicando con bit en 1 (Indica cuáles deben ser ignoradas). Tras un reset los bits de este registro quedarán en 0.EOI (End of Interruption):
Fin de interrupción. Como consecuencia, se pone en 0 el bit del ISR correspondiente. Sirve para indicarle al PIC que ya fue atendida la interrupción y la CPU vuelve a la ejecución normal del programa.- INT0 … INT7: 8 registros, donde se cargan los id de interrupciones.
La gestión de E/S programada con espera de respuesta se refiere a un método en el que un programa solicita una operación de E/S y luego espera activamente hasta que se complete la operación. Esto se utiliza en situaciones en las que el programa necesita el resultado de la operación antes de continuar su ejecución. El funcionamiento de este proceso es el siguiente:
1) Solicitud de E/S
: El programa emite una solicitud de E/S al dispositivo periférico o al controlador correspondiente.2) Inicio de la operación
: El controlador de E/S inicia la operación y se pone en marcha para realizar la tarea solicitada.3) Espera activa
: Mientras la operación de E/S está en curso, el programa entra en un bucle de espera activa (verifica continuamente el estado de la operación).4) Finalización de la operación
: Cuando la operación de E/S se completa, el controlador de E/S indica su finalización al programa. Esto podría ser a través de una interrupción por hardware o mediante el establecimiento de una bandera de estado.5) Procesamiento de datos
: Una vez que el programa recibe la notificación de que la operación de E/S ha finalizado, puede procesar los datos obtenidos de la operación, si es necesario, y luego continuar con su ejecución normal.
1. ¿Qué es segmentación de cauce?
La segmentación de cauce (pipelining) es una forma de organizar el hardware de la CPU para realizar más de una operación al mismo tiempo. Consiste en descomponer el proceso de ejecución de las instrucciones en fases o etapas que permitan una ejecución simultánea.
2. ¿Qué ventajas proporciona su implementación?
La implementación de la segmentación de cauce proporciona varias ventajas, entre ellas:
- Mejora el rendimiento -> La ejecución en paralelo acelera la velocidad de ejecución de las instrucciones.
- Aprovechamiento de recursos -> Mientras una unidad de ejecución realiza una operación, las etapas anteriores y posteriores pueden estar ocupadas con otras instrucciones, lo que permite un uso más completo de las unidades funcionales.
- Mayor paralelismo -> Al permitir que múltiples instrucciones se ejecuten al mismo tiempo, la segmentación de cauce aumenta el nivel de paralelismo a nivel de instrucciones en un procesador.
- Reducción del ciclo de reloj por instrucción -> Reduce el tiempo necesario para ejecutar una instrucción completa al dividirla en etapas más pequeñas.
- Mejora de la predicción de saltos -> Puede combinarse con técnicas de predicción de saltos para reducir las penalizaciones por fallos de predicción de saltos, lo que resulta en una ejecución más eficiente en las instrucciones.
3. Tres motivos de retardo de cauce en segmentación de cauce
Hay tres motivos comunes de retardo de cauce en segmentación de cauce:
1) Dependencia de Datos
: Ocurre cuando una instrucción depende de los resultados de una instrucción anterior que aún no ha completado su etapa de ejecución. Los tipos de dependencia de datos son:a)
RAW – Read after Writeb)
WAR – Write after Readc)
WAW – Write after Write
2) Dependencia de Control
: Ocurren debido a las decisiones de salto condicional en el flujo de control del programa. Cuando una instrucción de salto condicional se encuentra en el cauce, el procesador puede no conocer la dirección de la próxima instrucción hasta que se resuelva la condición.3) Dependencias Estructurales
: Ocurren cuando dos o más instrucciones compiten por el mismo recurso funcional en una etapa específica del cauce.
Para mitigar estos retrasos y mejorar el rendimiento en la segmentación de cauce, se utilizan técnicas como la ejecución fuera de orden, el renombramiento de registros y la predicción de saltos avanzada.
4. Describa las dependencias de los datos que pueden afectar un cauce segmentado.
Los tipos de dependencias de datos son:
Read After Write (RAW)
: Ocurre cuando una instrucción en el cauce necesita leer un registro o dato que está siendo escrito por una instrucción anterior en el mismo cauce.Write After Read (WAR)
: Ocurre cuando una instrucción en el cauce necesita escribir un registro o dato que está siendo leído por una instrucción anterior en el mismo cauce. A veces se denominan “antidependencias”.Write After Write (WAW)
: Ocurre cuando dos instrucciones en el cauce necesitan escribir en el mismo registro o dato. A veces se denominan “dependencias de salida”.
5. Explique los atascos producidos por saltos
Los atascos producidos por saltos son situaciones en las que la ejecución de instrucciones en un cauce segmentado se ve afectado negativamente debido a la presencia de instrucciones de salto condicional o incondicional. Hay tres tipos principales de atascos de control causados por saltos:
- Salto condicional tomado, cuando la condición se resuelve como verdadera, lo que significa que se debe tomar el salto. Las instrucciones que siguen al salto condicional y ya han avanzado deben descartarse, lo que conduce a un desperdicio de ciclos de reloj y una penalización en el rendimiento.
- Salto condicional no tomado, cuando la condición se resuelve como falsa, lo que significa que no se toma el salto. Las instrucciones que siguen al salto deben continuar su ejecución.
- Salto incondicional, ocurre cuando se encuentra una instrucción de salto incondicional. Las instrucciones que siguen ya han avanzado en el cauce y se encuentra en diferentes etapas de ejecución. Cuando se toma el salto, estas instrucciones en etapas posteriores deben ser descartadas, lo que resulta en un desperdicio de ciclos de reloj y una penalización en el rendimiento.
6. Describa el problema y posibles soluciones ante riesgos por transferencia de control de programa.
Los riesgos por transferencia de control de programa se refiere a situaciones en las que la ejecución de instrucciones en un procesador segmentado se ve afectada negativamente debido a saltos de programa, como instrucciones de salto condicional o incondicional. Estos riesgos pueden dar lugar a retrasos en la ejecución de instrucciones y pueden afectar el rendimiento general del procesador.
Los riesgos por transferencia de control pueden ser:
- Salto condicional tomado
- Salto condicional no tomado
- Salto incondicional
Las posibles soluciones:
-
Adelantar la resolución de los saltos a la etapa de decodificación
- En ella se decodifican y se sabe que es un salto
- Se puede evaluar la condición de salto (con restador)
- Se puede calcular la dirección de salto (con sumador)
-
Para tratamiento de saltos hay:
- Técnica Hardware -> Predicción de saltos:
- Técnicas estáticas:
- Predecir que nunca se salta: Asume que el salto no se producirá y siempre capta la siguiente instrucción.
- Predecir que siempre se salta: Asume que el salto se producirá y siempre capta la instrucción destino del salto.
- Técnicas dinámicas:
- Conmutador saltar/no saltar: Basado en la historia de las instrucciones. Es eficaz en bucles.
- Tabla de historia de saltos (Branch-target buffer): Pequeña cache asociada a la etapa de búsqueda (F). Tiene 3 campos, dirección de una instrucción de bifurcación, información de la instrucción destino y N bits de estado (historia de uso).
- Predecir según el código de operación:
- Hay instrucciones con más probabilidades de saltar.
- Flujos múltiples:
- Varios cauces (uno por cada opción de salto). Precaptan cada salto en diferentes cauces. Se debe utilizar el cauce correcto.
- Precaptar el destino de salto:
- Se precapta la instrucción destino del salto, además de las instrucciones siguientes a la bifurcación. La instrucción se guarda hasta que se ejecute la instrucción de bifurcación.
- Buffer de bucles:
- Es una memoria muy rápida, gestionada por la etapa de captación de instrucción del cauce. Comprueba el buffer antes de hacer la captación de memoria.
- Técnicas estáticas:
- Técnica Hardware -> Predicción de saltos:
-
Técnica Software -> Salto retardado o de relleno de ranura de retardo:
- El compilador introduce instrucciones que se ejecutarán en cualquier caso después de la instrucción de salto, y de no ser posible se utilizan instrucciones NOP.
- Requiere reordenar las instrucciones.
1. Describa las características funcionales del Acceso Directo a Memoria (DMA) (Etapas de transferencia).
El Acceso Directo a Memoria permite que un dispositivo periférico acceda a memoria principal (RAM) directamente sin la intervención de la CPU. El DMA acelera la transferencia de datos entre la memoria y los dispositivos periféricos, lo que libera recursos de la CPU para otras tareas. Las características funcionales del DMA incluyen varias etapas de transferencia:
Solicitud:
La primera etapa implica que un dispositivo periférico envíe una solicitud de acceso a la memoria al controlador DMA. Esta solicitud incluye información sobre la dirección de memoria de origen y destino, la cantidad de datos a transferir y el sentido de la transferencia.Selección del Canal DMA:
Los sistemas informáticos pueden tener múltiples canales, cada uno dedicado a un tipo específico de dispositivo o función. En esta etapa, el sistema debe asignar el canal DMA a la solicitud entrante.Configuración:
Una vez seleccionado el canal DMA, se configura para que coincida con los requisitos de la transferencia de datos. Esto incluye la configuración de las direcciones de inicio y finalización en la memoria, el tamaño de la transferencia y otras características relevantes.Acceso Directo:
El controlador DMA se comunica directamente con la memoria principal y el dispositivo periférico para iniciar la transferencia de datos. La CPU no participa en la transferencia en sí, lo que permite que la CPU realice otras tareas mientras se lleva a cabo la transferencia.Transferencia de Datos:
El controlador DMA transfiere datos entre la memoria y el dispositivo periférico utilizando el canal DMA configurado previamente. La transferencia puede ser en una dirección o bidireccional.Finalización:
Cuando se completa la transferencia, el controlador DMA notifica al dispositivo periférico y actualiza cualquier estado relevante. La CPU puede ser notificada de la finalización de la transferencia mediante una interrupción o un mecanismo similar.Liberación del Canal DMA:
Después de completar la transferencia, el canal DMA se libera para su uso posterior. Esto permite que otros dispositivos o solicitudes utilicen el canal DMA según sea necesario.