El sistema operativo como gestor de recursos Recurso es todo medio o bien que sirve para conseguir lo que se pretende. En un computador la memoria y el procesador son recursos físicos y un temporizador o un puerto de comunicaciones son ejemplos de recursos lógicos. Los recursos son limitados y son reutilizados una vez que el proceso que los disfruta ya no los necesite. En un computador actual suelen coexistir varios procesos, del mismo o de varios usuarios, ejecutando simultáneamente. Estos procesos compiten por los recursos, siendo el sistema operativo el encargado de arbitrar su asignación y uso. El sistema operativo debe asegurar que no se produzcan violaciones de seguridad, evitando que los procesos accedan a recursos a los que no tienen derecho. Además, ha de suministrar información sobre el uso que se hace de los recursos. Asignación de recursos Para asignar los recursos a los procesos, el sistema operativo ha de mantener unas estructuras que le permitan saber qué recursos están libres y cuáles están asignados a cada proceso. La asignación de recursos se realiza según la disponibilidad de los mismos y la prioridad de los procesos, debiéndose resolver los conflictos causados por las peticiones coincidentes. Especial mención reviste la recuperación de los recursos cuando los procesos ya no los necesitan. Una mala recuperación de recursos puede hacer que el sistema operativo considere, por ejemplo, que ya no le queda memoria disponible cuando, en realidad, sí la tiene. La recuperación se puede hacer o bien porque el proceso que tiene asignado el recurso le comunica al sistema operativo que ya no lo necesita, o bien porque el proceso haya terminado. Las políticas de gestión de recursos determinan los criterios seguidos para asignar los recursos. Estas políticas dependen del objetivo a alcanzar por el sistema. No tienen las mismas necesidades los sistemas personales, los sistemas departamentales, los sistemas de tiempo real, etc. Muchos sistemas operativos permiten establecer cuotas o límites en los recursos asignados a cada proceso o usuario. Por ejemplo, se puede limitar la cantidad de disco, memoria o tiempo de procesador asignados. Protección El sistema operativo ha de garantizar la protección entre los usuarios del sistema: ha de asegurar la confidencialidad de la información y que unos trabajos no interfieran con otros. Para conseguir este objetivo ha de impedir que unos procesos puedan acceder a los recursos asignados a otros procesos. Contabilidad La contabilidad permite medir la cantidad de recursos que, a lo largo de su ejecución, utiliza cada proceso. De esta forma se puede conocer la carga de utilización o trabajo que tiene cada recurso y se pueden imputar a cada usuario los recursos que ha utilizado. Cuando la contabilidad se emplea meramente para conocer la carga de los componentes del sistema se suele denominar monitorización. La monitorización se utiliza, especialmente, para determinar los puntos sobrecargados del computador y, así, poder corregirlos. El sistema operativo como máquina extendida El sistema operativo ofrece a los programas un conjunto de servicios, o llamadas al sistema, proporcionándoles una visión de máquina extendida. El modelo de programación que ofrece el hardware se complementa con estos servicios software, que permiten ejecutar de forma cómoda y protegida ciertas operaciones complejas. La alternativa consistiría en complicar los programas de usuario y en no tener protección frente a otros usuarios. Las funciones de máquina extendida se pueden agrupar en las cuatro clases siguientes: ejecución de programas, operaciones de E/S, operaciones sobre ficheros y detección y tratamiento de errores. Gran parte de este texto se dedicará a explicar los servicios ofrecidos por los sistemas operativos, por lo que aquí nos limitaremos a hacer unos simples comentarios sobre cada una de estas cuatro clases. Ejecución de programas El sistema operativo incluye servicios para lanzar la ejecución de un programa, creando un proceso, así como para parar o abortar la ejecución de un proceso. También existen servicios para conocer y modificar las condiciones de ejecución de los procesos. Bajo la petición de un usuario, el sistema operativo leerá un ejecutable, para lo cual deberá conocer su estructura, lo cargará en memoria y lo pondrá en ejecución. Observe que varios procesos pueden estar ejecutando el mismo programa, por ejemplo, varios usuarios pueden haber pedido al sistema operativo la ejecución del mismo programa editor. Órdenes de E/S Los servicios de E/S ofrecen una gran comodidad y protección al proveer a los programas de operaciones de lectura, escritura y modificación del estado de los periféricos, puesto que la programación de las operaciones de E/S es muy compleja y dependiente del hardware específico de cada periférico. Los servicios del sistema operativo ofrecen un alto nivel de abstracción, de forma que el programador de aplicaciones no tenga que preocuparse de esos detalles. Operaciones sobre ficheros Los ficheros ofrecen un nivel de abstracción mayor que el de las órdenes de E/S, permitiendo operaciones tales como creación, borrado, renombrado, apertura, escritura y lectura de ficheros. Observe que muchos de los servicios son parecidos a las operaciones de E/S y terminan concretándose en este tipo de operación. Servicios de memoria El sistema operativo incluye servicios para que el proceso pueda solicitar y devolver zonas de memoria para albergar datos. También suele incluir servicios para que dos o más procesos puedan compartir una zona de memoria. Comunicación y sincronización entre procesos Los servicios de comunicación entre procesos son muy importantes, puesto que constituyen la base sobre la que se ha construido Internet. Servicios como el pipe o compartir memoria permiten la comunicación entre procesos de un mismo computador, pero servicios como el socket permiten la comunicación entre procesos que ejecutan en máquinas remotas pero conectadas en red. Los servicios de sincronización como el semáforo o los mutex, permiten sincronizar la ejecución de los procesos, es decir, conseguir que ejecuten de forma ordenada (como en un debate en el que nadie le quite la palabra a otro). mismo computador, pero servicios como el socket permiten la comunicación entre procesos que ejecutan en máquinas remotas pero conectadas en red. Los servicios de sincronización como el semáforo o los mutex, permiten sincronizar la ejecución de los procesos, es decir, conseguir que ejecuten de forma ordenada (como en un debate en el que nadie le quite la palabra a otro). Detección y tratamiento de errores Además de analizar detalladamente todas las órdenes que recibe, para comprobar que se pueden realizar, el sistema operativo se encarga de tratar todas las condiciones de error que detecte el hardware. Como más relevantes, destacaremos las siguientes: errores en las operaciones de E/S, errores de paridad en los accesos a memoria o en los buses y errores de ejecución en los programas, tales como los desbordamientos, las violaciones de memoria, los códigos de instrucción prohibidos, etc. El sistema operativo como interfaz de usuario El módulo del sistema operativo que permite que los usuarios dialoguen de forma interactiva con él es el intérprete de mandatos o shell. El shell se comporta como un bucle infinito que está repitiendo constantemente la siguiente secuencia: Espera una orden del usuario. En el caso de interfaz textual, el shell está pendiente de lo que escribe el usuario en la línea de mandatos. En las interfaces gráficas está pendiente de los eventos del apuntador (ratón) que manipula el usuario, además, de los del teclado. Analiza la orden y, en caso de ser correcta, la ejecuta, para lo cual emplea los servicios del sistema operativo. Concluida la orden muestra un aviso o prompt y vuelve a la espera. El diálogo mediante interfaz textual exige que el usuario memorice la sintaxis de los mandatos, con el agravante de que son distintos para cada sistema operativo (p. ej.: para mostrar el contenido de un fichero en Windows se emplea el mandato type, pero en UNIX se usa el mandato cat). Por esta razón, cada vez son más populares los intérpretes de mandatos con interfaz gráfica, como el que se encuentra en las distintas versiones de Windows o el KDE o Gnome de Linux. Sin embargo, la interfaz textual es más potente que la gráfica y permite automatizar operaciones Ficheros de mandatos Casi todos los intérpretes de mandatos pueden ejecutar ficheros de mandatos, llamados shell scripts. Estos ficheros incluyen varios mandatos totalmente equivalentes a los mandatos que se introducen en el terminal. Además, para realizar funciones complejas, pueden incluir mandatos especiales de control del flujo de ejecución como pueden ser los bucles, las secuencias condicionales o las llamadas a función, así como etiquetas para identificar líneas de mandatos. Para ejecutar un fichero de mandatos basta con invocarlo de igual forma que un mandato estándar del intérprete de mandatos.