Tema 5 - Periféricos y Técnicas de gestión de E/S
Periféricos
Introducción
La unidad de entrada/salida es la encargada de comunicar el ordenador con el exterior a través de los periféricos (ratón, teclado, pantalla, micrófono, altavoz, …)
Los periféricos son aquellos dispositivos que permiten al ordenador comunicarse con el exterior, ya sea con un humano o con otro dispositivo. Podemos diferenciar los siguientes tipos
- Periféricos de entrada
- Periféricos de salida
- Periféricos de entrada/salida
- Periféricos de almacenamiento
La CPU puede comunicarse con los periféricos a través del controlador de los mismos. Este controlador cuenta con:
- Registro de control → Para recivir ordenes de la CPU
- Registro de estado → Donde puede comunicar a la CPU en estado en que se encuentra el dispositivo
- Registro de datos → Donde puede mandar la información generada por el periférico hacia la CPU
Otras características de los controladores
- Control y temporización del flujo de datos
- Reconocimiento de la dirección del dispositivo
- Almacenamiento temporal de datos (buffer)
- Detección de errores en la transferencia
Polling (sondeo)
El polling es el nombre que recive la acción periódica de un procesador de consultar a los controladores si hay datos para leer
Ratón
Este dispositivo se inventó a finales de los 60 por Douglas Engelbart. El aparato tenía tres botones (btn. principal, secundario, rueda). Inicialmente, estos contaban con una rueda que en contacto con una superficie, esta giraba, en su interior, unos aparatos capturaban la rotación en el eje e para después codificarse y transmitir dicho movimiento al ordenador, el cual recreaba el moviento en los ejes y
Disco duro magnético (Hard Drive Disk)
Este dispositivo permite el almacenamiento masivo de datos, con gran fiabilidad.
Este consta un cierto número de platos/discos de doble cara las que llamaremos caras (heads). Cada una de estas cabezas está dividida en pistas (tracks), que són circunferencias concentricas respecto del centro del la cara. A su vez, estas pistas se dividen en sectores
La información es leida por la aguja situada junto a la cara donde se ubica el dato que queremos leer
Imágen
Características generales
- Los discos giran a una velocidad constante entre y
- Diametro de 3.5 pulgadas (~9cm)
- Tiempo de acceso: a
- Gran capacidad: Terabytes
- Coste por bit:
La diferencia entre cilindros (cylinders) y pistas (tracks) es que el cilindro es el número de pistas de una única cara (este número no cambia si añadimos más discos). Mientras que las pistas se refiren a una circunferencia concreta de una cara (si añadimos más discos, tendremos más pistas totales)
Direccionamiento de un disco duro
Direccionamiento CHS (Cylinder-Head-Sector)
El direccionamiento CHS sirve para localizar un dato en en disco duro. Este dato se encontrará en un cilindro concreto (cilinder (C)), en una cara/cabezal concreto (head (H)) y en un sector determinado (sector (S)).
Una coordenada en este direccionamiento se expresa como
C/H/S
siendo estos:C
→ Número de cilindro[0, totalCils-1]
(💡 El cilindro es el exterior)
H
→ Número de cara[0, totalCaras
-1
]
(💡 La cara es la superior)
S
→ Número de sector[1, SectoresPorPista]
(⚠️ El primero es , 💡 incrementa en el sentido de las agujas del reloj)
Estas coordenadas también se usar para denotar la geometría del dispositivo siendo
4/4/8
(4 sectores - 4 caras - 8 sectores). Debemos tener el cuenta que la dirección máxima será 3/3/8
(dado que los cilidros y las caras empiezan por )Algunos datos importantes
SpT
(sectors per track) → Número de sectores por pista
HpC
(heads per cylinder) → Número de caras totales (discos*2)
NC
(number of cylinders) → Número de cilindros
SS
(sector size) → Tamaño del sector en bytes
- Capacidad total de un disco duro →
SS
SpT
NC
HpC
En la dirección (CHS)
0/0/1
se encuentra la master boot record y la tabla de particiones del discoSin embargo, aunque hoy en día los dispositivos de almacenamiento no contengan discos, estos aceptan valores CHS que serán transformados a la dirección correspondiente
Desventajas del direccionamiento CHS
Capacidad máxima de 8GB (7.84GiB)
Esta limitación es cosa del pasado, dado que se consideraba que esa el la capaciadad máxima que se podía conseguir al no poder incrementar la capacidad en cuanto a número de heads, de sectores en una pista, …
Pone al descubierto la geometría del dispositivo
Esta desventaja supone que el dispositivo está basado en discos, y además requiere que conozcamos las características de este para poder introducir los valores adecuados.
Las soluciones actuales trantan al dispositivo como una caja negra
Direccionamiento LBA (Logical Block Addressing)
Este direccionamiento (virtual/lógico) viene a solucionar los problemas del CHS al encapsular la geometría del dispositivo en una única dirección secuencial (desde el )
Este direccionamiento enumera de los diferentes sectores en el siguiente orden:
- Cilindro (exterior) del cabezal (superior) →
0/0/k
- Cilindro (exterior) del cabezal (superior) →
0/l/k
- Cilindro (exterior) del cabezal (superior) →
m/l/k
Al encapsular la posición física de un dato, podemos reasignar sectores defectuosos
Calculo LBA → CHS
Calculo CHS → LBA
Algunos datos importantes
→ División entera
SpT
(sectors per track) → Número de sectores por pista
HpC
(heads per cylinder) → Número de caras totales (discos*2)
C
,H
,S
→ Cilindro, Cara, Sector
LBA
→ Dirección en el direccionamiento LBA
Tiempos de acceso de un disco duro
El tiempo de acceso se calcula como la suma de los siguientes tiempos
Tiempo de búsquedaTiempo que tarda la aguja en desplazarse a un cilindro desde el cilindro actual
Latencia rotacionalTiempo que tarda en rotar el disco hasta llegar al sector deseado. El tiempo que tarda en dar una vuelta se calcula usando las del disco
Tiempo de transferenciaTiempo de transferencia, tiempo que tarda el leer el sector entero
Tiempo de controladorTiempo que tarda el driver en procesar los datos leidos (despreciable)
El tiempo de acceso a un dato es variable ya que depende de la posición inicial de la aguja respecto de la posición del dato
Disco duro de estado sólido (Solid State Drive)
Este dispositivo de almacenamiento masivo es una alternativa a los HDD
Estos están basados en semiconductores (MOSFET) en lugar de discos que rotan y campos magnéticos.
Las ventajas de estos discos duros son:
- No tienen partes móviles
- Más resistentes
- Más rápidos
- Acceso a los datos en tiempo constante
- No hacen ruido
Desventajas
- Más caros
- Menor vida util
- Menor capacidad
De este tipo de memorias, surgen unas que se conocen como memorias flash, de las que existen dos tipos (los nombres vienen dados por su organización interna)
- NOR → Estas memorias se leen de bit a bit (1-bit)
- NAND → Estas unidades se leen en bloques de 16 o 32 bits (32-bit)
Disquete (floppy-disk)
Estos eran similares a los HDD pero más pequeños y con menor capacidad. Su capacidad era de 1.44MB (el cálculo de este valor utiliza un híbrido de base decimal y binaria)
Gestión de las operaciones de E/S
El Sistema Operativo (SO)
El SO hace de interfaz entre los procesos y los periféricos, impidiendo que estos puedan acceder directamente a ellos
Funciones de SO
- Gestionar los permisos de acceso
- Abstraer los detalles de la comunicación con los periféricos
- Gestionar las interrupciones
- Garantizar el acceso de los recursos (redistribuyendo la capacidad de computo entre los diferentes procesos)
Comunicación SO ↔ Periféricos
- El SO envia señales de control a los periféricos
- Los periféricos notifican al SO cuando se completa una operación
- Transferencia de datos entre el SO y los periféricos
Direccionamiento de los periféricos
El porcesador puede comunicarse con los periféricos a través de una dirección asociada a estos. Dicha dirección se publica en el bus de direcciones para informar al periférico que se requiere que este realize alguna operación.
El espacio de direcciones puede ser:
Un espacio de direcciones propio → Para acceder a un dato se hace uso de una dirección en un espacio a parte de la memoria principal. Para consultar una de estas direcciones se hace uso de una instrucción especial para la comunicación con periféricos:input
(lw) youptut
(sw)Ejm: Familia Intel x86
Espacio compartido con la memoria principal → Esto quiere decir que algunas direcciones se reservarán para la comunicación con periféricos. Por lo que al llamar alw
ysw
junto con alguna de estas direcciones, no se hará uso de la memoria sino que se comunicará con en el dispositivo correspondiente (la memoria ignora la operación cuando detecta estas direcciones)Ejm: MIPS, Motorola M68000, MOS Technology 6502
Técnicas de gestión de E/S
Veremos tres técnicas de gestión de E/S (Entrada/Salida, en inglés I/O)
Polling
En la técnica de sondeo/encuesta, el procesador consulta periodicamente a los periféricos para ver si los registros de estado informan de que el dispositivo tiene información, y en ese caso, se hace otra consulta al registro de datos. Esto puede dar lugar a tiempos de espera excesivos por parte del procesador durante la ejecución de este procedimiento.
Este es el método sencillo pero menos eficiente
Interrupciones
Las interrupciones son un suceso asíncrono que se produce como consecuencia de un evento externo.
Cuando se produce una interrupción, el procesador termina de ejecutar la instucción actual, y ejecuta la subrutina correspondiente para atender la interrupción.
Las interrupciones no suponen una carga de trabajo relevante al procesador, ya que solo se deriva el flujo de trabajo cuando ocurren
Prioridad de las interrupciones
Las instrucciones tienen una jerarquía de prioridades por lo que primero se resuelven unas y luego otras. El nivel de atención establece la prioridad mínina de una interrupcción para que el procesador la gestione de inmediato. Dicho nivel de atención se almacena en un registro del procesor.
Cuando una interrupción tiene la prioridad suficiente para ser atendida de inmediato, se guarda el valor de los registros y se ejecuta la Rutina de Tratamiento de Instrucciones (RTI)
Antes de ejecutar la RTI (interrupción con suficiente prioridad)
- Se salta al modo kernel
- Interrumpe la ejecución del proceso actual
- Guarda el contexto del proceso actual (valor de PC y otros registros)
- Inhibe el resto de interrupciones (salvo para interrupciones anidadas)
- Carga en el registro
PC
la dirección de la RTI
- Ejecuta la RTI
Ejecución de la RTI
- Informar del reconocimiento de la interrución
- Desactivar la señal de petición de interrupción
- Guardar todos los registros que van a ser sobreescritos
- Realiza las operaciones de E/S
- Restaura el valor original de los registros guardados
- Finalizar la interrupcuión y volver al punto en el que surgió dicha interrupción
Cuando una instrucción no tiene el nivel de prioridad suficiente, debe esperar a que este baje.
Las instrucciones anidadas permiten la ejecución de una interrupción dentro de otra si esta tiene mayor prioridad
DMA
Direct Memory Access (DMA)
A diferencia de las técnicas anteriores, donde el procesador era el encargado de gestionar la transferencia de datos entre la memoria y el periférico, en este caso el periférico tiene acceso directo a una región de la memoria de forma que la CPU queda libre de responsabilidades
La transferencia de datos queda en manos del controlador de DMA, el cual hace también de maestro del bus de datos
Este controlador hace uso de las interrupciones para informar al procesador del estado de una operación (finalización ó error), pero ya no es necesario que la CPU las atienda de inmediato
Operación a través del controlador de DMA
La CPU comunica al controlador de DMA
- La operación que se va a realizar
- La identidad del dispositivo
- La dirección de inicio del bloque de memoria
- Número de bytes que se van a transmitir
El controlador de DMA se encarga de:
- Obtener el acceso al bus
- Transferir los datos cuando estos están disponibles en el periférico
- Gestionar memoría adicional si la transferencia requiere más espacio
Configuraciones de DMA
Pueden ocurrir diferentes situaciones cuando se requiere que el procesador interactue con el controlador de DMA
Ejecución sin DMA
No hay operaciones DMA pendientes por lo que el procesador continua con el flujo normal del programa
Ejecución con parada de CPU (ráfaga)
Se detiene la ejecución del programa para ejecutar varias operaciones DMA seguidas (ráfaga)
Ejecución de DMA con robo de ciclo
Se intercala una operación DMA con una instrucción del programa. De esta forma no detenemos por completo el programa sino que solo se ralentiza ligeramente
Ejecución de DMA con bus compartido (DMA Transparente)
La CPU cede el control del BUS al DMA en los ciclos en lo que no lo vaya a usar
Ejecución de DMA con memoria multipuerta
Las memorias multipuerta permiten consultar múltiples direcciones a la vez (no se pueden solapar), por lo que se reserva una puerta para la CPU, y el resto para el DMA y otros controladores
Atención a interrupciones
Las instrucciones se atienden al final del último ciclo de cada instrucción, se comprueba si hay instrucciones pendiente y si no, se ejecutan las siguiente instrucción con normalidad
Gestión de las interrupciones en MIPS32
En MIPS, una excepción es una situación que requiere atención inmediata del procesador. Estas pueden ser de varios tipos:
- Excepciones internas → Errores de ejecución: desvordamiento, error de dirección, error de privilegio, error de paridad
- Excepciones externas (interrupciones)→ Generadas por los periféricos, interrumpen la ejecución normal del proceso
- Excepciones por llamadas al sistema → Llamadas a
syscall
Cuando ocurre una excepción, el procesador realiza unas operaciones predefinidas, y luego ejecuta el manejador de excepciónes
El manejador de excepciones es una rutina de servicio que se llama cuando ocurre una excepción el MIPS. Esta subrutina empieza exactamente en la dirección
0x80000180
Existen dos tipos de manejadores
- Reentrante → Permite anidar excepciones
- No reentrante → No permite anidar excepciones
- Es necesario deshabilitar las interrupciones
Podemos definir nuestro propio manejador de excepciones usando la directiva.ktext 0x80000180
, a continuación escribimos en código, finalmente retornamos al valor deEPC
con la instruccióneret
.ktext
Registros del coprocesador en MIPS32
Este coprocesador contiene 32 registros que sirven para la configuración del sistema
Algunos de estos registros son:
VAddr
($8)
Cuando el acceso a una dirección a memoria produce una excepción, este registro contiene dicha dirección
Status
($12)
Registro de estado
- Interrupt mask (IM)
[15-8]
→ Umbral de prioridad de ejecución de las interrupciones
- User mode (UM)
4
→ Modo kernel (0
), usuario (1
)
- Exception level (EXL)
1
→ Procesador normal (0
), procesador ejecutando excepción (1
) (ademásIE=1
)
- Interrupt enable (IE)
0
→ Interrupciones desahabilitadas (0
), instrucciones habilitadas (1
)Los bits que no aparecen aquí pertenecen a la configuración relativa a si el sistema el big/little-endian, si hay más coprocesadores, interrupciones no enmascarables, …Los bits que no hemos descrito es por que estos no aparecen en el debugger del MARS.
Cause
($13)
Contiene la razón de porqué ha saltado la excepciónBranch delay
DB
-31
Se activa si se produce una excepción entre el momento en el que se calcula si se debe hacer un salto (salto condicional) y el momento en el que finalmente se hace dicho saltoEsta es una situación que puede ocurrir debido a que el procesador puede realizar múltiples operaciones a la vez, así como ocurre con los ciclos solapadosPending interrupts
IP
-[15-8]
Se activa el bit correspondiente si hay alguna interrupción pendiende de resolver de este nivel (este valor se actualiza sin importar el valor de la máscara)Si quedan interrupciones pendientes, el procesador las resolverá antes de continuar con la ejecución del proceso (si la máscara lo permite)Exception code
ExcCode
-[6-2]
Núm Nombre Descripción 0IntL
Interrupción externa (periféricos) 4AdEL
Interrupción por dirección erronea (lectura) 5AdES
Interrupción por dirección erronea (escritura) 6IBE
Error de bus en cicloIF
7DBE
Error de bus en cicloMEM
8Sys
Llamada asyscall
9Bp
Breakpoint (debugger) 10RI
Instrucción reservada 12OV
Overflow aritmético 13Tr
Trap (thrown exception by programmer) 15FPE
División por (floats) 16FPOV
Overflow aritmético (floats) 17FPUN
Subdesbordamiento aritmético (floats)
EPC
($14)
Contiene la dirección de la instrucción que al ejecutarse, ha producido la excepción
Cuando se produce una excepción, se realiza automáticamente lo siguiente:
- Se copia el valor de
PC
(instrucción siguiente) aEPC
- Se actualiza el registro
Cause
- Se escribe el código de excepción
- Activar el bit de instrucción pendiente correspondiente (si es una interripción)
- Activar el bit
EXL
del registroStatus
(esto inhive el resto de excepciones)
- Se activa el modo kernel (en MARS, esto no ocurre, se ejecuta en modo user sin restricciones)
- Se copia
0x80000180
(manejador de excepciones) enPC