Sistemas Operativos Sistema Operativo Software básico que controla una computadora. El sistema operativo tiene tres grandes funciones: coordina y manipula el hardware de la computadora, como la memoria, las impresoras, las unidades de disco, el teclado o el mouse; organiza los archivos en diversos dispositivos de almacenamiento, como discos flexibles, discos duros, discos compactos o cintas magnéticas, y gestiona los errores de hardware y la pérdida de datos. Cómo funciona un Sistema Operativo Los sistemas operativos controlan diferentes procesos de la computadora. Un proceso importante es la interpretación de los comandos que permiten al usuario comunicarse con el ordenador. Algunos intérpretes de instrucciones están basados en texto y exigen que las instrucciones sean tecleadas. Otros están basados en gráficos, y permiten al usuario comunicarse señalando y haciendo clic en un icono. Por lo general, los intérpretes basados en gráficos son más sencillos, pero muchos usuarios expertos prefieren los intérpretes de instrucciones basados en texto porque son más potentes. Los sistemas operativos pueden ser de tarea única o multitarea. Los sistemas operativos de tarea única, más primitivos, sólo pueden manejar un proceso en cada momento. Por ejemplo, cuando la computadora está imprimiendo un documento, no puede iniciar otro proceso ni responder a nuevas instrucciones hasta que se termine la impresión. Todos los sistemas operativos modernos son multitarea y pueden ejecutar varios procesos simultáneamente. En la mayoría de los ordenadores sólo hay una UCP; un sistema operativo multitarea crea la ilusión de que varios procesos se ejecutan simultáneamente en la UCP. El mecanismo que se emplea más a menudo para lograr esta ilusión es la multitarea por segmentación de tiempos, en la que cada proceso se ejecuta individualmente durante un periodo de tiempo determinado. Sistemas Operativos por la Forma de Ofrecer sus Servicios 1 Esta clasificación también se refiere a una visión externa, que en este caso se refiere a la del usuario, el cómo aceza los servicios. Bajo esta clasificación se pueden detectar dos tipos principales: sistemas operativos de red y sistemas operativos distribuidos. ð Sistemas Operativos de Red Los sistemas operativos de red se definen como aquellos que tiene la capacidad de interactuar con sistemas operativos en otras computadoras por medio de un medio de transmisión con el objeto de intercambiar in1formación, transferir archivos, ejecutar comandos remotos y un sin fin de otras actividades. El punto crucial de estos sistemas es que el usuario debe saber la sintaxis de un conjunto de comandos o llamadas al sistema para ejecutar estas operaciones, además de la ubicación de los recursos que desee acezar. Por ejemplo, si un usuario en la computadora hidalgo necesita el archivo matriz.pas que se localiza en el directorio /software/código en la computadora modelos bajo el sistema operativo UNIX, dicho usuario podría copiarlo a través de la red con los comandos siguientes: hidalgo % hidalgo % rcp modelos:/software/código/matriz.pas . hidalgo% En este caso, el comando rcp que significa "remote copy" trae el archivo indicado de la computadora modelos y lo coloca en el directorio donde se ejecutó el mencionado comando. Lo importante es hacer ver que el usuario puede acezar y compartir muchos recursos. 1. ¿Qué es un sistema operativo? Un sistema operativo es el programa que oculta la verdad del hardware al programador y presenta una vista simple y agradable de los archivos nominados que pueden leerse y escribirse. Es sistema operativo resguarda al programador del hardware del disco y presenta una interfaz simple orientada al archivo, también disimula mucho del trabajo concerniente a interrupciones, relojes o cronómetros, manejo de memoria y otras características de bajo nivel. La función del sistema operativo es la de presentar al usuario con el equivalente de una máquina ampliada o máquina virtual que sea más fácil de programar que el hardware implícito. 2. Historia de los sistemas operativos 2 Los Sistemas Operativos, al igual que el Hardware de los computadores, han sufrido una serie de cambios revolucionarios llamados generaciones. En el caso del Hardware, las generaciones han sido marcadas por grandes avances en los componentes utilizados, pasando de válvulas ( primera generación ) a transistores ( segunda generación ), a circuitos integrados ( tercera generación), a circuitos integrados de gran y muy gran escala (cuarta generación). Cada generación Sucesiva de hardware ha ido acompañada de reducciones substanciales en los costos, tamaño, emisión de calor y consumo de energía, y por incrementos notables en velocidad y capacidad. Generación Cero (década de 1940) Los primeros sistemas computacionales no poseían sistemas operativos. Los usuarios tenían completo acceso al lenguaje de la maquina. Todas las instrucciones eran codificadas a mano. Primera Generación (década de 1950) Los sistemas operativos de los años cincuenta fueron diseñados para hacer mas fluida la transición entre trabajos. Antes de que los sistemas fueran diseñados, se perdía un tiempo considerable entre la terminación de un trabajo y el inicio del siguiente. Este fue el comienzo de los sistemas de procesamiento por lotes, donde los trabajos se reunían por grupos o lotes. Cuando el trabajo estaba en ejecución, este tenia control total de la maquina. Al terminar cada trabajo, el control era devuelto al sistema operativo, el cual limpiaba y leía e iniciaba el trabajo siguiente. Al inicio de los 50's esto había mejorado un poco con la introducción de tarjetas perforadas (las cuales servían para introducir los programas de lenguajes de máquina), puesto que ya no había necesidad de utilizar los tableros enchufables. Además el laboratorio de investigación General Motors implementó el primer sistema operativo para la IBM 701. Los sistemas de los 50's generalmente ejecutaban una sola tarea, y la transición entre tareas se suavizaba para lograr la máxima utilización del sistema. Esto se conoce como sistemas de procesamiento por lotes de un sólo flujo, ya que los programas y los datos eran sometidos en grupos o lotes. La introducción del transistor a mediados de los 50's cambió la imagen radicalmente. Se crearon máquinas suficientemente confiables las cuales se instalaban en lugares especialmente acondicionados, aunque sólo las grandes universidades y las grandes corporaciones o bien las oficinas del gobierno se podían dar el lujo de tenerlas. Para poder correr un trabajo (programa), tenían que escribirlo en papel (en Fortran o en lenguaje ensamblador) y después se perforaría en tarjetas. Enseguida se llevaría la pila de tarjetas al cuarto de introducción al sistema y la entregaría a uno de los operadores. Cuando la computadora terminara el trabajo, un operador se dirigiría a la impresora y desprendería la salida y la llevaría al cuarto de salida, para que la recogiera el programador. Segunda Generacion (a mitad de la década de 1960) La característica de los sistemas operativos fue el desarrollo de los sistemas compartidos con multiprogramación, y los principios del multiprocesamiento. En los sistemas de multiprogramación, varios programas de usuario se encuentran al mismo tiempo en el almacenamiento principal, y el procesador se cambia rápidamente de un trabajo a otro. En los sistemas de multiprocesamiento se utilizan varios procesadores en un solo sistema computacional, con la finalidad de incrementar el poder de procesamiento de la maquina. La independencia de dispositivos aparece después. Un usuario que desea escribir datos en una cinta en 3 sistemas de la primera generación tenia que hacer referencia especifica a una unidad de cinta particular. En la segunda generación, el programa del usuario especificaba tan solo que un archivo iba a ser escrito en una unidad de cinta con cierto numero de pistas y cierta densidad. Se desarrollo sistemas compartidos, en la que los usuarios podían acoplarse directamente con el computador a través de terminales. Surgieron sistemas de tiempo real, en que los computadores fueron utilizados en el control de procesos industriales. Los sistemas de tiempo real se caracterizan por proveer una respuesta inmediata. Tercera Generación (mitad de década 1960 a mitad década de 1970) Se inicia en 1964, con la introducción de la familia de computadores Sistema/360 de IBM. Los computadores de esta generación fueron diseñados como sistemas para usos generales . Casi siempre eran sistemas grandes, voluminosos, con el propósito de serlo todo para toda la gente. Eran sistemas de modos múltiples, algunos de ellos soportaban simultáneamente procesos por lotes, tiempo compartido, procesamiento de tiempo real y multiprocesamiento. Eran grandes y costosos, nunca antes se había construido algo similar, y muchos de los esfuerzos de desarrollo terminaron muy por arriba del presupuesto y mucho después de lo que el planificador marcaba como fecha de terminación. Estos sistemas introdujeron mayor complejidad a los ambientes computacionales; una complejidad a la cual, en un principio, no estaban acostumbrados los usuarios. Cuarta Generación (mitad de década de 1970 en adelante) Los sistemas de la cuarta generación constituyen el estado actual de la tecnología. Muchos diseñadores y usuarios se sienten aun incómodos, después de sus experiencias con los sistemas operativos de la tercera generación. Con la ampliación del uso de redes de computadores y del procesamiento en línea los usuarios obtienen acceso a computadores alejados geográficamente a través de varios tipos de terminales. Los sistemas de seguridad se ha incrementado mucho ahora que la información pasa a través de varios tipos vulnerables de líneas de comunicación. La clave de cifrado esta recibiendo mucha atención; han sido necesario codificar los datos personales o de gran intimidad para que; aun si los datos son expuestos, no sean de utilidad a nadie mas que a los receptores adecuados. El porcentaje de la población que tiene acceso a un computador en la década de los ochenta es mucho mayor que nunca y aumenta rápidamente. El concepto de maquinas virtuales es utilizado. El usuario ya no se encuentra interesado en los detalles físicos de; sistema de computación que esta siendo accedida. En su lugar, el usuario ve un panorama llamado maquina virtual creado por el sistema operativo. Los sistemas de bases de datos han adquirido gran importancia. Nuestro mundo es una sociedad orientada hacia la información, y el trabajo de las bases de datos es hacer que esta información sea conveniente accesible de una manera controlada para aquellos que tienen derechos de acceso. 3. Conceptos de los Sistemas Operativos Llamadas al Sistema: La interfaz entre el sistema operativo y los programas del usuario se define por medio del conjunto de 4 "instrucciones extendidas" que el sistema operativo proporciona. Estas instrucciones extendidas se conocen como llamadas al sistema. Las llamadas al sistema varían de un sistema operativo a otro (aunque los conceptos fundamentales tienden a ser análogos). Las llamadas al sistema se clasifican normalmente en dos categorías generales: aquellas que se relacionan con procesos y la que lo hacen con el sistema de archivo. • Por Procesos: Un proceso es básicamente un programa en ejecución. Consta del programa ejecutable y la pila o stack del programa, su contador de programa, apuntador de pila y otros registros, así como la otra información que se necesita para ejecutar el programa. En si el proceso en el concepto de los sistemas operativos es como el sistema de tiempo compartido. Esto es, que en forma periódica, el sistema operativo decide suspender la ejecución de un proceso y dar inicio a la ejecución de otro, por ejemplo, porque el primero haya tomado ya más de su parte del tiempo de la CPU, en terrenos del segundo. Cuando un proceso se suspende temporalmente, debe reiniciarse después exactamente en el mismo estado en que se encontraba cuando se detuvo. Esto significa que toda la información relativa al proceso debe guardarse en forma explícita en algún lugar durante la suspensión. En muchos sistemas operativos, toda la información referente a cada proceso, diferente del contenido de su espacio de direcciones, se almacena en una tabla de sistema operativo llamada tabla de procesos, la cual es un arreglo (lista enlazada) de estructuras, una para cada proceso en existencia. Por lo tanto, un proceso (suspendido) consta de su espacio de direcciones, generalmente denominado imagen del núcleo (en honor de las memorias de imagen de núcleo magnético que se utilizaron en tiempos antiguos) y su registro de la tabla de procesos, que contiene sus registros entre otras cosas. • Por Sistema de Archivo: Una función importante del S.O. consiste en ocultar las peculiaridades de los discos y otros dispositivos de E/S y presentar al programador un modelo abstracto, limpio y agradable de archivos independientes del dispositivo. Las llamadas al sistema se necesitan con claridad para crear archivos, eliminarlos, leerlos y escribirlos. Antes de que se pueda leer un archivo, éste debe abrirse y después de que se haya leído debe cerrarse, de modo que las llamadas se dan para hacer estas cosas. Antes de que un archivo pueda leerse o escribirse, éste debe abrirse, en cuyo instante se verifican los permisos. Si se permite el acceso, el sistema produce un entero pequeño llamado descriptor del archivo para utilizarse en operaciones subsiguientes. Si se prohibe el acceso, se produce un código de error. 4. Shell (intérprete de comandos): El sistema operativo es el código que realiza las llamadas al sistema. Los editores, compiladores, ensambladores, enlazadores e intérpretes de comandos definitivamente no son parte del sistema operativo, aunque son importantes y útiles. El Shell es el intérprete de comandos, a pesar de no ser parte del sistema operativo, hace un uso intenso de muchas características del sistema operativo y por tanto sirve como un buen ejemplo de la forma en que se pueden utilizar las llamadas al sistema. También es la interfaz primaria entre un usuario situado frente a su terminal y el sistema operativo. Cuando algún usuario entra al sistema, un "shell" se inicia. El shell tiene la terminal como entrada y como salida estándar. Este da inicio al teclear solicitud de entrada, carácter como un signo de pesos, el cual indica al usuario que el shell está esperando un comando. En MS−DOS normalmente aparece la letra de la unidad, seguida por dos puntos (:), el nombre del directorio en que se encuentra y por último el signo de "mayor que" (>). Esto es: C:\> 5 5. Estructura de un Sistema Operativo Internamente los sistemas operativos estructuralmente de se clasifican según como se hayan organizado internamente en su diseño, por esto la clasificación más común de los S.O. son: • Sistemas monolíticos: En estos sistemas operativos se escriben como un conjunto de procedimientos, cada uno de los cuales puede llamar a cualquiera de los otros siempre que lo necesite. Cuando se emplea esta técnica, cada procedimiento del sistema tiene una interfaz bien definida en términos de parámetros y resultados, y cada una tiene la libertad de llamar a cualquiera otra, si la última ofrece algún cálculo útil que la primera necesite. Para construir el programa objeto real del sistema operativo cuando se usa este método, se compilan todos los procedimientos individuales a archivos que contienen los procedimientos y después se combinan todos en un solo archivo objeto con el enlazador. En términos de ocultamiento de información, esencialmente no existe ninguno; todo procedimiento es visible para todos (al contrario de una estructura que contiene módulos o paquetes, en los cuales mucha información es local a un módulo y sólo pueden llamar puntos de registro designados oficialmente del exterior del módulo) Esta organización sugiere una estructura básica del sistema operativo: 1.− Un programa central que invoque el procedimiento de servicio solicitado (Shell o Kernel) 2.− Un conjunto de procedimientos de servicios que realice las llamadas al sistema. 3.− Un conjunto de procedimientos de uso general que ayude a los procedimientos de servicio • Sistemas en estratos: Estos sistemas operativos se organizan como una jerarquía de estratos, cada uno construido arriba del que está debajo de él. El primer sistema construido en esta forma fuel el sistema THE que se fabricó en Technische Hogeschool Eindhoven de Holanda por E. W Dijkstra (1968) y sus alumnos. El sistema THE era un sistema de lote para una computadora alemana, la Electrológica X8, que tenía 32K de palabras de 27 bits ( los bits eran costosos en aquellos días) El sistema tenía 6 estratos, estos se muestran en la siguiente tabla: 5 4 3 2 1 0 Operador de THE Programas del usuario Administración de Entrada/Salida Comunicación entre el operador y el proceso Administración de la memoria y el tambor magnético Distribución del procesador y multiprogramación − El estrato 0 trabajaba con la distribución del procesador, cambiando entre procesos cuando ocurrían interrupciones o los relojes expiraban. Sobre el estrato 0, el sistema constaba de procesos secuenciales, cada uno de los cuales podía programarse sin tener que preocuparse por el hecho de que múltiples procesos estuvieran corriendo en un solo procesador. En otras palabras, el estrato 0 ofrecía la multiprogramación básica de la CPU. 6 El estrato 1 realizaba el manejo de memoria. Este distribuía espacio para procesos contenidos en la memoria central y en un tambor de 512K palabras que se usaba para contener partes de procesos (páginas) para las cuales no había espacio en la memoria central. Sobre el estrato 1, los procesos no tenía que preocuparse de si estaban en la memoria o en el tambor; el software del estrato 1 se hacía cargo de asegurar que las páginas se trajeran a la memoria siempre que se necesitaran. El estrato 2 manejaba la comunicación entre cada proceso y la consola de operador. El estrato 3 se hacía cargo de manejar los dispositivos de E/S y de separar la información en flujo que entraba y salí de ellos. Sobre el estrato 3 cada proceso podía trabajar con dispositivos de E/S abstractos con propiedades agradables, en vez de dispositivos reales con muchas peculiaridades El estrato 4 era donde se encontraban los programas de los usuarios. No tenían que preocuparse por el manejo de los procesos, memoria, consola o E/S. El proceso operador del sistema se localizaba en el estrato 5. MINIX Este sistema operativo fue escrito por A. S. Tanenbaun para ser estudiado en universidades y a modo personal. El autor lo escribió como una copia exacta de UNIX en su versión 7, ya que a partir de esta versión el código de UNIX ya no era de manejo público. Es sistema operativo esta escrito íntegramente en C y se puede ejecutar en Pc's compatibles sin necesidad de disco duro. Al ser una copia de UNIX posee todas sus características como la capacidad de soportar multiusuario, multitarea, etc. Al ser copia de UNIX las llamadas al sistema de minix cumplen con el Standard Posixx. En concreto minix posee un total de 41 llamadas al sistema para ser utilizadas por lo programadores. Este conjunto de llamadas se pueden dividir en dos grandes grupos: Las llamadas al sistema para la gestión de procesos y Las llamadas al sistema para la gestión de ficheros. Estos dos grupos de llamadas son los más importantes ya que en minix al igual que en UNIX todo el sistema se basa en procesos y ficheros. El conjunto de llamadas para la gestión de procesos nos permiten la manipulación total de los procesos. Las llamadas más importantes de este grupo son fork, que permite la creación de un proceso hijo, exec la cual permite cambiar la memoria de un proceso, wait que hace que el proceso padres espere a que el hijo termine, y exit que hace terminar a un proceso. Con estas cuatro llamadas principales y alguna más podemos conseguir crear los procesos necesarios para ejecutar varias tareas sin que se produzcan enfrentamientos entre ellos. Los procesos que se crean en minix necesitan comunicarse y en este sistema operativo la comunicación entre procesos se realiza mediante señales y es por esto que también existe un grupo de llamadas que se encarga de gestionar las señales. Este grupo de llamadas nos permite mandar señales de un proceso a otro y preparar a los procesos para recibir las señales para de esta forma poderse comunicar. El conjunto de llamadas para la gestión de ficheros es el más numeroso en minix y parece normal porque todos los dispositivos en este sistema operativo se tratan como archivos. Este conjunto de llamadas nos permite manejar totalmente los ficheros, proporciona funciones para crear , leer , escribir y cerrar ficheros así como otro grupo de instrucciones que nos la creación de ficheros intermedios (tubos), para que se comuniquen también los procesos, y funciones que nos permiten obtener información sobre los ficheros. Como he dicho antes este grupo de llamadas es importante ya que al tomarse todos los dispositivos (teclado, impresora, monitor..) como archivos esto nos proporciona independencia de los dispositivos que tengamos. Existen tres grupos más de llamadas al sistema que se encargan de la gestión de directorios, protección y gestión de tiempo. El primero de ellos nos permite entre otras cosas establecer vínculos entre ficheros de esta forma un fichero se 7 encuentra en un directorio y puede ser compartido por los usuarios teniéndolo en sus directorios con nombres distintos. El conjunto de llamadas también permite montar directorios, esto es muy importante ya que significa que podemos montar un sistema de archivos y después desmontarlo como si no hubiera existido nunca, y hacer referencias a archivos que se encuentran en diferentes directorios. El segundo grupo encargado de la protección nos permite realizar operaciones sobre los permisos de los ficheros y directorios y por ultimo el tercer grupo en el que cabe destacar la llamada TIMES que devuelve información sobre el tiempo de procesador empleado por un proceso. En relación a los objetivos principales del sistema operativo minix, los cuales eran ser un mini−unix, para ser estudiado en las universidades, observamos que el conjunto de llamadas al sistema que realiza es muy completo ya que permite, al igual que UNIX, multiusuario y multitarea con el conjunto de llamadas que realiza para gestionar los procesos y ficheros. Además con las llamadas al sistema para la protección se pueden proteger los ficheros más importantes. En conclusión el sistema operativo minix tiene un conjunto de llamadas apropiado para los objetivos que se plantearon Tanenbawn y sus alumnos cuando lo escribieron. LINUX El sistema operativo Linux nace en la Universidad de Helsinki, en Finlandia de las manos de Linux Trovalds que contaba con la ayuda de muchos colaboradores expertos en Unix. Este sistema operativo en un principio sólo fue un proyecto de aficionado de Linux Trovalds pero en la actualidad se ha convertido en uno de los sistemas operativos mejor diseñados del mundo. Éste es un sistema de libre distribución donde cualquier persona puede participar en la escritura del código. Esto lo hace todavía más interesante porque todos los fuentes del sistema se pueden consultar y ver. En lo referente a la arquitectura el sistema Linux en un principio se inspiraba en Minix y en la actualidad es un clónico de Unix capaz de ejecutar el entorno gráfico X−windows, TCP/IP, Emacs, UUCP y software de correo y News. Linux es un sistema operativo completo multitarea u multiusuario como cualquier sistema Unix. Linux es compatible con ciertos estándares como IEE, POSIX.1, System V y BSD. Al ser un sistema operativo clónico de Unix, los conceptos sobre procesos y archivos son iguales que el , es decir iguales que Minix. En Linux los dispositivos hardware son tratados como archivos y los software como procesos. Es por esto que el conjunto de llamadas al sistema de Linux sea muy parecido al de minix si bien Linux incluye más llamadas porque es un sistema operativo más completo capaz de soportar redes y entornos gráficos si bien el entorno gráfico no forma parte del sistema operativo y se puede tener Linux en perfecto funcionamiento sin X−windows. La gestión de procesos en Linux y mínix se realiza de las misma forma y por tanto las llamadas al sistema que se utilizan en los dos sistemas son las mismas. Utiliza la llamada fork() para la creación de procesos hijos y al igual que minix execv() para cambiar la memoria del proceso hijo. Des esta forma consigue hacer que el padre ejecute un código mientras que el hijo ejecuta otro diferente. En Línux también existe la llamada wait() para que un padre espere a que el hijo termine de ejecutar un código. La llamada utilizada para que un proceso termine es exit(). Existen otras llamadas más para la gestión de procesos pero estas son las principales. Estos procesos pueden estar ejecutándose en paralelo y por tanto es necesario que puedan comunicarse para establecer un orden de ejecución o simplemente para que de unos a otros puedan pasarse la información que 8 necesiten. Los procesos en Linux se pueden comunicar de dos formas mediante las señales o mediante ficheros intermedios que reciben el nombre de tubos. Para el manejo de señales Linux proporciona una serie de llamadas que permiten a los procesos enviar señales (kill) y prepararse para recibir señales signal, ya que si un proceso recibe una señal para la que no está preparado este directamente hará exit. En cuanto a la comunicación mediante tubos de esta forma los procesos pueden pasarse información, como he dicho antes los tubos son ficheros intermedios y por tanto para leer y escribir en ello se utilizarán las llamadas al sistema que permiten leer y escribir en ficheros. Para la creación de tubos la llamada al sistema que proporciona Linux es pipe. Las llamadas al sistema para la gestión del sistema de ficheros de Linux son en este caso también las mas numerosas. Existen llamadas que son muy parecidas en todos los sistemas operativos como son las de crear (creat), cerrar (close), abrir (open), leer y escribir (read , write). También posee una llamada al sistema que nos devuelve el estado del archivo, esta llamada es fstat y se utiliza mucho ya que también devuelve los permisos de los archivos ya que en Linux como en Unix y en los demás sistemas que son multiusuario los ficheros están protegidos según para quien los use. Relacionado con esto de los permisos tenemos un conjunto de llamadas al sistema que nos permite cambiar los modos de los archivos así como saber que usuario pide una operación sobre un archivo para saber si este tiene permiso para realizar la operación pedida o no. Estas llamadas son: Chmod para cambiar los modos de un archivo y getuid, setuid, getgid y setgid para obtener iformación sobre los usuarios. Junto con las llamadas al sistema de gestión den sistema de ficheros tenemos también una serie de llamadas para la gestión de directorios, estas llamadas entre otras cosas nos permiten , al igual que en minix crear enlaces con ficheros así como montar sistemas de directorios con la orden mount. A parte de estas dos operaciones también existen una serie de llamadas que nos permiten movernos por el árbol de directorios del sistema como puede ser chdir. Como se puede observar el sistema operativo Linux utiliza las mismas llamadas al sistema que el sistema operativo minix y esto parece razonable ya que los dos son sistemas operativos que parten como base de Unix. Pero Linux aparte es capaz , como he dicho antes de ejecutarse en modo gráfico utilizando las X−Windows, las X no forman parte de S.O. pero en sí pero proporcionan un interfaz gráfico para el usuario. El modelo que utilizan las X es el mismo que utiliza Amoeba o Windows NT, este es el modelo cliente servidor, en el que procesos clientes (aplicaciones) realizan una serie de peticiones a procesos servidores que se encargan de ejecutarlas y dar respuesta a los clientes. Además de esto Linux es un sistema opertivo que incorpora soporte para redes y por tanto existen llamadas para gestionar esta red. De esta forma Linux se convierte en uno de los sistemas operativos con un diseño muy robusto y estable que proporciona un amplio soporte. AMOEBA El sistema operativo Amoeba se originó en la universidad Vrije Universiteit, de Holanda en 1981, como un proyecto de investigación del computo distribuido y paralelo. En principio fue diseñado por Andrew S. Tanenmbaun y tres de sus estudiantes de doctorado. Lo novedoso de éste Sistema Operativo es que el proyecto partió de un plan totalmente limpio, a diferencia de otros proyectos de investigación de S.O. distribuidos que lo que hacían es partir de un S.O. existente le añadían uso de redes y un sistema compartido de archivos. Partiendo de 0 desarrolló un sistema nuevo cuyo propósito era experimentar con nuevas ideas sin tener que preocuparse pos la compatibilidad hacia atrás como por ejemplo hace Windows 95. Uno de los objetivos principales era construir un sistema operativo distribuido y transparente, y otro era el de proporcionar un colchón de prueba para la realización de una programación distribuida y paralela. Existen varias características que diferencian totalmente a Amoeba de los demás sistemas operativos, como he dicho antes Amoeba es un sistema distribuido y por tanto en Amoeba no existe el concepto de "máquina origen". El Shell inicial se ejecuta en cierta máquina arbitraria pero los comandos en general no se ejecutan en 9 la misma máquina que el Shell, en lugar de esto el sistema busca automáticamente la máquina con menor carga para ejecutar cada nuevo comando. Otra de las características que lo diferencian es que todos los recursos pertenecen al Sistema, no son de usuarios específicos. Éste sistema operativo esta basado en el modelo cliente servidor en el cual los clientes ( procesos de usuario) realizan llamadas a los servidores para que les proporcionen lo pedido. Estos servidores son utilizados para gestionas los objetos ya que en Amoeba todo esta considerado como un objeto que tiene predefinido una serie de operaciones que se realizan sobre él. Se trata como objeto a los procesos, las CPU's, los archivos, los directorios, los discos, etc. y por tanto existen servidores que se encargan de gestionar todo esto. Además del concepto de Proceso amoeba soporta varios hilos de control dentro de un mismo proceso. Estos hilos de control se encuentran dentro de un mismo espacio de memoria pero poseen su propia pila. Un proceso con un sólo hilo es igual que un proceso en Minix o Linux , aunque en Amoeba los procesos se crean de forma distinta a Minix y Linux. Amoeba permite crear un proceso nuevo específico donde la imagen de memoria comience al principio, pero los procesos pueden ejecutarse en paralelo. Las llamadas para la gestión de procesos más importantes son EXEC que realiza un RPC al servidor de procesos específico, GETLOAD que regresa información sobre la velocidad de la CPU y STUM que permite que un hijo bloquee la ejecución del proceso padre. Para la gestión de los hilos existen llamadas para crear hilos y destruir hilos así como para la sincronización de hilos. Estas llamadas realizan la misma función que las señales en Linux o Minix pero en este caso la comunicación se realiza entre hilos y no entre procesos. La gestión del sistema de archivos en amoeba la lleva a cabo el servidor de archivos que soporta las ordenes más comunes para los archivos pero a diferencia de otros los archivos en Amoeba son inmutables y estos a su vez puede estar comprometidos o no. Los archivos comprometidos no pueden ser modificados. Por otro lado tenemos el servidor de directorios el cual como función principal tiene la de proporcionar una asociación entre los nombres legibles para nosotros (código ASCII) y las posibilidades. Una de las llamadas más comunes que se utilizan de este servidor es una que regresa el conjunto de posibilidades que corresponden a un nombre en concreto. Para poder realizar copias de los objetos que proporciona el servidor de directorios se utiliza el servidor de réplicas. Este servidor además de utilizarse para la función anterior permite también comprobar los objetos que son útiles mediante la llamada TOUCH. Existen varios modos de comunicación en Amoeba y por cada uno de ellos existe un servidor que se encarga de gestionarlos. La primera de ellas es la llamadas a procedimiento remoto RPC. Para realizar este tipo de comunicación el servidor de RPC utiliza tres llamadas principalmente que son GET_REQUEST, PUT_REPLY y TRANS que permite la comunicación entre clientes y servidores. La segunda forma de comunicación en Amoeba es la comunicación en grupo y las llamadas que proporciona para este tipo de comunicación nos permiten crear nuevos grupos, unir procesos a grupos existentes, enviar información a grupos y una serie tareas más para gestionar esta comunicación. La capa más baja es el protocolo de internet fast local(FLIP) que se utiliza para la transmisión real de mensajes. FLIP está diseñado para su integración dentro del hardware por esta razón se le ha especificado un interfaz preciso con la capa inmediatamente superior(RPC y Comunicación por grupo). Este interfaz consta de nueve llamadas, siete para el tráfico de salida y dos para el tráfico de llegada. Amoeba también posee un servidor de TC/IP que realiza las gestiones oportunas para comunicarse con máquinas que no son Amoeba y con máquinas Amoeba a través de internet. 10 A parte de todos los servidores anteriores amoeba posee un servidor de arranque al cual utiliza llamadas para comprobar que todos los servidores necesarios están en ejecución. Con todo esto se observa que el sistema Operativo Amoeba es un sistema compartido ideal donde cada usuario del sistema cree que está ejecutando el sistema en modo exclusivo pero en realidad no sabe donde se están ejecutando sus procesos y donde está guardando sus archivos. Es por esto que uno de los bloque más potentes de llamadas al sistema sea el de la comunicación. WINDOWS NT Windows NT es aparece en el mercado como la primera propuesta de la empresa Microsoft de construir un sistema operativo serio capaz de competir con UNIX. La arquitectura de este sistema operativo no tiene nada que ver con el otro sistema operativo de Microsoft para aplicaciones de 32 bits. Uno de los objetivos principales que se propone Microsoft con el diseño de este sistema operativo es que posea un núcleo tan pequeño como fuera posible y que en el estuvieran integrados alguno módulos que dieran respuestas a algunas llamadas que necesariamente se tuvieran que ejecutar en modo privilegiado y que las demás llamadas fueran atendidas por otras entidades. De esta forma se conseguiría tener un núcleo compacto y estable. Para realizar este diseño Microsoft, al igual que Amoeba, se basa en el modelo cliente servidor donde el kernel se encarga de recibir llamadas y pasarlas a procesos servidores que se encargan de ejecutarlas. También al igual que en Amoeba en Windows NT todo son objetos los cuales poseen unos atributos y unas funciones específicas que se encargan de modificar estos atributos. Los objetos son ficheros, procesos y dispositivos físicos a diferencia de Linux, Mínix o Ms−Dos donde los dispositivos físicos son tratados como archivos. Cómo he dicho anteriormente (en el punto referido a W95) en Windows las llamadas al sistema reciben el nombre de API. Estas llamadas al sistema en Windows NT son atendidas principalmente por subsistemas, al igual que pasaba con Amoeba con los servidores. Existen varios subsitemas encargados de ejecutar las llamadas al sistema. Estos son: El Subsistema win32 el cual es el más importantes de todos ya que no sólo atiende las aplicaciones nativas de Windows NT, sino que para aquellos programas no Win32 reconoce su tipo y los lanza hacia el subsistema. Este subsistema soporta una buena parte del Api Win32 y se encarga de todo lo relacionado con la interfaz gráfica con el usuario (GUI), controlando las entradas del usuario y las salidas de la aplicación. Por otra parte tenemos el subsistema Posix y el OS/2 que se ejecutan interaccionando con el Executive y se encargan de proporcionar soporte para aplicaciones Unix y OS/2 respectivamente. Por ultimo tenemos dos subsistemas más que son el de Proceso de inicio que se encarga de gestionar los usuarios locales así como los remotos, y el subsistema de seguridad que interacciona con el de proceso de inicio atendiendo las peticiones de accesos al sistema. Por otra parte tenemos el Executive que no se trata del núcleo del sistema sino que dentro de él se encuentra el núcleo del sistema, pero aparte esta formado pos otros servidores o administradores que se encargan también de recibir las llamadas al sistema. Dentro de estos administradores tenemos el administrador de objetos, que se encarga de crear, destruir y gestionar todos los objetos. Cómo he dicho antes en Windows NT la gran mayoría de cosas son objetos, los procesos, los subprocesos (hilos de ejecución), ficheros, segmentos de memoria, etc. Por esto existen llamadas que permiten crear y destruir objetos y éstas van a ser atendidas por este servidor. También posee un administrador de procesos que, en colaboración que el administrador de objetos se encarga de crear, destruir y gestionar los procesos y los subprocesos. Algunas de las llamadas que 11 poseemos para gestionar estos procesos son: SetThreadPriority que se encarga de poner una prioridad a los procesos, CreateProcess que sirve para crear procesos( esta función recibe muchos parámetros y es complicada), la llamada que poseemos para eliminar al procesos es ExitProcess. También poseemos llamadas para la creación y destrucción de subprocesos (hilos), alguna de ellas son: CreateThread, para crear un subproceso, y ExitThread y TerminateThread para la finalización de los subprocesos. Por otra parte los procesos en windows NT al igual que en los demás S.O. (Excepto en Ms−Dos y W95) deben comunicarse entre ellos. En Windows NT la comunicación entre procesos se puede realizar de varias formas, mediante Semáforos, Mútex, Sucesos, archivos, procesos, subprocesos, entrada del terminal y notificación de cambio de archivo. Es por esto que existen llamadas al sistema que nos permiten controlar todas estas clases de comunicaciones entre procesos. Por ejemplo para crear y destruir mutex tenemos CreateMutex y ReleaseMutex. Existe también un modo de comunicación entre subproceso que pertenecen a un mismos proceso, como la comunicación entre hilos de amoeba, esta comunicación recibe el nombre de Sección critica y también posee una serie de llamadas para controlarla. Continuando con los administradores contenidos en el Executive también nos encontramos un ADMINISTRADOR DE MEMORIA VIRTUAL que se encarga de gestionar la memoria(Este administrador los explicaré detalladamente en capitulo dedicado a la gestión de memoria de los sistemas operativos). Otro de los Administradores importantes para este capitulo es el ADMINISTRADOR DE ENTRADA SALIDA. Este administrador se encarga de la gestión de la comunicación entre los distintos drivers de dispositivo. Este subsistema contiene dentro de él, el administrador del sistema de ficheros. Este administrador se encarga de gestionar el sistema de ficheros de Windows NT. Las llamadas que existen para la gestión de ficheros las mismas que en los demás sistemas operativos. Estas llamadas nos permiten, abrir ficheros, escribir en ficheros ( WriteFile), escribir en ficheros (WriteFile), etc. Los ficheros en Windows NT también poseen bits de protección y existe una llamada para saber sus permisos, esta llamada es GetFileIngormationByHandle. Como he dicho antes dentro del executive también se encuentra el núcleo (KERNEL) del sistema y aparte un administrador que se encarga de la gestión de las llamadas a procedimientos locales y remotos (RPC y LPC). El RPC y el LPC son iguales que el de Amoeba y sirve para comunicar procesos servidores con procesos clientes, con la salvedad que LPC se utiliza para comunicar procesos de la misma máquina y RPC entre máquinas diferentes. Los objetivos de Windows NT son eran ser un sistema distribuido y tras ver todo esto nos damos cuenta que tiene bastantes parecidos con el sistema operativo Amoeba. El conjunto de llamadas al sistema que Windows NT (y las forma en que lo hace) es totalmente distinto al de Windows 95 y tras estudiar los dos sistemas Windows 95 parece ser un sistema operativo hecho para no se qué. MS−DOS El sistema operativo Ms−dos aparece en el año 1981 como el primer operativo para microprocesadores de 16 bits. Este sistema operativo aparece por la necesidad de IBM de tener un sistema operativo para sus IBM−PC. Fue realizado por la empresa Microsoft con el fin de tener un sistema operativo de propósito general, que fuera ejecutable en máquinas con procesadores de intel. En este sistema operativo la comunicación con el sistema se realiza al igual que en los anteriores mediante llamadas al sistema. Estas llamadas al sistema realizan diversos servicios de MS−DOS, son realizadas mediante interrupciones de forma que el programa puede emitir una interrupción que provocará la ejecución de una rutina para manejo de interrupciones. Al igual que en los demás sistemas operativos las llamadas al sistema de MS−DOS las podemos clasificar en varios grupos según las funciones que desempeñan. MS−DOS no posee las llamadas fork y exec distintas, como Linux y Minix, sino que las agrupa en una misma llamad LOAD_AND_EXEC, la razón de esto es porque en MS−DOS el shell guarda sus propios descriptores de fichero después establece los del hijo y ejecuta al hijo, de esta forma no pueden coexistir procesos ya que el shell espera a que el hijo termine y después restaura sus propios descriptores de fichero. Tampoco existe la 12 llamada wait y para que el padre sepa como termina el hijo tenemos la llamada GET_CHILD_STATUS. La disposición de memoria de MS−DOS es más complicada que en sistemas como Unix y Linux y por esto el conjunto de llamadas al sistema que se encarga de la administración de memoria es más complejo. En MS−DOS existen llamadas para asignas, liberar y cambiar el tamaño de los bloques de memoria mientras que en Linux por ejemplo esto se realiza mediante las funciones de las librerías de C y no desde el S.O. Por ultimo tenemos el bloque más importante de llamadas que es el de la gestión de archivos, este bloque es muy parecido al de Linux y Minix ya que al igual que estos, el sistema operativo considera todos los dispositivos como archivos. Estas llamadas al sistema nos permiten crear y destruir ficheros, abrir ficheros, etc. Pero en Ms−dos no hay protección de archivos, como en los demás Sistemas operativos, aunque existen atributos para los archivos. Podríamos incluir dentro de este grupo de llamadas al sistema las relacionadas con entrada y salida de datos ya que éstas son un conjunto de llamadas que nos permiten manejar archivos especiales. Como se puede observar en MS−DOS no existen llamadas para la gestión del tiempo y tampoco existen llamadas que nos permitan montar sistemas de archivos ni nada por el estilo esto es debido a que la gestión de archivos se hace de forma diferente. Tampoco encontramos llamadas que nos permitan la comunicación entre procesos, cosa normal ya que en este sistema operativo no pueden coexistir procesos. En resumen podemos decir que este sistema operativo contiene el más reducido grupo de llamadas al sistema de todos y en consecuencia es el menos potente. WINDOWS 95 Windows 95 se diseña como un sistema operativo de propósito general para mejorar la facilidad de uso con respecto a Windows 3.11. Para ello se realiza una nueva interfaz de usuario de modo "intuitiva". El lo referente al código de Windows 95 se escribe para poder ejecutar programas escritos en código de 32 bits. Para que los programadores puedan escribir su código en este formato es preciso cambiar las llamadas al sistema. El Windows 3.11 utiliza un conjunto de llamadas denominadas API(Application Programming Interfaces). Para este nuevo sistema operativo se crea al API Win 32 que también es utilizado por Windows NT aunque de un modo más desarrollado. Esta API Win 32 es compatible con la de Windows 3.11 y posee más de 2.000 funciones y macros. Los objetivos que se plantea microsoft para la creación de WIN 32 son : Amplio soporte lo cual significaba hacerla compatible con la de Windows 3.11, Capacidad para ampliarla y dar soporte a las nuevas tecnologías y que fuese adecuada para ajustarse a las diferentes plataformas de Hardware. La parte incluida en Windows 95 de la API total es muy reducida ya que ésta consta de 2246 macros y mensajes, de los que sólo 114 están en Windows 95. Sobre la arquitectura un modo de funcionamiento de Windows 95 es muy difícil encontrar información pero se puede observar que es de todos los sistemas operativos el que menos aprovecha las capacidades de la máquina. En lo referente a las llamadas al sistema las API incluidas en Windows 95 son: El API OLE que es el más importante y proporciona las llamadas para la gestión de objetos, El API de consola que proporciona un entorno para aplicaciones que requieren características de E/S en modo carácter. Aunque este API no está incluido por completo ya que windows 95 permite la gestión de una sola consola mientras que windows NT permite la gestión de múltiples consolas. También existen otra serie de API más como la de controles, descompresión, conexión lógica a red, comunicaciones, multimedia, y por último RPC que da soporte para las llamadas al procedimientos remotos. 13