You are on page 1of 26

6.

1Interrupciones
Una petición de interrupción IRQ ("Interrupt Request") es una señal que se origina en
un dispositivo hardware (por ejemplo, un periférico), para indicar al procesador que algo
requiere su atención inmediata; se solicita al procesador que suspenda lo que está
haciendo para atender la petición.

Hemos señalado que las interrupciones juegan un papel fundamental, en especial en la


operación de dispositivos E/S, ya que les permite enviar estas peticiones a la UCP. Sin
ellas el sistema debería chequear constantemente los dispositivos para comprobar su
actividad, pero las interrupciones permiten que los dispositivos puedan permanecer en
silencio hasta el momento que requieren atención del procesador. ¿Podría figurarse un
sistema telefónico donde hubiera que levantar periódicamente el auricular para comprobar
si alguien nos llama?

Principio de funcionamiento
Cuando un dispositivo reclama atención del procesador es para que este haga algo. Este
"algo" es lo que se conoce como servicio; controlador o gestor de la interrupción, ISR
("Interrupt service routine"). En cualquier caso se trata siempre de ejecutar un programa
situado en algún lugar de la memoria RAM o en la ROM-BIOS. Ocurre que las
direcciones de inicio de estos programas, que se conocen como vectores de
interrupción, se copian en una tabla de 1024 Bytes que se carga al principio de la
memoria de usuario (direcciones 0000h a 0400h) durante el proceso de inicio del sistema,
razón por la cual estas rutinas se conocen también como servicios del BIOS.

La citada tabla se denomina tabla de vectores de interrupción IDT ("Interrupt


Description Table") y en sus 1024 bytes pueden almacenarse 256 vectores de 4 bytes. Es
decir, los vectores de interrupción son punteros de 32 bits, numerados de 0 a 255, que
señalan las direcciones donde comienza la rutina que atiende la interrupción

Como veremos a continuación, el diseño del PC solo permite 16 interrupciones distintas,


por lo que puede parecer extraño que se hayan previsto 256 vectores para atenderlas. La
razón es que además de los servicios del BIOS propiamente dichos, se cargan las
direcciones de inicio de otras rutinas del Sistema Operativo, los denominados servicios
del Sistema. Incluso es posible cargar direcciones para rutinas específicas de usuario.

Al diseñar el 8088, Intel estableció un reparto de estos vectores, reservando los 5


primeros para uso interno del procesador . A continuación estableció otros 27 de uso
reservado, aunque no desveló ningún uso específico para algunos de ellos. A partir de
aquí, los vectores 32 a 255 estaban disponibles. El esquema resultante se muestra en la
tabla adjunta.
Vector
Dec. Hex Uso

0 0 Error: División por cero

1 1 Excepciones para depuración (ejecución paso a paso)

2 2 Interrupción no enmascarable

3 3 Punto de ruptura interrupción (Instrucción INT)

4 4 Desbordamiento ("Overflow"). Utilizado cuando un cálculo aritmético se


desborda. Instrucción INTO

5 5 (reservado)

6 6 Código de instrucción no válido

7 7 Coprocesador no disponible

8 8 Fallo doble

9 9 (reservado -Rutina de atención del Teclado-)


10 A TSS no válido

11 B Segmento no disponible

12 C Excepción de pila

13 D Protección general

14 E Fallo de página

15 F (reservado)

16 1A Error de coprocesador

17- 1B- (reservado)


31 1F

32- 20- Disponibles para interrupciones enmascarables


255 FF

Sin embargo, aunque teóricamente las interrupciones 0 a 31 estaban restringidas, IBM y


Microsoft utilizaron algunas de ellas sin respetar las indicaciones de Intel. En concreto,
IBM y Microsoft utilizaron algunas para los servicios BIOS. Es significativo que, a pesar
de haber sufrido ampliaciones, la especificación inicial se mantiene para las 31
interrupciones iniciales. Lo que hace posible que pueda cargarse un Sistema PC-DOS
1.0 en una máquina Pentium.

El "modus operandi" es como sigue: Cuando se recibe la petición de interrupción, el


procesador termina la instrucción que está ejecutando; guarda el contenido de los
registros; deshabilita el sistema de interrupciones; ejecuta el "servicio", y vuelve a su
punto de ejecución. El servicio suele terminar con una instrucción IRET ("Interrupt
Return") que restituye el contenido de los registros y vuelve a habilitar el sistema de
interrupciones. En cierto sentido, el proceso es similar al que ocurre cuando aparece la
invocación de una función en el código de un programa.

En el párrafo anterior hemos indicado someramente el proceso cuando "se recibe" una
petición, pero cabe una cuestión: ¿Como se recibe la petición?. Hemos adelantado que
estas peticiones pueden ser generadas desde el software o incluso por el procesador, lo
que nos conduce a que en realidad las únicas que deben recibirse (desde el exterior) son
las que denominadas interrupciones hardware (que se originan en dispositivos
externos al procesador). Antes de describir brevemente el camino hasta que la solicitud
es recibida por la UCP, permitidme adelantar que para su gestión existen tres tipos de
elementos de soporte:

• Ciertas líneas específicas (IRQ's) en el bus de control


• El controlador de interrupciones (PIC). Un procesador específico que realiza cierta
elaboración previa de las peticiones antes de entregar la señal a la UCP .
• Ciertas patillas específicas en el procesador.

El resumen del proceso es como sigue: Un periférico, tarjeta o dispositivo necesita


atención; a tal efecto pone en tensión baja una de las líneas IRQ del bus de control (que
le había sido asignada). La señal es recogida por el PIC, que la procesa, la clasifica, y
envía una señal a una de las patillas del procesador. A continuación el procesador se da
por notificado y pregunta que tipo de excepción debe atender. Como respuesta, PIC
asigna un número de servicio (0-256) en forma de un octeto que es colocado en el bus de
datos, con lo que estamos en el punto inicial del proceso.

Para la asignación del número de servicio a partir de una de las 16 solicitudes de las IRQ,
el PIC realiza un cierto proceso ("Interrupt Handling Routine") a partir de los datos de
programación iniciales y del estado actual del propio sistema de interrupciones. Por
ejemplo, puede estar procesándose el servicio de una interrupción, pero la rutina esta
suspendida momentáneamente porque se ha solicitado otra interrupción de prioridad más
alta, o tal vez se recibe otra interrupción del mismo periférico antes de haber atendido la
anterior, Etc.

Líneas de petición de interrupción


El bus de control dispone de líneas específicas para el sistema de interrupciones. En el
PC XT existen 8, numeradas del 0 al 7, aunque las dos primeras están asignadas al
temporizador y al teclado, con lo que solo quedaban 6 líneas para otros dispositivos, que
aparecen como tales en el bus de control (IRQ2- IRQ7). A partir del modelo AT se
añadieron otras 8 líneas, numeradas del 8 al 15, mediante un segundo procesador PIC ,
aunque la tecnología empleada exigió colgarlo de la línea IRQ2, de forma que esta línea
se dedica a atender las interrupciones del segundo controlador a través de la línea 9 de
este último, y la línea 8 se dedicó al reloj de tiempo real, un dispositivo que no existía en
los modelos XT.

Aunque internamente se manejan 16 líneas, no todas tienen contacto en los zócalos del
bus externo; Son las marcadas con asterisco (*) en la tabla que sigue. La razón de esta
ausencia en los zócalos de conexión es que son de asignación fija, y nadie más que
ciertos dispositivos instalado en la propia placa tiene que utilizarlas. En concreto la línea
NMI está asignada al mecanismo de control de paridad de la memoria; la línea 0 está
asignada al cronómetro del sistema y la línea 1 al chip que controla el teclado
(dispositivos que pueden requerir atención urgente por parte del procesador). Es
costumbre denominar IRQx a las que tienen prolongación en el bus.

Teóricamente las restantes líneas podrían ser asignadas a cualquier nuevo dispositivo,
pero en la práctica algunas están reservadas a dispositivos estándar. Por ejemplo, IRQ3
está casi siempre asignado al puerto serie COM2 y IRQ4 a COM1; IRQ6 al controlador
estándar de disquetes y IRQ7 al puerto de impresora LPT1. La tabla 1 muestra las
asignaciones clásicas para el XT y el AT.

Tabla-1

Nombre Int (hex) XT: Descripción AT: Descripción


NMI --- Paridad* Paridad*

0 8 Temporizador* Temporizador*
1 9 Teclado* Teclado*
IRQ2 0A Reservado Interrupciones 8 a 15 (PIC#2)
IRQ3 0B Puertos serie Puerto serie COM2/COM4
COM2/COM4
IRQ4 0C Puertos serie Puerto serie COM1/COM3
COM1/COM3
IRQ5 0D Disco duro Impresora secundaria LPT2
IRQ6 0E Disquete Disquete
IRQ7 0F Impresora primaria Impresora primaria LPT1 [8]
LPT1
8 70 No aplicable Reloj de tiempo real*
9 71 No aplicable Redirigido a IRQ2*
IRQ10 72 No aplicable no asignado
IRQ11 73 No aplicable no asignado
IRQ12 74 No aplicable Ratón PS2
13 75 No aplicable Coprocesador 80287*
IRQ14 76 No aplicable Contr. disco IDE primario
IRQ15 77 No aplicable Contr. disco IDE secundario

Cuando se instala un dispositivo E/S que puede necesitar atención del procesador, debe
asignársele una IRQ adecuada. Dicho en otras palabras, cuando requiera atención debe
enviar una señal en la línea IRQ especificada. Inicialmente esta asignación se efectuaba
de forma manual, por medio de puentes ("Jumpers") en la placa o dispositivo, pero
actualmente esta selección puede hacerse por software. Los dispositivos son de enchufar
y usar PnP ("Plug and play" ).

Controlador PIC
Las peticiones hardware de interrupción del PC son manejadas por un chip, conocido
como PIC#1 ("Programmable Interrupt Controller"). Originariamente era un 8259A, que
puede manejar 8 peticiones (IRQ0/IRQ7), pero pronto se hizo evidente que eran un
número excesivamente corto, por lo que en 1984 IBM añadió un segundo controlador
PIC#2 en el modelo AT, que podía manejar las peticiones IRQ8 a IRQ15, aunque las
interrupciones utilizables resultantes no fuesen de 16 como cabría suponer, por las
razones apuntadas en el párrafo anterior.

Nivel de prioridad
El PIC dispone de 16 niveles de prioridad, numerados del 0 al 15, de forma que los de
número más bajo se atienden antes que los de número más alto. La asignación a cada
nivel es como sigue:

Nivel Asign. Nivel Asign. Nivel Asign. Nivel Asign.


0 NMI 1 IRQ0 2 IRQ1 3 IRQ8
4 IRQ9 5 IRQ10 6 IRQ11 7 IRQ12
8 IRQ13 9 IRQ14 10 IRQ15 11 IRQ3
12 IRQ4 13 IRQ5 14 IRQ6 15 IRQ7

Como puede verse, la prioridad más alta se asigna a las interrupciones no enmascarables
(NMI ), a las que nos referimos más adelante. A continuación se atienden IRQ0 e IRQ1;
asignadas como hemos visto al cronómetro del sistema y al teclado (el cronómetro no
puede ser interrumpido por nadie porque perdería la hora). Después se atienden las
peticiones IRQ8 a IRQ15 del controlador esclavo, que hereda la prioridad de IRQ2 de la
que está colgado (en realidad no existe IRQ2). A continuación se atienden las IRQ3 a
IRQ7 de PIC#1. Las peticiones de prioridad más baja son las del controlador estándar de
disquetes (IRQ6) y las del puerto de impresora LPT1 (IRQ7).

Físicamente, el 8259A es un chip de 28 patillas, 8 de las cuales conectan con las líneas
IRQ0-IRQ7; ocho para el bus de datos (D0-D7), una entrada INTA ("Interrupt
Acknowledge") y una salida INTR ("Interrupt Request"). Aparte de otras auxiliares, como
tensión de alimentación y masa. Como veremos a continuación, cuando el 8259A recibe
una señal IRQ, activa la señal INTR que es recibida por el procesador. Cuando este
responde con un INTA, pone en el bus de datos un byte en el rango 0/256, que es
identificado a su vez por el procesador como un número de interrupción.

Desde el punto de vista lógico, PIC #1 responde a las direcciones 020h-021h, mientras
que PIC#2 lo hace en 0A0h-0A1h. Cada PIC dispone de tres registros de 1 byte; IRR, ISR
e IMR, que en conjunto gobiernan las decisiones del dispositivo:

Registro de solicitud de interrupción IRR ("Interrupt Request Register"). Cada bit de


este registro controla el estado de una línea IRQ. Cuando se detecta una petición en una
de estas líneas, el bit correspondiente del IRR es pueto a 1.

Registro de interrupciones activas ISR ("In Service Register"). Cada bit indica si ya
existe una interrupción activada en la línea correspondiente.

Registro de máscara de interrupciones IMR ("Interrupt Mask Register"). También aquí


cada bit corresponde a una línea IRQ, e indica si esta permitida un interrupción de ese
nivel en ese momento.

El PIC es un dispositivo complejo que realiza varias tareas; a continuación se muestra un


resumen de ellas:

• Puesto que existen muchos dispositivos que pueden solicitar interrupciones, es


responsabilidad del PIC priorizarlas según el esquema indicado en el punto
anterior, cuando existen varias IRQ's simultáneas [5].
• Después de enviar una solicitud de interrupción y el procesador contesta que está
listo para atenderla, debe enviar un número de interrupción (número de vector).
• Mantiene un registro de que se está procesando una interrupción. Cuando esto
sucede, no envía más peticiones del mismo dispositivo al procesador hasta que
este le responde con una señal EOI ("End Of Interrupt"), indicando que la rutina de
servicio precedente ha terminado, o puede aceptar otra interrupción.
• Puede enmascarar de forma selectiva cualquiera de las 8 IRQ's que tiene
conectadas (como se verá más adelante, es la única forma de enmascarar las
interrupciones no enmascarables).
El 8259A tiene distintos modos de operación, uno de los cuales es el utilizado por los
diseñadores del PC; esta selección se realiza vía software en los momentos iniciales.
También se decide en este momento que número de interrupción deberá devolver el PIC
en respuesta a las señales recibidas en las líneas IRQ.

Puntos importantes a destacar es que, como se ha señalado, se trata de un dispositivo


programable; que esta programación es realizada por el BIOS en la fase de inicio, y que
el PIC es una parte fundamental del mecanismo de excepciones hardware.

Otro elemento que interviene en el mecanismo de excepciones son ciertas patillas del
procesador. Todos los miembros de la saga 8088 disponen de dos patillas, designadas
INTR y NMI, para este servicio específico. Sirven respectivamente para atender las
interrupciones enmascarables y no enmascarables (nos referimos a ellas
inmediatamente). A su vez, el procesador utiliza ciertas señales en algunas de sus
patillas para generar un ciclo INTA ("Interrupt Acknowledge"), que sirve para notificar al
PIC que ha recibido la interrupción.

Tipos de interrupción
Atendiendo a su origen, en el PC existen tres tipos de interrupciones: Interrupciones
hardware; interrupciones software, y excepciones del procesador .

Interrupciones hardware

Las interrupciones hardware ocurren cuando un dispositivo necesita atención del


procesador y genera una señal eléctrica en la línea IRQ que tiene asignada. Esta señal
es recogida y procesada por el controlador de excepciones PIC antes de ser enviada al
procesador, lo que puede realizarse de dos formas, según el tipo de interrupción sea
enmascarable o no enmascarable.

Interrupción enmascarable significa que, bajo control del software, el procesador


puede aceptar o ignorar (enmascarar) la señal de interrupción. Para ello se envía una
señal a la patilla INTR , y el procesador la atiende o la ignora en función del contenido de
un bit (IF) en un registro (FLAGS) que puede estar habilitado o deshabilitado. En el
primer caso, cuando se recibe la señal, el procesador concluye la instrucción que
estuviese en proceso y a continuación responde con una combinación de señales en
algunas de sus patillas componiendo una sucesión de dos señales INTA ("Interrupt
Acknowledge" ).

La primera señal es simplemente un aviso; la segunda es una petición para que el PIC
coloque en el bus de datos un Byte con el número de interrupción, de forma que el
procesador pueda localizar el servicio solicitado.

El valor recibido (0-255) es multiplicado por 4 para calcular la dirección del vector
correspondiente en la tabla de vectores de interrupción, lo que se realiza mediante un
desplazamiento binario de dos posiciones a la izquierda. A continuación, el procesador
salva en la pila los valores del registro de estado, del contador de programa (PC) y del
segmento de código (CS); deshabilita el bit IF del registro de estado, para que la
interrupción no pueda ser molestada con una nueva interrupción enmascarable hasta que
sea específicamente permitido, y finalmente ejecuta el servicio.

La penúltima secuencia de la rutina de servicio es enviar una señal de que la interrupción


ha terminado (EOI) para que el PIC pueda seguir enviando interrupciones. A continuación
debe restaurar los registros a su estado inicial (existente antes de que se produjera la
interrupción).

La señal de terminación del servicio de la interrupción EOI ("End of interrupt") es la


siguiente secuencia:

MOV DX, PIC0


MOV AL, EOI
OUT DX, AL
La primera instrucción mueve el contenido PIC0 al registro DX (PIC0 es el nemónico de la
dirección más baja de puerto A0 = 0).

La segunda mueve el valor EOI (nemónico del valor 20h) al registro AL.

La tercera es una sentencia de escritura a puerto; escribe el contenido del registro AL (el
valor EOI puesto en la sentencia anterior) en el puerto señalado por el contenido del
registro DX (establecido en la primera instrucción).

Para facilitar el manejo de interrupciones, el 8088 y sucesores disponen de algunas


instrucciones específicas:

• IRET Retorno de interrupción ("Interrupt Return"). Recupera de la pila el contador de


programa PC; el segmento de código CS (lo que supone devolver el programa al
punto de ejecución original), y el registro de estado FLAGS (lo que supone devolver
las interrupciones enmascarables al estado inicial).
• CLI Limpiar la interrupción ("Clear Interrupt"); pone a cero el registro IF,
deshabilitando las interrupciones enmascarables.
• STI Es la instrucción opuesta ("Set Interrupt") pone a 1 el registro IF habilitando las
interrupciones enmascarables.
La idea importante a resaltar aquí, es que el PIC asocia un número entre 0 y 255 a cada
petición. Este número, que se conoce como número de interrupción, no debe ser
confundido con el número de línea IRQ's que realizó la solicitud. El número de
interrupción sirve para identificar el servicio mediante la tabla IDT. Una vez ejecutado el
servicio, deben dejarse las cosas como estaban para que el programa original pueda
continuar su ejecución.

§6.1.2 Interrupción no enmascarable significa que la interrupción no puede ser


deshabilitada por software. Este tipo de interrupciones ocurren cuando se recibe una
señal en la patilla NMI ("Nonmaskable Interrupt") del procesador. Se reservan para casos
en que es crítica la respuesta, por ejemplo que se detecte un error de paridad en la
memoria. Además son de prioridad más alta que las enmascarables.

Nota: La única forma de enmascarar estas interrupciones es a través de circuitos


externos al procesador, por ejemplo a nivel del PIC.
Cuando el procesador recibe una de estas instrucciones no se genera ningún ciclo de
reconocimiento de la instrucción (INTA), y el procesador le asigna un 2 como número de
excepción.

Interrupciones software
Los procesadores Intel de la gama x86 y compatibles, disponen de una instrucción INT
que permite generar por software cualquiera de los 256 tipos de interrupción
anteriormente descritos. El proceso seguido es exactamente el mismo que si se recibe
una interrupción hardware en la patilla INTR, salvo que en este caso se conoce el tipo de
interrupción, y no se requiere ningún ciclo INTA. Por ejemplo, en lenguaje ensamblador,
la instrucción INT 21 invoca la interrupción 33d (21h), que en MS-DOS es la llamada a los
servicios del Sistema.

Este tipo de interrupciones son de prioridad más alta que las de hardware (enmascarables
y no enmascarables), de forma que si se recibe una interrupción hardware mientras que
se ejecuta una software, esta última tiene prioridad.

Este tipo de interrupciones son utilizadas tanto por el Sistema Operativo como por los
programas de usuario que pueden instalar las suyas particulares (hemos señalado, que
algunas de las 255 posiciones de la tabla de vectores de interrupción están
desocupadas). Precisamente, aquellas posiciones de la IDT que señalan a posiciones
dentro de la ROM-BIOS (por encima de la dirección F0000h) se refieren a interrupciones
relacionadas con servicios de la BIOS, mientras que las situadas en la zona de memoria
convencional, se refieren a interrupciones instaladas por el Sistema o los programas de
aplicación.

Excepciones del procesador


Durante el funcionamiento del procesador pueden ocurrir circunstancias excepcionales;
es usual citar como ejemplo el caso de una división por cero. En estos casos, el
procesador genera una excepción, que es tratada como si fuese una interrupción
software, con la diferencia de que el número de interrupción asociado depende del tipo de
excepción.

En el caso de la división por cero el número asociado es cero. Este era el único tipo de
excepción de procesador prevista en el 8088, pero en los modelos sucesivos de la saga
x86 y Pentium esta posibilidad fue ampliándose paulatinamente.
6.2Generalidades de los puertos
Serie Paralelo
Más simple Más complejo

Asíncrono en general Síncrono en general

Altas Fecuencias Bajas frecuencias

Largas Distancias Cortas Distancias

Implementaciones

Serie Paralelo
Telefonía IDE/ATA

Red SCSI

USB Impresoras

SATA

Puertos “clásicos”

o En vías de extinción en ordenadores personales


o Soporte bueno y simple de BIOS o Relativamente fáciles de programar a
bajo nivel -> Flexibles
o Presentes en micro-controladores
o Aptos para terminales e instrumentación

Puertos en serie

La transmisión serie puede ser síncrona o asíncrona


En el primer caso, es precisa: o bien una señal de reloj, o bien un protocolo de petición-
respuesta
Una ventaja es que el receptor puede responder a un rango de velocidades
En el caso asíncrono, emisor y receptor tienen que funcionar a la misma frecuencia
Los datos están sobrecargados con: bit de inicio, bit de paridad, bit de parada -> aprox.
30%
La transmisión vía serie es relativamente simple y puede ser muy rápida
6.3Puerto serial y sus variantes

El puerto serial, puerto serie o puerto de comunicación COM, es una interfaz de


comunicaciones entre ordenadores y periféricos el cual envía y recibe información BIT por
BIT, entre los puertos seriales se puede mencionar el puerto de los antiguos modelos de
teclados y módems.
Un puerto serial posee un conector estándar y trabaja con un protocolo que permite la
conexión de dispositivos al computador. Se denomina “serial” porque el puerto serie
“serializa” los datos. Esto quiere decir que toma un byte de datos y transmite los 8 bits del
byte de uno en uno.
Los puertos seriales utilizan un chip especial denominado UART (Universal Asynchronous
Reciever/Transmitter). Este chip toma la salida paralela del bus del computador y lo
convierte en forma serial, lo que permite la transmisión de los datos a través del puerto.
El conector externo para un puerto serial puede ser de 9 o de 25 pines.
6.3.1USB
El Universal Serial Bus (bus universal en serie) fue creado en 1996 por siete
empresas: IBM, Intel, Northern Telecom, Compaq, Microsoft, Digital Equipment
Corporation y NEC.

El estándar incluye la transmisión de energía eléctrica al dispositivo conectado. Algunos


dispositivos requieren una potencia mínima, así que se pueden conectar varios sin
necesitar fuentes de alimentación extra. La mayoría de los concentradores incluyen
fuentes de alimentación que brindan energía a los dispositivos conectados a ellos, pero
algunos dispositivos consumen tanta energía que necesitan su propia fuente de
alimentación. Los concentradores con fuente de limentación pueden proporcionarle
corriente eléctrica a otros dispositivos sin quitarle corriente al resto de la conexión (dentro
de ciertos límites).

El diseño del USB tenía en mente eliminar la necesidad de adquirir tarjetas separadas
para poner en los puertos bus ISA o PCI, y mejorar las capacidades plug-and-play
permitiendo a esos dispositivos ser conectados o desconectados al sistema sin necesidad
de reiniciar. Cuando se conecta un nuevo dispositivo, el servidor lo enumera y agrega el
software necesario para que pueda funcionar.
El USB puede conectar periféricos como mouse, teclados, escáneres, cámaras digitales,
telefonos celulares, reproductores multimedia, impresoras, discos duros externos, tarjetas
de sonido, sistemas de adquisición de datos y componentes de red. Para dispositivos
multimedia como escáneres y cámaras digitales, el USB se ha convertido en el método
estándar de conexión. Para impresoras, el USB ha crecido tanto en popularidad que ha
empezado a desplazar a los puertos paralelos porque el USB hace sencillo el poder
agregar más de una impresora a un ordenador personal.

Tarjeta PCI-USB 2.0En el caso de los discos duros, el USB es poco probable que
reemplace completamente a los buses como el ATA (IDE) y el SCSI porque el USB tiene
un rendimiento un poco más lento que esos otros estándares. El nuevo estándar Serial
ATA permite tasas de transferencia de hasta aproximadamente 150/300 MB por segundo.
Sin embargo, el USB tiene una importante ventaja en su habilidad de poder instalar y
desinstalar dispositivos sin tener que abrir el sistema, lo cual es útil para dispositivos de
almacenamiento desinstalables. Hoy en día, una gran parte de los fabricantes ofrece
dispositivos USB portátiles que ofrecen un rendimiento casi indistinguible en comparación
con los ATA (IDE).
6.3.2 Infrarrojo
El nombre de infrarrojo, que significa por debajo del rojo, proviene de que fue observada
por primera vez al dividir la luz solar en diferentes colores por medio de un prisma que
separaba
la luz en su espectro de manera que a ambos extremos aparecen visibles las
componentes del rojo al violeta (en ambos extremos

Su longitud de onda, entre 700 nanómetros y un milímetro, es la siguiente en longitud al


rojo, el color de longitud de onda más larga de la luz visible.
Los infrarrojos se categorizan en:
• infrarrojo cercano (0,8–2,5 µm)
• infrarrojo medio (2,5–50 µm)
• infrarrojo lejano (50–1000 µm)
Las comunicaciones infrarrojas están basadas en el principio de la luz infrarroja, que es
una radiación electromagnética cuya frecuencia la hace invisible al ojo humano, La luz
visible viaja en ases de luz que van desde los 400 ángstroms, violeta oscuro, a 700
ángstroms, rojo oscuro. Las frecuencias del infrarrojo es de 700 a 1,000 ángstroms.
Conforme a los estándares del IrDA la mayoría de las computadoras personales y equipo
de comunicaciones se mantienen entre los 850 y 900 ángstroms
Velocidad de conexión Modulación Duración del pulso
2.4 Kbps RZI 78.13 microsegundos
9.6 Kbps RZI 19.53 microseconds
19.2 Kbps RZI 9.77 microseconds
38.4 Kbps RZI 4.88 microseconds
57.6 Kbps RZI 3.26 microseconds
115.2 Kbps RZI 1.63 microseconds
0.576 Mbps RZI 434.0 nanosegundos
1.152 Mbps RZI 217.0 nanosegundos
4.0 Mbps 4PPM, el solo pulso,
125.0 nanosegundos
4.0 Mbps 4PPM, el pulso doble, 250.0 nanosegundos

Aunque la comunicación infrarroja está basada en luz, utiliza pulsos para transmitir datos.
Estos pulsos varían con respecto a los digitales en que mientras los anteriores son
constantes durante un ciclo de reloj los pulsos IrDA duran sólo una fracción del ciclo
básico de reloj o celda estándar de bit. Estos pulsos son distribuidos ampliamente entre
ellos, lo que los hace fáciles de recibir y distinguir en el receptor IrDA
Cuando un puerto IrDA funciona a 115,000 bits por segundo cada pulso emitido debe de
ser de al menos 1.41 microsegundos de duración. Típicamente uno de estos pulsos dura
únicamente 3/16 de la longitud de una celda estándar de bit. Conforme se aumenta la
velocidad de transmisión los pulsos se acortan en tiempo y longitud. Este rango de pulsos
va de los 295.2 nanosegundos para los 576 kilobits por segundo a 115 nanosegundos
para una tasa de transferencia de 4 megabits por segundo.
Mientras que la comunicación infrarroja está basada en longitudes de onda de luz, utiliza
frecuencias para transmitir datos en pulsos. Estos pulsos
Además de utilizar la frecuencia de estos pulsos para determinar las tasas de
transferencia, también se toma en cuenta la modulación. Dependiendo de la velocidad de
conexión IrDA utiliza 2 formas distintas de modulación. La primera es RZI o Return-to-
Zero Invert. esta modulación es utilizada para velocidades de transmisión de datos
menores a 4.0 Mbps.
Con RZI el emisor envía un pulso para indicar un 0 binario, mientras que para el 1, no
envía pulso. Al llegar a la marca de 4 Mbps el emisor de IrDA cambia a PPM o Modulación
por Posición de Pulso (Pulse Position Modulation) también conocida como 4PPM debido a
las 4 posiciones de su pulso. La longitud y posición de un pulso es determinado por un
período de reloj. Estos períodos son determinados por la duración del símbolo y son
divididos en 4 segmentos iguales. Estos segmentos son referidos como como Chips
(Pedazos)
Los datos transmitidos por un dispositivo IrDA son transmitidos en un formato de 8 bits,
conforme al estándar de la IRDA, 8 bits de datos, bit de paridad, y bit de paro para un total
de 10 bits por carácter.
Los fabricantes de computadoras comenzaron a tomar ventaja de la tecnología IrDA a
principio de a década de 1990 cuando las computadoras tipo lap-top (que no son lo
mismo que las notebook) se comenzaron a hacer populares. La tecnología IrDA utilizada
en ese entonces estaba en desarrollo, por lo cual muchas veces la tecnología IrDA varia
de fabricante a fabricante. Estas variaciones causaban conflictos con otros dispositivos.
En 1997 los miembros de IrDA se reunieron en la Comdex, en Las Vegas, para promover
nuevos dispositivos inalámbricos para el mercado de consumo y artilugios de
comunicaciones que tomaban ventaja de la tecnología IrBUS. IrBus es el nombre original
para los estándares de la IrDA, que permitía comunicación bidireccional entre
dispositivgos separados hasta por 24 pies, haciendo posible la creación de palancas de
mano, tapetes de juegos y unidades de disco. Ir Bus también era capaz de comunicación
simultánea con dos anfitriones y era capaz de soportar hasta 8 dispositivos. También se
especulaba que futuros dispositivos Ir Bus pudieran ser integrados a objetos domésticos
como hornos de microondas.
A principio de 1998 los fabricantes comenzaron a liberar la tecnología Ir Bus integrada en
la circuitería de entrada - salida de sus sistemas para permitir que la tecnología IrDA fuera
utilizada, aunque fueron reticentes para incorporar un puerto IrDA en computadoras de
sobremesa debido al costo extra, que era aproximadamente de US$10.00 por el
transceptor, pero lo hicieron disponible como accesorio a través del puerto RS-232.
La tecnología infrarroja se hizo cada vez más popular en las computadoras portátiles, así
como asistentes personales digitales y computadoras de mano. Sejin America, Inc;
Microsoft; HP; y Sharp comenzaron a fabricar accesorios inalámbricos IrDA tales como
teclados, ratones, palancas de mando, tableros de juegos y controles remotos que
aprovecharan la tecnología Ir Bus en computadoras personales de escritorio. La mayoría
de estos accesorios estuvieron disponibles a mediados de 1998, y debido a la limitada
utilización de tecnología Ir Bus en el mercado, estas chácharas tecnológicas no tuvieron
mucho éxito en el mercado.
Megatech International, un desarrollador de componentes en Chatsworth, California,
EE.UU. estuvo trabajando en módems IrDA que funcionaran a 56K y soportara
velocidades de ISDN. Otras impresas trabajaron en teléfonos IrDA, en los que los
usuarios pudieran trabajar en combinación con computadoras portátiles, Asistentes
Personales Digitales o computadoras de bolsillo.
Durante los encuentros olímpicos de invierno de 1998, en Japón, NTT instaló alrededor de
500 teléfonos IrDA con ISDN para permitir a los visitantes acceder a su correo electrónico,
así como enviar o publicar fotos digitales en la Internet.
La tecnología Ir Bus también está diseñada para soportar la utilización intramuros de
múltiples periféricos simultáneamente, a superiores tasas de transferencia.
IrDA hizo su camino a ambientes LAN con la tecnología Eth IR, liberando teléfonos
celulares con capacidad IrDA para trabajar con Asistentes Personales Digitales, HPCs, y
otros dispositivos, para ofrecer conectividad móvil a Internet.

6.3.3 Firewire
Lo primero que se puede decir es que es un puerto de alta velocidad diseñado por Apple,
para la conexión de periféricos en un computador.
Obviamente como tantas tecnologías diseñadas por Apple, no son de su uso exclusivo.
De hecho gracias a esta tecnología se van a poder conectar nuestros computadores con
productos electrónicos como cámaras digitales o sistemas de música, algo hasta ahora
más complicado.
Como detalles destacados, también conocido por IEEE 1394, están su gran rapidez, su
capacidad de aceptar conexiones en “caliente”, o sea sin apagar ni reiniciar el
computador, todo lo contrario a los buses SCSI. Para que te hagas una idea de la
diferencia en velocidad, un periférico conectado mediante Universal Serial Bus (USB)
alcanza una velocidad máxima de 12 Mb por segundo, frente a los 400 Mb por segundo
que puede llegar a alcanzar la conexión mediante Fire Wire.

Los cables que se manejan en este interface tienen 6 pines para datos y fuerza, llegando
a conectar hasta 63 periféricos en la cadena mediante cables de hasta 4,25 metros de
longitud. Conviene reseñar la importancia de alimentar a los periféricos con un único
cable, que haría de cable de corriente y de cable de datos, seguro que más de uno de
ustedes tiene el escritorio de trabajo que parece un nido de culebras de tanto cable…
Después de todo esto, algunos no dudan en reseñar que tanto Fire Wire como USB han
sido unos de los cambios más importantes que la informática ha sufrido en los últimos
tiempos, sobre todo debido a su capacidad de conectar periféricos en caliente. (USB sería
mejor para periféricos de entrada/salida, debido a la menor cantidad de datos que
necesitarían transferir).
Y a todas estas ventajas, le añadimos que se esta poniendo de moda, con lo que cada
vez se encuentran más periféricos en el mercado, sobre todo de almacenamiento (ZIP,
discos duros, Jaz,CD-RW, etc…) que usan este tipo de conexión. Casas como Dell,
Gateway o HP estan empezando a vender equipos con este interfaz incorporado. Y Apple
en sus G4, nuevos iMac y Power Book G3 también lo utiliza.
Identificacion Fire Wire
Debes saber que la nomenclatura de Fire Wire es propia de Apple, y que el nombre de
IEE 1394?, no es otro que el nombre que recibió el interfaz después de que Apple lo
diseñara y se lo donara a la organización IEEE.
Fire Wire es el nombre comercial que le da Apple al interfaz IEE 1394.
Pero todavía queda por ahí suelta una duda, y es que es eso del i.Link, que según leamos
de unas fuentes o de otras, lo equiparan al Fire Wire/IEEE 1394 o no.
Bueno pues esta variante del interfaz es desarrollo de SONY y la única diferencia con
respecto a lo explicado hasta ahora es que los periféricos que usan el i.Link, no reciben la
alimentación eléctrica por el cable usado para la transferencia de datos, lo que obliga a
tener una fuente de alimentación con su propia conexión a la red eléctrica.
Los periféricos que usan i.Link, se pueden conectar a una red Fire Wire (con los cables
adecuados), aunque no habrá espacio para los pines encargados de llevar la corriente en
el bus y tendremos que enchufar estos equipos por separado, es una pena, precisamente
una de las comodidades del Fire Wire/IEEE 1394 era la importante reducción de cables,
sobre todo en grandes buses con muchos periféricos.
(Los equipos con i.Link usan cables de 4 pines, siendo los dos que faltan los que serían
de corriente en el Fire Wire/IEEE 1394).
Para conectar una de las cámaras de video DV a un computador se requiere de un cable
con dos conectores. A la izquierda, el conector Fire Wire que va al PC (a la tarjeta Fire
Wire); a la derecha el conector iLink (o conector DV) que va a la cámara. Ambos puertos
cumplen el estándar IEEE 1394 y por lo tanto son compatibles y capaces de trabajar a la
misma velocidad (hasta 50 MB por segundo).
USB 2.0 transfiere 480 Mbps Megabites por segundo (60MBps Mega Bytes por segundo)
de manera que es un poco más rápido que Fire Wire.
Actualmente, Fire Wire es el único puerto capaz de soportar las modernas cámaras de
video digitales que funcionan en formato DV. Incluso las de fabricación más reciente
vienen con puerto iLink, que ha pasado a denominarse por parte de los fabricantes como
puerto DV.
Por ahora es necesario utilizar una tarjeta adaptadora para que un PC cuente con puertos
Fire Wire (los iMac y G4 ya los traen incorporados), pero ya ha comenzado a aparecer
tarjetas madre que lso incluyen. En cuanto al software, Mac OS 9, Mac OS X, Windows
ME y Windows 2000/XP soportan IEEE 1394. Lo mismo que la versión 2.4 del kernel de
Linux, que ya está en alguna distribuciones como Mandrake 9.0.

6.4 Paralelo y sus variantes


Los puertos paralelos fueron desarrollados originalmente por IBM como una forma de
conectar una impresora a la PC. Cuando IBM estaba en el proceso de diseño de la PC, la
compañía quería que la computadora trabajara con impresoras ofrecidas por Centronics,
una empresa líder en fabricante de impresoras en ese tiempo. IBM decidió no usar el
mismo puerto de interfase que Centronics usaba en sus impresoras

En lugar de eso, los ingenieros de IBM acoplaron un conector de 25 pines, el DB-25, con
un conector Centronics de 36 pines para crear un cable especial que conectara la
impresora con la computadora. Otros fabricantes de impresoras terminaron adoptando la
interfase centronics, haciendo de este extraño cable híbrido un improbable estándar.
Cuando una PC manda datos a una impresora u a otros dispositivos usando el puerto
paralelo, esta manda 8 bits de datos (1 byte) a la vez, de forma distinta al puerto serie el
cual manda los 8 bits uno detrás de otro por el mismo cable. El puerto paralelo estándar
es capaz de mandar de 50 a 100 kilobytes de datos por segundo.
Echemos una mirada mas cercana a lo que hace cada pin cuando utiliza una impresora:
•Pin 1 lleva la señal de strobe. Esta mantiene un nivel de voltaje comprendido entre 2.8 y
5v, pero cae debajo de 0.5 volts cuando la computadora manda un byte de datos. Esta
caída en el voltaje le dice a la impresora que el dato ha sido enviado.
•Los pines 2 al 9 son usados para mandar el dato. Para indicar que un bit tiene un valor
de 1, una carga de 5v es enviada a través del pin correspondiente. Cuando no hay un
voltaje en un pin, indica un valor de 0. Esta es una forma simple pero muy efectiva de
transmitir información digital.
•El pin 10 manda la señal de reconocimiento de la impresora a la computadora. Como el
pin 1, esta mantiene una carga y cae debajo de 0.5v para indicarle a la computadora que
el dato fue recibido.
•Si la impresora está ocupada, mandará un 1 por el pin 11, y cambiará a 0, para indicarle
a la computadora que está lista para recibir mas datos.
•La impresora le avisa a la computadora que se se quedó sin papel enviando un 1 por el
Pin 12.
•Mientras la computadora este recibiendo voltaje por el pin 13, sabe que el dispositivo
está conectado.
•La computadora manda un una señal de auto suministro de papel a la impresora a través
del pin 14.
•Si la impresora tiene algún problema, manda un 0 al pin 15 para avisarle a la
computadora que existe un error.
•Cuando un nuevo trabajo de impresión está listo, la computadora manda un 0 para
inicializar la impresora.
•El pin 17 es usado por la computadora para tomar como remotamente desconectada la
impresora. Esto se logra enviando 5 volts a la impresora y manteniéndolo así el tiempo
que quieras considerarla desconectada.
•Los Pine 18 al 25 son tierras y son usadas como señales de referencia para el nivel bajo
(debajo de 0.5volts).
Nota: como los primeros 25 pines del cable centronics coinciden con los pines del primer
conector. Cada byte que manda el puerto paralelo, se envia una señal de “handshaking”,
para que la impresora pueda “latchear” el byte.
SPP/EPP/ECP
La especificación original para el puerto paralelo era unidireccional, esto quiere decir que
la información solamente puede viajar en una dirección por cada pin. Con la introducción
del PS/2 en 1987, IBM ofreció un nuevo diseño de puerto paralelo bidireccional. Este
modo es comúnmente conocido como Puerto paralelo estándar (SPP de Standard Parallel
Port) y ha reemplazado completamente el diseño original. La comunicación bidireccional
permite a cada dispositivo recibir datos así como también transmitir. Muchos dispositivos
usan los 8 pines (del 2 al 9) originalmente diseñados para datos. Usando los mismos 8
pines limita la comunicación a half-duplex, es decir que la información solamente puede
viajar en una dirección a la vez. Pero los pines 18 al 25, originalmente utilizados como
tierras, pueden ser usados como pins de datos tambien. Esto permite el comunicación
full-duplex (ambas direcciones al mismo tiempo).
El Puerto Paralelo Mejorado (EPP de Enhanced Parallel Port) fue creado por Intel, Xircom
y Zenith en 1991. El EPP permite transmitir mas información cada segundo (500 kilobytes
a 2 megabytes). Este fue diseñado para dispositivos que no son impresoras, que se
conectarían a este puerto, particularmente dispositivos de almacenamiento, los cuales
necesitan la mas alta velocidad de transferencia.
Casi al mismo tiempo de la introducción del EPP, Microsoft y Hewlett Packard
conjuntamente anunciaron una especificación llamada Salida Paralela con capacidad de
expansión (ECP de Extended Capabilities Port) en 1992. Mientras el EPP estaba siendo
usado para otros dispositivos, el ECP fue diseñado para mejorar la velocidad y
funcionalidad de las impresoras.
En 1994, el estándar IEEE 1284 salió en vigencia. Este incluía las 2 especificaciones para
los dispositivos para puerto paralelo, EPP y ECP. Para que estos trabajaron, tanto el
sistema operativo como el dispositivo deben soportar la especificación requerida. Esto ya
no es un problema en estos días, ya que la mayoría de las computadoras soportan SPP,
ECP y EPP y detectan que modo necesita ser utilizado, dependiendo del dispositivo
conectado. Si tu necesitas cambiar manualmente, tu puedes hacerlo a través del BIOS de
la mayoría de las computadoras.

6.5 Interrupciones que intervienen en


cada punto
Manejo de la interrupción del puerto paralelo.
El bit 4 del puerto de control se denomina IRQEN. Este bit habilita o permite que se
produzca la interrupción asociada a la entrada ACK#. Cuando este bit está a 1 y la señal
ACK# pasa del nivel lógico 1 al nivel 0 se produce una petición de interrupción, que es la
IRQ7.

En el diseño original del PC, IBM reservó 8 interrupciones hardware, comenzando por la
interrupción 08h, para expansión de interrupciones, que son comúnmente conocidas
como IRQ0 a IRQ7. Así la IRQ0 se corresponde con la interrupción 08h, la IRQ1 con la
09h, etc. La IRQ7 se corresponde pues con la 0Fh, estando sus vectores a partir de la
dirección 0000:003Ch.
Para que una petición de una IRQ llegue a la CPU, ésta debe estar permitida, no
enmascarada. El puerto 021h está asociado con la máscara de interrupciones de las IRQ.
Para habilitar una determinada interrupción se deberá escribir un cero en la posición
correspondiente, sin modificar el resto. Así, si lo que se quiere es permitir la IRQ7 habrá
que poner a cero el bit más significativo del puerto 021h, como muestra el código
siguiente:
in al,021h ; lee la máscara de las IRQ
and al, 01111111b ; impone un 0 en el bit más significativo, IRQ7. No modifica el resto
out 021h, al ; escribe la máscara
Con estas operaciones quedará habilitada la IRQ7. Una vez atendida de la forma que se
haya previsto, el programa debe indicar a la CPU que la interrupción ya ha sido
procesada, para ello debe escribir un 1 en el bit 5 del puerto 020h, es decir:
mov al, 020h ; carga en al 0010 0000 b
out 020h, al ; lo escribe en al puerto 020h
Finalmente, tan sólo queda por activar el bit que permite que la señal ACK# genere una
petición de IRQ7. Para ello se deberá poner a 1 el bit 4 del puerto de control , sin
modificar el resto. Cuando no se quiera que se produzca una IRQ7, basta con poner a
cero este bit.
Al finalizar el programa, no sólo se deben restablecer los vectores de interrupción
modificados, sino que también se debe inhibir la IRQ7, dejando la máscara del puerto
021h como estaba.

6.5.1 Direcciones base


Cada controlador de hardware del sistema que realiza operaciones de E/S
(entrada/salida) tiene que tener una dirección base única para que el sistema pueda
localizarlo. Esta dirección de memoria es un número hexadecimal de tres o cuatro dígitos,
que coincida con la configuración del adaptador y que no cause ningún conflicto con
ningún otro dispositivo de hardware del sistema. Las direcciones base válidas aparecen al
configurar el adaptador.

La dirección base de E/S es la dirección inicial correspondiente a un área única de


memoria asignada al control de la entrada/salida de datos de un adaptador de hardware
específico. Por ejemplo, 0x240 o 240 es la dirección base de E/S por defecto del
adaptador de red SMC 8013EWC. La dirección base de E/S tiene que coincidir con la de
configuración del hardware del adaptador y ningún otro dispositivo puede usar dicha
dirección base de E/S.

6.5.2 Registros
Los registros del procesador se emplean para controlar instrucciones en ejecución,
manejar direccionamiento de memoria y proporcionar capacidad aritmética. Los registros
son direccionables por medio de un nombre.
Registros de Propósito General

Los registros de propósito general AX, BX, CX y DX son los caballos de batalla del
sistema. Son únicos en el sentido de que se les puede direccionar como una palabra o
como un byte.

Registro AX: El registro AX es el registro acumulador, es utilizado para operaciones que


implican entrada/salida y la mayor parte de la aritmética.
Registro BX: El registro BX es el registro base, y es el único registro de propósito general
que puede ser un índice para direccionamiento indexado. También es común emplear el
BX para cálculos.

Registro CX: El registro CX es conocido como el registro contador. Puede contener un


valor para controlar el número de veces que un ciclo se repite o un valor para corrimiento
de bits.

Registro DX: El registro DX es el registro de datos. Algunas operaciones de entrada/salida


requieren su uso, y las operaciones de multiplicación y división con cifras grandes
suponen al DX y AX trabajando juntos.

Registros Índice [editar]Los registros SI y DI están disponibles


para direccionamiento indexado y para sumas y restas.

Registro SI: El registro índice fuente de 16 bits es requerido por algunas operaciones con
cadenas de caracteres. El SI está asociado con el registro DS.
Registro DI: El registro índice destino también es requerido por algunas operaciones con
cadenas de caracteres. El DI está asociado con el registro ES.

Registros Apuntadores [editar]Los registros SP (apuntador de


pila) y BP (apuntador base) están asociados con el registro SS y
permiten al sistema accesar datos en el segmento de la pila.

Registro SP: El apuntador de pila de 16 bits está asociado con el registro SS y


proporciona un valor de desplazamiento que se refiere a la palabra actual que está siendo
procesada en la pila. El sistema maneja de manera automática este registro.

Registro BP: El apuntador base de 16 bits facilita la referencia de parámetros, los cuales
son datos y direcciones transmitidos vía la pila.

Registro de Banderas:Es un registro de 16 bits, de los cuales nueve sirven para indicar el
estado actual de la máquina y el resultado del procesamiento. Muchas instrucciones
aritméticas y de comparación cambian el estado de las banderas y apoyándose de ellas
determinan la acción subsecuente.
Los bits de las banderas son las siguientes:

OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden después de


una operación aritmética de números signados (1=existe overflow; 0=no existe overflow).
Para operaciones sin signo, no se toma en cuenta esta bandera.

DF (dirección): Controla la selección de incremento o decremento de los registros SI o DI


en las operaciones con cadenas de caracteres (1=decremento automático;
0=incremento). La bandera DF se controla con las instrucciones STD y CLD.

IF (interrupción): Indica que una interrupción externa sea procesada o ignorada (1=habilita
la interrupción; 0=deshabilita la interrupción). El estado de la bandera IF se controla con
las instrucciones STI y CLI.

TF (trampa): Permite la operación del procesador en modo de depuración (paso a paso)


SF (signo): Contiene el signo resultante de una operación aritmética (0=positivo;
1=negativo).

ZF (cero): Indica el resultado de una operación aritmética o de comparación (0=resultado


diferente de cero; 1=resultado igual a cero).

AF (acarreo auxiliar): Contiene un acarreo externo del bit 3 en un dato de 8 bits, para
aritmética especializada. Esta bandera se prueba con las instrucciones DAA y DAS para
ajustar el valor de AL después de una suma o resta BCD.

PF (paridad): Indica paridad par o impar en una operación de datos de ocho bits
(0=paridad impar; 1=paridad par).

CF (acarreo): Contiene el acarreo de los bits de mayor orden después de una operación
aritmética; también almacena el contenido del último bit en una operación de corrimiento o
de rotación.

Registros de Segmento [editar]Un registro de segmento tiene 16


bits de longitud y facilita un área de memoria para
direccionamiento conocida como el segmento actual.

Registro CS: El DOS almacena la dirección inicial del segmento de código de un


programa en el registro CS. Esta dirección de segmento, más un valor de desplazamiento
en el registro apuntador de instrucción (IP), indica la dirección de una instrucción que es
buscada para su ejecución. Para propósitos de programación normal, no se necesita
referenciar el registro CS.

Registro DS: La dirección inicial de un segmento de datos de programa es almacenada en


el registro DS. Esta dirección, más un valor de desplazamiento en una instrucción, genera
una referencia a la localidad de un byte específico en el segmento de datos.

Registro SS: El registro SS permite la colocación en memoria de una pila, para


almacenamiento temporal de direcciones y datos. El DOS almacena la dirección de inicio
del segmento de pila de un programa en el registro SS. Esta dirección de segmento, más
un valor de desplazamiento en el registro del apuntador de la pila (SP), indica la palabra
actual en la pila que está siendo direccionada. Para propósitos de programación normal,
no se necesita referenciar el registro SS.

Registro ES: Algunas operaciones con cadenas de caracteres utilizan el registro extra de
segmento para manejar el direccionamiento de memoria. El registro ES está asociado con
el registro DI (Índice). Un programa que requiere el uso del registro ES puede inicializarlo
con una dirección de segmento apropiada.

Registro Apuntador de Instrucciones [editar]El registro IP de 16 bits contiene el


desplazamiento de dirección de la siguiente instrucción que se ejecuta. El IP está
asociado con el registro CS en el sentido de que el IP indica la instrucción actual dentro
del segmento de código que se está ejecutando actualmente.

6.6 Envío y recepción de datos


Cuando se escriben programas Java que se comunican a través de la red, se está
programando en la capa de aplicación. Típicamente, no se necesita trabajar con las capas
TCP y UDP — en su lugar se puede utilizar las clases
del paquete java.net. Estas clases proporcionan comunicación de red independiente del
sistema.

A través de las clases del paquete java.net, los programas Java puede utilizan TCP o
UDP para comunicarse a través de Internet. Las clases URL, URL Connection, Socket, y
Socket Server? utilizan el TCP para comunicarse a través de la Red. Las clases Datagram
Packet? y Datagram Server? utilizan UDP.
TCP proporciona un canal de comunicación fiable punto a punto, lo que utilizan para
comunicarse las aplicaciones cliente-servidor en Internet. Las clases Socket y Server
Socket del paquete java.net proporcionan un canal de comunicación independiente del
sistema utilizando TCP, cada una de las cuales implementa el lado del cliente y el servidor
respectivamente.
La clase Socket del paquete java.net es una implementación independiente de la
plataforma de un cliente para un enlace de comunicación de dos vías entre un cliente y un
servidor. La clase Socket se sitúa en la parte superior de una implementación
dependiente de la plataforma, ocultando los detalles de los sistemas particulares a un
programa Java. Utilizando la clase java.net.Socket en lugar de tratar con código nativo,
los programas Java pueden comunicarse a través de la red de una forma independiente
de la plataforma.
El entorno de desarrollo de Java incluye un paquete, java.io, que contiene un juego de
canales de entrada y salida que los programas pueden utilizar para leer y escribir datos.
Las clases Input Stream y Output Stream del paquete java.io son superclases abstractas
que definen el comportamiento de los canales de I/O secuenciales de Java. java.io
también incluye muchas subclases de Input Stream y Output Stream que implementan
tipos especificos de canales de I/O.
Básicamente disponemos de dos tipos de servicio :
Servicio sin conexión , donde el emisor y el receptor intercambian paquetes de
información sin establecer una conexión previa , donde tampoco disponemos de un
control de secuencia ni control de erores. En este tipo de conexión operamos con
Datagramas y el protocolo empleado es UDP.
Servicio orientado a conexión : Donde disponemos de un stream que nos asegura la
entrega de la información de forma ordenada y fiable. Operamos con streams y el
protocolo empleado es TCP
Java nos da soporte para :
. UDP (byte[]) : Datagram Socket?, Datagram Packet

. TCP (streams) : Socket, Server Socket . Direcciones y Nombres : Inet


Address

Datagram Socket (UDP) : Con el podemos enviar y recibir


datagramas. Como es sabido UDP no ofrece fiabilidad , los
datagramas se pueden perder y no se asegura el orden de llegada.
Los objetos enviados o recibidos son de la clase Datagram Packet.
. Constructores : Datagram Socket() , crea un socket para datagramas y lo conecta al
primer puerto disponible. Datagram Socket(int) , Igual que el anterior, pero además
permite especificar el número de puerto asociado. Datagram Socket (int, Inet Address) ,
Permite especificar además del puerto, la dirección IP a la que nos vamos a conectar. .
Metodos : close () getLocalAddress() getLocalPort() getSoTimeout() receive(Datagram
Packet) send(Datagram Packet) setSoTimeout(int)
Datagram Packet (UDP) : Es el objeto que usaremos para enviar datagramas. Contiene :
Los datos , La direccion IP (Inet Address) del origen o destino y el puerto origen o destino.
Al enviar definimos el destino y al recibir podemos consultar el origen. Inet Address :
Métodos : Para obtener y manipular direcciones IP y nombres.

equals (Object)

getAddress() getAllByName(string) getByName(String) getHostAddress() getHostName()


getLocalHost() hashCode() isMulticastAddress() toString()

ENVIO Y RECEPCION DE DATOS A TRAVÉS DE SOCKETS :

El servidor crea un Socket, mediante Server Socket, le asigna una dirección y un puerto y
acepta llamadas (accept). A partir de este momento el proceso queda bloqueado a la
espera de una llamada. Cuando llega una llamada , el accept crea un nuevo socket para
procesar dicha llamada. Es unicamente en ese momento cuando existe la conexión y
durará hasta que se libere mediante close().
Los sockets tienen asociados un Stream de entrada y otro de salida a través de los cuales
se leen y escriben los datos :
. socket.getInputStream() : Devuelve un objeto de tipo Input Stream
. socket.getOutputStream() : Devuelve un objeto de tipo Output Stream
Para enviar datos se puede utilizar el Output Stream del socket, para enviar un flujo de
bytes sin buffer. Pero también se puede crear un objeto de tipo stream de datos basado
en el Output Stream.
Ejemplo :
Socket socket = new Socket (“158.42.112.67″, 1056);

Socket socket = new Socket (“158.42.112.67″, 1056);


Print Writer escribir;
Buffered Reader teclado;
String linea;
teclado = new Buffered Reader(new Input Stream Reader?(System.in));
escribir = new Print Writer(socket.getOutputStream(),true);
do {
linea=teclado.readLine();
escribir.println(linea);
} while (linea.compareTo(“#”)!=0);
….
Para recibir datos se puede utilizar Input Stream o definir un nuevo objeto del mismo tipo
más eficiente.
Ejemplo:
Buffered Reader leer;
String s;
leer=new Buffered Reader( new Input Stream Reader
(socketRecepcion.getInputStream() ) );
while (“#”.compareTo(s=leer.readLine()!=0) {
System.out.println(nombre+”: “+s);
}
THREADS : En el programa se pueden implementar varios hilos de ejcución o threads.
Podemos crear un servidor concurrente que ejecute el mismo código para cada cliente.
Para ello podemos implementar un servidor para un solo cliente y dedicar un thread por
cliente.
Los Threads se pueden implementar de dos formas :
Implementando una nueva clase derivada de la clase Thread.
Creando una nueva clase que implemente el interface Runnable.
Con lo que el ejemplo anterior de Servidor de Eco Tcp para atender un numero ilimitado
de clientes quedaría :
Import java.io.*;
Import java.net.*;
Class Servidor Eco Tcp extends Thread {
Socket s=null;
Eco Tcp Serv?(Socket s) {this.s=s;}
Public void run() {
Try { Input Stream is=s.getInputStream();
Output Stream os=s.getOutputStream();
While(true) os.write(is.read());
} catch (IO Exception e) {System.out.println(“Error en socket”);}}
Public static void main(String agrs[]) throws IO Exception , Unknown Host Exception? {
Server Socket ss=new Server Socket(7);
While(true) {
Eco Tcp Serv e=new Eco Tcp Serv(ss.accept());
e.start();
}
}
}
Existe otro tipo de socket , RAW SOCKET que no opera en el nivel de transporte y accede
directamente al nivel de red. Este tipo de socket suele ser utilizado por aplicaciones con
privilegios para la definicion de protocolos de bajo nivel.

You might also like