Sistema de entrada/salida
Índice
- Introducción
- Objetivos
- 1.Aspectos básicos del E/S
- 2.E/S programada
- 3.E/S con interrupciones
- 3.1.Gestión de una interrupción con un único módulo de E/S
- 3.2.Gestión de interrupciones con múltiples módulos de E/S
- 3.3.Sistema con una única línea de petición de interrupción
- 3.4.Sistema con una línea de petición de interrupción y una línea de reconocimiento con encadenamiento
- 3.5.Sistema con líneas independientes de petición de interrupciones y de reconocimiento
- 3.6.Sistema con controladores de interrupciones
- 4.E/S con acceso directo a memoria
- 5.Comparación de las técnicas de E/S
- Resumen
Introducción
Objetivos
-
Conocer los aspectos básicos del sistema de E/S de un computador.
-
Aprender las técnicas básicas de E/S.
-
Entender las ventajas de cada una de estas técnicas para mejorar el rendimiento del computador.
-
Tener unos conocimientos básicos de los tipos de dispositivos que podemos conectar al computador y cómo se comunican con el procesador mediante el sistema de E/S.
1.Aspectos básicos del E/S
-
La necesidad de gestionar una gran variedad de periféricos con unas características muy específicas y diferenciadas. Esto hace muy complejo añadir la lógica necesaria dentro del procesador para gestionar esta gran diversidad de dispositivos.
-
La diferencia de velocidad entre sí, en la que, salvo casos excepcionales, el procesador es mucho más rápido que el periférico. Por un lado, hay que asegurar que no se pierdan datos y, por otro, garantizar principalmente la máxima eficiencia del procesador, pero también de los otros elementos del computador.
1.1.Estructura del sistema de E/S del computador
-
los periféricos,
-
los módulos de E/S,
-
los sistemas de interconexión externos y
-
el mapa de memoria e instrucciones de E/S.
1.1.1.Periféricos
-
Para la interacción con humanos:
-
Entrada.
-
Salida.
-
-
Para la interacción con otros computadores o sistemas físicos (en los que las operaciones que se hacen son generalmente de E/S):
-
Almacenamiento.
-
Comunicación.
-
1.1.2.Módulos de E/S
-
Registros de control.
-
Registros de estado.
-
Registros de datos.
1.1.3.Sistemas de interconexión externos
-
Ancho de banda: la cantidad máxima de información que podemos transmitir por unidad de tiempo. Se expresa en bits o bytes por segundo.
-
Serie/paralelo: en una interconexión paralela hay varias líneas que conectan el módulo de E/S y el periférico y pueden transmitir varios bits simultáneamente mediante las líneas de datos. En una interconexión serie solo hay una línea para transmitir los datos y los bits se han de transmitir uno a uno. Tradicionalmente las interconexiones de tipo serie eran para dispositivos lentos y las de tipo paralelo, para dispositivos más rápidos, pero con las nuevas generaciones de sistemas de interconexión serie de alta velocidad las paralelas cada vez son menos utilizadas.
-
Punto a punto/multipunto: una interconexión punto a punto tiene un enlace dedicado entre el módulo de E/S y el periférico. En una interconexión multipunto, que habitualmente se denomina bus de E/S y que dispone de un enlace compartido entre diferentes periféricos y el módulo de E/S, el hecho de tener múltiples dispositivos conectados a un mismo conjunto de líneas hace necesario establecer mecanismos para controlar el acceso.
-
Modo de operación síncrono/asíncrono/semisíncrono: si el control de los accesos al bus es controlado o no por un reloj.
-
Multiplexación de datos y direcciones: si las líneas del bus están dedicadas a datos y direcciones o si se comparten las mismas líneas para datos y para direcciones.
-
Arbitraje centralizado y distribuido: es centralizado cuando un único árbitro o controlador determina quién tiene que acceder al bus en cada momento y es distribuido cuando los dispositivos conectados al bus disponen de capacidad de controlar el acceso al bus.
-
Tipos de operaciones de lectura/escritura: diferentes maneras de hacer las operaciones de lectura y escritura, como la transferencia de bloques o la combinación de operaciones de lectura y escritura.
-
Esquema de direccionamiento: hay dos tipos básicos: el direccionamiento lógico, que es cuando el espacio de direccionamiento de memoria es común a todos los dispositivos y cada uno dispone de un rango de direcciones único y los dispositivos para descodificar la dirección para saber si esta dirección está dentro de su rango; el direccionamiento geográfico, que es cuando cada dispositivo tiene una dirección propia y se separa la identificación del módulo de la selección de la dirección dentro del módulo.
1.1.4.Mapa de memoria e instrucciones de E/S
1.2.Operación de E/S
1.2.1.Programación de la operación de E/S
1.2.2.Transferencia de datos
1.2.3.Finalización de la operación de E/S
1.3.Gestión de múltiples dispositivos
-
Prioridad fija: cuando el procesador está preparado para atender una petición, siempre empieza la consulta por el periférico que tiene más prioridad. El periférico con más prioridad siempre es atendido el primero. Si hay muchas peticiones de periféricos prioritarios, los menos prioritarios puede ser que hayan de esperar mucho tiempo para ser atendidos.
-
Prioridad rotativa: cuando el procesador está preparado para atender una petición, consulta al periférico que hay a continuación según un número de orden preestablecido. A los periféricos se les asigna un orden pero todos tienen la misma prioridad.
1.4.Técnicas de E/S
-
E/S programada.
-
E/S por interrupciones.
-
E/S por DMA.
-
Canales de E/S.
Programación |
Sincronización |
Intercambio |
Finalización |
|
---|---|---|---|---|
E/S programada |
Procesador |
Procesador |
Procesador |
Procesador |
E/S por interrupciones |
Procesador |
Módulo de E/S |
Procesador |
Procesador |
E/S por DMA |
Procesador |
DMA |
DMA bloquea el procesador |
Procesador |
Canales de E/S |
Procesador/Canal de E/S |
Canal de E/S |
Canal de E/S bloquea el procesador |
Procesador |
2.E/S programada
SINCRO: |
IN |
R0,[0000 0124h] |
0000 0124h: dirección del registro de estado del módulo de E/S. Leemos el estado y lo guardamos en R0. |
AND |
R0, 00000008h |
00000008h es una máscara para mirar el bit 3 del registro R0; en este caso es el bit que indica si el periférico está disponible para hacer la transferencia de datos. (El primer bit, bit menos significativo, es el bit 0.) |
|
JE |
SINCRO |
Si el bit 3 está a cero, volvemos a SINCRO: y continuamos esperando hasta que el periférico esté preparado para recibir el dato y el módulo active este bit; si vale 1, continuamos y vamos a INTERCAMBIO: para hacer el intercambio del dato. |
|
INTERCAMBIO: |
MOV |
R1, [Dato] |
Tomamos el dato que queremos enviar al periférico y lo ponemos en el registro R1. |
OUT |
[0000 0128h], R1 |
Copiamos el dato que tenemos en el registro R1 en el registro de datos del módulo de E/S (0000 0128h) para que este lo envíe al periférico. |
|
RET |
Devolvemos el control al programa que ha llamado a esta rutina para hacer la operación de E/S. |
2.1.Gestión de múltiples dispositivos
3.E/S con interrupciones
3.1.Gestión de una interrupción con un único módulo de E/S
-
SP: stack pointer (puntero en la cima de la pila).
-
PC: program counter (dirección de la instrucción que estamos ejecutando).
-
RSI: rutina de servicio de interrupción.
-
INT: señal que activa el módulo de E/S para pedir atención al procesador.
3.2.Gestión de interrupciones con múltiples módulos de E/S
-
Identificar cuál es el periférico que pide atención.
-
Determinar qué periférico hemos de atender primero en caso de que dos o más periféricos soliciten atención al mismo tiempo.
-
Gestionar, si el sistema permite la nidificación, las prioridades para determinar si el periférico que solicita atención es más prioritario que otro al que ya atendemos.
-
Obtener la dirección de la RSI correspondiente al periférico al que hemos de atender.
3.3.Sistema con una única línea de petición de interrupción
-
Como hacemos la encuesta de todos los módulos por programa, es muy flexible determinar las prioridades porque podemos implementar diferentes políticas de prioridades simplemente modificando el código de la RSI.
-
No hay que hacer cambios en el hardware.
-
La ejecución del código para hacer la encuesta de los módulos y la gestión de prioridades es muy costosa en tiempo, ya que estamos ejecutando un pequeño programa que accede a todos los módulos de E/S conectados a la línea.
-
Como hay una sola línea de petición de interrupción, se tienen que inhibir las interrupciones y, por lo tanto, mientras atendemos una petición no podemos atender otras aunque sean más prioritarias.
3.4.Sistema con una línea de petición de interrupción y una línea de reconocimiento con encadenamiento
3.4.1.Interrupciones vectorizadas
3.5.Sistema con líneas independientes de petición de interrupciones y de reconocimiento
-
Enmascaramiento individual.
-
Enmascaramiento por nivel.
3.6.Sistema con controladores de interrupciones
-
Definir una política de prioridades para los módulos de E/S conectados al controlador.
-
Identificar qué módulo de E/S pide atención e informar el procesador.
4.E/S con acceso directo a memoria
4.1.Acceso concurrente a memoria
4.2.Operación de E/S con acceso directo a memoria
4.3.Controladores de DMA
-
Un banco de registros para gestionar las operaciones de E/S.
-
La lógica de control necesaria para gestionar las transferencias entre la memoria y el módulo de E/S.
-
La lógica necesaria para gestionar la interrupción de la finalización de la operación de E/S.
-
Señales de control para acceder al bus del sistema y para la gestión de interrupciones (BUSREQ, BUSACK, INT, INTA, etc.).
-
Registro de control: se utiliza generalmente para dar las órdenes al controlador.
-
Registro de estado: da información del estado de la transferencia de datos.
-
Registro de datos: almacena los datos que se quieren intercambiar.
-
Registro de direcciones de memoria: indica la dirección de memoria donde se leerán o se escribirán los datos que se tienen que transferir en cada momento.
-
Registro contador: indica inicialmente el número de transferencias que se deben hacer, se irá actualizando durante la transferencia hasta que valga cero e indicará en cada momento el número de transferencias que quedan por hacer.
-
Registro de direcciones de E/S: indica la posición dentro del periférico donde se leerán o se escribirán los datos que se tienen que transferir en cada momento.
4.3.1.Formas de conexión de los controladores de DMA
-
Sistema con encadenamiento (daisy-chain), en el que se hace el encadenamiento de la señal BUSACK.
-
Utilizar un controlador de DMA que gestione múltiples transferencias, de manera parecida al controlador de interrupciones, pero ahora la transferencia de datos con la memoria se efectúa mediante el controlador de DMA y no directamente entre el módulo de E/S y el procesador, como sucede cuando utilizamos controladores de interrupciones. En este caso, podemos encontrar tanto conexiones independientes entre el controlador y cada módulo de E/S, como todos los módulos conectados a un bus específico de E/S.
4.3.2.Operación de E/S mediante un controlador de DMA
4.4.Controlador de DMA en modo ráfaga
4.5.Canales de E/S
-
Canal selector: está diseñado para periféricos de alta velocidad de transferencia y solo permite una operación de transferencia simultánea.
-
Canal multiplexor: está diseñado para periféricos más lentos de transferencia y puede combinar la transferencia de bloques de datos de diferentes dispositivos.
-
Permiten controlar operaciones de E/S simultáneas.
-
Se pueden programar múltiples operaciones de E/S sobre diferentes dispositivos o secuencias de operaciones sobre el mismo dispositivo, mientras el canal de E/S efectúa otras operaciones de E/S.
5.Comparación de las técnicas de E/S
-
mdato: tamaño de un dato expresado en bytes. Entendemos dato como la unidad básica de transferencia.
-
mbloque: tamaño del bloque de datos que queremos transferir entre el computador y el periférico expresado en bytes.
-
Ndatos: número de datos que forman el bloque que queremos transferir. Nos indica también el número de transferencias que se tienen que hacer.
-
vtransf: velocidad de transferencia media del periférico expresada en bytes por segundo.
-
tdato: tiempo de transferencia de un dato (entre el periférico y el módulo de E/S) expresado en segundos.
-
tlatencia: tiempo de latencia, tiempo que necesita el periférico para iniciar la primera transferencia expresado en segundos. En algunos periféricos este tiempo puede ser significativo.
-
tbloque: tiempo de transferencia de los datos de todo el bloque (entre el periférico y el módulo de E/S) expresado en segundos.
-
tinst: tiempo medio de ejecución de una instrucción expresado en segundos.
-
tcesión: tiempo necesario para que el procesador haga la cesión del bus expresado en segundos.
-
trecup: tiempo necesario para que el procesador haga la recuperación del bus expresado en segundos.
-
tmem: tiempo medio para hacer una lectura o una escritura en la memoria principal mediante el bus del sistema expresado en segundos.
-
tprog: tiempo necesario para hacer la programación de la transferencia de E/S expresado en segundos.
-
tfinal: tiempo necesario para hacer la finalización de la transferencia de E/S expresado en segundos.
-
ttransf_dato: tiempo, expresado en segundos, que el procesador está ocupado durante la transferencia de un dato con el módulo de E/S o parado mientras el controlador de DMA hace la transferencia de un dato.
-
ttransf_bloque: tiempo, expresado en segundos, que el procesador está ocupado durante la transferencia de datos de todo el bloque con el módulo de E/S o parado mientras el DMA hace la transferencia de datos de todo el bloque.
-
tcpu: tiempo que el procesador está ocupado o parado durante la transferencia de E/S expresado en segundos.
ttransf_dato = tdato
ttransf_bloque = tlatencia + (Ndatos · ttransf_dato) = tbloque
tcpu = tprog + ttransf_bloque + tfinal
-
trec_int: tiempo que pasa desde que el procesador reconoce que hay una petición de interrupción hasta que se puede iniciar la ejecución de la RSI expresado en segundos. Este tiempo incluye el reconocimiento de la interrupción y la salvaguarda del estado del procesador.
-
trsi: tiempo de ejecución de la RSI expresado en segundos. Este tiempo incluye inhibir las interrupciones si es necesario, guardar en la pila los registros que se pueden modificar, acceder al módulo de E/S para hacer la transferencia del dato, restaurar de la pila los registros, volver a habilitar las interrupciones y hacer el retorno de interrupción.
-
Nrsi: número de instrucciones de la RSI.
ttransf_bloque = Ndatos · ttransf_dato
tcpu = tprog + ttransf_bloque + tfinal
ttransf_bloque = Ndatos · ttransf_dato
tcpu = tprog + ttransf_bloque + tfinal
-
Nráfaga: número de datos que forman una ráfaga.
-
mbuffer: tamaño de la memoria intermedia de datos expresada en bytes.
ttransf_bloque = (Ndatos / Nráfaga) · ttransf_ráfaga
tcpu = tprog + ttransf_bloque + tfinal
-
tdisp: tiempo que el procesador está libre para hacer otras tareas durante la transferencia de E/S.
mdato |
tamaño del dato (bus de datos y registros) |
4 Bytes |
mbloque |
tamaño del bloque que se quiere transferir |
8 MBytes |
frecuencia del reloj del procesador |
2 GHz |
|
número de instrucciones por ciclo de reloj |
4 |
|
tciclo |
tiempo de un ciclo de reloj (1 / 2 GHz) |
0,5 ns |
tinst |
tiempo de ejecución de las instrucciones (tciclo / 4) |
0,125 ns |
tcesión |
tiempo para ceder el bus |
0,5 ns |
trecup |
tiempo para liberar el bus |
1 ns |
tmem |
tiempo de lectura/escritura en memoria |
0,5 ns |
vtransf |
velocidad de transferencia |
128 MBytes/s |
tlatencia |
latencia |
7 ms |
Ndatos |
mbloque / mdato |
8·220 / 4 = 2·220 |
tdato |
mdato / vtransf |
(4 / 128·220) s = 0,000000029802 s = 29,802 ns |
tbloque |
tlatencia + (Ndatos · tdato) |
0,007 + (2·220 · 0,000000029802) = 0,007 + 0,0625 = 0,0695 s = 69,5 ms |
Nprog |
programar la transferencia |
15 instrucciones |
Nfinal |
finalizar la transferencia |
10 instrucciones |
tprog |
Nprog · tinst |
15 · 0,125 = 1,875 ns |
tfinal |
Nfinal · tinst |
10 · 0,125 = 1,25 ns |
ttransf_dato |
tdato |
29,802 ns |
ttransf_bloque |
tbloque |
69,5 ms |
tcpu |
tprog + ttransf_bloque + tfinal |
1,875 + 69.500.000 + 1,25 = 69.500.003 ns |
Nprog |
programar la transferencia |
20 instrucciones |
Nfinal |
finalizar la transferencia |
10 instrucciones |
trec_int |
tiempo de reconocimiento de la interrupción |
8 ns |
Nrsi |
número de instrucciones del RSI |
12 instrucciones |
tprog |
Nprog · tinst |
20 · 0,125 = 2,5 ns |
tfinal |
Nfinal · tinst |
10 · 0,125 = 1,25 ns |
trsi |
Nrsi · tinst |
12 · 0,125 = 1,5 ns |
ttransf_dato |
trec_int + trsi |
8 + 1,5 = 9,5 ns |
ttransf_bloque |
Ndatos · ttransf_dato |
2·220 · 9,5 = 19,92 ms = 19.922.944 ns |
tcpu |
tprog + ttransf_bloque + tfinal |
2,5 + 19.922.944 + 1,25 = 19.922,947 ns |
Nprog |
programar la transferencia |
40 instrucciones |
Nfinal |
finalizar la transferencia |
30 instrucciones |
tprog |
Nprog · tinst |
40 · 0,125 = 5 ns |
tfinal |
Nfinal · tinst |
30 · 0,125 = 3,75 ns |
ttransf_dato |
tcesión + tmem + trecup |
0,5 + 1 + 0,5 = 2 ns |
ttransf_bloque |
Ndatos · ttransf_dato |
2·220 · 2 = 4.194.304 ns = 4,19 ms |
tcpu |
tprog + ttransf_bloque + tfinal |
5 + 4.194.304 + 3,75 = 4.194.312 ns |
Nprog |
programar la transferencia |
40 instrucciones |
Nfinal |
finalizar la transferencia |
30 instrucciones |
mbuffer |
tamaño de la memoria interna en modo ráfaga |
32 bytes |
tprog |
Nprog · tinst |
40 · 0,125 = 5 ns |
tfinal |
Nfinal · tinst |
30 · 0,125 = 3,75 ns |
Nráfaga |
mbuffer / mdato |
32 / 4 = 8 |
ttransf_ráfaga |
tcesión + (Nráfaga · tmem) + trecup |
0,5 + (8 · 1) + 0,5 = 9 ns |
ttransf_bloque |
(Ndatos / Nráfaga) · ttransf_ráfaga |
(2·220 / 8) · 9 = 2.359.296 ns = 2,35 ms |
tcpu |
tprog + ttransf_bloque + tfinal |
5 + 2.359.296 + 3,75 = 2.359.304 ns |
tbloque |
69,5 ms |
%ocupación |
(ttransf_bloque · 100) / tbloque |
tdisp |
tbloque – ttransf_bloque |
E/S programada |
E/S por interrupciones |
E/S por DMA |
E/S por DMA en modo ráfaga |
|
---|---|---|---|---|
ttransf_bloc |
69,5 ms |
19,923 ms |
4,194 ms |
2,359 ms |
%ocupación |
100% |
28,66% |
6,03% |
3,39% |
tdisp |
0 ms |
49,577 ms |
65,306 ms |
67,141 ms |