Esta sección no necesita ser leída, pero puede ayudarle a comprender algo mejor el Unix, y el mundo de las telecomunicaciones.
Un fichero de bloqueo es simplemente un fichero que dice que dispositivo
se está usando. Están en /usr/spool/uucp
, o /var/lock
.
Los ficheros de bloqueo en Linux se llaman LCK..
nombre, donde
nombre puede ser un nombre de dispositivo, o un nombre de un sitio
UUCP. Ciertos procesos crean estos bloqueos para así poder tener acceso
exclusivo a un dispositivo, por ejemplo, si llama con su módem, aparecerá
un bloqueo para que otros procesos sepan que alguien está usando
actualmente el módem. Los bloqueos principalmente contienen el PID del
proceso que tiene bloqueado el dispositivo. Muchos programas comprueban si
un dispositivo está bloqueado, e intentan determinar si ese bloqueo es
todavía válido buscando en la tabla de procesos el que tiene bloqueado el
dispositivo. Si el bloqueo es válido, el programa se cerrará (o debería
cerrarse). Si no, algunos programas borran el bloqueo viejo, y usan el
dispositivo, creando su propio bloqueo. Otros programas solamente se
cierran y dicen que el dispositivo está usándose.
``baudios'' y ``bps'' son, quizás, unos de los términos peor usados en el campo de los ordenadores y telecomunicaciones. Mucha gente usa estos términos indiferentemente, ¡cuando de hecho no son lo mismo!.
La velocidad en baudios es una medida de cuantas veces por segundo cambia una señal, por ejemplo una señal enviada por un módem (moulador-demodulador). Es decir, una velocidad de 1200 baudios implica que una señal cambia cada 833 microsegundos. Las velocidades de los módems normales son 50, 75, 110, 300, 600, 1200, y 2400. La mayoría de los módems rápidos van a 2400 baudios. Debido a limitaciones del ancho de banda en las líneas telefónicas de voz, las velocidades superiores a 2400 baudios son difíciles de alcanzar, y sólo funcionan en líneas telefónicas de alta calidad. Se pueden codificar varios bits por baudio, para conseguir velocidades que excedan la velocidad del baudio. Se llama ``baudio'' en honor a Emile Baudot, inventor de la impresora asíncrona del telégrafo (teletipo).
La velocidad en bps es una medida de cuantos bits por segundo son transmitidos. Las velocidades en bps de los módem normales son 50, 75, 110, 300, 1200, 2400, 9600, ... 115200. Usando módems con compresión V.42bis (compresión máxima 4:1), son posibles velocidades teóricas de hasta 115200 bps. Esto es lo que la mayoría de la gente quiere decir cuando mal usan la palabra ``baudios''.
Así, si módems de alta velocidad están funcionando a 2400 baudios, ¿cómo pueden enviar 14400 bps?. Los módems alcanzan una velocidad en bps mayor que la velocidad en baudios codificando varios bits en cada cambio de señal, o cambio de fase. De este modo, cuando 2 o más bits son codificados por baudio, la velocidad en bps supera a la velocidad en baudios. Si su módem se conecta a 14400 bps, estará enviando 6 bits en cada cambio de fase, a 2400 baudios.
¿Cómo empezó esta confusión?. Bien, volviendo a cuando los módems lentos eran módems de alta velocidad, la velocidad en bps realmente era igual a la velocidad en baudios. Un bit podía ser codificado por cambio de fase. La gente podía usa bps y baudios intercambiándolos, porque eran el mismo número. Por ejemplo, un módem de 300 bps también tenía una velocidad de 300 baudios. Todo esto cambió cuando llegaron los módems más rápidos, y la velocidad en bits superó a la velocidad en baudios.
Las UARTs (Universal Asyncronous Receiver Transmitter) son circuitos integrados de la placa serie del PC. Su propósito es convertir los datos a bits, enviarlos a la línea serie, y después reconstruir los datos en el otro terminal. Las UARTs tratan los datos en bloques del tamaño de un byte, que además es, convenientemente, el tamaño de los caracteres ASCII.
Digamos que tiene un terminal conectado a su PC. Cuando escriba un carácter, el terminal da el carácter a su transmisor (también una UART). El transmisor envía ese byte a la línea serie, un bit cada vez, a una determinada velocidad. En el otro PC, la UART que recibe, coge todos los bits, reconstruye el byte y lo coloca en el búfer.
Existen dos tipos diferentes de UARTs. Probablemente ha oído algo sobre las UARTs no inteligentes - la 8250 y 16450, y las UARTs FIFO - la 16550A. Para entender las diferencias, examinemos primero qué ocurre cuando una UART ha enviado o recibido un byte.
La UART no puede hacer nada con los datos por sí misma, sólo los envía y los recibe. La CPU recibe una interrupción del dispositivo serie cada vez que se recibe o envía un byte. Entonces la CPU mueve el byte recibido desde el búfer de la UART a algún lugar de la memoria, o le da a la UART otro byte a enviar. Las UARTs 8250 y 16450 sólo tienen un búfer de 1 byte. Esto significa, que cada vez que se envía o recibe 1 byte, se interrumpe a la CPU. A velocidades bajas, está bien. Pero, a velocidades de transferencia alta, la CPU está demasiado ocupada tratando con la UART, y no le deja tiempo de atender otras tareas. En algunos casos, la CPU no puede atender la interrupción a tiempo, y se sobreescribe el byte, debido a que llegan demasiado rápido.
Ahí es cuando son útiles las UARTs 16550A. Estos integrados tienen un búfer FIFO de 16 bytes. Esto significa que pueden recibir o transmitir hasta 16 bytes antes de tener que interrumpir a la CPU. La CPU no sólo puede esperar, sino que puede entonces transferir los 16 bytes de una sola vez. Aunque es raro que el umbral de interrupción esté a 16, esto es una ventaja significante frente a las otras UARTs, que sólo tienen un búfer de 1 byte. La CPU recibe menos interrupciones, y está libre para hacer otras cosas. No se pierden datos, y todo el mundo es feliz. (También existe una UART 16550, pero es tratada como un 16450 ya que no funciona bien.)
En general, las UARTs 8250 y 16450 deben valer para velocidades de hasta 38400 bps. A velocidades mayores que 38400 bps, puede empezar a tener pérdida de datos. Otros sistemas operativos de PC (definición usada aquí vagamente) como DOS no son multitarea, por eso deben ser capaces de habérselas mejor con 8250 ó 16450. Por eso es por lo que algunas personas no sufren pérdidas de datos, hasta que cambian a Linux.
Las placas sin UART y las multipuerto inteligentes usan integrados DSP para hacer las tareas de búfer y control adicional, esto libera mucho más la CPU. Por ejemplo, las placas Cyclades Cyclom y Stallion EasyIO usan una UART Cirrus Logic CD1400, y muchas placas usan CPUs 80186 o incluso CPUS RISC especiales, para controlar la E/S serie.
Tenga en mente que este tipo de UART no inteligentes no son malas, simplemente no son buenas para velocidades altas. No debe tener problemas conectando un terminal, o un ratón a estas UARTs. Pero, para un módem de alta velocidad, la 16550A es imprescindible.
Puede comprar placas serie con la UART 16550A por un poco más de dinero, solamente pregunte al vendedor que tipo de UART tiene la placa. O si quiere actualizar su placa, simplemente compre el chip 16550A y reemplácelo por su UART 16450. Son compatibles patilla a patilla. Algunas placas traen la UART en zócalo para este propósito, si no, puede soldarlo. Nótese que probablemente se ahorrará un montón de problemas consiguiendo una placa nueva, si tiene el dinero, cuestan menos de 5000 ptas.
/dev/cua
N Y /dev/ttyS
N? La única diferencia es el modo en que se abren los dispositivos. Los
dispositivos para recibir llamadas /dev/ttyS
N se abren en
modo bloqueante, hasta que se haya detectado la portadora (CD) (esto es,
alguien conecta). Así, cuando alguien quiere usar el dispositivo
/dev/cua
N, no hay conflictos con un programa que esté
vigilando el dispositivo /dev/ttyS
N (a menos que alguien
esté conectado, por supuesto).
Las múltiples entradas /dev
, permiten operaciones sobre el mismo
dispositivo físico con diferentes características de operación. También
permite a los programas getty
estándar coexistir con cualquier otro
programa serie, sin que getty
tenga que ser reajustado con bloqueos
de ningún tipo. Es especialmente útil ya que los ficheros de bloqueo de
los núcleos Unix estándar, y los bloqueos de UUCP son de aviso y no de
obligatoriedad.