SISTEMAS OPERATIVOS UNIX Introducción Sin el software una computadora es en esencia una masa metálica sin utilidad. Con el software, una computadora puede almacenar, procesar y recuperar información; encontrar errores de ortografía e intervenir en muchas otras valiosas actividades. El software para computadoras puede clasificarse en general, en dos clases: los programas de sistema, que controlan la operación de la computadora en sí; y los programas de aplicación, los cuales resuelven problemas para sus usuarios. El programa fundamental de todos los programas de sistema es el sistema operativo, que controla todos los recursos de la computadora y proporciona la base sobre la cual pueden escribirse los programas de aplicación. Las funciones de los sistemas operativos son los siguientes: • Objetivo principal: los sistemas operativos existen porque es más fácil trabajar con uno de ellos que sin él. Esta situación es particularmente clara para los sistemas operativos para los pequeños computadores personales. • Objetivo secundario: la utilización eficiente del sistema de computación. Este propósito tiene una importancia especial en los grandes sistemas multiusuario compartidos. En el pasado, las consideraciones de eficiencia a menudo eran más importantes que la comodidad, por lo que gran parte de la teórica de sistemas operativos se concentra en el uso óptimo de los recursos de computación. Los sistemas operativos y la arquitectura del computador tienen una gran influencia mutua. Los sistemas operativos se desarrollan para facilitar el uso del hardware. Al ir diseñando y utilizando los sistemas operativos, se hizo patente que podrían simplificarse con cambios en el diseño del hardware. 1 Partes de un sistema operativo 1. Gestor de procesos • Creación y eliminación de procesos • Arranque y detención de procesos (scheduler) • Sincronización y comunicación entre procesos 2. Gestor de memoria principal • Control de qué partes de memoria están siendo utilizadas y por quién • Decisión de qué procesos cargar cuando la memoria está disponible • Asignación y desasignación de memoria a los procesos (malloc y free) 3. Gestor de memoria secundaria 4. Gestor del sistema de E/S 5. Gestor del sistema de archivos • Creación y eliminación de archivos y directorios • Soporte de primitivas para manipular archivos y directorios • Mapeo de archivos en almacenamiento secundario • Back−up de archivos 6. Sistema de protección • Mecanismos para el control del acceso de procesos o usuarios a los recursos del usuario o del sistema • Asignación de un dueño, grupo y permisos a cada recurso del sistema Historia Primera generación (1945−1955) En un principio solo existía el hardware del computador. Los primeros computadores eran (físicamente) grandes máquinas que se operaban desde una consola. La maquina era diseñada, construida, programada y operada por un pequeño grupo de personas. La programación se realizaba en lenguaje de máquina; el sistema operativo aún no se conocía. Los problemas que resolvían eran cálculos numéricos, como por ejemplo una tabla con las funciones seno y coseno. Segunda generación (1955−1965) El programador escribía un programa y luego lo controlaba directamente. En primer lugar, el programa se cargaba manualmente en la memoria, desde los interruptores del tablero frontal, desde una cinta de papel o desde tarjetas perforadas. Luego se pulsaban los botones adecuados para establecer la dirección de inicio y comenzar la ejecución del programa. Mientras éste se ejecutaba, el programador−operador lo podía supervisar observando las luces en la consola. Si se descubrían errores, el programador podía detener el programa, examinar el contenido de la memoria y los registros y depurar el programa directamente desde la consola. La salida del programa se imprimía, o se perforaba en cintas de papel o tarjetas para su impresión posterior. Un aspecto importante de ese entorno era su naturaleza interactiva directa. Se perdía mucho tiempo mientras el operador hacía sus tareas de cargar programas y retirar la salida de la impresora. Dado que el costo de estos equipos era muy alto, se buscaron formas de reducir el tiempo perdido. 2 La solución fue el sistema por lotes, que consistía en juntar conjuntos o lotes de tareas similares que se leían con el lector de tarjetas perforadas y se almacenaban en una cinta. Esta tarea se realizaba en una máquina económica y de baja capacidad de procesamiento, que era útil para leer tarjetas, copiar cintas e imprimir. Después de armar el lote de tareas, se llevaba la cinta a la máquina que realizaba el procesamiento, la cual era muy cara y de alta capacidad de procesamiento para esos tiempos. El operador cargaba un programa especial que leía la primera tarea de la cinta y la ejecutaba, y la salida se escribía en una segunda cinta. Tras finalizar cada tarea, es sistema operativo cargaba la siguiente y así sucesivamente hasta finalizar todas las tareas contenidas. Después, el operador reemplazaba las cintas de entrada y salida y la cinta de entrada se reemplazaba con una máquina económica de bajo procesamiento, que realizaba la impresión off−line. Tercera generación (1956−1980) Aparecen los circuitos integrados, además de nuevas técnicas, como la multiprogramación y los sistemas de tiempo compartido. Antiguamente, mientras un proceso esperaba que finalizase alguna operación de entrada−salida, el procesador permanecía inactivo. La multiprogramación consiste en dividir la memoria en sectores y cargar varios procesos, cada uno en un sector de memoria. Cuando uno de ellos necesita esperar que una operación de entrada−salida finalice, otro proceso puede utilizar el procesador. Si la cantidad de procesos que se cargan en memoria simultáneamente son los suficientes, el procesador permanecerá ocupado casi el 100% del tiempo. En los sistemas de tiempo compartido, cada usuario tiene una terminal on−line, donde puede enviar comandos y ver su salida en forma interactiva. Igual que en multiprogramación, se cargan varios procesos simultáneamente en memoria. La conmutación entre procesos no sólo tenía lugar cuando el proceso estaba esperando que alguna operación de entrada−salida finalizase, también se conmutaba de proceso cada cierto intervalo, dándole la sensación a cada usuario de que poseía la máquina para él sólo. Cuarta generación (1980−presente) Aparecen los circuitos integrados de gran escala (contienen miles de transistores en un cm2), lo que hace disminuir costos y aparecen las computadoras personales. También aparece el software para computadoras personales, desarrollado para gente que no conoce nada de computadoras y no tiene intenciones de aprender. Aparecen los sistemas multiprocesador, los procesadores comparten la memoria y el reloj. Se incrementa la capacidad de procesamiento y la confiabilidad, son económicos. Multiprocesamiento simétrico: Cada procesador ejecuta una copia del sistema operativo. Multiprocesamiento asimétrico: Cada procesador tiene asignada una tarea específica y existe un procesador master que asigna tareas a los procesadores esclavos. Aparecen los sistemas operativos para redes, donde el usuario puede dar órdenes a una computadora en forma remota, copiar archivos de una computadora a otra, etc. Aparecen los sistemas distribuidos. Cada procesador tiene su memoria y reloj local y se comunica con otros procesadores, unidos mediante una red, sin que el usuario se entere. Aparecen los sistemas en tiempo real, que se utilizan cuando las tareas se deben realizar dentro de un límite de tiempo. Existen dos tipos de sistemas en tiempo real: hard y soft. Hard: requieren que el procesamiento se complete dentro de n límite de tiempo, si no se satisface, el sistema falla. Soft: son menos estrictos con los límites de tiempo y ejecutan el proceso en tiempo real con la mayor 3 prioridad. Unix Los orígenes de Unix se remontan al año 1962, en el que el CTSS y el MIT se encontraban investigando en áreas de tiempo compartido y protección. En 1965, Bell Labs (la división de investigación de AT&T), General Electric y el MIT se encontraban trabajando en un macroproyecto llamado MULTICS, previsto para desarrollar una gran potencia de cálculo y almacenamiento de muchos usuarios. De este proyecto, se obtuvieron interesantes resultados (capacidad de multiproceso, árbol de ficheros, shell); pero, como todo proyecto gigante, su complejidad desbordó al equipo que lo emprendió, así que en 1969 fue abandonado. El caso es que una de las mejores "cosas" que salieron de allí fue un tal Ken Thompson, un tanto "mosqueado", eso sí, pero con ideas propias que lo llevaron a desarrollar ese mismo año un sistema de ficheros propio. A Thomsom, en realidad, lo que le interesaba era derrotar el imperio Klingom jugando al Star Trek, así que se montó una simulación de la galaxia que quitaba el aliento en un sistema GECOS. Y si no lo quitaba, al menos eso le pareció a una tal Dennis Ritchie, que pasaba por allí y también veía Star Trek. El caso es que Thomson encontró un PDP−7 (otro ordenador más potente) y construyó para él su sistema de ficheros para poder jugar mejor con Ritchie sin que nadie los viera. Bueno, ésta es la leyenda que dice que los orígenes de Unix vienen "de Vulcano". Puede que no fuera así, pero lo cierto es que muchos grandes avances han surgido del desarrollo que grandes hombres han hecho para su disfrute en ratos de ocio y éste fue uno de ellos. Sea como fuere, en el año 1971, Ritchie y Kernigham crearon y utilizaron el lenguaje C en un PDP−11 (algo así como un AT), lenguaje nacido para la programación de sistemas. Así, dos años después, en 1973, Ritchie y Thompson re−escriben su engendro en lenguaje C, pero esta vez desarrollan un sistema multiusuario. Unix había nacido. El sistema, nacido del trabajo y la ilusión de sólo dos personas, demostró ser algo tan bueno que ese mismo año Bell Labs contaba con 25 instalaciones funcionando con Unix. En 1974 aparece un artículo en las comunicaciones del ACM (Association for Computer Machinery) y se distribuye a las universidades. En 1977 ya son 500 los centros y 125 las universidades que utilizan el sistema. Su expansión es fulgurante, ya que se distribuye sin licencias y con fuentes. Entre 1977 y 1982 se combina con un sistema comercial y nace Unix System III. Ya en 1984 existen 100.000 sistemas Unix en todo el mundo. Cronología 1969: Desarrollo original por Thompson y Ritchie sobre un PDP−7. 1970: Versión de 2 usuarios sobre DEC PDP−11. 1971: Versión multiusuario sobre PDP−11/40,45,70. 1973: Reescritura del S.O. en C (Kernighan, Ritchie) ya que originalmente estaba programado en ensamblador. De esta forma se podía transportar a otras máquinas. 1974: Empieza la explotación comercial (25.000 dólares) de las fuentes. 1975: Versión 6 de Unix y cesión a Universidades para su enseñanza. 1983: Aparece el Unix System V (ATT) con soporte para mensajes y memoria compartida. También aparece una versión para PC: Xenix (Microsoft). 4 1989: Aparece Unix System V, R4 con soporte para RFS, streams, redes y tiempo real. 1993: Novell compra Unix a la compañía AT&T. 1994: Novell le da el nombre "Unix" a X/OPEN. 1995: Santa Cruz Operations le compra UnixWare a Novell. Santa Cruz Operations y Hewlett−Packard anuncian que desarrollarán conjuntamente una versión de Unix de 64−bit. 1996: International Data Corporation prevé que en 1997 habría más de 3 millones de computadoras con Unix a nivel mundial. Características Unix es un sistema operativo apropiado para muchas aplicaciones, ya que ofrece muchas facilidades para proceso de textos (en un marco atractivo para programadores) y facilidades de comunicación entre usuarios y máquinas. Unix es popular debido a que: • Es portátil, y por lo tanto, todo el software desarrollado en él es portátil también. • Se puede cambiar de máquina sin cambiar de sistema operativo ni de aplicaciones. • Es fácil de adaptar según los requerimientos del usuario. • Es muy fiable. • Es fácil de usar. • Tiene una amplia gama de utilidades. Núcleo El núcleo de Unix (kernel) se clasifica como de tipo monolítico, pero en él se pueden encontrar dos partes principales: el núcleo dependiente de la máquina y el núcleo independiente. El núcleo dependiente se encarga de las interrupciones, los manejadores de dispositivos de bajo nivel (lower half) y parte del manejo de la memoria. El núcleo independiente es igual en todas las plataformas e incluye el manejo de llamadas del sistema, la planificación de procesos, el entubamiento, la paginación e intercambio, el manejo de discos y del sistema de archivos. Procesos El manejo de procesos en Unix es por prioridad y round robin. En algunas versiones se maneja también un ajuste dinámico de la prioridad de acuerdo al tiempo que los procesos han esperado y al tiempo que ya han usado el CPU. El sistema provee facilidades para crear 'pipes' entre procesos, contabilizar el uso de CPU por proceso y una pila común para todos los procesos cuando necesitan estarse ejecutando en modo privilegiado (tras una llamada al sistema). Unix permite que un proceso haga una copia de sí mismo por medio de la llamada 'fork', lo cual es muy útil cuando se realizan trabajos paralelos o concurrentes. También se proveen facilidades para el envío de mensajes entre procesos. Recientemente Sun Microsystems, AT&T, IBM, Hewlett Packard y otros fabricantes de computadoras llegaron a un acuerdo para usar un paquete llamado ToolTalk para crear aplicaciones que usen un mismo método de intercambio de mensajes. Memoria Los primeros sistemas con Unix nacieron en máquinas cuyo espacio de direcciones era muy pequeño (64 kilobytes) y tenían un manejo de memoria real algo complejo. Actualmente todos los sistemas Unix utilizan el 5 manejo de memoria virtual, siendo el esquema más usado la paginación por demanda y combinación de segmentos paginados, en ambos casos con páginas de tamaño fijo. En todos los sistemas Unix se usa una partición de disco duro para el área de intercambio. Esa área se reserva al tiempo de instalación del sistema operativo. Una regla muy difundida entre administradores de sistemas es asignar una partición de disco duro que sea al menos el doble de la cantidad de memoria real de la computadora. Con esta regla se permite que se puedan intercambiar flexiblemente todos los procesos que estén en memoria RAM en un momento dado por otros que estén en el disco. Todos los procesos que forman parte del kernel no pueden ser intercambiados a disco. Algunos sistemas operativos (como SunOS) permiten incrementar el espacio de intercambio incluso mientras el sistema está en uso. Es muy importante esa facilidad de incrementar el espacio de intercambio, así como la facilidad de añadir módulos de memoria RAM a la computadora sin necesidad de reconfigurar el núcleo. Entrada/salida Derivado de la filosofía de manejar todo como flujo de bytes, los dispositivos son considerados como archivos que se accesan mediante descriptores de archivos cuyos nombres se encuentran generalmente en el directorio '/dev'. Cada proceso en Unix mantiene una tabla de archivos abiertos (donde el archivo puede ser cualquier dispositivo de entrada/salida). Esa tabla tiene entradas que corresponden a los descriptores, los cuales son números enteros obtenidos por medio de la llamada a la llamada del sistema 'open'. En la tabla se muestran las llamadas más usuales para realizar entrada/salida. Llamada Función open Obtener un descriptor entero. close Terminar las operaciones sobre el archivo lseek Posicionar la entrada/salida. read,write Leer o escribir al archivo (dispositivo) ioctl Establecer el modo de trabajo del dispositivo En Unix es posible ejecutar llamadas al sistema de entrada/salida de dos formas: síncrona y asíncrona. El modo síncrono es el modo normal de trabajo y consiste en hacer peticiones de lectura o escritura que hacen que el originador tenga que esperar a que el sistema le responda, es decir, que le de los datos deseados. A veces se requiere que un mismo proceso sea capaz de supervisar el estado de varios dispositivos y tomar ciertas decisiones dependiendo de si existen datos o no. En este caso se requiere una forma de trabajo asíncrona. Para este tipo de situaciones existen las llamadas a las rutinas 'select' y 'poll' que permiten saber el estado de un conjunto de descriptores. Unix vs MS−DOS Las diferencias existentes entre MS−DOS y UNIX vienen expuestas en la tabla siguiente: MS−DOS No permite la conexión entre dos o más ordenadores mediante protocolo TCP/IP Se apaga el equipo al acabar la tarea sin ejecutar ningún comando El directorio home por defecto es 'C:\' UNIX Fue creado para trabajar en la red, utilizando el protocolo TCP/IP para las comunicaciones Se teclea el comando exit para terminar la sesión, lo cual provoca la aparición del mensaje de 'login' El directorio home es el prefijado por el administrador del sistema y suele ser algo como '/home/al000001' 6 No distingue entre mayúsculas y minúsculas Es significativa la diferencia entre mayúsculas y minúsculas. Por ejemplo, no es lo mismo 'cal' (comando de calendario) que 'CAL' (no existe y la shell indica que no lo encuentra) El intérprete de comandos presenta un prompt de la forma: 'C:\>' El prompt tiene la forma: '$' Semejanzas: • En ambos sistemas operativos cada comando debe finalizar con un RETURN. • En los dos se utilizan abreviaciones en inglés. Por ejemplo, mkdir, md (make directory), del (delete),... • Tanto en MS−DOS como en UNIX la secuencia de teclas que interrumpen una acción es CONTROL+C. Minix Minix es un clon de Unix distribuído junto con su código fuente y desarrollado por Andrew S. Tanenbaum. Gracias a su reducido tamaño, diseño basado en el paradigma del micronúcleo, y su amplia documentación; resulta bastante apropiado para personas que desean instalar un sistema operativo compatible con Unix en su máquina personal, así como aprender sobre su funcionamiento interno. Para una persona poco familiarizada con los elementos internos de un sistema operativo, Minix es una buena opción que le permite entender casi todos los elementos del sistema con solo algunos meses de uso y estudio. Este sistema operativo fue concebido para poder ser estudiado y analizado por los estudiantes de informática. La filosofía del diseño es ser fácil para su entendimiento sin dejar de ser correcta. Siguiendo con esta línea la solución que se decide dar es simple y fácil de entender, aunque poco flexible. La forma de comunicarse los procesos es Minix es mediante el paso de mensajes. Esta operación se realiza mediante la utilización de dos primitivas básicas, Enviar y Recibir, que son llamadas al sistema y por tanto son fáciles de implementar como procedimientos de biblioteca. El método con el que se gestiona el envío y recibo de mensajes en Minix recibe el nombre de rendevouz. La implementación de este método es muy sencilla: cuando un proceso manda un mensaje a otro proceso y éste todavía no está preparado para recibirlo, el proceso que manda el mensaje es bloqueado hasta que el destinatario realice la llamada a Recibir. De esta forma Minix se ahorra el mantener un buffer para los mensajes que aún no han sido leídos. Este método es menos flexible que el de mantener un buffer, pero para el sistema operativo es suficiente, ya que su filosofía principal es la de ser didáctico, y entendiendo éste método no es muy difícil llegar a entender los demás. Con la utilización de mensajes que realiza Minix parece que sólo se le dé solución al problema en el cual dos procesos actúan de forma común para solucionar un problema, pero a partir del paso de mensajes se puede conseguir exclusión mutua. Para garantizar esto se puede crear un proceso sincronizador que mantiene un contador y una lista de enlazada con los procesos bloqueados. Cuando otro proceso quiere realizar su sección crítica manda un mensaje al proceso sincronizador; si el proceso que manda el mensaje puede realizarla, recibirá respuesta del proceso sincronizador; si no puede, el proceso no recibirá ninguna respuesta y se quedará bloqueado. Por otra parte, cuando un proceso termina de realizar su sección crítica, éste manda un mensaje al proceso sincronizador y se lo indica. De esta forma, el proceso sincronizador dará respuesta a alguno de los mensajes que le enviaron los otros procesos que querían realizar su sección crítica, y éste será despertado. Linux El padre de Linux es Linus Torvalds, un programador finlandés de 21 años que inicialmente no tenía más pretensión que 'divertirse' creando un sistema operativo para su uso personal. Torvalds colocó Linux en Internet para que cualquiera lo bajara gratis, en 1991, y desde entonces participan en su desarrollo cientos de 7 voluntarios. Hoy Linux se difunde más rápido que cualquier otro sistema operativo, es venerado por una comunidad de diez millones de usuarios y comienza a verse como una alternativa real a Windows. Ésta es su historia. 1991: En abril, Linus Torvalds comenzó a crear un programa que varios meses después se convertiría en Linux, un sistema operativo Unix para PC. Linux nació como un pasatiempo de Torvalds, que en esa época tenía 21 años y estudiaba segundo año de Ciencias de los Computadores en la Universidad de Helsinki (Finlandia). Su intención inicial no era crear un sistema operativo, sino experimentar creando software para manejar ciertas funciones básicas del PC que había comprado cuatro meses antes. A mediados del año, el programa estaba avanzado y Trovalds comenzó a pensar seriamente en que podría crear el kernel de un nuevo sistema operativo, similar a Minix pero mejor. Trovalds no tenía grandes pretensiones; él dice que no pensó en crear Linux para que fuera un sistema operativo profesional, sino que lo diseñó para su uso personal. Sin embargo, poco a poco su pasatiempo se fue convirtiendo en un proyecto más serio. El 5 de octubre, Trovalds publicó en un grupo de noticias sobre Minix, en Internet, un mensaje en el que anunció la creación de Linux, un sistema operativo para PC basado en procesadores Intel 386. El mensaje decía que el sistema (Linux versión 0.02) estaba todavía en desarrollo, pero ya funcionaba, y lo ofrecía gratis a cualquiera que deseara bajarlo. También invitó a los programadores interesados en sistemas operativos a usarlo, y enviarle correcciones y mejoras para incluirlas en la próxima versión. Ése fue un suceso clave en la historia de Linux; gracias a Internet, Linux pronto se convertiría en un fenómeno mundial. 1992: En enero, Linux tenía cerca de 100 usuarios, y varios de ellos ya participaban en el desarrollo de Linux con mejoras y correcciones que enviaban a Torvalds por Internet. Él lanzó ese mes la versión 0.12 de Linux; que fue la primera versión que incluyó partes desarrolladas por otros programadores y la primera que realmente se desempeñaba mejor que Minix en ciertos aspectos. El número de usuarios de Linux comenzó a crecer rápidamente, y no era extraño que tuviera gran acogida. Al igual que Torvalds, muchos estudiantes de sistemas y de la computación amaban los sistemas operativos Unix por su estabilidad y potencia, pero éstos eran inalcanzables porque una versión comercial de Unix costaba en esa época 4.000 ó 5.000 dólares, y casi todas funcionaban exclusivamente en estaciones de trabajo de 10.000 o más dólares (no en PC). Linux, en cambio, era un sistema Unix gratuito, y funcionaba en PCs basados en procesadores Intel (386, 486, etc). A medida que creció el número de usuarios, también aumentaron los programadores voluntarios que se involucraron en el desarrollo de Linux. Torvalds distribuyó Linux bajo un tipo de licencia llamada GPL, que permite a cualquier persona bajar, usar, modificar e incluso vender Linux, sin pagar; la única condición es que los cambios o mejoras que una persona o compañía realicen en Linux también deben ser públicos. Ello generó un fenómeno de colaboración mundial sin precedentes. Programadores de todo el planeta enviaron a Torvalds mejoras para el kernel, reportaron errores y comenzaron a crear controladores de dispositivos para Linux. Se calcula que al final de 1992 Linux tenía aproximadamente 1.000 usuarios. 1993: Se estima que este año Linux completó 20.000 usuarios en el mundo, y más de 100 programadores contribuyeron en su desarrollo. Para poder manejar esas colaboraciones, Torvalds delegó las labores de revisión del código de programación de Linux a cinco personas, que se convirtieron en sus 'oficiales' principales. A diferencia de los programas comerciales, que se actualizan cada dos o tres años, en el mundo Linux aparecen actualizaciones y mejoras menores cada pocas semanas; eso ha permitido que Linux evolucione rápidamente. 1994: En marzo se lanzó la primera versión 'completa' del sistema operativo de Torvalds: Linux 1.0. Esta versión ofreció soporte a redes de computadores, e incluyó docenas de utilidades, programas de desarrollo de aplicaciones y otras herramientas. Se fundó Red Hat Software, una empresa que hoy es el principal distribuidor de Linux. Aunque Linux se puede bajar gratis de Internet, hay docenas de empresas −como Red Hat Software y Caldera− que elaboran sus propias versiones, y las venden en CD−ROM, junto con manuales, soporte técnico y programas adicionales. Estas distribuciones cuestan entre 10 y 70 dólares, dependiendo de la empresa. Este año Linux completó aproximadamente 100.000 usuarios. 8 1995: A finales de este año Linux tenía aproximadamente 500.000 usuarios. 1996: El 9 de junio se lanzó la versión 2.0 de Linux. Una de las principales novedades fue el soporte amultiprocesamiento simétrico (el sistema aprovechaba el poder de computadores con más de un procesador). Además, Linux 2.0 no solo trabajaba en PCs con procesadores Intel x86 (como el 386, 486 y Pentium), sino también en estaciones de trabajo con procesadores Alpha. Se calcula que este año Linux completó 1,5 millones de usuarios. 1997: Linus Torvalds se fue a vivir a Santa Clara (California, Estados Unidos), debido a que fue contratado por una compañía llamada Transmeta. Sin embargo, Torvalds continuó encabezando el equipo de gente que se encarga del desarrollo del kernel de Linux. La firma de investigaciones Datapro dijo que Linux era el segundo sistema operativo más popular en los servidores web de Internet, después de Solaris (un sistema Unix de Sun Microsystems). Se estima que Linux completó 3,5 millones de usuarios. Este año se lanzó la versión 2.1. 1998: Varios de los principales fabricantes de programas para el mercado corporativo, como Oracle, Informix, Computer Associates (CA) y Netscape, anunciaron que lanzarían versiones para Linux de sus productos. El respaldo de estas empresas ha sido clave para la consolidación de Linux en las empresas. En septiembre, Intel Corporation y Netscape anunciaron una inversión de capital en la empresa Red Hat Software. Este hecho fue muy importante para aumentar la credibilidad de Linux, debido a que Intel y Netscape son dos de los líderes de la industria de los computadores. En diciembre, Corel Corporation lanzó una versión para Linux de su procesador de palabra WordPerfect 8. El programa se colocó en Internet para que los usuarios lo pudieran probar gratis durante 90 días, y en los primeros seis meses lo bajaron un millón de personas. A finales de 1998, Linux dominaba cerca del 17 por ciento del mercado de sistemas operativos para redes, según la empresa de investigación de mercados International Data Corporation (IDC). Se calcula que Linux completó 7,5 millones de usuarios. Y el número de programadores que participan en el desarrollo y pruebas del programa creció a 10.000. 1999: En enero se lanzó la versión 2.2 de Linux, que ofreció un mejor rendimiento y soporte para procesadores Sparc, Motorola 68000, PowerPC y MIPS. Esta versión, al igual que la 2.0, soporta computadores con 8 procesadores, pero el multiprocesamiento es mucho más eficiente en la versión 2.2. Corel Corporation anunció que antes de terminar este año lanzaría Corel Linux, una distribución de Linux dirigida a usuarios de PCs. Aunque hay muchas empresas que ofrecen versiones comerciales de Linux, ésta tiene gran relevancia por estar dirigida a usuarios comunes y por ser producida por uno de los más grandes fabricantes de software del mundo. Corel también dijo que en el año 2000 lanzaría una versión para Linux del programa gráfico más importante del mundo Windows, CorelDraw, lo mismo que una versión de su paquete de programas Corel WordPerfect Suite. Características • Multitarea: la palabra multitarea describe la habilidad de ejecutar varios programas al mismo tiempo. Linux utiliza la llamada multitarea preventiva, la cual asegura que todos los programas que se están utilizando en un momento dado serán ejecutados, siendo el sistema operativo el encargado de ceder tiempo de microprocesador a cada programa. • Multiusuario: Muchos usuarios usando la misma maquina al mismo tiempo. • Multiplataforma: Las plataformas en las que en un principio se puede utilizar Linux son 386−, 486−. Pentium, Pentium Pro, Pentium II,Amiga y Atari, también existen versiones para su utilización en otras plataformas, como Alpha, ARM, MIPS, PowerPC y SPARC. • Multiprocesador: Soporte para sistemas con mas de un procesador esta disponible para Intel y SPARC. • Funciona en modo protegido 386. • Protección de la memoria entre procesos, de manera que uno de ellos no pueda colgar el sistema. • Carga de ejecutables por demanda: Linux sólo lee del disco aquellas partes de un programa que están 9 siendo usadas actualmente. • Política de copia en escritura para la compartición de páginas entre ejecutables: esto significa que varios procesos pueden usar la misma zona de memoria para ejecutarse. Cuando alguno intenta escribir en esa memoria, la página (4 Kb de memoria) se copia a otro lugar. Esta política de copia en escritura tiene dos beneficios: aumenta la velocidad y reduce el uso de memoria. • Memoria virtual usando paginación (sin intercambio de procesos completos) a disco: A una partición o un archivo en el sistema de archivos, o ambos, con la posibilidad de añadir más áreas de intercambio sobre la marcha Un total de 16 zonas de intercambio de 128 Mb de tamaño máximo pueden ser usadas en un momento dado con un límite teórico de 2 Gb para intercambio. Este limite se puede aumentar fácilmente con el cambio de unas cuantas líneas en el código fuente. • La memoria se gestiona como un recurso unificado para los programas de usuario y para el caché de disco, de tal forma que toda la memoria libre puede ser usada para caché y ésta puede a su vez ser reducida cuando se ejecuten grandes programas. • Se realizan volcados de estado (core dumps) para posibilitar los análisis post−mortem, permitiendo el uso de depuradores sobre los programas no sólo en ejecución sino también tras abortar éstos por cualquier motivo. • Emulación de iBCS2, casi completamente compatible con SCO, SVR3 y SVR4 a nivel binario. • Todo el código fuente está disponible, incluyendo el núcleo completo y todos los drivers, las herramientas de desarrollo y todos los programas de usuario; además todo ello se puede distribuir libremente. Hay algunos programas comerciales que están siendo ofrecidos para Linux actualmente sin código fuente, pero todo lo que ha sido gratuito sigue siendo gratuito. • Emulación de 387 en el núcleo, de tal forma que los programas no tengan que hacer su propia emulación matemática. Cualquier máquina que ejecute Linux parecerá dotada de coprocesador matemático. Por supuesto, si el ordenador ya tiene una FPU (unidad de coma flotante), esta será usada en lugar de la emulación, pudiendo incluso compilar tu propio kernel sin la emulación matemática y conseguir un pequeño ahorro de memoria. • Soporte para muchos teclados nacionales o adaptados y es bastante fácil añadir nuevos dinámicamente. • Consolas virtuales múltiples: varias sesiones de login a través de la consola entre las que se puede cambiar con las combinaciones adecuadas de teclas (totalmente independiente del hardware de video). Se crean dinámicamente y puedes tener hasta 64. • Soporte para varios sistemas de archivo comunes, incluyendo minix−1, Xenix y todos los sistemas de archivo típicos de System V, y tiene un avanzado sistema de archivos propio con una capacidad de hasta 4 Tb y nombres de archivos de hasta 255 caracteres de longitud. • Acceso transparente a particiones MS−DOS (o a particiones OS/2 FAT) mediante un sistema de archivos especial: no es necesario ningún comando especial para usar la partición MS−DOS, esta parece un sistema de archivos normal de Unix (excepto por algunas restricciones en los nombres de archivo, permisos, y esas cosas). Las particiones comprimidas de MS−DOS 6 no son accesibles en este momento, y no se espera que lo sean en el futuro. El soporte para VFAT, FAT32 (WNT, Windows 95/98) se encuentra soportado desde la versión 2.0 del núcleo y el NTFS de WNT desde la versión 2.2 (Este ultimo solo en modo lectura). • Un sistema de archivos especial llamado UMSDOS que permite que Linux sea instalado en un sistema de archivos DOS. • Soporte en sólo lectura de HPFS−2 del OS/2 2.1 • Sistema de archivos de CD−ROM que lee todos los formatos estándar de CD−ROM. • TCP/IP, incluyendo ftp, telnet, NFS, etc. • Software cliente y servidor Netware. Índice Introducción 2 10 Partes de un sistema operativo 2 Historia 3 Primera generación (1945−1955) 3 Segunda generación (1955−1965) 3 Tercera generación (1956−1980) 3 Cuarta generación (1980−presente) 4 Unix 6 Cronología 6 Características 7 Núcleo 7 Procesos 8 Memoria 8 Entrada/salida 8 Unix vs MS−DOS 9 Minix 10 Linux 11 Características 13 15 11