Sistemas operativos modernos
¿Cómo funcionan estos esquemas? En todos los casos, cuando la CPU quiere leer una pa labra, sea de la memoria o de un puerto de E/S, coloca la dirección que necesita en las líneas de dirección del bus y luego aplica una señal R E A D a la línea de control del bus. Se usa una segunda línea de señal para indicar si se debe usar el espacio de E/S o el de memoria. Si se va a usar el espacio de memoria, la memoria responde a la solicitud; si se va a usar el espacio de E/S, el dispositivo de E/S responde a la solicitud. Si sólo hay espacio de memoria (como en la figura 5-2b), cada módulo de memoria y cada dispositivo de E/S compara las líneas de direc ción con el intervalo de direcciones que atiende. Si la dirección está dentro de su intervalo, res ponde a la solicitud. Puesto que ninguna dirección se asigna jamás tanto a la memoria como a un dispositivo de E/S, no hay ambigüedades ni conflictos. Los dos esquemas para direccionar los controladores tienen ventajas y desventajas. Co mencemos con las ventajas de la E/S con correspondencia en memoria. Primera, si se necesi tan instrucciones de E/S especiales para leer y escribir en los registros de control de los dispositivos, el acceso a ellos requerirá el uso de código en ensamblador, porque no hay mane ra de ejecutar una instrucción IN o OUT en C o C++. La invocación de un procedimiento de este tipo aumentará el gasto extra de controlar la E/S. En contraste, con E/S con corresponden cia en memoria, los registros de control de los dispositivos no son más que variables en la me moria y pueden direccionarse en C igual que cualquier otra variable. Así, con E/S con correspondencia en memoria, un controlador de dispositivo puede escribirse por completo en C. Sin E/S con correspondencia en memoria, se requiere algo de código en ensamblador. Segunda, con E/S con correspondencia en memoria no se requiere un mecanismo especial de protección para evitar que los procesos de usuario efectúen E/S. Lo único que necesita ha cer el sistema operativo es cuidar que la porción del espacio de direcciones que contiene los registros de control jamás se incluya en el espacio de direcciones virtual de ningún usuario. Mejor aún, si cada dispositivo tiene sus registros de control en una página distinta del espacio de direcciones, el sistema operativo podrá conferir a un usuario control sobre dispositivos es pecíficos con sólo incluir las páginas deseadas en su tabla de páginas. Semejante esquema per mite colocar diferentes controladores de dispositivos en diferentes espacios de direcciones, con lo cual no sólo se reduce el tamaño del kemel sino que también se evita que un controlador in terfiera con otros. Tercera, con E/S con correspondencia en memoria cualquier instrucción que pueda hacer referencia a la memoria también podrá hacer referencia a registros de control. Por ejemplo, si hay una instrucción T E S T que prueba una palabra de memoria para determinar si es O, tam bién podrá usarse para determinar si un registro de control es O, valor que podría indicar que el dispositivo está inactivo y puede aceptar un nuevo comando. El código en lenguaje ensambla dor podría tener el aspecto que se muestra a continuación: CICLO: LISTO: TEST PÜERT0_4 BEQ LISTO BRANCH CICLO //verifica si el puerto 4 es O //si es O, va a listo //de lo contrario, continúa probando Si no se usa E/S con correspondencia en memoria, primero se tendrá que leer el registro de con trol dentro de la CPU, y luego probarlo, lo que requiere dos instrucciones en lugar de una. En
RkJQdWJsaXNoZXIy MjI4NDcx