Sistemas operativos modernos

gunda, a líneas o renglones. En un principio se les denominaba modo crudo y modo cocinado, respectivamente. El estándar POSIX utiliza el término menos expresivo modo canónico para des­ cribir el modo orientado a líneas. El modo no canónico equivale al modo crudo, aunque es posi­ ble cambiar muchos detalles del comportamiento de la terminal. Los sistemas compatibles con POSIX proporcionan varias funciones de biblioteca que permiten seleccionar uno de los dos mo­ dos y modificar varios aspectos de configuración de la terminal. La primera tarea del controlador de teclado es recabar caracteres. Si oprimir cada tecla cau­ sa una interrupción, el controlador podrá obtener el carácter durante ésta. Si el software de bajo nivel convierte las interrupciones en mensajes, el carácter recién adquirido puede colocarse en el mensaje. Como alternativa, se le puede poner en un búfer pequeño en la memoria y usar el men­ saje para indicar al controlador que ya llegó algo. Este último método es más seguro si sólo es posible enviar un mensaje a un proceso que está esperando y existe la posibilidad de que el con­ trolador de teclado todavía esté ocupado con el carácter anterior. Si la terminal opera en modo canónico (cocinado), los caracteres deberán almacenarse has­ ta que se acumule toda una línea, porque cabe la posibilidad de que el usuario decida borrar una parte. Incluso si la terminal opera en modo crudo, podría ser que el programa todavía no haya solicitado entradas, y los caracteres tengan que colocarse en un búfer para poder teclear por ade­ lantado. (A los diseñadores de sistemas que no permiten a los usuarios teclear por adelantado se les debería untar de brea y emplumarlos, o aplicarles el castigo, peor aún, de tener que usar su propio sistema.) Hay dos métodos comunes para colocar caracteres en un búfer. En el primero, el contro­ lador contiene una reserva central de búferes, cada uno de los cuales contiene tal vez 10 carac­ teres. Cada terminal está asociada con una estructura de datos que contiene, entre otras cosas, un apuntador a la cadena de búferes, correspondiente a las entradas recibidas de esa terminal. A medida que se teclean más caracteres, se obtienen más búferes y se enganchan a la cadena. Cuando los caracteres se pasan a un programa de usuario, los búferes se desenganchan y se de­ vuelven a la reserva central. El otro método consiste en manejar los búferes en forma directa en la estructura de datos de la terminal misma, sin una reserva central. Puesto que es común que los usuarios tecleen un comando que tardará cierto tiempo en ejecutarse (digamos, recompilar y enlazar un programa bi­ nario grande) y luego tecleen unas cuantas líneas por adelantado, para ir a la segura el controlador deberá asignar aproximadamente 200 caracteres a cada terminal. En un sistema grande de tiempo compartido con 100 terminales, es obvio que es demasiado asignar 20K todo el tiempo para el tecleo por adelantado, así que es probable que bastará con una reserva central de búferes con es­ pacio para quizá 5K. Por otra parte, tener un búfer dedicado por terminal hace que el controlador sea más sencillo (no hay que administrar listas erúazadas) y es preferible en las computadoras per­ sonales que sólo tienen un teclado. La figura 5-35 muestra la diferencia entre estos dos métodos. Aunque el teclado y la pantalla son dispositivos independientes desde el punto de vista ló­ gico, muchos usuarios se han acostumbrado a que los caracteres que teclean aparezcan de inmediato en la pantalla. Algunas terminales (más bien antiguas) los complacen mostrando en forma automática (en hardware) lo que acaba de teclearse, cosa que no sólo es un problema cuando se están introduciendo claves de acceso, sino que también limita de modo considerable la flexibilidad de los editores avanzados y otros programas. Por fortuna, en casi todas las ter-

RkJQdWJsaXNoZXIy MjI4NDcx