Sistemas operativos modernos

Si quiere compilarse el sistema para el UltraSPARC, se usará un config.h distinto, con los va­ lores correctos para el UltraSPARC, que tal vez serían algo como lo que se muestra a conti­ nuación: #define C PU U LTRA SPARC #define W O RD _ LENG TH 64 Tal vez se pregunte, ¿por qué CPU y WORD_LENGTH se manejan con macros distintas? Bien podríamos haber incluido la definición de Register dentro de una prueba basada en CPU, haciéndolo de 32 bits en el Pentium y de 64 bits en el UltraSPARC. Sin embargo, esto no es recomendable. Consideremos qué sucede si después trasladamos el sistema al procesador Intel Itanium de 64 bits. Tendríamos que añadir una tercera instrucción condicional a la figura I2-5b para el Itanium. En cambio, procediendo como lo hicimos sólo tendríamos que incluir la línea #define W O RD _ LENG TH 64 al archivo config.h para el Itanium. Este ejemplo ilustra el principio de ortogonalidad que explicamos antes. Los elementos que dependen de la CPU deben compilarse de manera condicional con base en la macro CPU, y las cosas que dependen de la longitud de palabra deben usar la macro WORD_LENGTH. Son válidas consideraciones similares para muchos otros parámetros. Indirección A veces se dice que no existe ningún problema en las ciencias de la computación que no pueda resolverse con un nivel más de indirección. Aunque esto es una exageración, definitivamente üe­ ne algo de verdad. Consideremos algunos ejemplos. En los sistemas basados en Pentium, cuan­ do se oprime una tecla, el hardware genera una interrupción y coloca el número de la tecla, no un código de carácter ASCII, en un registro de dispositivo. Además, cuando la tecla se suelta más tarde, se genera una segunda interrupción, también con el número de tecla. Esta indirec­ ción ofrece al sistema operativo la posibilidad de usar el número de tecla como índice de una tabla en la que puede consultar el carácter ASCII, con lo cual se facilita el manejo de los mu­ chos teclados que se usan en los distintos países. La obtención de información tanto cuando se oprime una tecla como cuando se suelta permite ufilizar cualquier tecla como tecla “Mayús”, pues el sistema operativo conoce el orden exacto en que se oprimieron y soltaron las teclas. También se usa indirección en las salidas. Los programas pueden escribir caracteres ASCII en la pantalla, pero éstos se interpretan como índices de una tabla que contiene la fuente de sa­ lida vigente. La entrada de la tabla contiene el mapa de bits del carácter. Esta indirección per­ mite separar los caracteres de los tipos de letra (fuentes). Otro ejemplo de indirección es el uso de números de dispositivo principales en UNIX. Dentro del kernel hay una tabla indizada por número de dispositivo principal para los disposi­ tivos de bloques y otra para los dispositivos de caracteres. Cuando un proceso abre un archivo especial como /dev/hdO, el sistema extrae del nodo-i el tipo (de bloques o de caracteres) y los

RkJQdWJsaXNoZXIy MjI4NDcx