Summary

Este documento proporciona una introducción a la entrada/salida en los sistemas operativos modernos. Explica los principios del hardware de E/S y la estructura del software de E/S, incluyendo los dispositivos de bloque y carácter, los controladores de dispositivos y E/S por asignación de memoria.

Full Transcript

5 ENTRADA/SALIDA Además de proporcionar abstracciones como los procesos (e hilos), espacios de direcciones y ar- chivos, un sistema operativo también controla todos los dispositivos de E/S (Entrada/Salida) de la computadora. Debe emitir comandos para los dispositivos, capta...

5 ENTRADA/SALIDA Además de proporcionar abstracciones como los procesos (e hilos), espacios de direcciones y ar- chivos, un sistema operativo también controla todos los dispositivos de E/S (Entrada/Salida) de la computadora. Debe emitir comandos para los dispositivos, captar interrupciones y manejar errores. Adicionalmente debe proporcionar una interfaz —simple y fácil de usar— entre los dispositivos y el resto del sistema. Hasta donde sea posible, la interfaz debe ser igual para todos los dispositivos (independencia de dispositivos). El código de E/S representa una fracción considerable del sistema operativo total. El tema de este capítulo es la forma en que el sistema operativo administra la E/S. Este capítulo se organiza de la siguiente manera. Primero veremos algunos de los principios del hardware de E/S y después analizaremos el software de E/S en general. El software de E/S se pue- de estructurar en niveles, cada uno de los cuales tiene una tarea bien definida. Analizaremos estos niveles para describir qué hacen y cómo trabajan en conjunto. Después de esa introducción analizaremos detalladamente hardware y software de varios dis- positivos de E/S: discos, relojes, teclados y pantallas. Por último, consideraremos la administración de la energía. 5.1 PRINCIPIOS DEL HARDWARE DE E/S Distintas personas ven el hardware de E/S de diferentes maneras. Los ingenieros eléctricos lo ven en términos de chips, cables, fuentes de poder, motores y todos los demás componentes físicos que con- stituyen el hardware. Los programadores ven la interfaz que se presenta al software: los comandos 329 330 ENTRADA/SALIDA CAPÍTULO 5 que acepta el hardware, las funciones que lleva a cabo y los errores que se pueden reportar. En este libro nos enfocaremos en la programación de los dispositivos de E/S y no en el diseño, la cons- trucción o el mantenimiento de los mismos, por lo que nuestro interés se limitará a ver cómo se programa el hardware, no cómo funciona por dentro. Sin embargo, la programación de muchos dispositivos de E/S a menudo está íntimamente conectada con su operación interna. En las siguien- tes tres secciones proveeremos un poco de historia general acerca del hardware de E/S y cómo se relaciona con la programación. Puede considerarse como un repaso y expansión del material in- troductorio de la sección 1.4. 5.1.1 Dispositivos de E/S Los dispositivos de E/S se pueden dividir básicamente en dos categorías: dispositivos de bloque y dispositivos de carácter. Un dispositivo de bloque almacena información en bloques de tamaño fi- jo, cada uno con su propia dirección. Los tamaños de bloque comunes varían desde 512 bytes has- ta 32,768 bytes. Todas las transferencias se realizan en unidades de uno o más bloques completos (consecutivos). La propiedad esencial de un dispositivo de bloque es que es posible leer o escribir cada bloque de manera independiente de los demás. Los discos duros, CD-ROMs y memorias USBs son dispositivos de bloque comunes. Como resultado de un análisis más detallado, se puede concluir que no está bien definido el lí- mite entre los dispositivos que pueden direccionarse por bloques y los que no se pueden direccio- nar así. Todos concuerdan en que un disco es un dispositivo direccionable por bloques, debido a que no importa dónde se encuentre el brazo en un momento dado, siempre será posible buscar en otro cilindro y después esperar a que el bloque requerido gire debajo de la cabeza. Ahora considere una unidad de cinta utilizada para realizar respaldos de disco. Las cintas contienen una secuencia de blo- ques. Si la unidad de cinta recibe un comando para leer el bloque N, siempre puede rebobinar la cin- ta y avanzar hasta llegar al bloque N. Esta operación es similar a un disco realizando una búsqueda, sólo que requiere mucho más tiempo. Además, puede o no ser posible volver a escribir un bloque a mitad de la cinta. Aun si fuera posible utilizar las cintas como dispositivos de bloque de acceso aleatorio, es algo que se sale de lo normal: las cintas no se utilizan de esa manera. El otro tipo de dispositivo de E/S es el dispositivo de carácter. Un dispositivo de carácter en- vía o acepta un flujo de caracteres, sin importar la estructura del bloque. No es direccionable y no tiene ninguna operación de búsqueda. Las impresoras, las interfaces de red, los ratones (para seña- lar), las ratas (para los experimentos de laboratorio de psicología) y la mayoría de los demás dispo- sitivos que no son parecidos al disco se pueden considerar como dispositivos de carácter. Este esquema de clasificación no es perfecto. Algunos dispositivos simplemente no se adaptan. Por ejemplo, los relojes no son direccionables por bloques. Tampoco generan ni aceptan flujos de caracteres. Todo lo que hacen es producir interrupciones a intervalos bien definidos. Las pantallas por asignación de memoria tampoco se adaptan bien al modelo. Aún así, el modelo de dispositivos de bloque y de carácter es lo bastante general como para poder utilizarlo como base para hacer que parte del sistema operativo que lidia con los dispositivos de E/S sea independiente. Por ejemplo, el sistema de archivos sólo se encarga de los dispositivos de bloque abstractos y deja la parte depen- diente de los dispositivos al software de bajo nivel. SECCIÓN 5.1 PRINCIPIOS DEL HARDWARE DE E/S 331 Los dispositivos de E/S cubren un amplio rango de velocidades, lo cual impone una presión considerable en el software para obtener un buen desempeño sobre muchos órdenes de magnitud en las velocidades de transferencia de datos. La figura 5.1 muestra las velocidades de transferencia de datos de algunos dispositivos comunes. La mayoría de estos dispositivos tienden a hacerse más rá- pidos a medida que pasa el tiempo. Dispositivo Velocidad de transferencia de datos Teclado 10 bytes/seg Ratón 100 bytes/seg Módem de 56K 7 KB/seg Escáner 400 KB/seg Cámara de video digital 3.5 MB/seg 802.11g inalámbrico 6.75 MB/seg CD-ROM de 52X 7.8 MB/seg Fast Ethernet 12.5 MB/seg Tarjeta Compact Flash 40 MB/seg FireWire (IEEE 1394) 50 MB/seg USB 2.0 60 MB/seg Red SONET OC-12 78 MB/seg Disco SCSI Ultra 2 80 MB/seg Gigabit Ethernet 125 MB/seg Unidad de disco SATA 300 MB/seg Cinta de Ultrium 320 MB/seg Bus PCI 528 MB/seg Figura 5-1. Velocidades de transferencia de datos comunes de algunos dispositivos, redes y buses. 5.1.2 Controladores de dispositivos Por lo general, las unidades de E/S consisten en un componente mecánico y un componente elec- trónico. A menudo es posible separar las dos porciones para proveer un diseño más modular y ge- neral. El componente electrónico se llama controlador de dispositivo o adaptador. En las computadoras personales, comúnmente tiene la forma de un chip en la tarjeta principal o una tarje- ta de circuito integrado que se puede insertar en una ranura de expansión (PCI). El componente me- cánico es el dispositivo en sí. Este arreglo se muestra en la figura 1-6. La tarjeta controladora por lo general contiene un conector, en el que se puede conectar un cable que conduce al dispositivo en sí. Muchos controladores pueden manejar dos, cuatro o inclusive ocho dispositivos idénticos. Si la interfaz entre el controlador y el dispositivo es están- dar, ya sea un estándar oficial ANSI, IEEE o ISO, o un estándar de facto, entonces las empresas 332 ENTRADA/SALIDA CAPÍTULO 5 pueden fabricar controladores o dispositivos que se adapten a esa interfaz. Por ejemplo, muchas empresas fabrican unidades de disco que coinciden con la interfaz IDE, SATA, SCSI, USB o Fi- reWire (IEEE 1394). La interfaz entre el controlador y el dispositivo es a menudo de muy bajo nivel. Por ejemplo, se podría dar formato a un disco con 10,000 sectores de 512 bytes por pista. Sin embargo, lo que en realidad sale del disco es un flujo serial de bits, empezando con un preámbulo, después los 4096 bits en un sector y por último una suma de comprobación, también conocida como Código de Co- rrección de Errores (ECC). El preámbulo se escribe cuando se da formato al disco y contiene el cilindro y número de sector, el tamaño del sector y datos similares, así como información de sin- cronización. El trabajo del controlador es convertir el flujo de bits serial en un bloque de bytes y realizar cualquier corrección de errores necesaria. Por lo general, primero se ensambla el bloque de by- tes, bit por bit, en un búfer dentro del controlador. Después de haber verificado su suma de com- probación y de que el bloque se haya declarado libre de errores, puede copiarse a la memoria principal. El controlador para un monitor también funciona como un dispositivo de bits en serie a un ni- vel igual de bajo. Lee los bytes que contienen los caracteres a mostrar de la memoria y genera las señales utilizadas para modular el haz del CRT para hacer que escriba en la pantalla. El controlador también genera las señales para que el haz del CRT realice un retrazado horizontal después de ha- ber terminado una línea de exploración, así como las señales para hacer que realice un retrazado vertical después de haber explorado toda la pantalla. Si no fuera por el controlador del CRT, el pro- gramador del sistema operativo tendría que programar de manera explícita la exploración análoga del tubo. Con el controlador, el sistema operativo inicializa el controlador con unos cuantos pará- metros, como el número de caracteres o píxeles por línea y el número de líneas por pantalla, y de- ja que el controlador se encargue de manejar el haz. Las pantallas TFT planas funcionan de manera diferente, pero son igualmente complicadas. 5.1.3 E/S por asignación de memoria Cada controlador tiene unos cuantos registros que se utilizan para comunicarse con la CPU. Al es- cribir en ellos, el sistema operativo puede hacer que el dispositivo envíe o acepte datos, se encien- da o se apague, o realice cualquier otra acción. Al leer de estos registros, el sistema operativo puede conocer el estado del dispositivo, si está preparado o no para aceptar un nuevo comando, y sigue procediendo de esa manera. Además de los registros de control, muchos dispositivos tienen un búfer de datos que el siste- ma operativo puede leer y escribir. Por ejemplo, una manera común para que las computadoras muestren píxeles en la pantalla es tener una RAM de video, la cual es básicamente sólo un búfer de datos disponible para que los programas o el sistema operativo escriban en él. De todo esto surge la cuestión acerca de cómo se comunica la CPU con los registros de con- trol y los búferes de datos de los dispositivos. Existen dos alternativas. En el primer método, a ca- da registro de control se le asigna un número de puerto de E/S, un entero de 8 o 16 bits. El conjunto de todos los puertos de E/S forma el espacio de puertos de E/S y está protegido de manera que los SECCIÓN 5.1 PRINCIPIOS DEL HARDWARE DE E/S 333 programas de usuario ordinarios no puedan utilizarlo (sólo el sistema operativo puede). Mediante el uso de una instrucción especial de E/S tal como IN REG,PUERTO, la CPU puede leer el registro de control PUERTO y almacenar el resultado en el registro de la CPU llamado REG. De manera similar, mediante el uso de OUT PUERTO, REG la CPU puede escribir el contenido de REG en un registro de control. La mayoría de las primeras computadoras, incluyendo a casi todas las mainframes, como la IBM 360 y todas sus sucesoras, tra- bajaban de esta manera. En este esquema, los espacios de direcciones para la memoria y la E/S son distintos, como se muestra en la figura 5-2(a). Las instrucciones IN R0,4 y MOV R0,4 son completamente distintas en este diseño. La primera lee el contenido del puerto 4 de E/S y lo colo- ca en RO, mientras que la segunda lee el contenido de la palabra de memoria 4 y lo coloca en RO. Los 4s en estos ejemplos se refieren a espacios de direcciones distintos y que no están relacionados. Dos direcciones Espacio de una dirección Dos espacios de direcciones 0xFFFF… Memoria Puertos de E/S 0 (a) (b) (c) Figura 5-2. (a) Espacio separado de E/S y memoria. (b) E/S por asignación de me- moria. (c) Híbrido. El segundo método, que se introdujo con la PDP-11, es asignar todos los registros de control al espacio de memoria, como se muestra en la figura 5-2(b). A cada registro de control se le asigna una dirección de memoria única a la cual no hay memoria asignada. Este sistema se conoce como E/S con asignación de memoria (mapped-memory). Por lo general, las direcciones asignadas se encuentran en la parte superior del espacio de direcciones. En la figura 5-2(c) se muestra un esque- ma híbrido, con búferes de datos de E/S por asignación de memoria y puertos de E/S separados pa- ra los registros de control. El Pentium utiliza esta arquitectura, donde las direcciones de 640K a 1M se reservan para los búferes de datos de los dispositivos en las IBM PC compatibles, además de los puertos de E/S de 0 a 64K. 334 ENTRADA/SALIDA CAPÍTULO 5 ¿Cómo funcionan estos esquemas? En todos los casos, cuando la CPU desea leer una palabra, ya 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 después impone una señal READ en una línea de control del bus. Se utiliza una segunda línea de señal para indicar si se necesita espacio de E/S o de memoria. Si es espacio de memoria, ésta res- ponde a la petición. Si es espacio de E/S, el dispositivo de E/S responde a la petición. Si sólo hay espacio de memoria [como en la figura 5-2(b)], todos los módulos de memoria y todos los disposi- tivos de E/S comparan las líneas de dirección con el rango de direcciones a las que dan servicio. Si la dirección está en su rango, responde a la petición. Como ninguna dirección se asigna tanto a la me- moria como a un dispositivo de E/S, no hay ambigüedad ni conflicto. Los dos esquemas para direccionar los controladores tienen distintos puntos fuertes y débiles. Vamos a empezar con las ventajas de la E/S por asignación de memoria. En primer lugar, si se ne- cesitan instrucciones de E/S especiales para leer y escribir en los registros de control, para acceder a ellos se requiere el uso de código ensamblador, ya que no hay forma de ejecutar una instrucción IN o OUT en C o C++. Al llamar a dicho procedimiento se agrega sobrecarga para controlar la E/S. En contraste, con la E/S por asignación de memoria los registros de control de dispositivos son só- lo variables en memoria y se pueden direccionar en C de la misma forma que cualquier otra varia- ble. Así, con la E/S por asignación de memoria, un controlador de dispositivo de E/S puede escribirse completamente en C. Sin la E/S por asignación de memoria se requiere cierto código en- samblador. En segundo lugar, con la E/S por asignación de memoria no se requiere un mecanismo de protec- ción especial para evitar que los procesos realicen operaciones de E/S. Todo lo que el sistema opera- tivo tiene que hacer es abstenerse de colocar esa porción del espacio de direcciones que contiene los registros de control en el espacio de direcciones virtuales de cualquier usuario. Mejor aún, si cada dis- positivo tiene sus registros de control en una página distinta del espacio de direcciones, el sistema ope- rativo puede proporcionar a un usuario el control sobre dispositivos específicos pero no el de los demás, con sólo incluir las páginas deseadas en su tabla de páginas. Dicho esquema permite que se co- loquen distintos controladores de dispositivos en diferentes espacios de direcciones, lo cual no sólo reduce el tamaño del kernel, sino que también evita que un controlador interfiera con los demás. En tercer lugar, con la E/S por asignación de memoria, cada instrucción que puede hacer refe- rencia a la memoria también puede hacerla a los registros de control. Por ejemplo, si hay una instruc- ción llamada TEST que evalúe si una palabra de memoria es 0, también se puede utilizar para evaluar si un registro de control es 0, lo cual podría ser la señal de que el dispositivo está inactivo y en po- sición de aceptar un nuevo comando. El código en lenguaje ensamblador podría ser así: CICLO: TEST PUERTO_4 // comprueba si el puerto 4 es 0 BEQ LISTO // si es 0, ir a listo BRANCH CICLO // en caso contrario continúa la prueba LISTO: Si la E/S por asignación de memoria no está presente, el registro de control se debe leer primero en la CPU y después se debe evaluar, para lo cual se requieren dos instrucciones en vez de una. En el caso del ciclo antes mencionado, se tiene que agregar una cuarta instrucción, con lo cual se reduce ligeramente la capacidad de respuesta al detectar un dispositivo inactivo. SECCIÓN 5.1 PRINCIPIOS DEL HARDWARE DE E/S 335 En el diseño de computadoras, casi todo implica tener que hacer concesiones, y aquí también es el caso. La E/S por asignación de memoria también tiene sus desventajas. En primer lugar, la mayo- ría de las computadoras actuales tienen alguna forma de colocar en caché las palabras de memoria. Sería desastroso colocar en caché un registro de control de dispositivos. Considere el ciclo de código en lenguaje ensamblador antes mostrado en presencia de caché. La primera referencia a PUERTO_4 haría que se colocara en la caché. Las referencias subsiguientes sólo tomarían el valor de la caché sin siquiera preguntar al dispositivo. Después, cuando el dispositivo por fin estuviera listo, el software no tendría manera de averiguarlo. En vez de ello, el ciclo continuaría para siempre. Para evitar esta situación relacionada con la E/S por asignación de memoria, el hardware debe ser capaz de deshabilitar la caché en forma selectiva; por ejemplo, por página. Esta característica agrega una complejidad adicional al hardware y al sistema operativo, que tiene que encargarse de la caché selectiva. En segundo lugar, si sólo hay un espacio de direcciones, entonces todos los módulos de memo- ria y todos los dispositivos de E/S deben examinar todas las referencias a memoria para ver a cuá- les debe responder. Si la computadora tiene un solo bus, como en la figura 5-3(a), es simple hacer que todos analicen cada dirección. Las lecturas y escrituras de memoria de la CPU pasan a través de este bus con alto ancho de banda CPU Memoria E/S CPU Memoria E/S Este puerto de memoria Todas las direcciones Bus es para permitir que los dispositivos (memoria y E/S) van aquí de E/S accedan a la memoria (a) (b) Figura 5-3. (a) Arquitectura con un solo bus. (b) Arquitectura con bus dual. Sin embargo, la tendencia en las computadoras personales modernas es tener un bus de memoria dedicado de alta velocidad, como se muestra en la figura 5-3(b), una propiedad que también se en- cuentra incidentalmente en las mainframes. Este bus está ajustado para optimizar el rendimiento de la memoria sin sacrificarse por el bienestar de los dispositivos de E/S lentos. Los sistemas Pentium pue- den tener varios buses (memoria, PCI, SCSI, USB, ISA), como se muestra en la figura 1-12. El problema de tener un bus de memoria separado en equipos con asignación de memoria es que los dispositivos no tienen forma de ver las direcciones de memoria a medida que recorren el bus de memoria, por lo que no tienen manera de responderles. De nuevo es necesario tomar medi- das especiales para hacer que la E/S por asignación de memoria funcione en un sistema con varios buses. Una posibilidad es enviar primero todas las referencias de memoria a la memoria; si ésta no responde, entonces la CPU prueba los otros buses. Este diseño puede funcionar, pero requiere una complejidad adicional del hardware. 336 ENTRADA/SALIDA CAPÍTULO 5 Un segundo posible diseño es colocar un dispositivo husmeador en el bus de memoria para pa- sar todas las direcciones presentadas a los dispositivos de E/S potencialmente interesados. El pro- blema aquí es que los dispositivos de E/S tal vez no puedan procesar las peticiones a la velocidad que puede procesarlas la memoria. Un tercer posible diseño, que es el utilizado en la configuración del Pentium de la figura 1-12, es filtrar las direcciones en el chip del puente PCI. Este chip contiene registros de rango que se car- gan previamente en tiempo de inicio del sistema. Por ejemplo, el rango de 640K a 1M se podría marcar como un rango que no tiene memoria; las direcciones ubicadas dentro de uno de los rangos así marcados se reenvían al bus PCI, en vez de reenviarse a la memoria. La desventaja de este es- quema es la necesidad de averiguar en tiempo de inicio del sistema qué direcciones de memoria no lo son en realidad. Por ende, cada esquema tiene argumentos a favor y en contra, por lo que los sa- crificios y las concesiones son inevitables. 5.1.4 Acceso directo a memoria (DMA) Sin importar que una CPU tenga o no E/S por asignación de memoria, necesita direccionar los con- troladores de dispositivos para intercambiar datos con ellos. La CPU puede solicitar datos de un controlador de E/S un bit a la vez, pero al hacerlo se desperdicia el tiempo de la CPU, por lo que a menudo se utiliza un esquema distinto, conocido como DMA (Acceso Directo a Memoria). El sis- tema operativo sólo puede utilizar DMA si el hardware tiene un controlador de DMA, que la ma- yoría de los sistemas tienen. Algunas veces este controlador está integrado a los controladores de disco y otros controladores, pero dicho diseño requiere un controlador de DMA separado para ca- da dispositivo. Lo más común es que haya un solo controlador de DMA disponible (por ejemplo, en la tarjeta principal) para regular las transferencias a varios dispositivos, a menudo en forma con- currente. Sin importar cuál sea su ubicación física, el controlador de DMA tiene acceso al bus del siste- ma de manera independiente de la CPU, como se muestra en la figura 5-4. Contiene varios regis- tros en los que la CPU puede escribir y leer; éstos incluyen un registro de dirección de memoria, un registro contador de bytes y uno o más registros de control. Los registros de control especifican el puerto de E/S a utilizar, la dirección de la transferencia (si se va a leer del dispositivo de E/S o se va a escribir en él), la unidad de transferencia (un byte a la vez o una palabra a la vez), y el núme- ro de bytes a transferir en una ráfaga. Para explicar el funcionamiento del DMA, veamos primero cómo ocurren las lecturas de disco cuando no se utiliza DMA. Primero, el controlador de disco lee el bloque (uno o más sectores) de la unidad en forma serial, bit por bit, hasta que se coloca todo el bloque completo en el búfer interno del controlador. Después calcula la suma de comprobación para verificar que no hayan ocurrido erro- res de lectura. Después, el controlador produce una interrupción. Cuando el sistema operativo em- pieza a ejecutarse, puede leer el bloque de disco del búfer del controlador, un byte o una palabra a la vez, mediante la ejecución de un ciclo en el que cada iteración se lee un byte o palabra de un regis- tro de dispositivo controlador y se almacena en la memoria principal. Cuando se utiliza DMA, el procedimiento es distinto. Primero, la CPU programa el controla- dor de DMA, para lo cual establece sus registros de manera que sepa qué debe transferir y a dónde SECCIÓN 5.1 PRINCIPIOS DEL HARDWARE DE E/S 337 Unidad 1. La CPU programa el Controlador Controlador Memoria CPU controlador de DMA de disco principal de DMA Búfer Dirección Cuenta 4. Recono- Control cimiento Interrumpe al 2. DMA solicita la transferencia a terminar memoria 3. Datos transferidos Bus Figura 5-4. Operación de una transferencia de DMA. (paso 1 en la figura 5-4). También emite un comando al controlador de disco para indicarle que de- be leer datos del disco en su búfer interno y verificar la suma de comprobación. Cuando hay datos válidos en el búfer del controlador de disco, puede empezar el DMA. El controlador de DMA inicia la transferencia enviando una petición de lectura al controlador de disco mediante el bus (paso 2). Esta petición de lectura se ve como cualquier otra petición de lectura, por lo que el controlador de disco no sabe ni le importa si vino de la CPU o de un contro- lador de DMA. Por lo general, la dirección de memoria en la que se va a escribir está en las líneas de dirección del bus, por lo que cuando el controlador de disco obtiene la siguiente palabra de su búfer interno, sabe dónde escribir. La escritura en memoria es otro ciclo de bus estándar (paso 3). Cuando se completa la escritura, el controlador de disco envía una señal de reconocimiento al con- trolador de DMA, también a través del bus (paso 4). El controlador de DMA incrementa a conti- nuación la dirección de memoria a utilizar y disminuye la cuenta de bytes. Si la cuenta de bytes es aún mayor que 0, se repiten los pasos del 2 al 4 hasta que la cuenta llega a 0. En ese momento, el controlador de DMA interrumpe la CPU para hacerle saber que la transferencia está completa. Cuando el sistema operativo se inicia, no tiene que copiar el bloque de disco en la memoria; ya se encuentra ahí. Los controladores de DMA varían considerablemente en cuanto a su sofisticación. Los más simples manejan una transferencia a la vez, como se describió antes. Los más complejos se pueden programar para manejar varias transferencias a la vez. Dichos controladores tienen varios conjun- tos de registros internos, uno para cada canal. La CPU empieza por cargar cada conjunto de regis- tros con los parámetros relevantes para su transferencia. Cada transferencia debe utilizar un controlador de dispositivo distinto. Después de transferir cada palabra (los pasos 2 al 4) en la figu- ra 5-4, el controlador de DMA decide a cuál dispositivo va a dar servicio a continuación. Se puede configurar para utilizar un algoritmo por turno rotatorio (round-robin), o puede tener un diseño de esquema prioritario para favorecer a unos dispositivos sobre otros. Puede haber varias peticio- nes a distintos controladores de dispositivos pendientes al mismo tiempo, siempre y cuando haya 338 ENTRADA/SALIDA CAPÍTULO 5 una manera ambigua de diferenciar las señales de reconocimiento. A menudo se utiliza una línea de reconocimiento distinta en el bus para cada canal de DMA por esta razón. Muchos buses pueden operar en dos modos: el modo de una palabra a la vez y el modo de blo- que. Algunos controladores de DMA también pueden operar en cualquier modo. En el modo ante- rior, la operación es como se describe antes: el controlador de DMA solicita la transferencia de una palabra y la obtiene; si la CPU también desea el bus, tiene que esperar. El mecanismo se llama ro- bo de ciclo debido a que el controlador de dispositivo se acerca de manera sigilosa y roba un ciclo de bus a la CPU de vez en cuando, retrasándola ligeramente. En el modo de bloque, el controlador de DMA indica al dispositivo que debe adquirir el bus, emitir una serie de transferencias y después li- berar el bus. Esta forma de operación se conoce como modo de ráfaga. Es más eficiente que el ro- bo de ciclo, debido a que la adquisición del bus requiere tiempo y se pueden transferir varias palabras con sólo una adquisición de bus. La desventaja en comparación con el modo de ráfaga es que puede bloquear la CPU y otros dispositivos por un periodo considerable, si se está transfi- riendo una ráfaga extensa. En el modelo que hemos estado analizando, algunas veces conocido como modo “fly-by”, el controlador de DMA indica al controlador de dispositivo que transfiera los datos directamente a la memoria principal. Un modo alternativo que utilizan algunos controladores de DMA es hacer que el controlador de dispositivo envíe la palabra al controlador de DMA, el cual emite después una segunda solicitud de bus para escribir la palabra a donde se supone que debe ir. Este esquema re- quiere un ciclo de bus adicional por cada palabra transferida, pero es más flexible en cuanto a que puede realizar también copias de dispositivo a dispositivo, e incluso copias de memoria a memoria (para lo cual primero emite una lectura a memoria y después una escritura a memoria en una direc- ción distinta). La mayoría de los controladores de DMA utilizan direcciones físicas de memoria para sus transferencias. El uso de direcciones físicas requiere que el sistema operativo convierta la dirección virtual del búfer de memoria deseado a una dirección física, y que escriba esta dirección física en el registro de dirección del controlador de DMA. Un esquema alternativo que se utiliza en unos cuantos controladores de DMA es escribir direcciones virtuales en el controlador de DMA. Así, el controlador de DMA debe utilizar la MMU para realizar la traducción de dirección virtual a física. Sólo en el caso en que la MMU sea parte de la memoria (es posible, pero raro) en vez de formar parte de la CPU, las direcciones virtuales se podrán colocar en el bus. Como lo mencionamos anteriormente, antes de que pueda iniciar el DMA, el disco lee prime- ro los datos en su búfer interno. Tal vez el lector se pregunte por qué el controlador no sólo alma- cena los bytes en memoria tan pronto como los obtiene del disco. En otras palabras, ¿para qué necesita un búfer interno? Hay dos razones: en primer lugar, al utilizar el búfer interno, el contro- lador de disco puede verificar la suma de comprobación antes de iniciar una transferencia y si la su- ma de comprobación es incorrecta se señala un error y no se realiza la transferencia; la segunda es que, una vez que se inicia una transferencia de disco, los bits siguen llegando a una velocidad cons- tante, esté listo o no el controlador para ellos. Si el controlador tratara de escribir datos directamen- te en la memoria, tendría que pasar por el bus del sistema por cada palabra transferida. Si el bus estuviera ocupado debido a que algún otro dispositivo lo estuviera utilizando (por ejemplo, en mo- do ráfaga), el controlador tendría que esperar. Si la siguiente palabra del disco llegar antes de que se almacenara la anterior, el controlador tendría que almacenarla en algún otro lado. Si el bus estu- SECCIÓN 5.1 PRINCIPIOS DEL HARDWARE DE E/S 339 viera muy ocupado, el controlador podría terminar almacenando muy pocas palabras y tendría que realizar también mucho trabajo de administración. Cuando el bloque se coloca en un búfer interno, el bus no se necesita sino hasta que empieza el DMA, por lo que el diseño del controlador es mu- cho más simple debido a que la transferencia de DMA a la memoria no es muy estricta en cuanto al tiempo (de hecho, algunos controladores antiguos van directamente a la memoria con sólo una pequeña cantidad de uso del búfer interno, pero cuando el bus está muy ocupado, tal vez haya que terminar una transferencia con un error de desbordamiento). No todas las computadoras utilizan DMA. El argumento en contra es que la CPU principal es a menudo más rápida que el controlador de DMA y puede realizar el trabajo con mucha mayor fa- cilidad (cuando el factor limitante no es la velocidad del dispositivo de E/S). Si no hay otro traba- jo que realizar, hacer que la CPU (rápida) tenga que esperar al controlador de DMA (lento) para terminar no tiene caso. Además, al deshacernos del controlador de DMA y hacer que la CPU reali- ce todo el trabajo en software se ahorra dinero, lo cual es importante en las computadoras de bajo rendimiento (incrustadas o embebidas). 5.1.5 Repaso de las interrupciones En la sección 1.4.5 vimos una introducción breve a las interrupciones, pero hay más que decir. En un sistema de computadora personal común, la estructura de las interrupciones es como se muestra en la figura 5-5. A nivel de hardware, las interrupciones funcionan de la siguiente manera. Cuando un dispositivo de E/S ha terminado el trabajo que se le asignó, produce una interrupción (suponien- do que el sistema operativo haya habilitado las interrupciones). Para ello, impone una señal en una línea de bus que se le haya asignado. Esta señal es detectada por el chip controlador de interrupcio- nes en la tarjeta principal, que después decide lo que debe hacer. Controlador 1. El dispositivo termina 3. La CPU CPU de interrupciones reconoce la interrupción Disco Teclado 11 12 1 10 2 9 8 4 3 Reloj 2. El controlador 7 6 5 emite la Impresora interrupción Bus Figura 5-5. Cómo ocurre una interrupción. Las conexiones entre los dispositivos y el controlador de interrupciones en realidad utilizan líneas de interrupción en el bus, en vez de cables dedicados. Si no hay otras interrupciones pendientes, el controlador de interrupciones procesa la interrup- ción de inmediato. Si hay otra en progreso, o si otro dispositivo ha realizado una petición simultá- nea en una línea de petición de interrupción de mayor prioridad en el bus, el dispositivo sólo se 340 ENTRADA/SALIDA CAPÍTULO 5 ignora por el momento. En este caso, continúa imponiendo una señal de interrupción en el bus has- ta que la CPU la atiende. Para manejar la interrupción, el controlador coloca un número en las líneas de dirección que especifican cuál dispositivo desea atención e impone una señal para interrumpir a la CPU. La señal de interrupción hace que la CPU deje lo que está haciendo y empiece a hacer otra co- sa. El número en las líneas de dirección se utiliza como índice en una tabla llamada vector de in- terrupciones para obtener un nuevo contador del programa. Este contador del programa apunta al inicio del procedimiento de servicio de interrupciones correspondiente. Por lo general, las trampas e interrupciones utilizan el mismo mecanismo desde este punto en adelante, y con frecuencia com- parten el mismo vector de interrupción. La ubicación del vector de interrupción se puede determi- nar de manera estática (hardwired) en la máquina, o puede estar en cualquier parte de la memoria, con un registro de la CPU (cargado por el sistema operativo) apuntando a su origen. Poco después de que se empieza a ejecutar, el procedimiento de servicio de interrupciones re- conoce la interrupción al escribir cierto valor en uno de los puertos de E/S del controlador de inte- rrupciones. Este reconocimiento indica al controlador que puede emitir otra interrupción. Al hacer que la CPU retrase este reconocimiento hasta que esté lista para manejar la siguiente interrupción, se pueden evitar las condiciones de competencia que involucran varias interrupciones (casi simul- táneas). Por otra parte, algunas computadoras (antiguas) no tienen un controlador de interrupciones centralizado, por lo que cada controlador de dispositivo solicita sus propias interrupciones. El hardware siempre guarda cierta información antes de iniciar el procedimiento de servicio. La información que se guarda y el lugar en donde se guarda varía de manera considerable, entre una CPU y otra. Como mínimo se debe guardar el contador del programa para que se pueda reiniciar el proceso interrumpido. En el otro extremo, todos los registros visibles y un gran número de registros internos se pueden guardar también. Una cuestión es dónde guardar esta información. Una opción es colocarla en registros internos que el sistema operativo pueda leer según sea necesario. Un problema derivado de este método es que en- tonces el controlador de interrupciones no puede recibir una señal de reconocimiento sino hasta que se haya leído toda la información potencialmente relevante, por temor a que una segunda interrupción so- brescriba los registros internos que guardan el estado. Esta estrategia conlleva tiempos inactivos más lar- gos cuando se deshabilitan las interrupciones, y posiblemente interrupciones y datos perdidos. En consecuencia, la mayoría de las CPUs guardan la información en la pila. Sin embargo, es- te método también tiene problemas. Para empezar, ¿la pila de quién? Si se utiliza la pila actual, po- dría muy bien ser una pila de un proceso de usuario. El apuntador a la pila tal vez ni siquiera sea legal, lo cual produciría un error fatal cuando el hardware tratara de escribir ciertas palabras en la dirección a la que estuviera apuntando. Además, podría apuntar al final de una página. Después de varias escrituras en memoria, se podría exceder el límite de página y generar un fallo de página. Al ocurrir un fallo de página durante el procesamiento de la interrupción de hardware se crea un ma- yor problema: ¿Dónde se debe guardar el estado para manejar el fallo de página? Si se utiliza la pila del kernel, hay una probabilidad mucho mayor de que el apuntador de la pi- la sea legal y que apunte a una página marcada. Sin embargo, para cambiar al modo kernel tal vez se requiera cambiar de contextos de la MMU, y probablemente se invalide la mayoría de (o toda) la ca- ché y el TLB. Si se vuelven a cargar todos estos, ya sea en forma estática o dinámica, aumenta el tiempo requerido para procesar una interrupción, y por ende se desperdiciará tiempo de la CPU. SECCIÓN 5.1 PRINCIPIOS DEL HARDWARE DE E/S 341 Interrupciones precisas e imprecisas Otro problema es ocasionado por el hecho de que la mayoría de las CPUs modernas tienen muchas líneas de tuberías y a menudo son superescalares (paralelas en su interior). En los sistemas antiguos, después de que cada instrucción terminaba de ejecutarse, el microprograma o hardware comproba- ba si había una interrupción pendiente. De ser así, el contador del programa y el PSW se metían en la pila y empezaba la secuencia de interrupción. Una vez que se ejecutaba el manejador de interrup- ciones, se llevaba a cabo el proceso inverso, en donde el PSW antiguo y el contador del programa se sacaban de la pila y continuaba el proceso anterior. Este modelo hace la suposición implícita de que si ocurre una interrupción justo después de cierta instrucción, todas las instrucciones hasta (e incluyendo) esa instrucción se han ejecutado por completo, y no se ha ejecutado ninguna instrucción después de ésta. En equipos antiguos, esta su- posición siempre era válida. En los modernos tal vez no sea así. Para empezar, considere el modelo de línea de tubería de la figura 1-7(a).¿Qué pasa si ocurre una interrupción mientras la línea de tubería está llena (el caso usual)? Muchas instrucciones se en- cuentran en varias etapas de ejecución. Cuando ocurre la interrupción, el valor del contador del pro- grama tal vez no refleje el límite correcto entre las instrucciones ejecutadas y las no ejecutadas. De hecho, muchas instrucciones pueden haberse ejecutado en forma parcial, y distintas instrucciones podrían estar más o menos completas. En esta situación, el contador del programa refleja con más probabilidad la dirección de la siguiente instrucción a obtener y meter en la línea de tubería, en vez de la dirección de la instrucción que acaba de ser procesada por la unidad de ejecución. En una máquina superescalar, como la de la figura 1-7(b), las cosas empeoran. Las instruccio- nes se pueden descomponer en microoperaciones y éstas se pueden ejecutar en desorden, dependien- do de la disponibilidad de los recursos internos como las unidades funcionales y los registros. Al momento de una interrupción, algunas instrucciones iniciadas hace tiempo tal vez no hayan empeza- do, y otras que hayan empezado más recientemente pueden estar casi completas. Al momento en que se señala una interrupción, puede haber muchas instrucciones en varios estados de avance, con me- nos relación entre ellas y el contador del programa. Una interrupción que deja al equipo en un estado bien definido se conoce como interrupción precisa (Walker y Cragon, 1995). Dicha interrupción tiene cuatro propiedades: 1. El contador del programa (PC) se guarda en un lugar conocido. 2. Todas las instrucciones antes de la instrucción a la que apunta el PC se han ejecutado por completo. 3. Ninguna instrucción más allá de la instrucción a la que apunta el PC se ha ejecutado. 4. Se conoce el estado de ejecución de la instrucción a la que apunta el PC. Observe que no hay prohibición sobre las instrucciones más allá de la instrucción a la que apun- ta el PC acerca de si pueden iniciar o no. Es sólo que los cambios que realizan a los registros o la memoria se deben deshacer antes de que ocurra la interrupción. Se permite ejecutar la instrucción a la que se apunta. También se permite que no se haya ejecutado. Sin embargo, debe estar claro cuál es el caso que se aplica. A menudo, si la interrupción es de E/S, todavía no habrá empezado. No 342 ENTRADA/SALIDA CAPÍTULO 5 obstante, si la interrupción es en realidad una trampa o fallo de página, entonces el PC generalmen- te apunta a la instrucción que ocasionó el fallo, por lo que puede reiniciarse después. La situación de la figura 5-6(a) ilustra una interrupción precisa. Todas las instrucciones hasta el contador del pro- grama (316) se han completado, y ninguna más allá de éstas ha iniciado (o se ha rechazado para deshacer sus efectos). 332 332 No se ha ejecutado No se ha ejecutado 328 328 No se ha ejecutado Se ejecutó un 10% 324 324 No se ha ejecutado Se ejecutó un 40% 320 320 No se ha ejecutado Se ejecutó un 35% PC 316 PC 316 Se ejecutó por completo Se ejecutó un 20% 312 312 Se ejecutó por completo Se ejecutó un 60% 308 308 Se ejecutó por completo Se ejecutó un 80% 304 304 Se ejecutó por completo Se ejecutó por completo 300 300 (a) (b) Figura 5-6. (a) Una interrupción precisa. (b) Una interrupción imprecisa. Una interrupción que no cumple con estos requerimientos se conoce como interrupción im- precisa y hace la vida muy incómoda para el escritor del sistema operativo, que entonces tiene que averiguar lo que ocurrió y lo que aún está por ocurrir. La figura 5-6(b) muestra una interrupción im- precisa, en donde hay distintas instrucciones cerca del contador del programa en distintos estados de avance, y las más antiguas no necesariamente están más completas que las más recientes. Las máquinas con interrupciones imprecisas por lo general vuelcan una gran cantidad de estado interno en la pila, para dar al sistema operativo la posibilidad de averiguar qué está pasando. El código ne- cesario para reiniciar la máquina es por lo general muy complicado. Además, al guardar una canti- dad extensa de información para la memoria en cada interrupción se reduce aún más la velocidad de las interrupciones y la recuperación. Esto conlleva a una irónica situación en la que se tienen CPUs superescalares muy veloces, que algunas veces no son adecuadas para el trabajo real debido a la lentitud de las interrupciones. Algunas computadoras están diseñadas de manera que ciertos tipos de interrupciones y tram- pas (traps) sean precisas y otras no. Por ejemplo, hacer que las interrupciones de E/S sean precisas, pero que las trampas producidas por errores de programación fatales sean imprecisas no es tan ma- lo, ya que no hay necesidad de intentar reiniciar un proceso en ejecución una vez que ha dividido entre cero. Algunas máquinas tienen un bit que se puede establecer para forzar a que todas las inte- rrupciones sean precisas. La desventaja de establecer este bit es que obliga a la CPU a registrar cui- dadosamente todo lo que está haciendo, y a mantener copias “sombra” de los registros para que pueda generar una interrupción precisa en cualquier instante. Toda esta sobrecarga tiene un gran im- pacto sobre el rendimiento. Algunas máquinas superescalares como la serie Pentium tienen interrupciones precisas para permitir que el software antiguo funcione correctamente. El precio a pagar por las interrupciones precisas es una lógica de interrupciones en extremo compleja dentro de la CPU necesaria para ase- gurar que cuando el controlador de interrupciones indique que desea ocasionar una interrupción, SECCIÓN 5.2 FUNDAMENTOS DEL SOFTWARE DE E/S 343 todas las instrucciones hasta cierto punto puedan terminar y ninguna más allá de ese punto pueda tener un efecto considerable sobre el estado de la máquina. Aquí el precio no se paga con tiempo, sino en área del chip y en la complejidad del diseño. Si no se requirieran interrupciones precisas pa- ra fines de compatibilidad con aplicaciones antiguas, esta área del chip estaría disponible para ca- chés en chip más grandes, haciendo a la CPU más veloz. Por otra parte, las interrupciones hacen que el sistema operativo sea mucho más complicado y lento, por lo que es difícil saber qué método es mejor en realidad. 5.2 FUNDAMENTOS DEL SOFTWARE DE E/S Ahora vamos a alejarnos del hardware de E/S para analizar el software de E/S. Primero analizare- mos los objetivos del software de E/S y después las distintas formas en que se puede realizar la E/S desde el punto de vista del sistema operativo. 5.2.1 Objetivos del software de E/S Un concepto clave en el diseño del software de E/S se conoce como independencia de dispositivos. Lo que significa es que debe ser posible escribir programas que puedan acceder a cualquier disposi- tivo de E/S sin tener que especificar el dispositivo por adelantado. Por ejemplo, un programa que lee un archivo como entrada debe tener la capacidad de leer un archivo en el disco duro, un CD-ROM, un DVD o una memoria USB sin tener que modificar el programa para cada dispositivo distinto. De ma- nera similar, debe ser posible escribir un comando tal como sort salida y hacer que funcione con datos de entrada provenientes de cualquier tipo de disco o del teclado, y que los datos de salida vayan a cualquier tipo de disco o a la pantalla. Depende del sistema opera- tivo encargarse de los problemas producidos por el hecho de que estos dispositivos en realidad son diferentes y requieren secuencias de comandos muy distintas para leer o escribir. Un objetivo muy relacionado con la independencia de los dispositivos es la denominación uni- forme. El nombre de un archivo o dispositivo simplemente debe ser una cadena o un entero sin de- pender del dispositivo de ninguna forma. En UNIX, todos los discos se pueden integrar en la jerarquía del sistema de archivos de maneras arbitrarias, por lo que el usuario no necesita estar al tanto de cuál nombre corresponde a cuál dispositivo. Por ejemplo, una memoria USB se puede montar encima del directorio /usr/ast/respaldo, de manera que al copiar un archivo a /usr/ast/res- paldo/lunes, este archivo se copie a la memoria USB. De esta forma, todos los archivos y disposi- tivos se direccionan de la misma forma: mediante el nombre de una ruta. Otra cuestión importante relacionada con el software de E/S es el manejo de errores. En ge- neral, los errores se deben manejar lo más cerca del hardware que sea posible. Si el controlador des- cubre un error de lectura, debe tratar de corregir el error por sí mismo. Si no puede, entonces el software controlador del dispositivo debe manejarlo, tal vez con sólo tratar de leer el bloque de nue- vo. Muchos errores son transitorios, como los errores de lectura ocasionados por pizcas de polvo en 344 ENTRADA/SALIDA CAPÍTULO 5 la cabeza de lectura, y comúnmente desaparecen si se repite la operación. Sólo si los niveles inferio- res no pueden lidiar con el problema, los niveles superiores deben saber acerca de ello. En muchos casos, la recuperación de los errores se puede hacer de manera transparente a un nivel bajo, sin que los niveles superiores se enteren siquiera sobre el error. Otra cuestión clave es la de las transferencias síncronas (de bloqueo) contra las asíncronas (controladas por interrupciones). La mayoría de las operaciones de E/S son asíncronas: la CPU ini- cia la transferencia y se va a hacer algo más hasta que llega la interrupción. Los programas de usua- rio son mucho más fáciles de escribir si las operaciones de E/S son de bloqueo: después de una llamada al sistema read, el programa se suspende de manera automática hasta que haya datos dis- ponibles en el búfer. Depende del sistema operativo hacer que las operaciones que en realidad son controladas por interrupciones parezcan de bloqueo para los programas de usuario. Otra cuestión relacionada con el software de E/S es el uso de búfer. A menudo los datos que provienen de un dispositivo no se pueden almacenar directamente en su destino final. Por ejemplo, cuando un paquete llega de la red, el sistema operativo no sabe dónde colocarlo hasta que ha alma- cenado el paquete en alguna parte y lo examina. Además, algunos dispositivos tienen severas res- tricciones en tiempo real (por ejemplo, los dispositivos de audio digital), por lo que los datos se deben colocar en un búfer de salida por adelantado para desacoplar la velocidad a la que se llena el búfer, de la velocidad a la que se vacía, de manera que se eviten sub-desbordamientos de búfer. El uso de búfer involucra una cantidad considerable de copiado y a menudo tiene un importante im- pacto en el rendimiento de la E/S. El concepto final que mencionaremos aquí es la comparación entre los dispositivos comparti- dos y los dispositivos dedicados. Algunos dispositivos de E/S, como los discos, pueden ser utilizados por muchos usuarios a la vez. No se producen problemas debido a que varios usuarios tengan ar- chivos abiertos en el mismo disco al mismo tiempo. Otros dispositivos, como las unidades de cin- ta, tienen que estar dedicados a un solo usuario hasta que éste termine. Después, otro usuario puede tener la unidad de cinta. Si dos o más usuarios escriben bloques entremezclados al azar en la mis- ma cinta, definitivamente no funcionará. Al introducir los dispositivos dedicados (no compartidos) también se introduce una variedad de problemas, como los interbloqueos. De nuevo, el sistema operativo debe ser capaz de manejar los dispositivos compartidos y dedicados de una manera que evite problemas. 5.2.2 E/S programada Hay tres maneras fundamentalmente distintas en que se puede llevar a cabo la E/S. En esta sección analizaremos la primera (E/S programada). En las siguientes dos secciones examinaremos las otras (E/S controlada por interrupciones y E/S mediante el uso de DMA). La forma más simple de E/S es cuando la CPU hace todo el trabajo. A este método se le conoce como E/S programada. Es más simple ilustrar la E/S programada por medio de un ejemplo. Considere un proceso de usuario que desea imprimir la cadena de ocho caracteres “ABCDEFGH” en la impresora. Primero ensambla la cadena en un búfer en espacio de usuario, como se muestra en la figura 5-7(a). Después el proceso de usuario adquiere la impresora para escribir, haciendo una llamada al sis- tema para abrirla. Si la impresora está actualmente siendo utilizada por otro proceso, esta llamada SECCIÓN 5.2 FUNDAMENTOS DEL SOFTWARE DE E/S 345 Cadena Espacio a imprimir de usuario Página Página impresa impresa ABCD EFGH Siguiente A Siguiente AB Espacio de kernel ABCD ABCD EFGH EFGH (a) (b) (c) Figura 5-7. Pasos para imprimir una cadena. fallará y devolverá un código de error o se bloqueará hasta que la impresora esté disponible, depen- diendo del sistema operativo y los parámetros de la llamada. Una vez que obtiene la impresora, el proceso de usuario hace una llamada al sistema para indicar al sistema operativo que imprima la ca- dena en la impresora. Después, el sistema operativo por lo general copia el búfer con la cadena a un arreglo, por ejemplo, p en espacio de kernel, donde se puede utilizar con más facilidad (debido a que el kernel tal vez tenga que modificar el mapa de memoria para tener acceso al espacio de usuario). Después comprueba si la impresora está disponible en ese momento. Si no lo está, espera hasta que lo esté. Tan pronto como la impresora está disponible, el sistema operativo copia el primer carácter al re- gistro de datos de la impresora, en este ejemplo mediante el uso de E/S por asignación de memo- ria. Esta acción activa la impresora. El carácter tal vez no aparezca todavía, debido a que algunas impresoras colocan en búfer una línea o una página antes de imprimir algo. No obstante, en la fi- gura 5-7(b) podemos ver que se ha impreso el primer carácter y que el sistema ha marcado a “B” como el siguiente carácter a imprimir. Tan pronto como copia el primer carácter a la impresora, el sistema operativo comprueba si la impresora está lista para aceptar otro. En general la impresora tiene un segundo registro, que pro- porciona su estado. El acto de escribir en el registro de datos hace que el estado se convierta en “no está lista”. Cuando el controlador de la impresora ha procesado el carácter actual, indica su dispo- nibilidad estableciendo cierto bit en su registro de estado, o colocando algún valor en él. En este punto el sistema operativo espera a que la impresora vuelva a estar lista. Cuando eso ocurre, imprime el siguiente carácter, como se muestra en la figura 5-7(c). Este ciclo continúa has- ta que se ha impreso toda la cadena. Después el control regresa al proceso de usuario. Las acciones realizadas por el sistema operativo se sintetizan en la figura 5-8. Primero se co- pian los datos en el kernel. Después el sistema operativo entra a un ciclo estrecho, imprimiendo los caracteres uno a la vez. El aspecto esencial de la E/S programada, que se ilustra con claridad en es- ta figura, es que después de imprimir un carácter, la CPU sondea en forma continua el dispositivo 346 ENTRADA/SALIDA CAPÍTULO 5 para ver si está listo para aceptar otro. Este comportamiento se conoce comúnmente como sondeo u ocupado en espera. copiar_del_usuario(bufer, p, cuenta); for (i=0; i Td, la energía que se ahorra hace que valga la pena apa- gar el disco y volver a encenderlo mucho después. Si se pudiera hacer una buena predicción (por ejemplo, con base en los patrones de acceso anteriores), el sistema operativo podría hacer buenas pre- dicciones para apagar dispositivos y ahorrar energía. En la práctica, la mayoría de los sistemas son conservadores y sólo detienen el disco hasta después de unos cuantos minutos de inactividad. Otra forma de ahorrar energía del disco es tener una caché de disco de un tamaño considerable en la RAM. Si se necesita un bloque que se encuentra en la caché, no hay que reiniciar un disco inactivo para satisfacer la lectura. De manera similar, si se puede colocar en el búfer de la caché una escritura en el disco, no hay que reiniciar a un disco detenido sólo para realizar la escritura. El dis- co puede permanecer apagado hasta que se llene la caché u ocurra un fallo en la lectura. Otra forma de evitar arranques innecesarios del disco es que el sistema operativo mantenga in- formados a los programas acerca del estado del disco, enviándoles mensajes o señales. Algunos pro- gramas tienen escrituras discrecionales que se pueden omitir o retrasar. Por ejemplo, un procesador de palabras se puede configurar para que escriba el archivo que se está editando al disco cada cier- to número de minutos. Si el procesador de palabras sabe que el disco está apagado en el momento en que normalmente escribiría el archivo, puede retrasar esta escritura hasta que el disco se vuelva a encender, o hasta que haya transcurrido cierto tiempo adicional. La CPU La CPU también se puede administrar para ahorrar energía. La CPU de una notebook se puede po- ner en estado inactivo mediante software, con lo cual se reduce el uso de la energía a casi cero. Lo único que puede hacer en este estado es despertarse cuando ocurra una interrupción. Por lo tanto, cada vez que la CPU está inactiva, ya sea en espera de E/S o debido a que no tiene nada que hacer, pasa al estado inactivo. En muchas computadoras hay una relación entre el voltaje de la CPU, el ciclo de reloj y el uso de la energía. A menudo el voltaje de la CPU se puede reducir mediante software, lo cual ahorra energía pero también reduce el ciclo de reloj (aproximadamente en forma lineal). Como la energía consumida es proporcional al cuadrado del voltaje, al reducir el voltaje a la mitad la CPU se vuel- ve la mitad de rápida, pero a 1/4 de la energía. Esta propiedad se puede explotar para los programas con tiempos de entrega bien definidos, como los visores de multimedia que tienen que descomprimir y mostrar un cuadro cada 40 mseg, pero se vuel- ven inactivos si lo hacen con más rapidez. Suponga que una CPU utiliza x joules mientras está en eje- cución a toda velocidad durante 40 mseg, y x/4 joules cuando opera a la mitad de la velocidad. Si un visor de multimedia puede descomprimir y mostrar un cuadro en 20 mseg, el sistema operativo puede operar con la máxima energía durante 20 mseg y después apagarse por 20 mseg, para un uso total de energía de x/2 joules. De manera alternativa, puede operar a la mitad de la energía y sólo hacer la 422 ENTRADA/SALIDA CAPÍTULO 5 entrega, pero usar sólo x/4 joules. En la figura 5-47 se muestra una comparación entre la operación a máxima velocidad y máxima energía durante cierto intervalo de tiempo, y la operación a la mitad de la velocidad y un cuarto de la energía por un intervalo del doble de tiempo. En ambos casos se realiza el mismo trabajo, pero en la figura 5-47(b) sólo se consume la mitad de la energía al realizarlo. 1.00 1.00 0.75 0.75 Energía Energía 0.50 0.50 0.25 0.25 0 0 0 T/2 T 0 T/2 T Tiempo Tiempo (a) (b) Figura 5-47. (a) Operación a máxima velocidad. (b) Recorte de voltaje por dos, de la velocidad por dos y del consumo de energía por cuatro. De manera similar, si el usuario está escribiendo a 1 carácter/segundo, pero el trabajo necesa- rio para procesar el carácter requiere 100 mseg, es mejor que el sistema operativo detecte los exten- sos periodos de inactividad y reduzca la velocidad de la CPU por un factor de 10. En resumen, es más eficiente operar a una menor velocidad que a una mayor velocidad. La memoria Existen dos opciones posibles para ahorrar energía con la memoria. En primer lugar, la caché se puede vaciar y después apagarse. Siempre se puede volver a cargar de la memoria principal sin pér- dida de información. La recarga se puede realizar en forma dinámica y rápida, por lo que apagar la caché es por completo un estado de inactividad. Una opción más drástica es escribir el contenido de la memoria principal en el disco y después apagar la memoria principal en sí. Este método es la hibernación, ya que se puede cortar casi toda la energía a la memoria a expensas de un tiempo de recarga considerable, en especial si el disco tam- bién está apagado. Cuando se apaga la memoria, la CPU tiene que apagarse también, o tiene que eje- cutarse de la ROM. Si la CPU está apagada, la interrupción que la despierta tiene que hacer que salte al código en la ROM, de manera que la memoria se pueda recargar antes de utilizarla. A pesar de to- da la sobrecarga, desconectar la memoria durante largos periodos (horas) puede valer la pena si es más conveniente reiniciar en unos cuantos segundos que tener que reiniciar el sistema operativo del disco, lo cual a menudo requiere de un minuto o más. Comunicación inalámbrica Cada vez hay más computadoras portátiles con una conexión inalámbrica al mundo exterior (por ejemplo, Internet). El transmisor y receptor de radio requeridos son a menudo grandes consumido- res de energía. En especial, si el receptor de radio siempre está encendido para escuchar el correo SECCIÓN 5.8 ADMINISTRACIÓN DE ENERGÍA 423 electrónico entrante, la batería se puede agotar con mucha rapidez. Por otra parte, si el radio se apa- ga después de, por ejemplo, 1 minuto de estar inactivo, se podrán perder los mensajes entrantes, lo cual sin duda es indeseable. Kravets y Krishnan (1998) han propuesto una solución eficiente para este problema. El núcleo de su solución explota el hecho de que las computadoras móviles se comunican con estaciones de base fija que tienen grandes memorias y discos, sin restricciones de energía. Lo que proponen es hacer que la computadora móvil envíe un mensaje a la estación base cuando esté a punto de desco- nectar el radio. De ahí en adelante, la estación de radio coloca en un búfer los mensajes entrantes en su disco. Cuando la computadora móvil vuelve a encender el radio, se lo hace saber a la estación base. En ese momento se le puede enviar cualquier mensaje acumulado. Los mensajes salientes que se generan cuando el radio está apagado se colocan en un búfer en la computadora móvil. Si el búfer amenaza con llenarse, el radio se enciende y la cola se transmite a la estación base. ¿Cuándo debe apagarse el radio? Una posibilidad es dejar que el usuario o el programa de apli- cación lo decidan. Otra es apagarlo después de varios segundos de inactividad. ¿Cuándo debe vol- ver a encenderse? De nuevo, el usuario o programa podría decidir, o se podría encender en forma periódica para comprobar el tráfico entrante y transmitir los mensajes en cola. Desde luego que tam- bién debería encenderse cuando el búfer de salida esté a punto de llenarse. También son posibles otras heurísticas. Administración térmica Una cuestión algo distinta, pero que también está relacionada con la energía, es la administración térmica. Las CPUs modernas se calientan en extremo debido a su alta velocidad. Los equipos de es- critorio por lo general tienen un ventilador eléctrico interno para sacar el aire caliente del chasis. Como la reducción del consumo de energía comúnmente no es una cuestión preponderante con los equipos de escritorio, normalmente el ventilador está encendido todo el tiempo. Con las notebooks, la situación es distinta. El sistema operativo tiene que monitorear la tempe- ratura en forma continua. Cuando se acerca a la temperatura máxima permisible, el sistema opera- tivo tiene que tomar una decisión. Puede encender el ventilador, que hace ruido y consume energía. De manera alternativa puede reducir el consumo de energía al reducir la luz posterior de la panta- lla, reducir la velocidad de la CPU, ser más agresivo y desconectar el disco, o algo similar. Cierta entrada por parte del usuario podría ser valiosa como guía. Por ejemplo, un usuario po- dría especificar por adelantado que el ruido del ventilador es objetable, por lo que el sistema ope- rativo reduciría el consumo de energía en su defecto. Administración de baterías En los viejos tiempos, una batería sólo proporcionaba corriente hasta que se agotaba, momento en el cual se detenía. Esto ya no es así; actualmente, las laptops utilizan baterías inteligentes que se pue- den comunicar con el sistema operativo. Si se les solicita, pueden informar su máximo voltaje, el vol- taje actual, la máxima carga, la carga actual, la máxima proporción de agotamiento, la proporción de 424 ENTRADA/SALIDA CAPÍTULO 5 agotamiento actual y mucho más. La mayoría de las computadoras notebook tienen programas que se pueden ejecutar para consultar y mostrar todos estos parámetros. A las baterías inteligentes tam- bién se les puede instruir para que cambien varios parámetros operacionales bajo el control del sis- tema operativo. Algunas notebooks tienen varias baterías. Cuando el sistema operativo detecta que una batería está a punto de agotarse por completo, tiene que arreglar un cambio a la siguiente batería, sin que se corte la energía durante la transición. Cuando la última batería está a punto de agotarse, depen- de del sistema operativo advertir al usuario y después realizar un apagado ordenado; por ejemplo, asegurándose que el sistema de archivos no se corrompa. Interfaz de drivers El sistema Windows tiene un mecanismo elaborado para realizar la administración de energía, co- nocido como ACPI (Advanced Configuration and Power Interface, Interfaz avanzada de configu- ración y energía). El sistema operativo puede enviar a cualquier controlador que cumpla con este mecanismo por medio de comandos para pedir que reporte las capacidades de sus dispositivos y sus estados actuales. Esta característica es muy importante cuando se combina con los dispositivos “plug and play”, ya que justo después de iniciarse, el sistema operativo ni siquiera sabe qué dispo- sitivos hay presentes, y mucho menos sus propiedades con respecto al consumo de energía o a su capacidad de administración de la misma. También puede enviar comandos a los controladores para pedirles que reduzcan sus niveles de energía (con base en las capacidades que detectó antes, desde luego). También hay cierto tráfico en el sentido contrario. En especial cuando un dispositivo como un teclado o un ratón detecta activi- dad después de un periodo de inactividad, ésta es una señal para el sistema de que debe regresar a la operación (casi) normal. 5.8.3 Cuestiones de los programas de aplicaciones Hasta ahora hemos analizado las formas en que el sistema operativo puede reducir el uso de ener- gía por parte de varios tipos de dispositivos. Pero también hay otro método: indicar a los programas que utilicen menos energía, aun si esto significa proporcionar una experiencia más pobre al usuario (es mejor una experiencia más pobre que ninguna experiencia, cuando la batería se agota y las lu- ces se apagan). Por lo general, esta información se pasa cuando la carga de la batería está por de- bajo de cierto valor de umbral. Después es responsabilidad de los programas decidir entre degradar el rendimiento para extender la vida de la batería, o mantener el rendimiento y arriesgarse a que- darse sin energía. Una de las preguntas que surge aquí es acerca de cómo puede un programa degradar su rendi- miento para ahorrar energía. Esta pregunta ha sido estudiada por Flinn y Satyanarayanan (2004). Ellos proporcionaron cuatro ejemplos de cómo el rendimiento degradado puede ahorrar energía. Ahora los analizaremos. En este estudio, la información se presenta al usuario en varias formas. Cuando no hay degra- dación se presenta la mejor información posible. Cuando hay degradación, la fidelidad (precisión) SECCIÓN 5.9 INVESTIGACIÓN ACERCA DE LA E/S 425 de la información que se presenta al usuario es peor de lo que hubiera podido ser. En breve vere- mos ejemplos de esto. Para poder medir el uso de la energía, Flinn y Satyanarayanan idearon una herramienta de soft- ware llamada PowerScope. Lo que hace es proporcionar un perfil de uso de energía de un programa. Para usarlo, una computadora debe estar conectada a una fuente de energía externa a través de un mul- tímetro digital controlado por software. Mediante el uso del multímetro, el software puede leer el número de miliamperes que provienen de la fuente de energía y así determinar la energía instantánea que está consumiendo la computadora. Lo que hace PowerScope es muestrear en forma periódica el contador del programa y el uso de energía, y escribir estos datos en un archivo. Una vez que ha ter- minado el programa, se analiza el archivo para obtener el uso de energía de cada procedimiento. Es- tas mediciones formaron la base de sus observaciones. También se utilizaron mediciones en el ahorro de energía del hardware y formaron la línea de base con la que se midió el rendimiento degradado. El primer programa que se midió fue un reproductor de video. En modo no degradado, repro- duce 30 cuadros/segundo en resolución completa y a colores. Una forma de degradación es aban- donar la información de color y mostrar el video en blanco y negro. Otra forma de degradación es reducir la velocidad de los cuadros, que produce parpadeos y proporciona a la película una calidad inferior. Otra forma más de degradación es reducir el número de pixeles en ambas direcciones, ya sea reduciendo la resolución espacial o la imagen a mostrar. Las mediciones de este tipo ahorraron aproximadamente 30% de la energía. El segundo programa fue un reconocedor de voz. Realizaba un muestreo del micrófono para construir una forma de onda la cual podía analizarse en la computadora notebook o enviarse a tra- vés de un enlace de radio para analizarla en una computadora fija. Al hacer esto se ahorra ener- gía de la CPU, pero se utiliza energía para el radio. La degradación se logró al utilizar un vocabulario más pequeño y un modelo acústico más simple. La ganancia aquí fue de aproxima- damente un 35%. El siguiente ejemplo fue un visor de mapas que obtenía el mapa a través del enlace de radio. La degradación consistía en recortar el mapa en medidas más pequeñas, o indicar al servidor remo- to que omitiera los caminos más pequeños, requiriendo así menos bits para transmitir. De nuevo, aquí se obtuvo una ganancia de 35%. El cuarto experimento fue con la transmisión de imágenes JPEG a un navegador Web. El es- tándar JPEG permite varios algoritmos para intercambiar la calidad de la imagen con el tamaño del archivo. Aquí, la ganancia promedio fue de sólo 9%. Inlcuso así, en general los experimentos mos- traron que al aceptar cierta degradación de la calidad, el usuario puede trabajar más tiempo en una batería dada. 5.9 INVESTIGACIÓN ACERCA DE LA E/S Hay una cantidad considerable de investigación acerca de la entrada/salida, pero la mayoría está en- focada en dispositivos específicos, en vez de la E/S en general. A menudo, el objetivo es mejorar el rendimiento de una manera u otra. Los sistemas de disco son uno de los casos en cuestión. Los algoritmos de programación del brazo del disco son un área de investigación siempre popular (Bachmat y Braverman, 2006; y Za- randioon y Thomasian, 2006), al igual que los arreglos de discos (Arnan y colaboradores, 2007). La 426 ENTRADA/SALIDA CAPÍTULO 5 optimización de la ruta completa de E/S también es de interés (Riska y colaboradores, 2007). Tam- bién hay investigación sobre la caracterización de la carga de trabajo del disco (Riska y Riedel, 2006). Una nueva área de investigación relacionada con los discos son los discos flash de alto ren- dimiento (Birrell y colaboradores, 2007; y Chang, 2007). Los controladores de dispositivos también están obteniendo cierta atención necesaria (Ball y colaboradores, 2006; Ganapathy y colaboradores, 2007; Padioleau y colaboradores, 2006). Otra nueva tecnología de almacenamiento es MEMS (Micro-Electrical-Mechanical Systems, Sistemas micro electromecánicos), que pueden reemplazar (o al menos complementar) a los discos (Rangaswami y colaboradores, 2007; y Yu y colaboradores, 2007). Otra área de investigación pro- metedora es cómo hacer el mejor uso de la CPU dentro del controlador de disco; por ejemplo, pa- ra mejorar el rendimiento (Gurumurthi, 2007) o para detectar virus (Paul y colaboradores, 2005). Algo sorprendente es que el modesto reloj sigue siendo un tema de investigación. Para proveer una buena resolución, algunos sistemas operativos operan el reloj a 1000 Hz, lo cual produce una sobrecarga considerable. La investigación se enfoca en cómo deshacerse de esta sobrecarga (Etsion y colaboradores, 2003; Tsafir y colaboradores, 2005). Los clientes delgados también son un tema de considerable interés (Kissler y Hoyt, 2005; Rits- chard, 2006; Schwartz y Gerrazzi, 2005). Dado el gran número de científicos computacionales con computadoras notebooks y el micros- cópico tiempo de batería en la mayoría de ellos, no debe sorprender que haya un enorme interés en cuanto al uso de técnicas de software para reducir el consumo de energía. Entre los temas especiali- zados que se están analizando se encuentran: escribir código de aplicaciones para maximizar los tiem- pos de inactividad del disco (Son y colaboradores, 2006), hacer que los discos giren a menor velocidad cuando se utilicen poco (Gurumurthi y colaboradores, 2003), utilizar modelos de programa para pre- decir cuándo se pueden desconectar las tarjetas inalámbricas (Hom y Kremer, 2003), ahorro de ener- gía para VoIP (Gleeson y colaboradores, 2006), examinar el costo de energía de la seguridad (Aaraj y colaboradores, 2007), realizar programación de multimedia haciendo uso eficiente de la energía (Yuan y Nahrstedt, 2006), e incluso hacer que una cámara integrada detecte si hay alguien viendo la pantalla y desconectarla cuando nadie la esté viendo (Dalton y Ellis, 2003). En el extremo de bajo rendimiento, otro tema popular es el uso de la energía en las redes de monitoreo (Min y colaboradores, 2007; Wang y Xiao, 2006). Al otro extremo del espectro, guardar energía en grandes granjas de servidores también es de interés (Fan y colaboradores, 2007; Tolentino y colaboradores, 2007). 5.10 RESUMEN A menudo las operaciones de entrada/salida son un tema ignorado pero importante. Una fracción considerable de cualquier sistema operativo está relacionada con las operaciones de E/S. Estas ope- raciones se pueden llevar a cabo en una de tres formas. En primer lugar está la E/S programada, en la que la CPU principal recibe o envía cada byte o palabra y entra a un ciclo estrecho para esperar hasta que pueda obtener o enviar el siguiente byte. En segundo lugar está la E/S controlada por in- terrupciones, en la que la CPU inicia una transferencia de E/S para un carácter o palabra y se pone a hacer algo más hasta que llega una interrupción indicando que se completó la operación de E/S. En tercer lugar está el DMA, en el que un chip separado administra la transferencia completa de un bloque de datos, y recibe una interrupción sólo cuando se ha transferido todo el bloque completo. SECCIÓN 5.10 RESUMEN 427 La E/S se puede estructurar en cuatro niveles: los procedimientos de servicio de interrupcio- nes, los controladores de dispositivos, el software de E/S independiente del dispositivo, y las biblio- tecas de E/S y el uso de colas que se ejecutan en espacio de usuario. Los controladores de dispositivos se encargan de los detalles de operación de los dispositivos, y proporcionan interfaces uniformes para el resto del sistema operativo. El software de E/S independiente del dispositivo rea- liza cosas como el uso de búfer y el reporte de errores. Los discos vienen en una variedad de tipos, incluyendo los discos magnéticos, RAIDs y varios tipos de discos ópticos. A menudo se pueden utilizar algoritmos de planificación del brazo del dis- co para mejorar su rendimiento, pero la presencia de la geometría virtual complica las cosas. Al co- locar dos discos para formar un par, se puede construir un medio de almacenamiento estable con ciertas propiedades útiles. Los relojes se utilizan para llevar la cuenta de la hora real y limitan el tiempo que se pueden ejecutar los procesos, manejan temporizadores guardianes y realizan la contabilidad. Las terminales orientadas a caracteres tienen una variedad de cuestiones relacionadas con los caracteres especiales que se pueden introducir, y las secuencias de escape especiales que se pueden imprimir. La entrada puede estar en modo crudo o cocido, dependiendo de cuánto control desee el programa sobre la entrada. Las secuencias de escape en la salida controlan el movimiento del cur- sor y permiten insertar y eliminar texto en la pantalla. La mayoría de los sistemas UNIX utilizan el Sistema X Window como la base de la interfaz de usuario. Consiste en programas enlazados con bibliotecas especiales que emiten comandos de di- bujo, y un servidor X que escribe en la pantalla. Muchas computadoras personales utilizan GUIs para mostrar la información al usuario. Éstas se basan en el paradigma WIMP: ventanas, iconos, menús y un dispositivo señalador. Los progra- mas basados en GUI por lo general son controlados por eventos, en donde los eventos de teclado, ratón y otros dispositivos se envían al programa para procesarlos tan pronto como ocurren. En los sistemas UNIX, las GUIs casi siempre se ejecutan encima de X. Los clientes delgados tienen algunas ventajas en comparación con las PCs estándar, siendo las más notables su simplicidad y menor necesidad de mantenimiento por parte de los usuarios. Los ex- perimentos con el cliente delgado THINC han demostrado que con cinco primitivas simples es po- sible construir un cliente con un buen rendimiento, incluso para el video. Por último, la administración de la energía es una cuestión importante para las computadoras notebook, ya que los tiempos de vida de las baterías son limitados. El sistema operativo puede em- plear varias técnicas para reducir el consumo de energía. Los programas también pueden ayudar al sacrificar cierta calidad por tiempos de vida más largos para las baterías. PROBLEMAS 1. Los avances en la tecnología de los chips han hecho posible colocar todo un controlador, in- cluyendo la lógica de acceso al bus, en un chip económico. ¿Cómo afecta eso al modelo de la fi- gura 1-5? 2. Dadas las velocidades listadas en la figura 5-1, ¿es posible explorar documentos desde un escáner y transmitirlos sobre una red 802.11g a la máxima velocidad? Defienda su respuesta. 428 ENTRADA/SALIDA CAPÍTULO 5 3. La figura 5-3(b) muestra una forma de tener E/S por asignación de memoria, incluso en presencia de buses separados para la memoria y los dispositivos de E/S, a saber, primero se prueba el bus de memoria y si falla, se prueba el bus de E/S. Un astuto estudiante de ciencias computacionales ha ideado una mejora sobre esta idea: probar ambos en paralelo, para agilizar el proceso de acceder a los dispositivos de E/S. ¿Qué piensa usted sobre esta idea? 4. Suponga que un sistema utiliza DMA para la transferencia de datos del controlador del disco a la me- moria principal. Suponga además que se requieren t1 nseg en promedio para adquirir el bus, y t2 nseg par transferir una palabra a través del bus (t1 » t2 ). Una vez que la CPU ha programado el controla- dor de DMA, ¿cuánto tiempo se requiere para transferir 1000 palabras del controlador de disco a la memoria principal, si (a) se utiliza el modo de una palabra a la vez, (b) se utiliza el modo ráfaga? Su- ponga que para comandar el controlador de disco se requiere adquirir el bus para enviar una palabra, y para reconocer una transferencia también hay que adquirir el bus para enviar una palabra. 5. Suponga que una computadora puede leer o escribir una palabra de memoria en 10 nseg. Suponga además que cuando ocurre una interrupción, se meten en la pila los 32 registros más el contador del programa y el PSW. ¿Cuál es el número máximo de interrupciones por segundo que puede procesar esta máquina? 6. Los arquitectos de CPUs saben que los escritores de sistemas operativos odian las interrupciones im- precisas. Una manera de complacer a los escritores de SO es que la CPU deje de emitir nuevas ins- trucciones cuando se señale una interrupción, pero que permita que todas las instrucciones que se están ejecutando terminen y después obligue a que se produzca la interrupción. ¿Tiene este méto- do alguna desventaja? Explique su respuesta. 7. En la figura 5-9(b), la interrupción no se reconoce sino hasta después de que se haya enviado el si- guiente carácter a la impresora. ¿Podría haberse reconocido de igual forma justo al inicio del proce- dimiento de servicio de interrupciones? De ser así, mencione una razón de hacerlo al final, como en el texto. Si no es así, ¿por qué no? 8. Una computadora tiene una línea de tubería de tres etapas, como se muestra en la figura 1-6(a). En cada ciclo de reloj se obtiene una nueva instrucción de la memoria en la dirección a la que apunta el PC, se coloca la nueva instrucción en la tubería y se avanza el PC. Cada instrucción ocupa exac- tamente una palabra de memoria. Las instrucciones que ya están en la tubería se avanzan una etapa. Cuando ocurre una interrupción, el PC actual se mete en la pila y al PC se le asigna la dirección del manejador de interrupciones. Después la tubería se desplaza una etapa a la derecha, se obtiene la pri- mera instrucción del manejador de interrupciones y se coloca en la tubería. ¿Tiene esta máquina in- terrupciones precisas? Defienda su respuesta. 9. Una página ordinaria de texto contiene 50 líneas de 80 caracteres cada una. Imagine que cierta im- presora puede imprimir 6 páginas por minuto, y que el tiempo para escribir un carácter en el regis- tro de salida de la impresora es tan corto que puede ignorarse. ¿Tiene sentido operar esta impresora mediante la E/S controlada por eventos, si cada carácter impreso requiere una interrupción que tar- da 50 µseg en ser atendida? 10. Explique cómo un SO puede facilitar la instalación de un nuevo dispositivo sin necesidad de volver a compilar el SO. 11. ¿En cuál de los cuatro niveles de software de E/S se realiza cada una de las siguientes acciones? (a) Calcular la pista, sector y cabeza para una lectura de disco. CAPÍTULO 5 PROBLEMAS 429 (b) Escribir comandos en los registros de dispositivo. (c) Comprobar si el usuario tiene permiso de utilizar el dispositivo. (d) Convertir los enteros binarios a ASCII para imprimirlos. 12. Una red de área local se utiliza de la siguiente manera. El usuario emite una llamada al sistema pa- ra escribir paquetes de datos en la red. Después el sistema operativo copia los datos en un búfer del kernel. Luego copia los datos a la tarjeta controladora de red. Cuando todos los bytes están seguros dentro del controlador, se envían a través de la red a una velocidad de 10 megabits/seg. El contro- lador de red receptor almacena cada bit un microsegundo después de enviarlo. Cuando llega el últi- mo bit se interrumpe la CPU de destino, y el kernel copia el paquete recién llegado a un búfer del kernel para inspeccionarlo. Una vez que averigua para cuál usuario es el paquete, el kernel copia los datos en el espacio de usuario. Si suponemos que cada interrupción y su procesamiento asociado re- quiere 1 mseg, que los paquetes son de 1024 bytes (ignore los encabezados) y que para copiar un byte se requiere 1 µseg, ¿cuál es la velocidad máxima a la que un proceso puede enviar los datos a otro? Suponga que el emisor se bloquea hasta que se termine el trabajo en el lado receptor y que se devuelve una señal de reconocimiento. Para simplificar, suponga que el tiempo para obtener de vuel- ta el reconocimiento es tan pequeño que se puede ignorar. 13. ¿Por qué los archivos de salida para la impresora normalmente se ponen en cola en el disco antes de imprimirlos? 14. El nivel 3 de RAID puede corregir errores de un solo bit, utilizando sólo una unidad de paridad. ¿Cuál es el objetivo del nivel 2 de RAID? Después de todo, también puede corregir sólo un error y requiere más unidades para hacerlo. 15. Un RAID puede fallar si dos o más unidades fallan dentro de un intervalo de tiempo corto. Supon- ga que la probabilidad de que una unidad falle en una hora específica es p. ¿Cuál es la probabilidad de que falle un RAID de k unidades en una hora específica? 16. Compare los niveles 0 a 5 de RAID con respecto al rendimiento de lectura, de escritura, sobrecarga de espacio y confiabilidad. 17. ¿Por qué los dispositivos de almacenamiento ópticos son intrínsecamente capaces de obtener una densidad mayor de datos que los dispositivos de almacenamiento magnéticos? Nota: este problema requiere cierto conocimiento de física de secundaria y acerca de cómo se generan los campos mag- néticos. 18. ¿Cuáles son las ventajas y desventajas de los discos ópticos, en comparación con los discos magné- ticos? 19. Si un controlador de disco escribe los bytes que recibe del disco a la memoria, tan pronto como los recibe, sin uso interno de búfer, ¿puede el entrelazado ser útil? Explique. 20. Si un disco tiene doble entrelazado, ¿necesita también desajuste de cilindros para evitar pasar por al- to información al realizar una búsqueda de pista a pista? Explique su respuesta. 21. Considere un disco magnético que consiste de 16 cabezas y 400 cilindros. Este disco está dividido en zonas de 100 cilindros, en donde los cilindros en distintas zonas contienen 160, 200, 240 y 280 sectores, respectivamente. Suponga que cada sector contiene 512 bytes, que el tiempo de búsque- da promedio entre cilindros adyacentes es de 1 mseg y que el disco gira a 7200 RPM. Calcule (a) la capacidad del disco; (b) el desajuste óptimo de pistas y (c) la velocidad máxima de transfe- rencia de datos. 430 ENTRADA/SALIDA CAPÍTULO 5 22. Un fabricante de discos tiene dos discos de 5.25 pulgadas, y cada uno de ellos tiene 10,000 cilindros. El más nuevo tiene el doble de la densidad de grabación lineal del más antiguo. ¿Qué propiedades de disco son mejores en la unidad más reciente y cuáles son iguales? 23. Un fabricante de computadoras decide rediseñar la tabla de particiones del disco duro de un Pentium para proporcionar más de cuatro particiones. ¿Cuáles son algunas consecuencias de este cambio? 24. Las peticiones de disco llegan al controlador de disco para los cilindros 10, 22, 20, 2, 40, 6 y 38, en ese orden. Una búsqueda requiere 6 mseg por cada cilindro desplazado. Determine cuánto tiempo de búsqueda se requiere para (a) Primero en llegar, primero en ser atendido. (b) El cilindro más cercano a continuación. (c) Algoritmo del elevador (al principio se mueve hacia arriba). En todos los casos, el brazo está al principio en el cilindro 20. 25. Una ligera modificación del algoritmo del elevador para planificar peticiones de disco es explorar siempre en la misma dirección. ¿En qué aspecto es mejor este algoritmo modificado que el algorit- mo del elevador? 26. En el análisis del almacenamiento estable mediante el uso de RAM no volátil, se pasó por alto el siguiente punto. ¿Qué ocurre si se completa la escritura estable, pero ocurre una falla antes de que el sistema operativo pueda escribir un número de bloque inválido en la RAM no volátil? ¿Arruina esta condición de competencia la abstracción del almacenamiento estable? Explique su respuesta. 27. En el análisis sobre almacenamiento estable, se demostró que el disco se puede recuperar en un es- tado consistente (o la escritura se completa, o no se lleva a cabo) si ocurre una falla de la CPU du- rante una escritura. ¿Se mantiene esta propiedad si la CPU falla de nuevo durante un procedimiento de recuperación? Explique su respuesta. 28. El manejador de interrupciones de reloj en cierta computadora requiere 2 mseg (incluyendo la so- brecarga de la conmutación de procesos) por cada pulso de reloj. El reloj opera a 60 Hz. ¿Qué frac- ción de la CPU está dedicada al reloj? 29. Una computadora utiliza un reloj programable en modo de onda cuadrada. Si se utiliza un reloj de 500 MHz, ¿cuál debe ser el valor del registro contenedor para lograr una resolución de reloj de (a) un milisegundo (un pulso de reloj cada milisegundo)? (b) 100 microsegundos? 30. Un sistema simula varios relojes al encadenar todas las peticiones de reloj en conjunto, como se muestra en la figura 5-34. Suponga que el tiempo actual es 5000 y que hay peticiones de reloj pen- dientes para los tiempos 5008, 5012, 5015, 5029 y 5037. Muestre los valores del Encabezado del re- loj, la Hora actual, y la Siguiente señal en los tiempos 5000, 5005 y 5013. Suponga que llega una nueva señal (pendiente) en el tiempo 5017 para 5033. Muestre los valores del Encabezado del reloj, la Hora actual y la Siguiente señal en el tiempo 5023. 31. Muchas versiones de LINUX utilizan un entero de 32 bits sin signo para llevar la cuenta del tiempo como el número de segundos transcurridos desde el origen del tiempo. ¿Cuándo terminarán estos sistemas (año y mes)? ¿Espera usted que esto realmente ocurra? CAPÍTULO 5 PROBLEMAS 431 32. Una terminal de mapa de bits contiene 1280 por 960 pixeles. Para desplazarse por una ventana, la CPU (o el controlador) debe desplazar todas las líneas de texto hacia arriba, al copiar sus bits de una parte de la RAM de video a otra. Si una ventana específica es de 60 líneas de altura por 80 caracte- res de anchura (5280 caracteres en total), y el cuadro de un carácter es de 8 pixeles de anchura por 16 pixeles de altura, ¿cuánto tiempo se requiere para desplazar toda la ventana, a una velocidad de copia de 50 nseg por byte? Si todas las líneas tienen 80 caracteres de largo, ¿cuál es la tasa de trans- ferencia de baudios equivalente de la terminal? Para colocar un carácter en la pantalla se requieren 5 µseg. ¿Cuántas líneas por segundo se pueden mostrar? 33. Después de recibir un carácter SUPR (SIGINT), el controlador de la pantalla descarta toda la salida que haya en la cola para esa pantalla. ¿Por qué? 34. En la pantalla a color de la IBM PC original, al escribir en la RAM de video en cualquier momento que no fuera durante el retrazado vertical del haz del CRT, aparecían puntos desagradables por toda la pantalla. Una imagen de pantalla es de 25 por 80 caracteres, cada uno de los cuales se ajusta a un cuadro de 8 pixeles por 8 pixeles. Cada fila de 640 pixeles se dibuja en una sola exploración hori- zontal del haz, que requiere 63.6 µseg, incluyendo el retrazado horizontal. La pantalla se vuelve a dibujar 60 veces por segundo, y en cada una de esas veces se requiere un periodo de retrazado ver- tical para regresar el haz a la parte superior. ¿Durante qué fracción de tiempo está disponible la RAM de video para escribir? 35. Los diseñadores de un sistema de computadora esperaban que el ratón se pudiera mover a una velo- cidad máxima de 20 cm/seg. Si un mickey es de 0.1 mm y cada mensaje del ratón es de 3 bytes, ¿cuál es la máxima velocidad de transferencia de datos del ratón, suponiendo que cada mickey se reporte por separado? 36. Los colores aditivos primarios son rojo, verde y azul, lo cual significa que se puede fomar cual- quier color a partir de una superposición lineal de estos colores. ¿Es posible que alguien pudiera tener una fotografía a color que no se pudiera representar mediante el uso de color completo de 24 bits? 37. Una forma de colocar un carácter en una pantalla con mapa de bits es utilizar bitblt desde una tabla de tipos de letras. Suponga que un tipo de letra específico utiliza caracteres de 16 x 24 pixeles en color RGB verdadero. (a) ¿Cuánto espacio en la tabla de tipos de letras ocupa cada carácter? (b) Si para copiar un byte se requieren 100 nseg, incluyendo la sobrecarga, ¿cuál es la velocidad de transferencia de salida para la pantalla en caracteres/seg? 38. Suponiendo que se requieren 10 nseg para copiar un byte, ¿cuánto tiempo se requiere para retrazar por completo una pantalla con asignación de memoria, en modo de texto de 80 caracteres  25 lí- neas? ¿Y una pantalla gráfica de 1024  768 pixeles con colores de 24 bits? 39. En la figura 5-40 hay una clase para RegisterClass. En el código X Window correspondiente de la figura 5-38, no hay dicha llamada o algo parecido. ¿Por qué no? 40. En el texto vimos un ejemplo sobre cómo dibujar un rectángulo en la pantalla mediante la GDI de Windows: Rectangle(hdc, xizq, ysup, xder,

Use Quizgecko on...
Browser
Browser