4. Administración de Sistemas Operativos • Estudio de Utilidades del Sistema. • Estudio de las Llamadas del Sistema. • Programación del Sistema. • Mantenimiento y Gestión. { UTILIDADES DEL SISTEMA OPERATIVO Los sistemas operativos, en su condición de capa software que posibilita y simplifica el manejo de la computadora, desempeñan una serie de funciones básicas esenciales para la gestión del equipo. Entre las más destacables, cada una ejercida por un componente interno (módulo en núcleos monolíticos y servidor en microkernels), podemos reseñar las siguientes: • • • •
Proporcionar al usuario un entorno cómodo y eficiente para ejecutar sus programas. Gestionar de manera eficiente los recursos del equipo, ejecutando servicios para los procesos (programas) Brindar una interfaz al usuario, ejecutando instrucciones (comandos). Permitir que los cambios debidos al desarrollo del propio SO se puedan realizar sin interferir con los servicios que ya se prestaban (evolutividad).
El Software de Sistema es software diseñado para operar el hardware de una computadora y proveer un plataforma para ejecuta aplicaciones. Los 3 tipos mas básicos de software de sistema son: • El BIOS de la computadora y el firmware del dispositivo, los cuales proveen la funcionalidad básica para operar y controlar el hardware conectado a o integrado en la computadora. • El sistema operativo. • Software de Utilidades
Las utilidades son un tipo de software del sistema diseñado para ayudar a analizar, configurar, optimizar y mantener la computadora. Este tipo de software es diferente de los programas de aplicación, el cual permite por ejemplo crear documentos de texto, jugar juegos, escuchar música o navegar en internet, ya que no provee una funcionalidad enfocada en generar una particular salida, los software de utilidad se concentra en como la infraestructura de la computadora opera (Incluyendo el hardware de la computadora, el sistema operativo, los software de aplicación y los dispositivos de almacenamiento de datos). Normalmente las utilidades son altamente especializadas y diseñadas para realizar una sola tarea, o un pequeño conjunto de tareas. La mayoría de los sistema operativos vienen con varias utilidades pre-instaladas. Ejemplos de Utilidades: Desfragmentadores de discos, software que genera back-ups de los datos en la computadora, administradores de archivos, compresores de datos, etc LLAMADAS AL SISTEMA Las llamadas al sistema proveen una interfaz entre los procesos y los servicios del sistema operativo. Mediante las llamadas al sistema, el usuario solicita los servicios que desea del sistema operativo. Las llamadas al sistema comúnmente usan una instrucción especial de la CPU que causa que el procesador transfiera el control a un código privilegiado, previamente especificado por el mismo código. Esto permite al código privilegiado especificar donde va a ser conectado así como elestado del procesador. Cuando una llamada al sistema es invocada, la ejecución del programa que invoca es interrumpida y sus datos son guardados, normalmente en su PCB, para poder continuar ejecutándose luego. El procesador entonces comienza a ejecutar las instrucciones de código de alto nivel de privilegio, para realizar la tarea requerida. Cuando esta finaliza, se retorna al proceso original, y continúa su ejecución. El retorno al proceso demandante no obligatoriamente es inmediato, depende del tiempo de ejecución de la llamada al sistema y del algoritmo de planificación de cpu Las llamadas al sistema generalmente están disponibles como rutinas escritas en C y C++, aunque determinadas tareas de bajo nivel pueden necesitar escribirse con ensamblador. La mayoría de programadores de aplicaciones diseñan sus programas utilizando una API (application programming interface). La API especifica un conjunto de funciones que el programador de aplicaciones puede usar, indicándose los parámetros que hay que pasar a cada función y los valores de retorno que el programador debe esperar. Una ventaja de programar usando una API es la portabilidad (un programa diseñado usando una API puede ser compilado y ejecutado en cualquier sistema que soporte la misma API. Habitualmente, cada llamada al sistema tiene asociado un número y la interfaz de llamadas al sistema mantiene una tabla indexada según dichos números. Usando esa tabla, la interfaz de llamadas al sistema invoca la llamada necesaria del kernel del sistema operativo y devuelve el estado de la ejecución de la llamada al sistema y los posibles valores de retorno. TIPOS DE LLAMADAS AL SISTEMA Control de procesos Un programa en ejecución necesita poder interrumpir dicha ejecución, bien de forma normal o bien de forma anormal. En cualquier caso el SO debe transferir el control al intérprete de comandos que realizó la invocación para que lea el siguiente comando. En un sistema GUI, una ventana alertará al usuario del error. Algunas llamadas al sistema, en cuanto al control de procesos se refiere, son: terminar/abortar; cargar/ejecutar; crear/terminar procesos; obtener/definir atributos del proceso; asignar/liberar
memoria; esperar/señalizar suceso... Administración de archivos Necesitamos crear y borrar archivos; abrir y cerrar archivos; leer, escribir y reposicionar; obtener y definir atributos de un archivo, etc. Lo mismo ocurre con directorios. Administración de dispositivos Un proceso puede necesitar varios recursos para ejecutarse: memoria principal, unidades de disco, acceso a archivos, etc. Si los recursos están disponibles, pueden ser concedidos, en caso contrario el proceso tendrá que esperar. Puede pensarse en los distintos recursos controlados por el SO como dispositivos, algunos físicos (como el espacio en memoria) y otros abstractos (como un archivo). En cuanto a la administración de dispositivos, las principales llamadas al sistema son: solicitar o liberar dispositivos; leer, escribir y reposicionar; obtener y definir atributos de dispositivos; conectar y desconectar dispositivos lógicamente. Mantenimiento de información Muchas llamadas al sistema existen simplemente con el propósito de transferir información entre el programa de usuario y el sistema operativo. Por ejemplo la llamada al sistema para conocer la hora y la fecha, el número actual de usuarios, la versión del sistema operativo, cantidad de memoria libre, etc. Además, el SO mantiene información sobre todos sus procesos. Comunicaciones Existen dos modelos comunes de comunicación entre procesos: a) Modelo de paso de mensajes : los procesos se comunican enviándose mensajes con información, directa o indirectamente a través de un buzón de correo común. La mayoría de los procesos que reciben conexiones son de propósito especial y se denominan demonios. Los demonios son programas que se mantienen a la espera y despiertan cuando se establece una conexión. El origen de la comunicación, denominado cliente, y el receptor, servidor, intercambian mensajes usando las llamadas al sistema para leer y escribir. b) Modelo de memoria compartida : los procesos usan las llamadas al sistema para crear y obtener acceso a regiones de la memoria que son propiedad de otros procesos. Normalmente el sistema operativo intentaría evitar que un proceso acceda a la memoria de otro, por ello la memoria compartida entre dos o más procesos requiere que estos acuerden eliminar esa restricción. La forma de los datos y su ubicación son determinadas por parte de los procesos y no por el SO. Interrupciones Las interrupciones son fundamentales para los sistemas operativos, ya que proporcionan una manera eficiente de interactuar y reaccionar a su entorno. Los sistemas operativos "observan"(watch) las diversas fuentes de entrada para los eventos que requieren una acción. La programacion basada en interrupciones (interrupt-based programming) tiene el soporte directo de la mayoria de las CPU modernas. Las interrupciones proporcionan al equipo una forma de guardar localmente los contextos de registro y ejecutar código específico en respuesta a los eventos en los mismos. Incluso los ordenadores muy básicos soportan interrupciones de hardware, y permiten al programador especificar el código que se ejecutara cuando el evento se lleve a cabo. Cuando se recibe una interrupción, el hardware del equipo suspende automáticamente cualquier programa que se está ejecutando, guarda su estado, y se ejecuta el código asociado con la interrupción. En los sistemas operativos modernos, las interrupciones son manejadas por el kernel del sistema operativo. Las interrupciones pueden provenir tanto del hardware como de un programa en ejecución. Cuando un dispositivo de hardware provoca una interrupción, el kernel del sistema operativo decide qué hacer con este evento, por lo general mediante la ejecución de un código de procesamiento. La cantidad de código a ejecutar depende de la prioridad de dicha interrupción (por ejemplo: una persona por lo general responde a una alarma de detector de humo antes de contestar el teléfono). Un programa también puede provocar una interrupción en el sistema operativo, pero para ello debe enviar una solicitud al kernel del sistema operativo, el cual debera procesarla para luego hacer o no dicha interrupcion en el hardware Ejemplos de causas del por qué un programa genera una interrupción son: El desbordamiento en las operaciones aritméticas, la división por cero, el intento de ejecutar una instrucción con código operación incorrecto o de direccionar una posición de memoria prohibida.
PROGRAMACIÓN DEL SISTEMA Los programas del sistema proporcionan un cómodo entorno para desarrollar y ejecutar programas. Algunos son simplemente interfaces de usuario para las llamadas al sistema; otros son más complejos. Pueden dividirse en: a) Administración de archivos : manipulan archivos y directorios. b) Información de estado : algunos solicitan la hora, fecha memoria o espacio en disco disponible... Otros proporcionan información detallada sobre rendimiento, inicios de sesión y mecanismos de depuración. c) Modificación de archivos : editores de texto para crear y modificar archivos almacenados en disco, programas para buscar un dato en el contenido de los archivos... d) Soporte de lenguajes de programación : compiladores, ensambladores, depuradores e intérpretes para los lenguajes de programación más habituales. e) Carga y ejecución de programas : cargadores absolutos o reubicables, editores de montaje, cargadores de sustitución y sistemas de depuración. f) Comunicaciones : mecanismos para crear conexiones virtuales entre procesos, usuarios y computadoras. Permiten enviar mensajes a las pantallas de otros, explorar páginas web, enviar mensajes de correo electrónico, iniciar una sesión remota o transferir archivos. Además de estos programas de sistema, la mayoría de SO se suministran con programas de utilidad (llamados programas de aplicación o utilidades del sistema) para resolver problemas comunes o realizar operaciones frecuentes: exploradores web, procesadores y editores de texto, hojas de cálculo, compiladores, juegos...
Gestor de recursos Desde el punto de vista del sistema, una computadora tiene muchos recursos que pueden ser requeridos para solucionar un problema, como el espacio de memoria, almacenamiento de archivos, dispositivos de E/S o tiempo de CPU. El sistema operativo actúa como administrador de esos recursos, y debe hacer frente a conflictos ( pedidos de recursos específicos ) decidiendo a que usuarios y procesos otorgar dichos recursos. Esto es esencial en sistemas de más de un usuario. Como gestor de recursos, el Sistema Operativo administra: • La CPU (Unidad Central de Proceso, donde está alojado el microprocesador). • Los dispositivos de E/S (entrada y salida) • La memoria principal (o de acceso directo). • Los discos (o memoria secundaria). • Los procesos (o programas en ejecución). • y en general todos los recursos del sistema.
- Gestión de Procesos
Un proceso es un trabajo en ejecución en un sistema de tiempo compartido. Necesita ciertos recursos: tiempo de CPU, memoria, archivos y dispositivos E/S. Estos recursos se le proporcionan en el momento de crear el proceso o se le asignan mientras se está ejecutando. Cuando el proceso termina, el SO reclama todos los recursos utilizables. Cada sistema consta de una colección de procesos, algunos del SO y el resto de los usuarios. El SO es responsable de: a) Crear y borrar procesos b) Suspender y reanudar procesos c) Proporcionar mecanismos de sincronización de procesos d) Proporcionar mecanismos para la comunicación entre procesos e) Proporcionar mecanismos para el tratamiento de los interbloqueos - Gestión de MemoriaLa memoria principal es fundamental, y es compartida por la CPU y los dispositivos de E/S. Para que la CPU procese unos datos de disco, dichos datos deben transferirse primero a la memoria principal. Para mejorar tanto la utilización de la CPU como la velocidad de respuesta de la computadora, ésta puede mantener varios programas en memoria, lo que crea la necesidad de mecanismos de gestión de la misma. El SO es responsable de: a) Controlar las partes de la memoria en uso y por parte de quién b) Decidir qué datos y procesos añadir o extraer de memoria c) Asignar y liberar espacio en memoria según sea necesario
- >Memoria virtual Muchos sistemas operativos pueden "engañar" a los programas en el uso de memoria utilizando parte del disco duro y memoria RAM como si fuera un pedazo continuo de la memoria, llamada memoria virtual. El uso del direccionamiento de memoria virtual(tales como la paginación o segmentación) significa que el kernel puede elegir que memoria y que cantidad utiliza cada programa en un momento dado, permitiendo que el sistema operativo pueda utilizar los mismos segmentos de memoria para multiples tareas. Si un programa intenta acceder a memoria que no está en su área de distribución actual(permitida por el kernel), el kernel se interrumpirá en la misma forma que lo haría si el programa exediera la memoria total disponible(gestión de memoria). En los sistemas operativos modernos, la memoria que se accede con menor frecuencia puede ser almacenada temporalmente en el disco u otros medios para hacer que el espacio de memoria real almacenado pueda ser utilizado por otros programas. Esto se conoce como "swapping"(intercambio). - Kernel El Kernel conecta el software de aplicación con el hardware de una computadora. Con la ayuda de los controladores y el firmware del dispositivo, el sistema operativo proporciona el nivel más básico de control sobre todos los dispositivos de hardware de la computadora. Se gestiona el acceso de memoria para los programas en la memoria RAM, que determina qué programas tienen acceso a que los recursos de hardware, en ella se establece o restablece los estados de funcionamiento de la CPU para un funcionamiento óptimo en todo momento, y organiza los datos para el almacenamiento no volátil a largo plazo con sistemas de archivos en soportes tales como discos, memoria flash, etc. - Modos Las CPU modernas soportan varios modos diferentes.Por lo general, utilizan al menos dos modos: modo seguro/protegido y modo supervisor. El modo de supervisor se utiliza por el kernel del sistema operativo para las tareas de bajo nivel que necesitan un acceso sin restricciones al hardware, tales como el control de la cantidad de memoria que se escribe y se borra, y la comunicación con dispositivos como tarjetas gráficas. El modo protegido, por el contrario, se utiliza para casi todo lo demás. Las aplicaciones funcionan en modo protegido, y sólo puede usar el hardware mediante la comunicación con el kernel, que controla todo en el modo de supervisor. Cuando un equipo se inicia por primera vez, automáticamente se ejecuta en modo supervisor. Los priemros programas en ejecutarse, siendo el BIOS, gestor de arranque y el sistema operativo tienen un acceso ilimitado a un hardware - y esto es necesario porque, por definición, la inicialización de un entorno protegido sólo puede llevarse a cabo desde afuera de la proteccion -. Sin embargo, una vez que el sistema operativo pase el control a otro programa,ya podra hacerse en modo protegido. En modo protegido, los programas tienen acceso a un conjunto más limitado de instrucciones de la CPU. Un programa de usuario puede desprenderse del modo protegido sólo mediante la activación de un control de la interrupción, pasando por el kernel. De esta manera el sistema operativo (mas especificamente el kernel) puede mantener el control exclusivo sobre cosas como el acceso al hardware y la memoria. - Interfaz de usuario Cada equipo que recibe algún tipo de intervención humana necesita una interfaz de usuario, que le permita interactuar con el sistema operativo. Mientras que los dispositivos como teclados, ratones y pantallas táctiles conforman el lado hardware de esta tarea, la interfaz de usuario abarca el software que se utiliza para ello. Las dos formas más comunes de una interfaz de usuario han sido
históricamente: la interfaz de línea de comandos, comandos de la computadora donde se escriben fuera de línea por línea, y la interfaz gráfica de usuario, en un entorno visual (más comúnmente con ventanas, botones e iconos ) - Gestión de Almacenamiento Gestión del sistema de archivos Un archivo es una colección de información relacionada definida por su creador. Comúnmente, los archivos representan programas (tanto en formato fuente como objeto) y datos. El SO implementa el abstracto concepto de archivo gestionando los medios de almacenamiento masivos. Asimismo, los archivos normalmente se organizan en directorios para hacer más fácil su uso. El SO es responsable de: a) Creación y borrado de archivos b) Creación y borrado de directorios para organizar los archivos c) Soporte de primitivas para manipular archivos y directorios d) Asignación de archivos a los dispositivos de almacenamiento secundario. e) Copia de seguridad de los archivos en medios de almacenamiento no volátiles Gestión de almacenamiento masivo Como la memoria principal es demasiado pequeña para almacenar los datos y programas, y además de volátil, la mayoría de los sistemas informáticos modernos usan discos como principal medio de almacenamiento. Por tanto, la apropiada gestión del almacenamiento en disco tiene una importancia crucial. El SO es responsable de: a) Gestión del espacio libre b) Asignación del espacio de almacenamiento c) Planificación del disco Las unidades de cinta magnética y de CD/DVD son dispositivos de almacenamiento terciario. Este almacenamiento no es crucial, pero también necesita ser gestionado (montar y desmontar medios, asignar y liberar los dispositivos, y migrar datos de almacenamiento secundario al terciario). Algunos SO realizan esta tarea, mientras que otros lo dejan en manos de programas de aplicación. Almacenamiento en caché La caché es un sistema de almacenamiento muy rápido, y de mucho menor tamaño que la RAM. Cuando necesitamos alguna información particular, primero comprobamos si está almacenada en caché, si lo está usamos dicha información, en caso contrario utilizamos la información original, colocando una copia en la caché bajo suposición de que pronto la necesitaremos. La mayoría de los sistemas disponen de una caché de instrucciones para almacenar las siguientes instrucciones en espera de ser ejecutadas. Sin una caché, la CPU tendría que esperar varios ciclos mientras las instrucciones son extraídas de la RAM. También la mayoría de sistemas disponen, por la misma razón, de una caché de datos o más. La transferencia de datos del disco duro a la memoria principal es una función controlada por el SO, por el contrario, el paso de datos de la caché a los registros de la CPU normalmente no. En un entorno donde sólo se ejecuta un proceso al tiempo, un acceso a un dato (por ejemplo un número entero A) siempre se realiza a la copia situada en el nivel más alto de la jerarquía de memoria (registros). Sin embargo, en un entorno multitarea, en el que la CPU conmuta entre varios procesos, hay que tener cuidado para asegurar que, si varios procesos quieren acceder a A, cada uno obtenga el valor más reciente. La situación se complica en un entorno multiprocesador, donde A puede encontrarse en varias cachés al tiempo. En ese caso debemos asegurarnos de que una actualización de A en una caché se vea reflejada en el resto. Esto se denomina coherencia de caché. El caso más complejo es en un entorno distribuido, donde varias copias del mismo archivo pueden estar en diferentes computadoras. Sistemas de E/S Uno de los propósitos de un SO es ocultar al usuario las peculiaridades de los dispositivos hardware. El subsistema de E/S consta de varios componentes: a) Un componente de gestión de memoria que incluye almacenamiento en búfer, gestión de caché y gestión de colas. b) Una interfaz general para controladores de dispositivo.
c) Controladores para dispositivos hardware específicos. Principio del software de E/S. Hay 4 capas: • Manejadores de interrupciones. Es el nivel más bajo. • Manejadores de dispositivos. Controladores del dispositivo. Es la única capa que está en contacto con el dispositivo. Reciben solicitudes del tipo “quiero el bloque físico 20” y tiene que traducirlo al cilindro, pista y sector correspondiente. • Software independiente del dispositivo. Es el software que se encarga de las funciones comunes para todos los dispositivos. Funciones: • Interfaz uniforme para los manejadores. • Nombre de los dispositivos: que se reconozcan por un nombre simbólico. • Protección de los dispositivos. • Uso de buffers: Dispositivos de bloques: cache de disco. Y dispositivos de caracteres: técnicas de buffering.