Sistemas operativos modernos
rio en unos cuantos meses. Todas las versiones actuales de UNIX rebasan el millón de líneas de código; Windows 2000 tiene 29 millones de líneas de código. Ninguna persona puede en tender siquiera un millón de líneas de código, mucho menos 29 millones. Cuando se tiene un producto que ninguno de los diseñadores tiene esperanza de entender por completo, no es sor prendente que los resultados disten mucho de ser óptimos. Los sistemas operativos no son los sistemas más complejos que existen. Los portaaviones son mucho más complicados, por ejemplo, pero pueden dividirse mejor en subsistemas aisla dos. Las personas que diseñan los retretes de un portaaviones no tienen que preocuparse por el sistema de radar. Los dos subsistemas no interactúan mucho. En un sistema operativo, el siste ma de archivos a menudo interactúa con el sistema de memoria en formas inesperadas. Segundo, los sistemas operativos tienen que manejar concurrencia. Existen múltiples usua rios y múltiples dispositivos de E/S, todos los cuales están activos a la vez. Administrar la con currencia es, por su naturaleza, mucho más difícil que administrar una sola actividad secuencial. Las condiciones de competencia y los bloqueos irreversibles son sólo dos de los problemas que se presentan. Tercero, los sistemas operativos tienen que enfrentar a usuarios hostiles en potencia -usua rios que quieren interferir en el funcionamiento del sistema o hacer cosas que tienen prohibi das, como robar los archivos de otro usuario. El sistema operativo necesita tomar medidas para impedir que esos usuarios se comporten de manera indebida. Los programas para procesar tex to y los editores de imágenes no tienen este problema. Cuarto, a pesar de que no todos los usuarios confían en los demás, muchos sí quieren com partir parte de su información y recursos con otros usuarios selectos. El sistema operativo tiene que posibilitar esto, pero de tal manera que los usuarios malintencionados no puedan interferir. Una vez más, los programas de aplicación no enfrentan ningún reto parecido. Quinto, los sistemas operativos tienen una vida larga. UNIX ha existido durante un cuarto de siglo; Windows ya tiene más de una década y no da señales de desaparecer. Por ello, los di señadores tienen que tomar en cuenta la manera en que el hardware y las aplicaciones van a cambiar en el futuro y cómo deben prepararse para tales cambios. Los sistemas que están ca sados con una visión específica del mundo por lo general se exfinguen. Sexto, los diseñadores de sistemas operafivos en realidad no tienen una idea muy clara de cómo se van a usar sus sistemas, por lo que necesitan incorporar un alto grado de generalidad en ellos. Ni UNIX ni Windows se diseñaron pensando en el correo electrónico y los navegado res Web, y no obstante, muchas computadoras que ejecutan esos sistemas casi no hacen otra cosa. Nadie le dice a un diseñador de barcos que construya un barco sin especificar si quiere una nave de pesca, un yate o un acorazado. Y son menos aún los que cambian de parecer una vez que se ha entregado el producto. Séptimo, los sistemas operativos modernos suelen diseñarse de modo que sean portables, lo que significa que tienen que funcionar en múltiples plataformas de hardware. También üenen que reconocer cientos o incluso miles de dispositivos de E/S, los cuales se diseñan de forma indepen diente. Un ejemplo de los problemas que causa tal diversidad es la necesidad que fiene un siste ma operativo de trabajar con máquinas tanto little-endian como big-endian. Un segundo ejemplo se veía de manera constante en MS-DOS, cuando los usuarios trataban de instalar, digamos, una tarjeta de sonido y un módem que ufilizaban el mismo puerto de E/S o la misma línea de solici-
RkJQdWJsaXNoZXIy MjI4NDcx