Sistemas operativos modernos

de bloques o de caracteres. El nùmero de dispositivo principal se usa corno indice para consultar una de dos tablas internas de estructuras, bdevsw para los archivos especiales de bloques o cdevsw para los archivos especiales de caracteres. La estructura que se localiza de esta manera contiene apuntadores a los procedimientos que deben invocarse para abrir el dispositivo, leerlo, escribir en él, etc. El niímero de dispositivo secundario se pasa como parámetro. La adición de un nuevo tipo de dispositivo a un sistema UNIX implica añadir una nueva entrada a una de estas tablas y sumi­ nistrar los procedimientos correspondientes para manejar las diversas operaciones del dispositivo. Los campos más importantes del arreglo cdevsw en un sistema típico podrían ser los de la figura 10-21. Cada fila se refiere a un solo dispositivo de E/S (es decir, un solo controlador). Las columnas representan las funciones que todos los controladores de caracteres deben manejar. Asimismo, existen otras funciones más. Cuando se ejecuta una operación con un archivo espe­ cial de caracteres, el sistema consulta el arreglo cdevsw para seleccionar la fila (estructura) co­ rrecta y luego invoca la función que está en el miembro (columna) correspondiente de la estructura para que efectúe el trabajo. Así, cada fila incluye apuntadores a funciones contenidas en un controlador. D isp o sitiv o A b rir C e rra r Le er E s c rib ir tocti Otra Nulo nulo nulo nulo nulo nulo Memoria nulo nulo mem read mem write nulo Teclado k_open k Glose k read error k iocti Terminal tty_open ttv_ciose tty read tty write tty iocti Impresora lp_open lp_close error lp_write lp_ioctl Figura 10-21. Algunos de los campos de una tabla cc/evsw típica. Cada controlador se divide en dos partes. La mitad superior se ejecuta en el contexto del in­ vocador y se comunica con el resto de UNIX. La mitad inferior se ejecuta en el contexto del ker­ nel e interactúa con el disposifivo. Los controladores pueden invocar procedimientos del kernel para asignar memoria, administrar temporizadores, controlar DMA y otras cosas. El conjunto de funciones del kernel que pueden invocarse está definido en un documento llamado Interfaz Controlador-Aér/te/. La escritura de controladores de dispositivos para UNIX se trata a fondo en Egan y Teixeira (1992). El sistema de E/S se divide en dos componentes principales: el manejo de archivos espe­ ciales de bloques y el manejo de archivos especiales de caracteres. Ahora examinaremos cada uno de estos componentes. La meta de la parte del sistema que efectúa E/S con archivos especiales de bloques (por ejemplo, discos) es reducir al mínimo el número de transferencias reales efectuadas. Para ello, los sistemas UNIX tienen un caché de búfer entre los controladores de disco y el sistema de ar­ chivos, como se ilustra en la figura 10-22. El caché de búfer es una tabla en el kemel donde se retienen miles de los bloques usados de modo más reciente. Cuando se necesita un bloque de dis­ co por cualquier mofivo (nodo-i, directorio o datos), primero se verifica si está en el caché de bú­ fer. Si está allí, se toma y se evita un acceso a disco. El caché de búfer mejora de manera considerable el desempeño del sistema.

RkJQdWJsaXNoZXIy MjI4NDcx