Descargar

Conceptos fundamentales y Servicios del Sistema Operativo (página 2)


Partes: 1, 2

Si el ambiente de trabajo es multiprogramado, un solo registro no basta. En este caso, se requieren dos registros, almacenándose en ellos el límite superior e inferior de memoria que le es permitido acceder al programa que está en ejecución en cada instante de tiempo (su área de trabajo).

edu.red

Lo antes indicado presupone que cada vez que pasa el control del CPU de un programa a otro, el sistema de operación actualice los registros indicados con los nuevos valores requeridos.

En la actualidad existen otros esquemas de protección de memoria con mayores grados de sofisticación, en la continuación de la asignatura se hará referencia a algunos de ellos.

La protección del procesador tiene como objetivo evitar que un programa usuario caiga en un lazo de procesamiento infinito adueñándose de éste por tiempo indefinido. Esto se logra por medio de un reloj ("timer") de hardware que permite detener el procesamiento y regresar el control, vía una interrupción, al sistema operativo.

Generalmente se instrumenta un reloj variable por medio de uno fijo y un contador. Dicho contador recibe un valor por parte del sistema operativo y se decrementa con cada golpe del reloj de intervalo fijo, cuando alcanza el valor cero se emite la interrupción y el sistema operativo decide la acción a ejecutar. Por supuesto, las instrucciones que permiten modificar el valor del reloj son privilegiadas.

Procesos. Tablas de procesos

Antes de continuar estudiando otros aspectos relacionados con los sistemas operativos resulta conveniente puntualizar el concepto de proceso que constituye uno de los más esenciales en esta materia.

Un proceso es, básicamente, un programa en ejecución y precisamente por esa razón existe la tendencia a confundir ambos términos. La diferencia consiste en que un proceso incluye además del programa (secuencia de código ejecutable) los datos, la pila, el contador de programa, los valores almacenados en los registros y todo aquello que refleja el estado de la ejecución en un instante.

La importancia de este concepto radica en que un programa por si solo no refleja su estado de ejecución, lo que resulta esencial a los efectos de continuar su procesamiento futuro si en un determinado momento se le retira el control del procesador (lo que constituye la base de la multiprogramación).

Para guardar la información de los procesos que en cada instante están siendo atendidos por el sistema de operación se utiliza la tabla de procesos. Esta no es más que un arreglo o lista de estructuras donde cada una de ellas contiene los datos que definen el estado de un proceso determinado. Las informaciones de un proceso se actualizan en numerosos momentos, pero por lo menos cada vez que se le va a quitar el uso del procesador.

Los campos que componen cada entrada en la tabla de procesos varían de un sistema operativo a otro y generalmente son numerosos. Resultan típicos algunos como: estado del proceso, valores de los registros, contador de programa, identificador, área de memoria utilizada, tabla de ficheros abiertos, directorio actual, etc.

Todo proceso presente en un sistema operativo se identifica por un número entero que se conoce por el identificador del proceso (PID).

Para ver el PID de los procesos que corren en un sistema Windows (nt) Crl+Shift+Esc y en el administrador de tares de Windows en el menú: ver/seleccionar columnas y marcar Identificador de proceso (PID). En Linux: Escribir en una consola ps –A

Generalmente un proceso puede crear uno o más procesos (procesos hijos) que a su vez pueden crear otros, llegándose a una estructura arbórea.

knoppix@ttyp0[knoppix]$ pstree -ah

init

|-automount –pid-file=/var/run/autofs/_:mnt_:auto.pid –timeout=2 /mnt/auto

|-bash -login

|-bash -login

|-bash -login

|-bash -login

|-(bdflush)

|-kalarm -caption KAlarm -icon kalarm

| `-xmms -p

| `-xmms -p

| |-xmms -p

| |-xmms -p

| |-xmms -p

| `-xmms -p

|-kalarmd

|-kdeinit

| |-kdeinit

| |-kdeinit

| |-kdeinit

| |-kdeinit

| `-kdeinit

| `-bash

| `-pstree -ah

|-kdeinit

|-kdeinit

|-kdeinit

|-kdeinit

|-kdeinit

|-kdeinit

|-kdeinit

|-kdeinit

|-kdeinit

|-kdeinit

|-kdesud

|-(keventd)

|-(khubd)

|-kmix

|-knotes

|-krandrtray

|-(ksoftirqd_CPU0)

|-(kswapd)

|-(kupdated)

|-pump -i eth0

`-xsession /etc/init.d/xsession start

|-xinitrc /etc/X11/xinit/xinitrc

| `-kwrapper ksmserver

`-xsession /etc/init.d/xsession start

`-XFree86 -noreset -xf86config /etc/X11/XF86Config-4 -dpi 75: 0

Ejemplo de estructura de procesos en UNIX (Linux).

Servicios del Sistema Operativo

Como ya se indicó, una de las dos funciones principales de un sistema operativo es servir de máquina ampliada o virtual, brindando facilidades a los programas de los usuarios y a estos. Para lograr este objetivo, los sistemas operativos se encargan de programar el trabajo con los diferentes dispositivos existentes en el sistema de cómputo, separando a los usuarios y programas de esta tarea compleja y tediosa.

Los servicios a usuarios se brindan, básicamente, por medio de los llamados Programas del Sistema, mientras que a los programas se les brindan a través de las Llamadas al Sistema.

Los programas del sistema constituyen una colección más o menos grande de programas (no funciones o subrutinas) suministradas por el fabricante (u otra empresa) que permite realizar operaciones que son comunes a diferentes usuarios, brindando un ambiente más adecuado para el desarrollo y explotación de aplicaciones.

Los programas del sistema pueden ser divididos en varias categorías, aunque esto también depende de cada sistema operativo. Algunos posibles grupos serian : Manipulación de ficheros (crear, eliminar, renombrar, imprimir, etc.), obtención de información de estado (fecha, hora, memoria disponible, espacio en disco, etc.), editores de texto, etc.

En resumen, los programas del sistema son aquellos que ejecutan las acciones descritas en los comandos de éste o que aparecen en los menús en el caso de las interfaces gráficas.

Las llamadas al sistema constituyen la interface entre el sistema de operación y los procesos. Estas generalmente se hacen por medio de instrucciones en lenguaje ensamblador, aunque en algunos casos existen facilidades que permiten se realicen desde lenguajes de alto nivel.

En el segundo caso antes indicado, se dan las variantes de que existan funciones o procedimientos predefinidos en biblioteca que realicen las llamadas al sistema como tal (UNIX, Windows) o el compilador genera directamente las instrucciones necesarias para esto.

Los mecanismos que ponen en ejecución las llamadas al sistema operativo difieren de uno a otro:

  • ? En el OS/360 existe una instrucción especial (SVC) que provoca una trampa hacia el sistema. El número de la llamada se da en la instrucción.

  • ? En el CP/M no existe una instrucción especial y por ello el número de la llamada se pone en el registro C y se salta a la dirección 5 de la memoria.

  • ? En MS-DOS se utiliza la instrucción INT seguida de un número de interrupción (21H).

En todos los casos antes indicados, se requiere de la transferencia de parámetros desde o hacía el procedimiento que instrumenta la llamada. Este pase de parámetros se ejecuta a través de los registros del procesador o por medio de un bloque o tabla de memoria (pasándose la dirección en un registro).

El número de llamadas, la forma y tipo de cada una y los posibles agrupamientos de estas dependen de cada sistema de operación en específico, aunque en forma general se pudieran catalogar en 4 grupos:

  • ? Control de procesos.

Incluyen operaciones con los procesos tales como: Crear, eliminar, finalizar, abortar, ejecutar, enviar señal, esperar por señal, etc.

  • ? Manipulación de ficheros.

Incluyen operaciones con los ficheros tales como: Crear, eliminar, abrir, cerrar, renombrar, leer, escribir, etc.

  • ? Manipulación de dispositivos.

Incluyen operaciones con los dispositivos tales como: Solicitar, liberar, leer, escribir, etc.

  • ? Intercambio de información.

Incluyen operaciones tales como: Conocer la fecha, conocer la hora, conocer atributos de ficheros, fijar atributos de ficheros, fijar la fecha, etc.

Además de los grupos antes indicados podría haber otros u otras operaciones dentro de estos. Otros conjuntos podrían ser:

  • ? Manipulación de directorios y sistemas de ficheros.

  • ? Protección.

  • ? Señalización.

La mejor manera de entender la esencia de las llamadas al sistema consiste en hacer una revisión detallada de las que están presentes en uno o varios sistemas operativos y por ello se recomienda revisar las páginas de la 23 a la 36 del segundo libro de Tanenbaum, donde se presenta la explicación de las más importantes presentes en la versión 7 del UNIX.

Intérprete de comandos

Uno de los más importantes programas del sistema es el intérprete de comandos. Es el programa que sirve de interface entre el sistema operativo y los usuarios de éste. Aún cuando algunos autores no lo consideran parte del sistema de operación (dado que cada usuario podría crear el suyo), no hay duda que guarda una estrecha relación con éste.

El interprete de comandos toma el control una vez que el sistema operativo ha sido cargado o el control de una terminal una vez que un usuario se ha identificado en un sistema de tiempo compartido.

Los intérpretes de comandos han recibido distintos nombres en diferentes sistemas operativos: interprete de tarjetas de control, intérprete de línea de comando, procesador de comandos de consola (CPM), "Shell" (UNIX), etc.

La función del intérprete de comandos es en general bastante simple y consiste en tomar la tarjeta de control o comando, validar si es correcto o no y en el primer caso realizar la ejecución correspondiente. El código que ejecuta el comando puede formar parte del propio intérprete o constituye otro programa del sistema.

Los intérpretes de comandos que presentan interfaces con usuarios más amigables, incluyendo las, hoy, reconocidas interfaces gráficas, tienen una mayor complejidad dada el uso de menús, botones, "mouse" y otros recursos.

Aún cuando en la mayoría de los sistemas operativos el interprete de comandos pierde el control de ejecución tan pronto se inicia un comando y no lo recupera hasta que éste finalice, hay algunos donde el comando se ejecuta en paralelo (como un proceso hijo del interprete). Un ejemplo de esto está en el UNIX con el uso del símbolo &.

Estructura de un Sistema Operativo

La estructura de un sistema operativo se puede analizar desde el punto de vista funcional y desde el punto de vista organizativo de los programas que lo componen.

Desde el punto de vista funcional hay que tener en cuenta que los sistemas operativos son programas manejados por eventos. Si no hay programa que ejecutar, dispositivo al cual brindar servicio o usuario que atender entonces no hará nada. Los eventos (mensajes o señales) que lo ponen en acción serán las interrupciones o las trampas. Por lo tanto, los sistemas de operación son programas manejados por interrupción.

La naturaleza de los sistemas operativos de ser manejados por interrupción determina su estructura desde el punto de vista funcional.

Cuando una interrupción o trampa ocurre, de inmediato el hardware transfiere el control al sistema operativo. Este preserva el estado del proceso que se ejecutaba y a continuación realiza el tratamiento correspondiente.

Pueden ocurrir tipos diferentes de interrupciones, pero pueden agruparse en tres tipos:

  • ? Llamadas al sistema.

  • ? Interrupción de un dispositivo.

  • ? Un error de programa (detectado por hardware).

Las llamadas al sistema, a estos efectos, pueden dividirse en

  • ?  Solicitud de terminación normal (realizada por un proceso cuando va a terminar su ejecución).

  • ? Solicitud de terminación anormal (realizada al detectarse la existencia de un error).

  • ?  Solicitud de recursos (si no están disponibles, entonces el proceso deberá esperar).

  • ?  Solicitud de información de estado (la información es transferida).

  • ?  Solicitud de entrada/salida.

A los efectos de la acción del sistema operativo los casos 3 y 4 se pueden considerar como iguales (en el libro de Peterson se le llaman solicitudes que no son de entrada/salida).

Teniendo en cuenta lo antes indicado, en la figura 2.4 (página 54) del Peterson se presenta la estructura del sistema operativo desde el punto de vista funcional.

De aquí que un sistema operativo estará compuesto por al menos de: manejadores de dispositivos, atención a interrupciones ("handlers"), un conjunto de subrutinas de llamadas al sistema y el intérprete de comandos o de tarjetas de control. Como es lógico, el sistema de ficheros también estará presente. La mayoría de los sistemas operativos brindan funciones adicionales y por ello habrá complejidades aún mayores.

Desde el punto de vista de la organización de los programas, la estructura de un sistema operativo puede tomar distintas formas. Estas podrían ser:

– Sistemas Monolíticos.

Se caracterizan por la no existencia de estructura. Se escriben como una colección de procedimientos donde cada uno de ellos puede llamar a cualquier otro que le brinde un servicio que necesite. En este caso los procedimientos necesitan tener una interface bien definida en términos de parámetros y resultados.

Aún en esta variante puede existir una pequeña estructura en lo que se refiere a los servicios brindados por las llamadas al sistema.

edu.red

– Sistemas de Capas.

Se caracterizan por estar organizados como una jerarquía de capas, cada una construida sobre la anterior.

El primer sistema construido en esta forma fue el "THE" a cargo de E. W. Dijkstra y sus alumnos (en 1968). En dicho sistema se consideró la existencia de 6 capas:

0.- Asignación del procesador y multiprogramación.

1.- Administración de memoria y tambor magnético.

2.- Comunicación operador – procesos.

3.- Administración de entrada/salida.

4.- Programas usuarios.

5.- El operador.

Una generalización de este concepto fue aplicada en el sistema operativo MULTICS. Se organizó como una serie de anillos concéntricos, siendo los más internos los de mayor prioridad. Para que un procedimiento de un nivel pueda llamar a otro más interno lo tiene que hacer a través de una llamada al sistema.

Máquinas Virtuales.

En este esquema, el centro del sistema operativo se ejecuta directamente en el hardware existente y permite el logro de la multiprogramación. Esta, en lugar de ejecutar varios procesos, crea varias máquinas virtuales en una segunda capa. Estas máquinas virtuales son copias exactas del hardware original y por ello cada una de ellas puede ejecutar cualquier sistema operativo que pueda operar en la máquina original.

Este formato es conocido hace tiempo (desde la IBM/360), pero hoy se utiliza para crear máquinas virtuales que permitan ejecutar en un sistema operativo programas preparados en otro (Windows lo utiliza para ejecutar programas de MS-DOS o de versiones anteriores).

Modelo clienteservidor.

Es una tendencia de los actuales sistemas de operación que consiste en instrumentar la mayoría de las funciones en procesos usuarios, construyendo un "kernel" mínimo.

Para solicitar un servicio, un proceso usuario (llamado cliente) envía la solicitud al proceso servidor, el cual realiza el trabajo y le regresa la respuesta. En este modelo la función principal del "kernel" consiste en manejar la comunicación entre clientes y servidores (y, lógicamente, la atención a las interrupciones de los dispositivos).

La división del sistema operativo en partes, cada una de las cuales atiende una faceta de éste, ejecutándose la mayoría de ellos (de los servidores) en modo usuario, permite dos ventajas importantes.

La primera consiste en que la aparición de un error en una parte no implica necesariamente que todo el sistema se caiga (que ocurra un "crash"). La segunda consiste en la fácil adaptación de un sistema de este tipo para su utilización en un medio distribuido.

edu.red

Conclusiones

A modo de conclusión hemos podido ver la importancia que tiene la protección de la información que manejan cada uno de los dispositivos que interactúan con el sistema operativo. Vimos el concepto de proceso y su significado, como hacen las aplicaciones para comunicarse con el SO a través de las llamadas al sistema y que estructura de diseño siguen estos.

Bibliografía

  • Sistemas Operativos Modernos, Andrew S. Tanenbaum, pág. 13-27.

  • Operating system Design and Implementation, Tanenbaum, pág. 14-42.

  • Operating System Concepts, Peterson and Silberchatz, pág. 39-54

 

 

Autor:

Msc Maykel J Menéndez

Partes: 1, 2
 Página anterior Volver al principio del trabajoPágina siguiente