martes, 6 de marzo de 2012

Dispositivos de E/S


Dispositivos de E/S

 Los dispositivos de E/S constan generalmente de dos partes: un controlador de dispositivo y el dispositivo en sí. El controlador del dispositivo es un chip o un conjunto de chips montados en una tarjeta insertable (denominada tarjeta controladora) que controla físicamente el dispositivo. Dicho controlador acepta comandos del sistema operativo, como por ejemplo leer datos del dispositivo, y los ejecuta.
El otro componente es el dispositivo en sí. Los dispositivos tienen interfaces relativamente simples, debido a que no hacen cosas complicadas y para poder estandarizarse. Lo último es necesario para que cualquier controladora de disco IDE pueda controlar cualquier disco IDE, por ejemplo. IDE son las siglas en inglés de Integrated Drive Electronics (electrónica integrada en la unidad) y es el tipo de disco estándar en el Pentium y en algunos otros ordenadores. Puesto que la interfaz real con el dispositivo está oculta tras el controlador, lo único que ve el sistema operativo es la interfaz con el controlador, que podría ser muy diferente de la interfaz con el dispositivo.
Puesto que cada tipo de controlador es distinto, se necesita diferente software para controlar cada uno. El software que se comunica con un controlador, enviándole comandos y aceptando sus respuestas, se denomina controlador (software) del dispositivo o driver del dispositivo. Para evitar confusiones entre el controlador (software) y el controlador (hardware) del dispositivo, nos referiremos en lo sucesivo al controlador (software) del dispositivo como el driver del dispositivo. En otros libros se evita esa ambigüedad simplemente refiriéndose (en femenino) al controlador (hardware) como la (tarjeta) controladora del dispositivo. Los fabricantes de controladores de dispositivos tienen que proporcionar los drivers del dispositivo para cada sistema operativo que lo soporte. De esta manera un escáner podría venir con drivers para Windows 98, Windows 2000 y UNIX, por ejemplo.
Antes de poder utilizar el dispositivo, es necesario incluir su driver en el sistema operativo para que pueda ejecutarse en modo núcleo. Teóricamente los drivers también podrían ejecutarse fuera del núcleo, pero pocos sistemas operativos actuales soportan esta posibilidad debido a que requiere la capacidad para permitir que un driver en el espacio de usuario pueda tener acceso al dispositivo de forma controlada, característica raramente soportada. Hay tres maneras de situar el driver dentro del núcleo. La primera consiste en volver a enlazar el núcleo con el nuevo driver y luego reiniciar el sistema. Muchos sistemas UNIX funcionan así. La segunda manera consiste en incluir una entrada en un fichero del sistema operativo para indicarle a éste que necesita el driver del dispositivo, y luego reiniciar el sistema. En el momento del arranque, el sistema operativo procede a buscar los drivers que necesita y los carga. Windows funciona así. La tercera manera es que el sistema operativo pueda aceptar nuevos drivers mientras se está ejecutando y los instale sobre la marcha sin tener que reiniciar el ordenador. Esta manera de integrar el driver se desarrolló para situaciones raras pero actualmente se ha convertido en algo habitual.
Todo controlador cuenta con un pequeño número de registros que sirven para comunicarse con él. Por ejemplo, un controlador de disco en su versión más sencilla podría tener registros para especificar la dirección en disco, la dirección en memoria, el número de sectores y el sentido de la transferencia (lectura o escritura). Para activar el controlador, el driver recibe un comando del sistema operativo y lo traduce a los valores apropiados que debe escribir en los registros del dispositivo.
En algunos ordenadores, los registros del dispositivo están mapeados en el espacio de direcciones del sistema operativo, de modo que pueden leerse y escribirse como si fueran palabras de memoria ordinarias. En tales ordenadores no se necesitan instrucciones de E/S especiales y es posible proteger el hardware del acceso indiscriminado por parte de los programas de usuario simplemente colocando fuera de su alcance esas direcciones de memoria (por ejemplo, utilizando registros de base y de límite). En otros ordenadores, los registros de dispositivo se colocan en un espacio de puertos de E/S especial, con cada registro teniendo una dirección de puerto. En estas máquinas se dispone en modo núcleo de instrucciones especiales IN y OUT que permiten a los drivers leer y escribir en los registros. El primer esquema elimina la necesidad de instrucciones de E/S especiales pero mantiene permanentemente ocupada alguna parte del espacio de direcciones. El segundo esquema no ocupa el espacio de direcciones para nada pero requiere instrucciones especiales en el repertorio de instrucciones del lenguaje máquina. 
Las operaciones de entrada y salida pueden realizarse de maneras distintas. En el método más sencillo, un programa de usuario realiza una llamada al sistema, que el núcleo traduce en una llamada a un procedimiento del driver apropiado. El driver pone en marcha 28 entonces la E/S y entra en un bucle de espera que consulta continuamente el dispositivo para ver si ya terminó (es usual que haya un bit que indique si el dispositivo sigue ocupado o no). Una vez terminada la E/S, el driver coloca los datos (si los hay) donde se necesitan y retorna. El sistema operativo devuelve entonces el control al programa que lo invocó a través de la llamada al sistema. Este método se denomina espera activa (busy waiting o polling) y tiene la desventaja de mantener ocupada a la CPU consultado el estado del dispositivo hasta que termina la E/S.
El segundo método consiste en que el driver pone en marcha el dispositivo y lo programa para que genere una interrupción cuando haya terminado. En ese momento el driver retorna devolviendo el control al sistema operativo. Entonces el sistema operativo si es necesario bloquea al programa que hizo la llamada al sistema y busca otras cosas útiles que hacer. Cuando el controlador (hardware) del dispositivo detecta el final de la transferencia, genera una interrupción para avisar de su terminación. Las interrupciones son muy importantes en los sistemas operativos, por lo que vamos a examinar la idea con más detenimiento.

No hay comentarios:

Publicar un comentario