Introducción a los Sistemas de Entrada/Salida

Anuncio
Introducción a los
Sistemas de Entrada/Salida
Arquitectura de Sistemas Paralelos (1)
Introducción a los sistemas de entrada/salida
Índice y bibliografía
•
•
•
•
Introducción
Módulos de Entrada/Salida
Mapa de Entrada/Salida: común y separado
Métodos de Entrada/Salida
– E/S programada
– E/S por interrupciones
– Acceso directo a memoria
• Ejemplo de dispositivo de E/S
• Operaciones de E/S desde el SO
Bibliografía
– Organización y Arquitectura de Computadores, William Stalling
– Linux Device Drivers, Alessandro Rubini and Jonathan Corbet, O’Reilly
Arquitectura de Sistemas Paralelos (2)
Introducción a los sistemas de entrada/salida
Introducción (I)
• Un computador no puede estar formado sólo por la CPU y la memoria.
Para darle alguna utilidad debe de poder comunicarse con el mundo
exterior. Esto se realiza a través del subsistema de entrada/salida
(módulos de E/S)
• La misión principal del subsistema de E/S es la adaptación de los
dispositivos externos para su conexión al bus del sistema. ¿Por qué no
pueden conectarse directamente?
– A menudo, la velocidad de transmisión de datos de los periféricos es
mucho menor que la de la memoria y la CPU (es necesario amortiguar esa
diferencia de velocidades)
– Debido a la gran variedad de periféricos existentes no es posible incorporar
toda la lógica necesaria para controlar tal diversidad de dispositivos dentro
del procesador
– Los formatos y tamaños de datos de los periféricos suelen ser diferentes a
los utilizados por el computador a los que se conectan
Arquitectura de Sistemas Paralelos (3)
Entrada/Salida
Introducción (II)
• Existen dos esquemas diferentes para la
implementación del subsistema de E/S:
a) Diseñarlo a medida utilizando
componentes básicos
b) Utilizar dispositivos genéricos de E/S y
programarlos convenientemente
(b)
(a)
Arquitectura de Sistemas Paralelos (4)
Módulos de E/S
Definiciones
• Dispositivo externo: elementos que permiten la transferencia de información
entre la CPU y el mundo exterior. Funcionan a modo de interface
transformando la información asíncrona y analógica del mundo exterior a la
información síncrona y codificada del computador
• Módulo de E/S: elementos que permiten la conexión de un dispositivo externo
al bus del sistema. Los términos “controlador”, “procesador de E/S” y “módulo
de E/S” son equivalentes desde el punto de vista funcional:
• Los controladores son módulos de E/S muy sencillos que tienen el
hardware necesario para que funcione el dispositivo externo
• Los procesadores de E/S son auténticos procesadores con un juego
especializado de instrucciones orientado a operaciones de E/S, que son
programados por la CPU, permitiendo un funcionamiento autónomo
• Un dispositivo externo conectado a un módulo de E/S se denomina dispositivo
periférico o simplemente periférico
Arquitectura de Sistemas Paralelos (5)
Módulos de E/S
Diagrama de bloques de un dispositivo externo
Arquitectura de Sistemas Paralelos (6)
Módulos de E/S
Diagrama de bloques de un módulo de E/S
Arquitectura de Sistemas Paralelos (7)
Módulos de E/S
Funciones (I)
• Las funciones de un módulo de E/S son:
– Control y temporización
– Comunicación con el procesador
– Comunicación con los dispositivos
– Almacenamiento temporal
– Detección de errores
Arquitectura de Sistemas Paralelos (8)
Módulos de E/S
Funciones (II)
• Control y temporización
– Son necesarios para coordinar el tráfico entre dispositivos internos y externos
– Por ejemplo, el control de la transferencia de datos desde un dispositivo
externo al procesador podría implicar la siguiente secuencia de pasos:
1. El procesador pregunta por el estado del dispositivo
2. El módulo de E/S devuelve el estado del dispositivo
3. Si el dispositivo está listo, el procesador solicita la transferencia al módulo de E/S
4. El módulo de E/S obtiene los datos
5. Los datos se transfieren del módulo de E/S al procesador
• La comunicación con el procesador implica:
–
–
–
–
Decodificación de órdenes
Datos
Información de estado
Reconocimiento de dirección
Arquitectura de Sistemas Paralelos (9)
Módulos de E/S
Funciones (III)
• La comunicación con el dispositivo implica:
– Órdenes
– Información de estado
– Datos
• Almacenamiento temporal de datos
– Los datos se envían en ráfagas rápidas desde la memoria al módulo de E/S y
después se envían al periférico a la velocidad de éste (el proceso inverso es
semejante)
– Los datos se almacenan para no mantener ocupada a la memoria en una
operación de transferencia lenta (evitar una caída en el rendimiento)
• Detección de errores
– Errores debidos a defectos mecánicos o eléctricos
– Errores en la transmisión de información (códigos de detección de errores)
Arquitectura de Sistemas Paralelos (10)
Módulos de E/S
Funciones (IV)
Velocidades típicas de transferencia en dispositivos de E/S (bps)
(Almacenamiento temporal de datos)
Arquitectura de Sistemas Paralelos (11)
Mapa de Entrada/Salida: común y separado
Definición
• A la hora de integrar el subsistema de E/S (selección del dispositivos y
acceso a sus registros) en un computador existen dos posibilidades:
– E/S común o asignada/mapeada en memoria: en la que el procesador no
contempla el acceso a módulos de E/S. El acceso a los periféricos se hace
como si se accediese a un dato almacenado en la memoria principal. A los
periféricos se le asigna posiciones de memoria como si fueran variables. Ej:
el procesador Motorola 68000
– E/S aislada o separada: el acceso a la E/S está contemplado en la
arquitectura. Existen dos mapas de memoria separados: uno para memoria y
otro para E/S. Esto implica que existen instrucciones específicas de E/S
(inport/outport) y también señales específicas. Ej: la familia i80x86
• Aunque el sistema soporte espacios de direcciones separados no todos los
dispositivos tienen porqué usar los puertos de E/S: mientras que el uso de
los puertos de E/S eran común en las tarjetas ISA, los dispositivos PCI
suelen mapear sus registros en memoria
Arquitectura de Sistemas Paralelos (12)
Mapa de Entrada/Salida: común y separado
Ejemplo: Esquema de direcciones de E/S en un PC
Arquitectura de Sistemas Paralelos (13)
Mapa de Entrada/Salida: común y separado
Ventajas e inconvenientes
• Mapear la E/S en memoria tiene como ventajas:
– no utilizar instrucciones de propósito específico y aprovechar
toda la potencia del juegos de instrucciones, permitiendo una
mejor programación
– el acceso a memoria es mucho más eficiente
– el compilador tiene mas libertad para elegir el lugar y el modo de
direccionamiento en el acceso a memoria
• Y como inconveniente:
– se desperdicia parte del espacio de direcciones
Arquitectura de Sistemas Paralelos (14)
Mapa de Entrada/Salida: común y separado
Los problemas de la E/S en memoria
• Hay que tener en cuenta que las operaciones de E/S suelen tener
efectos colaterales (ej: bandera desactivada cuando se produce
una lectura) mientras que la operaciones con memoria no
• Cuando existen efectos colaterales las operaciones de E/S
mapeada en memoria pueden ser problemáticas
• Como la velocidad de acceso a memoria es crítica en el
rendimiento de la CPU, el acceso a memoria (sin efectos
colaterales) es optimizado: caché, optimizaciones del
compilador y reordenación hardware de instrucciones
• Para evitar el uso de la caché el espacio de memoria del
dispositivo puede ser configurado como memoria no cacheable
• Para evitar la optimización del compilador y la reordenación
harware de instrucciones cuando se programa deben utilizarse
memory barriers
Arquitectura de Sistemas Paralelos (15)
Métodos de Entrada/Salida
Clasificación
• Debido a la diferencia de velocidad entre procesador y
periféricos es necesario proporcionar mecanismos para
sincronizar las operaciones de E/S
• A la hora de clasificar los diferentes métodos para llevar
a cabo las operaciones de E/S hay que tener en cuenta los
siguientes factores:
– Inicio de la transferencia (¿quién comienza la transferencia?)
– Transferencia (¿quién realiza la transferencia?)
• Existen tres técnicas para realizar las operaciones de E/S:
– E/S programada
– E/S por interrupciones
– Acceso directo a memoria
Arquitectura de Sistemas Paralelos (16)
Métodos de Entrada/Salida
E/S programada
• También llamada por sondeo o encuesta (polling)
• La CPU tiene el control absoluto de la operación de E/S: inicia
y lleva a cabo la transferencia
• El procesador ejecuta un programa que controla directamente
la operación de E/S :
– Comprobación del estado
– Envío de una orden de lectura o escritura
– Transferencia de datos
• Esta técnica tiene la ventaja de utilizar un hardware mínimo
aunque malgasta tiempo de proceso ya que ha de interrogar
continuamente al periférico (espera activa,
en sistemas
multiproceso)
Arquitectura de Sistemas Paralelos (17)
E/S programada
Ejemplo de programación
void main ()
{
unsigned char estado;
...
inicializar_periferico_X();
...
while (!fin_operacion) {
estado = inportb (PUERTO_REG_ESTADO_X);
if ((estado & MASCARA_BIT_LISTO)!= 0)
hacer_operacion(); activo en alta
}
}
((estado | ~ MASCARA_BIT_LISTO)!= 0xFFFF)
activo en baja
Arquitectura de Sistemas Paralelos (18)
Métodos de Entrada/Salida
E/S por interrupciones
•
•
•
Para evitar la degradación en las prestaciones del sistema que supone la
espera activa, en este caso es el dispositivo el que solicita la operación de
E/S cuando se encuentra preparado para realizarla (interrupción)
La transferencia es llevada a cabo por la CPU de forma semejante a como
se hacía en la E/S programada
El esquema básico de funcionamiento de la E/S por interrupciones es:
1. El procesador ejecuta instrucciones de un programa
2. Al finalizar cada instrucción comprueba si se ha producido una interrupción
3. En caso afirmativo el procesador envía una señal de reconocimiento al
dispositivo, guarda el estado actual del proceso (contador del programa y
registros) y comienza a ejecutar la rutina que sirve la interrupción
(manejador de interrupción o rutina de servicio de interrupción)
4. Al finalizar la ejecución de la rutina de servicio, se recupera el estado de la
máquina y se continúa ejecutando el proceso que se abortó
Arquitectura de Sistemas Paralelos (19)
E/S por interrupciones
Esquema de funcionamiento
PSW=“Program Status Word”
PC=“Program Counter”
Arquitectura de Sistemas Paralelos (20)
E/S por interrupciones
Implementación
•
En la implementación de la E/S mediante interrupciones aparecen dos
cuestiones:
– ¿cómo se determina el procesador qué dispositivo ha provocado la
interrupción?
– si se han producido varias interrupciones, ¿cómo decide el
procesador la que debe atender?
•
Hay cuatro técnicas utilizadas comúnmente para implementar la E/S
por interrupciones:
–
–
–
–
Múltiples líneas de interrupción
Consulta software (software polling)
Conexión en cadena (daisy chain)
Arbitraje de bus
Técnicas que usan interrupciones vectorizadas
Arquitectura de Sistemas Paralelos (21)
Implementación de la E/S por interrupciones
Múltiples líneas de interrupción
• Consiste en proporcionar varías líneas de interrupción entre el
procesador y los módulos de E/S
• Es poco práctico porque malgasta terminales del procesador y además
de existir más periféricos que líneas no se resolvería el problema
• La prioridad viene fijada por el procesador
CPU
Periférico 0
Periférico 1
INT0
INT1
...
INTN
Arquitectura de Sistemas Paralelos (22)
Periférico N
Implementación de la E/S por interrupciones
Consulta software
• Todos los módulos de E/S comparten una línea común para solicitar
interrupciones
• Cuando el procesador detecta una interrupción, se produce un salto a
una subrutina de servicio de interrupción que se encarga de consultar a
cada módulo de E/S para determinar cuál ha producido la interrupción
• La desventaja de la consulta software está en el tiempo que consume
• La prioridad viene determinada por el orden en que se hace la encuesta
Arquitectura de Sistemas Paralelos (23)
Implementación de la E/S por interrupciones
Conexión en cadena (I)
•
•
•
•
•
•
•
Se trata de una consulta o polling hardware
Todos los módulos de E/S comparten una línea común para solicitar
interrupciones
La línea de reconocimiento de interrupción se conecta encadenando los
módulos uno tras otro
Cuando el procesador recibe una interrupción, activa la señal de
reconocimiento, la cual se propaga a través de la secuencia de módulos de
E/S hasta que alcanza al que solicitó la interrupción
El módulo correspondiente responde colocando una palabra que lo identifica
en las líneas de datos (vector)
El procesador utiliza el vector de interrupción como puntero a la rutina de
servicio (así se evita ejecutar una rutina de servicio general)
La prioridad viene determinada por el orden en que se conectan los módulos
en la cadena
Arquitectura de Sistemas Paralelos (24)
Implementación de la E/S por interrupciones
Conexión en cadena (II)
Arquitectura de Sistemas Paralelos (25)
Implementación de la E/S por interrupciones
Arbitraje de bus
•
•
•
•
Con esta técnica, un módulo de E/S antes de poder activar la línea de
petición de interrupción debe disponer del control del bus
Mediante el arbitrador de bus se garantiza que sólo un módulo puede
activar la señal de petición en un determinado instante
Es una técnica que usa interrupciones vectorizadas como el daisy chain
La prioridad viene determinada por el arbitrador
Arquitectura de Sistemas Paralelos (26)
Implementación de la E/S por interrupciones
Ejemplo de arbitrador: PIC 8259 (I)
•
•
•
•
Los 80x86 disponen de una sola línea de petición de interrupción
(INTR) y una sola línea de reconocimiento de interrupción (INTA)
Para manejar cierta variedad de dispositivos y estructuras de prioridad,
se configura un árbitro de interrupciones externo (PIC 8259)
El 8259 permite manejar hasta 8 módulos. Si se precisan más pueden
conectarse en cascada permitiendo manejar hasta 64 módulos
El esquema de funcionamiento de un sistema basado en el 8259 es el
siguiente:
– El 8259 acepta las solicitudes de interrupción de los dispositivos
conectados a él
– El 8259 determina qué interrupción tiene la prioridad más alta e
indica la petición al procesador activando la señal INTR
– El procesador reconoce la solicitud activando la señal INTA
– El 8259 sitúa el vector de interrupción apropiado en el bus
– El procesador comienza la ejecución de la rutina de servicio
Arquitectura de Sistemas Paralelos (27)
Implementación de la E/S por interrupciones
Ejemplo de arbitrador: PIC 8259 (II)
• El esquema de prioridades es configurable en el 8259. Se
permiten los siguientes modos:
– Completamente anidados: las solicitudes de interrupción se
ordenan según un nivel de prioridad desde 0 (IR0) hasta 7(IR7)
– Rotatorio: un dispositivo pasa a tener la menor prioridad del grupo
después de ser servido (aplicaciones en las que hay dispositivos con
igual prioridad de interrupción)
– Con máscara especial: se permite que el procesador pueda inhibir
selectivamente las interrupciones de determinados dispositivos
Arquitectura de Sistemas Paralelos (28)
Implementación de la E/S por interrupciones
Ejemplo de arbitrador: PIC 8259 (III)
Arquitectura de Sistemas Paralelos (29)
E/S por interrupciones
Habilitación/Deshabilitación de interrupciones
• Las interrupciones pueden ser:
– enmascarables: se pueden dejar de atender por software
– no enmascarables: siempre son atendidas
• Existen 3 niveles en los que habilitar/deshabilitar las interrupciones:
– A nivel de procesador: se deshabilitan todas las interrupciones
enmascarables
– A nivel de controlador de interrupciones (PIC): se pueden
habilitar/deshabilitar todas las interrupciones asociadas a un canal de
interrupción
– A nivel del dispositivo: los dispositivo periféricos suelen tener bits en sus
registros de E/S para habilitar/deshabilitar las diferentes interrupciones que pueden
generar
Arquitectura de Sistemas Paralelos (30)
E/S por interrupciones
Ejemplo de programación
void main () {
void interrupt (*manejador_antiguo)();
...
inicializar_periferico_X();
antiguo=getvect(INT_X);
disable(); /* Se deshabilitan mientras se manipulan
los vectores de interrupcion */
setvect(INT_X, manejador_intr_periferico_X);
enable ();
...
disable();
setvect(INT_X, manejador_antiguo);
enable (); }
void interrupt manejador_intr_periferico_X() {
... /* Se realizan las operaciones necesarias */}
Arquitectura de Sistemas Paralelos (31)
Acceso directo a memoria
Concepto
• Tanto la E/S por interrupciones como la E/S programada requieren la
intervención activa del procesador para transferir datos entre la
memoria y los módulos de E/S
• Ambos métodos tienen un impacto negativo sobre la actividad del
procesador y la velocidad de E/S
• Utilizando la E/S programada, el procesador puede transferir datos a
alta velocidad al precio de no hacer nada más
• La E/S con interrupciones libera en parte al procesador a expensas de
reducir la velocidad de E/S (debido a la sobrecarga que supone el
cambio de contexto)
• Cuando hay que transferir grandes volúmenes de datos, se requiere una
técnica más eficiente: el Acceso Directo a Memoria (DMA)
• En el DMA tanto el inicio de la transferencia como la transferencia en
sí están gobernadas por el dispositivo (se libera a la CPU)
Arquitectura de Sistemas Paralelos (32)
Acceso directo a memoria
El controlador de DMA
• El acceso directo a memoria requiere un módulo adicional en el bus
del sistema: el Controlador de DMA (DMAC)
• La única tarea de la CPU es programar el DMAC. Hay que enviarle al
menos la siguiente información:
–
–
–
–
Dirección del periférico de E/S
Posición inicial de memoria de donde se lee o se escribe
El tipo transferencia: lectura o escritura
El tamaño de la transferencia (número de palabras a transferir)
• El DMAC transfiere el bloque de datos completo, palabra a palabra,
directamente desde, o hacia, la memoria, sin que tenga que pasar a
través del procesador
• Cuando la transferencia ha concluido el DMAC envía una señal de
interrupción al procesador (TC, Terminal Count)
Arquitectura de Sistemas Paralelos (33)
Acceso directo a memoria
Implementación (I)
• Existen varias formas de realizar el acceso directo a memoria:
– Memoria multipuerto: la memoria permite realizar transferencias
simultáneas por parte de la CPU y el DMAC. La memoria tiene dos
puertos: uno para la CPU y otro para el DMAC. Es posible el acceso
concurrente a un mismo bloque de memoria por lo que hay que
establecer mecanismos de control
– Acceso a memoria por robo de ciclo: es una solución más
económica y es la utilizada habitualmente. El DMAC cada vez que
quiere tomar el control del bus del sistema para realizar una
transferencia, lo solicita a la CPU activando una señal (HOLD). La
CPU concede el control del bus (se activa la señal HLDA), el DMAC
se hace dueño del bus y realiza la transferencia. Ejemplo 80x86 y
8237:
• Transferencia en bloque o ráfaga
• Transferencia bajo demanda
• Transferencia simple
Arquitectura de Sistemas Paralelos (34)
Acceso directo a memoria
Implementación (II)
Acceso a memoria por robo de ciclo
Arquitectura de Sistemas Paralelos (35)
Acceso directo a memoria
Implementación (III)
•
La conexión del DMAC al sistema puede realizarse de varias formas
diferentes:
– Bus único, DMA independiente: El módulo de DMA actúa como un
procesador suplementario. Es económica pero ineficiente: la
transferencia de cada palabra consume dos ciclos de bus
– Bus único, DMA-E/S: El número de ciclos de bus necesarios puede
reducirse sustancialmente si se integran las funciones de DMA y E/S
(el camino entre el DMA y los módulos de E/S no incluye al bus del
sistema)
– Bus de E/S: El concepto anterior puede llevarse algo más lejos
conectado los módulos de E/S a un módulo de DMA mediante un bus
de E/S. Se reduce a uno el número de interfaces de E/S en el módulo de
DMA y es una configuración fácilmente ampliable
Arquitectura de Sistemas Paralelos (36)
Acceso directo a memoria
Implementación (IV)
Bus único,
DMA independiente
Bus único,
DMA-E/S
Bus de E/S
Arquitectura de Sistemas Paralelos (37)
Acceso directo a memoria
Ejemplo de módulo de DMA: DMAC 8237 (I)
•
•
•
•
El 8237 es un controlador de DMA de 4 canales programables en 3 modos
diferentes, con posibilidad de ser conectado en cascada y que además de las
funciones tradicionales soporta también transferencias memoria-memoria
El bus de datos es de 8 bits y el de direcciones de 16 bits (requiere un latch
externo porque está multiplexado para ahorrar pines)
Cuando se usa con la familia 80x86 es necesario un latch (registro de página) que
almacene los 4 bits superiores de la dirección del 80x86 en modo real (20 bits)
Modos de transferencia:
– Transferencia única: El dispositivo es programado para realizar una única
transferencia
– Transferencia de bloque: Se transfieren todas las palabras de las que consta
la transferencia
– Transferencia bajo demanda: la transferencia se realiza sólo mientras el
dispositivo siga solicitando el canal de DMA. Esta modalidad permite dejar
ciclos a la CPU cuando no es realmente necesario que el DMA opere
Arquitectura de Sistemas Paralelos (38)
Acceso directo a memoria
Ejemplo de módulo de DMA: DMAC 8237 (II)
•
•
•
•
•
El controlador de DMA es realmente un circuito secuencial generador de
señales de control y direcciones que permite la transferencia directa de los
datos sin necesidad de registros temporales intermedios (transferencia al vuelo)
Las operaciones memoria-memoria precisan de un registro temporal
intermedio, por lo que son al menos dos veces más lentas que las de E/S
(permiten chequeos para finalizar transferencias)
Cuando el 8237 está inactivo permanece desconectado de los buses del
sistema; cuando se produce una petición de DMA por parte de un dispositivo
(con DREQi se pide y con DACKi se confirma), genera una solicitud para
apropiarse del bus (HRQ), espera confirmación (HLDA) y a continuación
genera las señales necesarias para realizar la transferencia. Cuando acaba
genera una interrupción (TC, Terminal Count)
Dispone de esquemas de prioridad fija (DREQ0 más prioritaria) y rotativa
La operación que realiza el 8237 es consecuencia de la programación realizada
previamente en los registros de comando, modo, base de dirección y contador
de palabras a transferir
Arquitectura de Sistemas Paralelos (39)
Ejemplo de módulo de DMA: DMAC 8237
Sistema basado en un 8237
Arquitectura de Sistemas Paralelos (40)
Acceso directo a memoria
Ejemplo de programación
void main () {
void interrupt (*manejador_antiguo)();
...
inicializar_periferico_X();
inicializar_DMA (dir, tam, tipo, ...);
antiguo=getvect(INT_FIN_TRANS);
disable(); /* Se deshabilitan mientras se manipulan
los vectores de interrupcion */
setvect(INT_FIN_TRANS, manejador_fin_trans);
enable ();
...
disable();
setvect(INT_FIN_TRANS, manejador_antiguo);
enable (); }
void interrupt manejador_fin_trans () {
/* Se comprueban los posibles errores de la transferencia */ ...}
Arquitectura de Sistemas Paralelos (41)
Métodos de E/S
Resumen
Arquitectura de Sistemas Paralelos (42)
Ejemplo de dispositivo de E/S
Interfaz Periférico Programable 8255
•
•
•
•
Características
Diagrama de bloques
Direcciones y registros de control
Modos de funcionamiento:
– Modo 0 (E/S programada)
– Modo 1 (E/S por interrupciones)
– Modo 2 (E/S bidireccional)
• Emulación interfaz centronics (puerto paralelo impresora)
mediante un 8255
Arquitectura de Sistemas Paralelos (43)
Interfaz Periférico Programable 8255
Características
• Dispone de tres puertos de E/S (A, B y C):
dos de tamaño byte (A y B) y uno de tamaño
2x4 bits (C) con control bit a bit
• Los puertos pueden ser configurados como
entrada, salida o bidireccionales
• Dispone de líneas de protocolo
Arquitectura de Sistemas Paralelos (44)
Interfaz Periférico Programable 8255
Diagrama de bloques
Arquitectura de Sistemas Paralelos (45)
Interfaz Periférico Programable 8255
Direcciones y registros de control
Arquitectura de Sistemas Paralelos (46)
Interfaz Periférico Programable 8255
Modo 0 (E/S Programada)
• Se utilizan los tres puertos (A,B,C) como simples registros
donde leer y escribir. La CPU y el/los dispositivo/s externo/s
correspondiente/s se encarga/n de leer/escribir de acuerdo a un
determinado protocolo previamente definido
¾El puerto A (8 bits) se configura como entrada o salida con el bit
D4 del registro de control
¾El puerto B (8 bits) se configura como entrada o salida con el bit
D1 del registro de control
¾El puerto C alto (4 bits) se configura como entrada o salida con el
bit D3 del registro de control
¾El puerto C bajo (4 bits) se configura como entrada o salida con el
bit D0 del registro de control
Arquitectura de Sistemas Paralelos (47)
Interfaz Periférico Programable 8255
Cronograma Modo 0
Arquitectura de Sistemas Paralelos (48)
Interfaz Periférico Programable 8255
Modo 1 (E/S por interrupciones)
• En este modo se utiliza el protocolo Handshake
¾El puerto A (8 bits) se configura como entrada o salida con el
bit D4 del registro de control
¾El puerto B (8 bits) se configura como entrada o salida con el
bit D1 del registro de control
¾El puerto C contiene las señales del protocolo
Arquitectura de Sistemas Paralelos (49)
Interfaz Periférico Programable 8255
Modo 1 (E/S por interrupciones). Configuración de entrada
Señales de protocolo cuando el puerto está configurado como entrada
™
™
STBA (strobe input): Un cero en esta línea de entrada indica
que hay dato disponible en el puerto A (activada por el
dispositivo externo)
IBFA (input buffer full): Un uno en esta línea de salida indica
que el dato ya ha sido cargado en el registro del puerto A.
IBFA se desactiva cuando se desactiva STBA (el dispositivo
externo da su confirmación) y se produce el flanco de subida
de la señal RD (dato leído por la CPU)
Las señales STBB , IBFB son funcionalmente equivalentes
Arquitectura de Sistemas Paralelos (50)
Interfaz Periférico Programable 8255
Modo 1 (E/S por interrupciones) Configuración de salida
Señales de protocolo cuando el puerto está configurado como salida
™ OBFA (output buffer full): esta línea de salida se pone a cero
(activa en baja) para indicarle al dispositivo que la CPU ha
escrito un dato en el puerto A. Se activa con el flanco de
subida de la señal WR (escritura finalizada) y se desactiva
con la confirmación del dispositivo (ACKA)
™ ACKA (acknowledge input): un cero en esta entrada indica
que los datos del puerto A han sido leídos por el
dispositivo externo. Esencialmente es una respuesta del
dispositivo periférico indicando que ha sido recibido el
dato enviado por la CPU
Las señales OBFB y ACKB son funcionalmente equivalentes
Arquitectura de Sistemas Paralelos (51)
Interfaz Periférico Programable 8255
Modo 1 (E/S por interrupciones). Interrupciones
•
•
•
•
Señales de interrupción se pueden generar en los puertos A y B tanto si
están configurados como entrada (la CPU debe leer un dato) como si lo
están como salida (la CPU ya puede escribir un nuevos dato)
El bit 4 del puerto C (PC4) es el bit de habilitación de interrupción del
puerto A (INTEA) cuando está configurado como entrada y el PC6 cuando
lo está como salida. El del puerto B (INTEB) es el bit 2 (PC2).
Para que el 8255 genere una interrupción asociada al puerto A (señal
INTRA) cuando está configurado como entrada, se debe cumplir que:
STBA es 1, IBFA es 1 e INTEA es 1
(semejante para el puerto B)
Para que el 8255 genere una interrupción asociada al puerto A (señal
INTRA) cuando está configurado como salida, se debe cumplir que:
ACKA es 1, OBFA es 1 e INTEA es 1
(semejante para el puerto B)
Arquitectura de Sistemas Paralelos (52)
Interfaz Periférico Programable 8255
Modo 1 (E/S por interrupciones). Registros y señales
Arquitectura de Sistemas Paralelos (53)
Interfaz Periférico Programable 8255
Cronograma Modo 1
1
2
5
3
4
Comienzo de la
ejecución de los
manejadores de
interrupción
Arquitectura de Sistemas Paralelos (54)
1
2
4
5
3
Interfaz Periférico Programable 8255
Modo 2 (E/S bidireccional)
• El PUERTO A funciona de forma bidireccional. Es como un doble
modo 1. El PUERTO B no tiene este modo
¾ Los cinco líneas superiores del puerto C contienen las señales de
protocolo
Señales de protocolo
(semejantes a las descritas en el modo 1)
™ STB (strobe input)
™ IBF (input buffer full)
™ ACK (acknowledge)
™ OBF (output buffer full)
™ INTR
Arquitectura de Sistemas Paralelos (55)
Interfaz Periférico Programable 8255
Modo 2 (E/S bidireccional). Registro y señales
Arquitectura de Sistemas Paralelos (56)
Interfaz Periférico Programable 8255
Cronograma Modo 2
Arquitectura de Sistemas Paralelos (57)
Interfaz Periférico Programable 8255
Emulación interfaz centronics (puerto paralelo impresora)
Arquitectura de Sistemas Paralelos (58)
Operaciones de E/S desde el SO
El S.O. Linux y la programación de drivers
•
•
•
•
El kernel de Linux ofrece una interfaz de programación que facilita la
creación de drivers, de manera que el diseñador debe mapear llamadas al
sistema independientes del driver de carácter estándar con operaciones
específicas del driver
Una característica interesante de esta interfaz de programación es que los
drivers pueden ser implementados fuera del kernel y añadidos a éste en
tiempo de ejecución
La distinción entre mecanismos (capacidades que se ofrecen) y política (uso
de esas capacidades) es una de las mejores ideas aplicadas al diseño de
sistemas UNIX
Esta idea se aplica al diseño de drivers: drivers libres de política (driver para
un floppy). El objetivo es programar código para el kernel que permita el
acceso al dispositivo sin forzar ninguna política puesto que diferentes
usuarios pueden tener necesidades diferentes (acceso flexible, sin
restricciones)
Arquitectura de Sistemas Paralelos (59)
El S.O. Linux y la programación de drivers
El kernel de Linux
Arquitectura de Sistemas Paralelos (60)
El S.O. Linux y la programación de drivers
Programación del kernel: Módulos
• Una de las características más significativas de Linux es la
posibilidad de ampliar la funcionalidad del kernel en
tiempo de ejecución
• El código que se añade al kernel en tiempo de ejecución se
denomina módulo
• El kernel de Linux ofrece soporte para diferentes tipos de
módulos incluido los drivers, aunque no limitados a ellos
• Clases de dispositivos y módulos
– Dispositivos de caracteres
– Dispositivos de bloque
– Interfaces de red
Arquitectura de Sistemas Paralelos (61)
Programación del kernel: Módulos
Módulos vs Aplicación
Aplicación
Módulo
• Ejecuta una tarea desde que
comienza hasta que acaba
• Puede utilizar funciones que
no han sido definidas por
ella, linkando con las
librerías adecuadas (printf)
• Se ejecutan en el espacio de
usuario
• Permite atender solicitudes
de procesos en ejecución
• Puede usar sólo las funciones
que el kernel exporta (printk)
• Se ejecuta en el espacio del
kernel
Los módulos que se encuentran cargados en un momento dado pueden conocerse con el
comando lsmod o cat /proc/modules
Los dispositivos del sistema pueden conocerse con el comando cat /proc/devices
Arquitectura de Sistemas Paralelos (62)
Programación del kernel: Módulos
Espacio de usuario y espacio del kernel
•
•
•
•
•
•
Una de las tareas de un S.O. es proteger de accesos no autorizados a los
diferentes recursos del sistema
Esta tarea del S.O. requiere un componente hardware de protección en el
procesador: diferentes niveles con funciones diferentes y operaciones no
permitidas en niveles inferiores (todos los actuales procesadores disponen de
al menos dos niveles)
Los sistemas Unix utilizan dos niveles de protección:
– Modo superusuario: en el que se ejecuta el kernel (todo está permitido)
– Modo usuario: en el que se ejecutan las aplicaciones (se evitan accesos
directos al hardware y accesos a memoria no autorizados)
Habitualmente se denominan espacio del kernel y espacio de usuario
La aplicaciones y los módulos del kernel tienen mapas de memoria diferentes.
Se requieren funciones para realizar transferencias de datos de uno a otro. Ej:
copy_to_user y copy_from_user
El espacio del kernel a diferencia del de usuario es nonswappable (no
paginable) y nonpreemptive (de ejecución no concurrente)
Arquitectura de Sistemas Paralelos (63)
El S.O. Linux y la programación de drivers
Puertos de E/S y E/S mapeada en memoria
•
•
•
Un dispositivo periférico es controlado mediante operaciones de
lectura/escritura sobre sus registros internos
Desde el punto de vista del hardware no hay diferencias conceptuales entre que
estos registros estén mapeados en E/S o en memoria (cat /proc/ioport y cat
/proc/iomem)
Para evitar los problemas de los efectos colaterales en la E/S mapeada en
memoria:
– el espacio de memoria del dispositivo debe ser configurado como memoria no
cacheable (ej: opción en el espacio de configuración de los dispositivos PCI)
– deben utilizarse memory barriers (ej: rmb, wmb, y mb)
•
•
•
Existen funciones para leer y escribir en los puertos una palabra (operaciones
simples) o más (operaciones complejas). Ej: inb, outb, insb, ..
Existen funciones para leer y escribir en memoria (operaciones simples y
complejas). Ej: readb, writeb, memcpy_fromio, memcpy_toio, …
Algunas plataformas reservan un espacio de memoria no paginable para la E/S
mapeada en memoria (no ocurre en ISA/PCI x86). Si el acceso a la memoria
asignada está virtualizado se requiere el uso de funciones especiales (ioremap y
iounmap)
Arquitectura de Sistemas Paralelos (64)
El S.O. Linux y la programación de drivers
Gestión de interrupciones (I)
• El Linux existen dos tipos de interrupciones:
– Rápidas: Deben ser rápidamente atendidas, pues su ejecución se realiza con
todas las interrupciones deshabilitadas (interrupción de un timer)
– Lentas: Se ejecutan con todas las interrupciones habilitadas excepto la que
está siendo servida, por lo que su tratamiento puede consumir más tiempo
• Para que un módulo pueda atender las solicitudes de interrupción de un
determinado canal debe asignarle un manejador de interrupción cuando
se carga el módulo (request_irq) y desasignárselo cuando se descarga
(free_irq)
• Mediante el comando cat /proc/interrupts se saben las IRQs asociadas a
cada dispositivo
• Mediante el comando cat/proc/stat se sabe las veces que se ha ejecutado
una IRQ
• Existen funciones para habilitar y deshabilitar las interrupciones: sti, cli,
enable_irq, diable_irq, …
Arquitectura de Sistemas Paralelos (65)
El S.O. Linux y la programación de drivers
Gestión de interrupciones (II)
• El problema que presenta la gestión de interrupciones es que no pueden
realizarse tareas demasiado largas en el manejador
• El manejador necesita acabar cuanto antes para desbloquear las
interrupciones (sobre todo en las rápidas)
• Solución: Dividir la funcionalidad del manejador en dos rutinas: top-half
y bottom-half
• La diferencia principal entre ellas es que todas las interrupciones están
habilitadas durante la ejecución de la rutina bottom-half
• La rutina top-half (manejador) realizará lo qué debe hacerse de manera
inmediata (operación de E/S) mientras que la rutina bottom-half hará el
resto (procesado de la información)
• Existen diferentes formas de que el kernel comience la ejecución de la
rutina bottom-half (se establecen colas)
• En la rutina de interrupción (top-half) hay que insertar la tarea
planificada (rutina bottom-half) en una de las colas de tareas e indicarle
al kernel que la tarea está lista para su ejecución
Arquitectura de Sistemas Paralelos (66)
Descargar