Escolar Documentos
Profissional Documentos
Cultura Documentos
operativo:
una mquina
virtual
Josep Llus Marzo i Lzaro
P05/75097/00805
Mdulo 2
ndice
Introduccin.............................................................................................
Objetivos ....................................................................................................
Introduccin
En este mdulo didctico aparecen descritos los servicios que ofrece el sistema operativo (SO) a los usuarios. Asimismo, se ampla el concepto de usuario
de un sistema operativo a los procesos que estn en ejecucin y que tambin
utilizan estos servicios.
Encontraremos expuestas las utilidades que ofrece el sistema operativo para
construir aplicaciones informticas y las fases por las cuales tiene que pasar
una aplicacin desde su concepcin hasta que se pueda ejecutar.
Y, para finalizar, definimos el concepto de proceso en ejecucin a partir de
un programa, su desarrollo y, fundamentalmente, su interaccin con el sistema operativo.
Tambin trataremos conceptos como la interrupcin y la rutina de servicio,
los mecanismos de acceso en el rea propia del sistema y las familias de servicios de mayor uso.
Objetivos
Los materiales didcticos de este mdulo contienen las herramientas para alcanzar los siguientes objetivos:
1. Adquirir el concepto de proceso informtico en tanto que programa en ejecucin y conocer sus caractersticas fundamentales. Tambin es necesario
saber diferenciar con claridad este concepto de otros conceptos que se encuentran relacionados con el mismo, tales como los de programa, lenguaje
informtico, etc.
2. Comprender el mecanismo de transformacin de un programa escrito en un
lenguaje de programacin para poder ejecutarlo en un sistema informtico.
3. Conocer las herramientas de un sistema operativo en relacin con el entorno de programacin de aplicaciones.
4. Comprender el entorno necesario que proporciona el sistema operativo
para la ejecucin de una aplicacin informtica.
5. Entender el mecanismo de carga de un programa en la memoria y ver cmo
se diferencia esta memoria de la que se le asigna a otros procesos o de la que
se le asigna al mismo sistema operativo.
El sistema operativo define una mquina virtual sobre la cual los usuarios
pueden trabajar con una mayor comodidad de la que lo haran si trabajasen
directamente sobre los elementos que componen el sistema.
Las sesiones de trabajo sobre esta mquina virtual siguen unas pautas y unas
reglas predeterminadas, con un proceso de inicio, una fase de trabajo y un ltimo proceso de finalizacin de la sesin. Esta sesin de trabajo tambin hace
que el sistema operativo pueda identificar a los diferentes tipos de usuarios y
proporcionarles, de esta manera, un entorno con las herramientas ms apropiadas para la tarea que tienen que llevar a cabo. Un administrador, por ejemplo, no tiene las mismas necesidades que un programador y, por tanto, no
necesitan el mismo entorno.
Para acabar, consideraremos la visin que tienen las aplicaciones del sistema operativo, visin que deben conocer los programadores que tendrn que
llevar a cabo su creacin. En tal caso, la interfaz con que dialoga el programa
tiene que encontrarse al mismo nivel que el de las libreras de programas.
A lo largo de este apartado trataremos de todos estos aspectos, empezando por
el de mquina virtual, pasando por los de sesin de trabajo e intrprete de rdenes, y finalizando con la visin que el programador tiene del sistema operativo.
Figura 1
2) En un nivel inferior, ms cerca del hardware, encontraremos las herramientas del sistema operativo y las libreras. Estas herramientas son accesibles para
el usuario directamente mediante el intrprete de rdenes, y tambin para el
programador, que utiliza su interfaz cuando pone en funcionamiento las herramientas de apoyo a la programacin.
Por ejemplo,...
... mediante las herramientas
del sistema se puede crear una
aplicacin llamando al compilador. Las aplicaciones tambin
se suelen crear aadiendo las
rutinas de las libreras del sistema que sean necesarias.
Prestad atencin al hecho de que tanto la capa del intrprete de rdenes como
la de las herramientas del sistema trabajan en modo usuario desde el punto de
vista del sistema operativo.
En los sistemas multiusuario, para poder utilizar el sistema se tiene que iniciar
una sesin de trabajo; pues bien, para crear esta sesin de trabajo el sistema
debe identificar al usuario para asignarle su entorno personalizado, es decir,
los recursos para los que est autorizado.
Este proceso de identificacin tambin sirve para evitar que accedan al sistema
usuarios no autorizados para llevarlo a cabo. El acceso al sistema se realiza por
medio de un terminal, ms o menos sofisticado (alfanumrico, de ventanas,
etc.) y, por lo tanto, la primera tarea que se efecta en una sesin de trabajo es
asignarle un terminal a un usuario.
La mquina virtual es la visin que tiene el usuario del sistema operativo durante una sesin de trabajo desde un terminal.
Podemos establecer
un paralelismo...
... entre el nombre de usuario y
la contrasea para acceder a
un sistema informtico multiusuario y una tarjeta de crdito
para acceder a una cuenta
bancaria. En primer lugar, debemos tener una identificacin
previa asignada por el sistema,
pero adems, necesitamos una
segunda autentificacin relacionada con la primera, que es
la contrasea o el nmero secreto, en el caso de la tarjeta
de crdito. En ambos casos
el usuario puede modificar
la segunda.
10
Tras haber introducido estos datos en el sistema operativo, ste da los siguientes pasos:
a) Para empezar, el sistema operativo tiene que encontrar el nombre en la lista
de usuarios autorizados. De hecho, este paso es un primer grado de seguridad.
b) Si el nombre es correcto y la contrasea se corresponde con la que el ordenador tiene registrada, se ha superado el segundo nivel de seguridad.
c) En ltimo lugar, se asigna el entorno propio de este usuario y se inicia la
sesin de trabajo.
Un ejemplo de la utilidad que presenta el hecho de establecer una identificacin de
usuario es la figura del propietario de un fichero y de los permisos asociados para
realizar las operaciones que desee. Si el usuario no estuviese perfectamente identificado, no sera posible este control del sistema de ficheros.
2) Uso del sistema: en esta fase el usuario interacciona con el intrprete de
rdenes. Es la fase que se corresponde con el uso normal del sistema y, bsicamente, es un dilogo interactivo desde un terminal.
3) Salida del sistema, acabar* (fase de logout): en esta fase el usuario tiene
que declarar de manera explcita que ya ha acabado el trabajo y que desea
Por una parte, es una cuestin de eficiencia: hay que liberar los recursos que se
tienen asignados.
Por otra parte, es una cuestin de seguridad: hay que cerrar la sesin abierta
para que as ningn otro usuario pueda utilizar la cuenta abierta.
11
Cuenta abierta
Para que un usuario pueda trabajar con el sistema operativo, es necesario crearle un entorno
de trabajo, formado por un directorio de trabajo, y se le tienen que dar unos privilegios, un
nombre, etc., para que el sistema operativo lo reconozca.
Este entorno se denomina cuenta de usuario. Un usuario abrir esta cuenta cuando inicie una
sesin de trabajo con el sistema operativo.
sacar_prompt
leer_orden
mientras la orden_no_sea
salir hacer
ejecutar_la_orden
sacar_prompt
leer_nueva_orden
fin_mientras
Como se puede observar, el intrprete de rdenes es fundamentalmente un proceso que solicita de manera cclica, mediante un bucle, una orden para ejecutar
hasta que tenga lugar la de salir. La manera que tiene de decir que est preparado
para aceptar nuevas rdenes es escribir una combinacin de caracteres en la pantalla del terminal; se trata del prompt, que significa ahora me encuentro en disposicin de leer nuevas rdenes.
El intrprete de rdenes rene un nmero limitado de rdenes, mediante las
cuales el usuario puede interaccionar con el sistema.
a) Existe una serie de rdenes que el propio intrprete de rdenes reconoce y
ejecuta; son las rdenes internas, aquellas que forman parte del ncleo del
sistema operativo.
b) Existen rdenes que el intrprete no es capaz de ejecutar de manera directa. En tal caso, tiene que buscarlas en el sistema de ficheros y cargarlas en la
memoria para que se ejecuten. Son las rdenes externas, que por lo general
12
se encuentran en un directorio concreto del sistema de ficheros. Cuando el intrprete de rdenes tiene que cargar una orden externa, la bsqueda de la orden en el disco sigue una ruta concreta*. Esto significa que en primer lugar
busca en un directorio, despus en otro, y as segn lo especifique el usuario.
leer_orden
es interna?
si hacer ejecutarla
no hacer
est en el directorio actual?
si hacer ejecutarla
no hacer
est en el directorio path?
si hacer ejecutarla
no mensaje de error: no se puede ejecutar
la orden
13
* Encontramos un ejemplo
de redireccionamiento de salidas
en el sistema operativo UNIX
cuando utilizamos la orden at.
Un lenguaje...
... muy utilizado es el que permite crear lotes de rdenes en
MS-DOS, los cuales se guardan
en ficheros que contienen la
extensin .bat de lote de rdenes (o batch). En UNIX se
denominan scripts, y las rdenes que soportan pueden
generar autnticas miniaplicaciones. Son muy utilizadas por
los programadores y, en especial, por los administradores
del sistema.
14
El clculo
de un logaritmo...
... puede ser una rutina
de librera, pero poner un carcter en un dispositivo de
entrada/salida tiene que ser
una llamada al sistema.
15
El trmino proceso...
no de los sistemas de computacin modernos capaces de ejecutar un gran nmero de actividades de manera simultnea. Sin embargo, no es fcil establecer
una definicin exacta. A continuacin vamos a apuntar algunas de las que
ms se utilizan:
un programa en ejecucin;
el espritu animado de un procedimiento;
el centro de control de un procedimiento en ejecucin;
la entidad a la que se le asignan los procesadores de un ordenador;
la instanciacin de un programa.
De hecho, un mismo programa puede tener numerosas instanciaciones (copias) que se ejecutan de manera concurrente en el mismo sistema informtico.
Imaginemos que en un sistema multiusuario un conjunto de programadores
est utilizando un mismo editor de texto. Es necesario replicar el mismo cdigo tantas veces como usuarios haya?
Analoga de proceso
Podramos decir que un programa es a un proceso lo que el ftbol es a un partido. El ftbol es un deporte en el que se han definido unas normas de funcionamiento, las cuales
resuelven todas las posibles incidencias y lo hacen de manera general. Cuando asignamos recursos a este concepto (campo, entrenador, jugadores, etc.), instanciamos el concepto de ftbol y se inicia un nuevo proceso: el partido. Durante aquella ejecucin,
el partido se desarrolla de una manera determinada y da unos resultados concretos, pero
cuando finaliza deja de existir, y es imposible obtener una nueva ejecucin idntica. El
ftbol, en cambio, ha permanecido ajeno a esta ejecucin y permite otras tantas instancias del juego como sean necesarias. La misma idea se puede aplicar a la descripcin
detallada de una interpretacin musical (la partitura) y la ejecucin (el concierto) correspondiente.
16
c = 0;
for (i = 0; i < b; i++)
c = c + a;
Un lenguaje de programacin o informtico es una convencin de sentencias y estructuras de datos que, mediante un proceso de traduccin o interpretacin, puede convertirse en lenguaje mquina y se puede ejecutar. Con los
lenguajes de programacin se pueden escribir algoritmos.
La idea de los lenguajes de programacin es que los programas sean independientes de la arquitectura fsica del ordenador y del sistema operativo donde finalmente se ejecuten. Es decir, que sean programas portables a otros sistemas y que, al
mismo tiempo, sean tiles sin tener que introducir cambios en los mismos. Organismos tales como el American National Standards Institute (ANSI) y la International
Standards Organization (ISO) se ocupan de la normalizacin de los diferentes lenguajes. As pues, el sistema operativo debe proporcionar las herramientas necesarias para llevar a cabo el proceso de creacin de una aplicacin informtica que
pueda ser ejecutada en el propio sistema operativo.
Clasificaremos los diferentes tipos de lenguajes de programacin de la siguiente manera:
1) Lenguaje de alto nivel: lo utilizamos cuando escribimos las instrucciones
en un formato texto muy cercano al lenguaje natural, aunque con unas reglas
mucho ms estrictas.
17
El ejemplo anterior est escrito en un lenguaje de alto nivel. La mquina slo puede ejecutar el lenguaje mquina propio y, por lo tanto, es necesario que se d un
proceso que transforme el programa anterior en un formato conocido por la mquina. Este proceso es el que conocemos de manera genrica como compilacin.
2) Lenguaje ensamblador: para simplificar el uso directo del lenguaje mquina se han diseado lenguajes en los que cada instruccin mquina se corresponde con una instruccin en un lenguaje mnemotcnico ms inteligible.
Uno de estos lenguajes es el lenguaje ensamblador, que permite escribir un cdigo muy eficiente por el hecho de que se pueden escribir las instrucciones nativas del procesador controlando la ejecucin a un nivel muy bajo. Sin
embargo, hay que decir que el lenguaje mquina cada da es ms sofisticado y
resulta casi inviable programarlo a mano, de manera que esta tarea tan com-
Estudiamos la compilacin
en el subapartado 2.4.2.
de este mdulo didctico.
El principal
inconveniente...
... del lenguaje ensamblador es
que el programa resultante, en
formato texto, es muy largo
y difcil de escribir y de modificar; su uso queda restringido
a las partes de una aplicacin
que se utilice mucho en tiempo de ejecucin. Es el caso
tpico del ncleo del sistema
operativo.
18
El cdigo mquina se ha representado en notacin decimal para cada campo. El cdigo de operacin slo ocupa 2 bits, y los cdigos del operante de
origen y de destino ocupan 7 bits cada uno. Siempre direccionamos de manera directa la posicin de memoria de la variable, motivo por el cual los
valores constantes cero y uno se tienen que grabar en una posicin de memoria.
La mquina no dispone de una operacin de salto incondicional. Para simularla (ir a la etiqueta for:), hacemos que el resultado de la comparacin
previa sea siempre cierto, y esto es algo que conseguimos comparando cualquier posicin de memoria consigo misma (la variable i, en el ejemplo).
1) Editores de texto: forman parte de las utilidades del sistema que permiten la edicin de ficheros que contienen informacin en formato texto. Estos
ficheros pueden ser de mensajes, de configuracin del sistema operativo*,
pero tambin pueden ser ficheros de cdigo de alto nivel de una aplicacin
informtica. Recordemos que los programas escritos en alto nivel no son
ms que ficheros de texto escritos con las normas de un lenguaje de alto
nivel.
Veremos la compilacin en el
subapartado 2.4.2. del presente
mdulo didctico.
19
4) Montadores* (enlazadores): son aplicaciones que agrupan diferentes mdulos objeto y las libreras del sistema con el fin de obtener un programa eje-
* Montador es el equivalente
espaol del nombre ingls linker.
cutable nico. Su tarea principal es resolver las referencias cruzadas entre los
diferentes elementos que no han sido resueltas en el transcurso de las primeras fases de compilacin. A pesar de que en algunas ocasiones se encuentran
como aplicaciones separadas de los sistemas operativos, por lo general se ejecutan de manera automtica en la fase final de los entornos integrados de
compilacin.
6) Ejecutadores-cargadores: constituyen el ltimo paso del proceso y permiten la ejecucin de los ficheros ejecutables resultantes de los pasos anteriores, despus de asignarles los recursos del sistema. En los sistemas
operativos antiguos, esta orden era explcita*, mientras que en la actualidad,
cuando se indica el nombre de un fichero ejecutable, se interpreta que hay
El sistema operativo
La figura muestra el sistema
operativo en forma de capas
donde se ubican las utilidades
del programador que se han
presentado. Las llamadas al sistema operativo son servicios
que permiten acceder a las
partes ms internas del cdigo
del sistema operativo de manera controlada.
20
Utlizando las herramientas que hemos descrito podemos crear y ejecutar una
aplicacin. Para ello tenemos que pasar por un conjunto de fases que desarrollaremos a continuacin.
2.4.1. La edicin
Por ejemplo,...
... se pueden utilizar los
recursos del editor de texto
para diferenciar las palabras
reservadas, los nombres de las
variables, los procedimientos,
etc.
En el proceso de traduccin (compilacin) a partir de un programa escrito en lenguaje de alto nivel denominado programa fuente, obtenemos un equivalente* de ste en lenguaje mquina que se conoce como
programa objeto. Si el programa fuente es el ensamblador, esta fase tambin se denomina ensamblar, y en este caso la traduccin es ms sencilla,
teniendo en cuenta que, como ya hemos dicho, a cada instruccin en ensamblador le corresponde una instruccin mquina. A partir de esta fase
no se dar ninguna diferencia entre los objetos que provienen de un lenguaje de alto nivel y los que son de formato ensamblador.
21
Tanto los mdulos objeto como las libreras indican las direcciones de manera
relativa respecto el inicio del programa. Despus de esta primera fase de compilacin, disponemos de un conjunto de mdulos objeto con referencias de
direccionamiento en relacin con el mdulo, as como otras referencias externas sin resolver. En esta fase se van a crear tres estructuras:
Ejemplo de compilacin
Consideremos que hay dos mdulos: producto.c y principal.c. En principal (observad la pgina siguiente) encontramos un bucle que imprime los cuadrados de los n primeros nmeros; en el ejemplo se ha tomado el valor n = 10.
Este programa realiza una serie de llamadas a un segundo mdulo en el que se
22
En primer lugar podemos ver, de manera muy simplificada, cmo es la compilacin de producto.c. Presentamos el cdigo de ensamblador slo para intuir el significado del cdigo mquina.
n = 10;
for (i = 0; i < n; i++) {
a = i;
b = i;
producto ( ) ;
printf (i = %d cuadrado = %d \n, i, c) ;
}
Nota
En el ejemplo no se ha considerado la instruccin mquina
para realizar el producto. Recordad que utilizamos una mquina sencilla con un juego de
instrucciones extremadamente reducido.
23
Es importante que veamos que hay una serie de referencias externas no resueltas, como las direcciones de las variables a y b, y las de los procedimientos
producto y printf.
El proceso
de compilacin...
... es irreversible, puesto que
no existe ninguna posibilidad
de recuperar los ficheros
fuente originales a partir
de mdulos objeto.
El montaje es el proceso que se encarga de agrupar todos los mdulos correspondientes a un programa, as como las libreras si hace falta, para construir
el programa ejecutable. Los programas que utilizan estas funciones se denominan montadores*. De hecho, el trabajo principal del enlazador es resolver las
24
Podemos ver que a la hora de generar el fichero ejecutable surgen diferentes problemas:
Las direcciones de las tres partes que hay que enlazar empiezan por 0.
25
26
27
2.4.4. La carga
Todo este proceso se realiza adaptando las direcciones lgicas de los programas ejecutables a las direcciones fsicas de la memoria real del sistema. Por ltimo, el cargador transfiere el control a la primera instruccin
del programa y marca el proceso como preparado.
Cuando una gran cantidad de usuarios llama al mismo programa, si ste permite
su uso en modalidad compartida, el cargador observar si hay alguna copia en la
memoria del programa. En caso de que la respuesta sea afirmativa, har que el
nuevo proceso tenga todo su entorno propio excepto la parte de la memoria donde reside el cdigo que ser compartida con el resto de los procesos. Recordemos
el ejemplo de los programadores que utilizan el editor al mismo tiempo.
2.4.5. La ejecucin (depuracin)
Mientras se lleva a cabo el proceso de desarrollo de un programa o de una aplicacin informtica, suele ser muy interesante seguir la ejecucin paso a paso,
hecho que es factible gracias a los programas depuradores (debuggers).
Los programas depuradores tienen como nica misin controlar la ejecucin de un programa, motivo por el cual permiten que el programador
pueda ver una ejecucin paso a paso (instruccin a instruccin) o por intervalos de programa, visualizando de manera constante el entorno que
se va produciendo. El programador fija los puntos donde se tiene que detener la ejecucin y en cada parada puede comprobar si el entorno es
correcto e, incluso, puede modificarlo.
De este modo, se pueden detectar y corregir errores que sera difcil encontrar de
otra forma, y se obtiene un programa final ms eficiente (observad la figura 4
que encontraris a continuacin).
El hecho de partir el programa fuente en varios ficheros presenta varias ventajas, tanto para el programador como para el sistema:
Por una parte, porque una aplicacin informtica puede tener decenas de
miles de lneas de cdigo, por lo que editar un fichero de estas dimensiones
puede resultar poco prctico.
28
Por otro lado, porque cuando se trabaja sobre un programa no hay que modificar todo el cdigo al mismo tiempo, sino que durante el proceso de
creacin de la aplicacin se trabaja slo en ciertas partes del cdigo.
stas son las razones por las cuales es mejor partir el programa en mdulos que
agrupen funciones homogneas: permiten trabajar en ficheros de menores dimensiones y ms manejables.
El proceso de compilacin tambin se beneficia de estas caractersticas, puesto
que en la primera fase slo tiene que traducir los mdulos de cdigo fuente
que se hayan modificado. En la fase final o de enlace s que hay que actuar sobre todos los mdulos objeto, tanto los que se han modificado como los antiguos.
Figura 4
Proceso de interpretacin
Los interpretadores, slo por el hecho de intentar unificar todo el proceso de creacin de
un programa, ya tienen incorporado el editor y el depurador. Cada instruccin del lenguaje
29
Figura 5
30
Los lenguajes de alto nivel permiten efectuar operaciones de este estilo de manera directa, pero para que se puedan ejecutar hay que aadir fragmentos de
cdigo nuevos que las resuelvan: las libreras de sistema.
Las libreras de sistema son un conjunto de mdulos objeto organizados de manera adecuada. Estas libreras son suministradas bien por el fabricante del sistema operativo, bien por la empresa que ha desarrollado
el entorno de compilacin. Las funciones que contienen estn catalogadas y se sabe a la perfeccin cmo hay que utilizarlas: contienen las
denominaciones de los procedimientos, los parmetros necesarios y la
forma como se pasan, as como los posibles ficheros complementarios*.
No es habitual disponer del cdigo fuente de las libreras.
* Un ejemplo de ficheros
complementarios seran
los encabezamientos del C.
Los procedimientos de las libreras son muy genricos, y estn pensados para
que muchos programadores de diferentes tipos de aplicaciones puedan utilizarlos. Dentro del conjunto de las libreras, por lo general se dispone de herramientas para construir otras nuevas. El programador puede dar formato de
librera a aquellos procedimientos de carcter ms general y ms utilizados y
comprobados por un programador o un equipo de programadores, y utilizarlos as con una mayor facilidad en diferentes aplicaciones.
Podemos agrupar las libreras en las tres familias que tenemos a continuacin:
1) Libreras estndar: son las ms genricas y, por lo general, estn estandarizadas para cada lenguaje de programacin de alto nivel, por lo menos en un
conjunto de procedimientos. Las reas ms comunes son: la gestin de ficheros y de dispositivos de entrada/salida, las funciones matemticas, el manejo
de ficheros, la manipulacin de cadenas de caracteres, etc.
2) Libreras especializadas: son aquellas que, de manera opcional, se aaden
al sistema para resolver problemas ms especficos que las libreras estndar no
pueden solucionar. Un buen ejemplo son las libreras especializadas en clculos matemticos, pero tambin hay libreras de clculo matricial, estadstico,
etc. Del mismo modo, se suministran para el uso de hardware muy especfico,
como es el caso de los entornos industriales.
3) Libreras de llamadas al sistema operativo: a pesar de que el ncleo de
las llamadas al sistema no forma parte del programa ejecutable y reside en el
ncleo, es necesario aadir algo de cdigo para adaptar el formato de las llamadas, el paso de parmetros u otra informacin complementaria. Durante
una llamada al sistema operativo, se transfiere el control al sistema y se conmuta en el modo de ejecucin del mismo. Desde el lenguaje ensamblador podemos realizar llamadas directas al sistema, y no es necesario que lo hagamos
por medio de libreras.
31
Hay que tener en cuenta que desde el cdigo de las libreras estndar y las especializadas se pueden realizar llamadas al sistema operativo. Las operaciones
que solicitan recursos al sistema, que trabajan con los perifricos, que gestionan los procesos o que piden informacin del sistema o de los recursos que
gestiona son competencia del sistema operativo, ya que ste es el que sabe
cmo acceder y cmo hay que gestionarlas. Por este motivo, las rutinas de librera que llevan a cabo estas funciones acaban por efectuar una llamada al sistema. As pues, un lenguaje informtico de alto nivel slo puede hacer aquello
que le permite el sistema operativo sobre el cual se ejecuta.
32
33
34
Como hemos comentado antes, uno de los caminos para utilizar las llamadas
al sistema es darle rdenes de manera directa al intrprete de rdenes, que despus genera el conjunto de llamadas necesario. Sin embargo, el mtodo ms
interesante una vez llegados a este punto de la materia es la llamada a los servicios del sistema operativo en tiempo de ejecucin.
Aqu se presentar una serie de problemas que hay que solucionar, como pueden ser el tipo de direccin donde encontramos las rutinas de servicio. Si se trata
Desde el punto de vista del proceso, lo nico que ste tiene que hacer es ceder
el control de la ejecucin a una parte de cdigo que se ubica en el ncleo del
sistema. Es un paso similar a la llamada de cualquier subrutina de la aplicacin. La primera diferencia es que las rutinas del ncleo se ejecutan en modo
sistema y, por lo tanto, tienen una mayor capacidad para gestionar los recursos del sistema. Otra cuestin prctica que no podemos olvidar es que las rutinas de las llamadas al sistema son comunes a todos los usuarios y, como
consecuencia inmediata de este hecho, el cdigo se encuentra mucho ms depurado y resulta tambin mucho ms fiable que el que pudiesen realizar los programadores para cada aplicacin. A menudo, para operar con recursos compartidos,
no existe otra alternativa que hacerlo mediante estas llamadas.
35
Los programadores de aplicaciones invocan los servicios del sistema desde sus
programas mediante la invocacin de llamadas al sistema*. Las llamadas desde
el intrprete de rdenes se traducen y se ejecutan como una serie de llamadas al
sistema. Adems de proporcionar la funcionalidad disponible desde el intrprete de rdenes, estas llamadas ofrecen un control ms detallado de las operaciones del sistema y, adems, un acceso ms directo y flexible a los dispositivos de
entrada/salida y, en general, a los recursos del sistema, que al mismo tiempo es
independiente del tipo de hardware.
A pesar de que cada sistema operativo puede ofrecer servicios muy especficos,
podemos agruparlos de manera general en las siguientes clases:
1) Gestin de procesos. En este apartado englobamos las llamadas que hacen
referencia a la creacin y eliminacin de procesos, pero tambin podemos encontrar otros servicios como la suspensin y la reanimacin de procesos; asimismo, tenemos la posibilidad de modificar atributos de ejecucin tales como
la prioridad o el tiempo de cuota de CPU asignado. Ya veremos ms adelante
que todas estas llamadas son controladas por el ncleo del sistema operativo,
que determina en ltima instancia si la peticin que realiza el proceso se puede servir de acuerdo con sus privilegios.
2) Sealizacin entre procesos. En un sistema multitarea, el nexo natural de
unin entre las aplicaciones en ejecucin es el sistema operativo. As pues, el
vehculo apropiado para comunicar y sincronizar procesos es el ncleo del sistema operativo. Seales, semforos, regiones crticas y otras funciones sern
ejemplos concretos de esta clase de servicios.
3) Gestin de dispositivos de entrada/salida. Los servicios relacionados con
el sistema de entrada/salida son de los ms completos y tambin de los ms
utilizados. Sus funciones principales son crear, abrir y cerrar canales de entrada/salida, as como escribirlos y leerlos. Los sistemas operativos tambin proporcionan un conjunto de llamadas para conocer el estado de un canal o
cambiar sus atributos.
4) Gestin directa de los recursos del sistema. Este grupo de servicios es
muy especfico de cada sistema operativo, pero un ejemplo comn es la gestin de la memoria. Algunas de las operaciones que se efectan con la memoria del sistema son: capturar, liberar, proteger, compartir, etc.
5) Gestin del sistema de archivos. Junto con el bloque de servicios de entrada/salida, tambin es un grupo de servicios muy utilizado. La gestin del
sistema de ficheros incluye las funcionalidades ms conocidas por los usuarios
del intrprete de rdenes en relacin con la gestin de archivos y directorios:
crear y eliminar entradas, cambiar de directorio, mostrar el directorio actual,
etc. Del mismo modo, permite llevar a cabo las operaciones tpicas sobre ficheros: crear, eliminar, copiar, cambiar de nombre, etc.
36
Los diseadores del sistema operativo tienen que proporcionar una manera de
acceder a los servicios del sistema desde las aplicaciones de usuario en tiempo
de ejecucin. Las finalidades de este acceso son las siguientes:
Por otro lado, tambin es necesario establecer la manera de pasar los parmetros necesarios para atender la peticin de servicio.
37
vida de un sistema operativo a lo largo de las diferentes versiones por las cuales
pasa o a causa de las diferentes configuraciones del software.
Este mtodo no garantiza la portabilidad de las aplicaciones, las cuales se tienen
que recompilar en cada sistema en concreto donde se ejecuten. Otro problema
es que si realizamos una transferencia directa del control hacia el rea de sistema, el hardware no puede llevar a cabo un cambio de ejecucin ms controlado,
puesto que no se da cuenta del cambio de modalidad de ejecucin.
2) Llamadas al supervisor o traps. La clave para el uso de los traps es la transferencia indirecta del control para la utilizacin de una tabla de direcciones de
las rutinas de servicio. El trap realiza la vinculacin con el punto de entrada del
servicio en tiempo de ejecucin. En el momento de carga en la memoria del ncleo del sistema operativo, las entradas de la tabla se llenan con las direcciones
reales de las rutinas correspondientes a cada nmero de servicio. Si no varan estos nmeros, estaremos garantizando la portabilidad del cdigo a diferentes versiones del sistema operativo o de diferentes configuraciones hardware.
Las llamadas al supervisor son instrucciones hardware especializadas en transferir el control de la ejecucin al sistema operativo. De hecho, es una clase
concreta dentro del conjunto general de interrupciones del sistema*.
En principio, podemos resolver la funcionalidad asignando una numeracin
diferente de la interrupcin para cada tipo de llamada. Esto hace que las llamadas no tengan la necesidad de conocer las direcciones concretas de cada
rutina de servicio, pero todava se tiene que fijar el nombre de tipos de llamadas, ya que esto depende del hardware. La solucin ms abierta consiste
en utilizar un conjunto muy reducido de interrupciones y pasar un parmetro que permita el redireccionamiento de cada servicio a su lugar correspondiente (observad la figura 6). Estas llamadas admiten como mnimo un
operante, que es la identidad del servicio deseado. As, con un nico punto
* Tambin se denominan
interrupciones software o SuperVisor
Call (SVC).
38
de entrada al sistema podemos ofrecer un conjunto de servicios que se distinguen por este operante.
La siguiente figura presenta un mecanismo tpico para realizar llamadas al sistema por interrupciones de software, y muestra cmo podemos distinguir las
diferentes llamadas utilizando una tabla de servicios inicializada con las direcciones reales de las rutinas. En principio no existe ninguna diferencia entre
una interrupcin de hardware o una de software, puesto que ambas se inician
en los circuitos que pueden transferir la ejecucin del sistema al rea de sistema, o ncleo, de manera controlada. Una vez se ha detectado la situacin, el
mismo hardware transfiere el control a la rutina que se indica en la tabla de
servicios. Cuando finaliza, el control es retornado a proceso de usuario de manera similar a como lo hacen las subrutinas (observad la figura 6).
Las libreras del sistema, en particular las de las llamadas, tienen que proporcionar los detalles ms especficos que dependen de cada sistema
para conseguir una transferencia adecuada del control al rea del sistema.Tambin tienen que informar acerca de cules son los parmetros
necesarios y de la forma de pasarlos.
39
Nos encontramos con tres mecanismos bsicos por los cuales se puede transferir
el control de ejecucin desde un usuario al sistema operativo. Son los siguientes:
1) Llamadas explcitas al sistema operativo. Son puntos concretos del cdigo de usuario donde se realiza una transferencia explcita del control al sis-
Antes de detallar cules son y cmo se utilizan los diferentes servicios que proporciona el sistema operativo, haremos una pequea introduccin acerca del
ncleo de un sistema operativo dado, teniendo en cuenta que es la clave para
entender este tema.
El ncleo, que tambin recibe el nombre de kernel o core, slo es una pequea parte de la totalidad del sistema operativo, pero es el cdigo ms utilizado. Constatamos una cierta tendencia a hacer referencia al mismo como
si fuese el sistema operativo completo. Como ya hemos comentado, el ncleo reside en la memoria, en cambio otras partes del sistema se cargan en
la memoria exclusivamente cuando se necesitan.
40
Figura 7
El ncleo determina las formas existentes para invocar el cdigo del sistema
operativo con el fin de obtener un cierto servicio (ya sea de los dispositivos o
de los procesos).
La figura 7 muestra un diagrama de las posibles formas en que se puede ejecutar el ncleo.
Para garantizar esta gestin, el ncleo utiliza todas las herramientas que ofrece
el hardware, las cuales guardan una relacin muy estrecha con el sistema de circuitos involucrado en las interrupciones. Podemos decir que los mecanismos
ms significativos son los siguientes:
41
cin de si ejecuta cdigo programado por el usuario o si ejecuta cdigo del ncleo. Este comportamiento se puede observar en la siguiente figura:
Figura 8
Como podis observar en el diagrama de estados, las transiciones entre los estados pueden deberse a las siguientes causas:
a) De usuario a sistema. Hay dos posibilidades, que son por llamada al sistema* o por una interrupcin de hardware.
b) De sistema a usuario. Cuando se acaba la ejecucin de la rutina de servicio
del ncleo, se retorna el control del flujo del proceso al usuario.
c) De sistema a sistema. Este caso viene dado por la atencin de una interrupcin
mientras se est ejecutando cdigo del sistema.
2) La jerarquizacin de las interrupciones mediante una orden de prioridades. Para poder organizar de manera correcta la urgencia de los servicios que se
solicitan al ncleo, es necesario que stos se organicen en funcin de unas prioridades. La jerarquizacin de estos servicios mediante el hardware simplifica y
agiliza el funcionamiento del ncleo.
En la figura que encontramos a continuacin mostramos un ejemplo tpico de
cmo se pueden organizar las interrupciones:
Figura 9
42
Resumen
En el este mdulo didctico hemos visto el sistema operativo como una mquina virtual que esconde a los usuarios la complejidad de la gestin de los
recursos hardware y software que componen un sistema computador. Para analizar este entorno y entender quines son los usuarios de un sistema informtico, se ha descrito una sesin de trabajo. A partir de este anlisis hemos visto
que los usuarios del sistema, sus interlocutores directos, son los programas
que se ejecutan en el mismo. Hemos analizado el proceso de creacin de un
programa y el mecanismo de comunicacin que hay entre los programas y
el SO. Se ha introducido el concepto de proceso como entorno de ejecucin
de un programa y, por ltimo, hemos hecho una introduccin a la gestin de
los procesos que realiza un sistema multiprogramado.
El siguiente mapa conceptual refleja las relaciones que se establecen entre los
diferentes conceptos presentados en este mdulo:
43
Actividades
1.
a) Iniciad y finalizad una sesin de trabajo breve.
b) Identificad las fases de que consta.
c) Identificad el proceso del shell y comprobad que siempre se encuentra presente durante la sesin.
d) Utilizad la orden ps para ver los procesos activos asociados a la sesin.
2. Lanzad una ejecucin simultnea de ms de un programa utilizando el carcter &, que
har que la orden se ejecute de fondo (background). Verificad de nuevo la presencia del intrprete de rdenes (shell) como proceso activo.
3.
a) Ejecutad diferentes rdenes y determinad dnde se encuentra el cdigo.
b) Distinguid orden interna de orden externa y observad cul es el camino predefinido del
sistema. Podis comprobar tambin que la variable de camino predefinido forma parte del
entorno del usuario. Intentadlo con las rdenes ls, cd, pwd, etc. Tambin os puede ser til
ver el contenido del directorio /bin.
c) Qu puede pasar si en vuestro directorio de trabajo editis un fichero de rdenes (script)
con el nombre de una orden de sistema? Comprobadlo.
4. Analizad las utilidades que posee UNIX para editar, compilar, montar y depurar un programa.
5. Observad cules son las utilidades de que disponis para las libreras. Podis visualizarlas,
modificarlas o crear otras nuevas. Consultad el manual para conocer sus detalles.
Ejercicios de autoevaluacin
Cuestiones breves
1. En un entorno multiusuario, podis decir por qu nos tenemos que identificar para poder
iniciar una sesin de trabajo?
2.
a) Indicad cul es el mecanismo de bsqueda de las rdenes de usuario por parte del intrprete de rdenes (shell).
b) Explicad qu es el directorio de trabajo y el camino predefinido.
3. Qu aplicaciones resultan ms adecuadas para ejecutarlas fuera de la sesin de trabajo del
usuario?
4.
a) Podis explicar, de manera esquemtica, las funciones del montador?
b) Con qu otras herramientas del sistema tiene relacin?
c) Imaginad que habis escrito un nico fichero de programa fuente; por qu lo tenis que
montar?
5. Qu se necesita para convertir un programa en proceso?
6. Estableced las diferencias ms relevantes entre los modos de ejecucin de usuario y sistema.
7. Por qu creis que es importante que las llamadas a los servicios se realicen con la intervencin de interrupciones y, por tanto, del hardware?
8. Por qu no es conveniente realizar el cambio de contexto de un proceso mientras ste se
encuentra ejecutando rutinas del ncleo?
9. Relacionad el intrprete de rdenes (shell) con la modalidad interpretada de ejecucin de
programas.
44
Solucionario
Ejercicios de autoevaluacin
Cuestiones breves
1.
Para relacionar los recursos con el usuario y los terminales.
Para poder personalizar el entorno de trabajo de cada usuario.
Para tener identificado al propietario de ficheros y procesos, y saber a qu servicios o funcionalidades tiene derecho.
2.
a) Hay rdenes que el intrprete de rdenes es capaz de ejecutar de manera directa. En el caso
de las rdenes externas, el intrprete busca la orden en el directorio actual y lo carga en la
memoria para que se ejecute. Si no se encuentran en el directorio actual, las rdenes externas
por lo general estn en un directorio concreto del sistema de ficheros, y el intrprete de rdenes sigue una ruta concreta.
b) El directorio de trabajo (actual) es el lugar del sistema de ficheros desde donde se solicita
la ejecucin de las rdenes. Suele ser el directorio desde el cual el usuario demanda la ejecucin de una orden, pero desde los mismos procesos se puede cambiar el directorio de trabajo.
La ruta definida por el usuario para buscar los programas se guarda en una variable de sistema
denominada camino predefinido.
3. La primera condicin es que sean aplicaciones carentes de interactividad.
Pueden ser aplicaciones que tienen que estar siempre en funcionamiento para ofrecer servicios generales, por ejemplo, el servicio de telnet, el FTP, el HTTP, etc. Por norma general, el
propietario de estas aplicaciones es el administrador del sistema.
Otro tipo de aplicaciones adecuadas son las que precisan mucha carga de procesador, como
las simulaciones o las aplicaciones de clculo intensivo.
4.
a) El montador combina diferentes mdulos objeto y las libreras para construir el programa
ejecutable. El trabajo ms importante que lleva a cabo es resolver las referencias entre las diferentes partes, establecer la correspondencia entre las direcciones de las diferentes variables
y procedimientos.
b) El montador guarda relacin con la fase de compilacin, en la cual se producen los mdulos objeto y las libreras del sistema.
c) Siempre hay que utilizar el montador porque siempre hay que aadir los encabezamientos
para el cargador y las rutinas de las libreras (es difcil encontrar una aplicacin sin ninguna
rutina de entrada/salida de las libreras del sistema).
5. Para que un programa genere un proceso nuevo, le tenemos que dar vida: asegurarle recursos, copiarlo en la memoria y hacer que el procesador inicie su ejecucin.
6. La diferencia ms importante es que en la modalidad usuario slo se tienen privilegios para
trabajar sobre un rea restringida de la memoria, exclusivamente sobre las reas que el sistema
ha asignado, es decir, el espacio de direcciones del usuario. En cambio, en la modalidad sistema,
el espacio de direcciones es el total de la mquina, que engloba la zona baja de la memoria (el
vector de interrupciones, los descriptores de dispositivos de entrada/salida, todos los registros de
control de hardware y, en general, el conjunto de estructuras de datos para la gestin del sistema),
as como todas las reas de los procesos de los usuarios y el espacio libre de la memoria.
7. La principal razn es que hay que controlar el cambio de modo de ejecucin. Al llamar a
las rutinas de servicio del ncleo por medio del sistema de interrupciones, el usuario pierde
el control del procesador mientras se sirve la interrupcin, y en este momento se lleva a cabo
el cambio de modalidad para activar el modo sistema.
8. No es conveniente, puesto que el cdigo del ncleo del sistema puede actualizar informacin importante del sistema. Si efectuamos un cambio de contexto sin finalizar el trabajo,
otro proceso puede interferir en aquella informacin. Pensad en la peticin de captura de un
canal de entrada/salida: si hay dos procesos que lo quieren abrir, y el primero que lleva a cabo
la llamada al sistema no acaba de marcarlo como ocupado, el segundo lo podra ver libre y
podra capturarlo de nuevo.
9. El shell del sistema operativo se basa en la interpretacin de rdenes o de un fichero de
rdenes mediante la ejecucin de las rdenes escritas en texto a medida que las encuentra,
al efectuar la llamada a los ficheros ejecutables correspondientes. Los ficheros de rdenes o
scripts se ejecutan en esta modalidad; desde este punto de vista, interpreta los scripts.
45
Glosario
cargador
Herramienta que permite cargar un programa en memoria para que se pueda ejecutar; para
hacerlo debe obtener memoria, copiar el ejecutable en sta y darle control.
compilador
Herramienta que permite transformar un programa escrito en lenguaje de alto nivel en un programa escrito en un lenguaje conocido por la mquina, lo cual permitir que pueda ejecutarlo.
depurador
Herramienta que permite controlar la ejecucin de un programa paso a paso, analizando el
contenido de las variables; de esta manera nos facilita la deteccin y la correccin de errores.
excepcin
Transferencia de control al sistema provocada por la ejecucin de una instruccin de usuario
no prevista, como un fallo de pgina de memoria, una divisin por cero, etc.
intrprete de rdenes (shell)
Interfaz por medio de la cual el usuario interacciona con el sistema operativo. El intrprete
de rdenes se basa en el dilogo entre usuario y sistema: el sistema declara su disponibilidad
presentando el prompt, y el usuario solicita servicios para introducir rdenes. La mayor parte
de los intrpretes de rdenes admiten la programacin de programas pequeos o scripts.
interrupcin
Transferencia de control al ncleo del sistema operativo. Puede ser provocada de manera
asncrona por los dispositivos del sistema por medio del hardware, o la pueden realizar explcitamente los procesos de usuario que desean ejecutar cdigo del ncleo.
librera
Procedimiento que se puede llamar con facilidad desde nuestros mdulos si deseamos ampliar la funcionalidad del sistema. Este conjunto de rutinas codificadas como mdulos objeto
se organizan en ficheros que contienen el cdigo con un ndice que permite aadir este cdigo al del programador. Este paso se lleva a cabo en la fase de montaje del fichero ejecutable.
llamada al sistema
Herramienta que permite al usuario utilizar una serie de servicios que se tienen que ejecutar
dentro del ncleo del sistema.
montador
Herramienta que se encarga de agrupar los mdulos y las libreras necesarias para construir
un programa ejecutable.
proceso (tarea)
Programa al que se le asignan los recursos de sistema y que se incorpora al conjunto de programas en ejecucin. Se puede decir que es un programa en ejecucin.
programa
Descripcin detallada en forma de instrucciones que permite resolver un determinado problema. Los programas tienen que estar escritos en ficheros de texto y tienen que seguir unas
normas semnticas y sintcticas que determinen un lenguaje de programacin.
programa fuente
Fichero que contiene las instrucciones del programa escritas en un lenguaje informtico.
programa objeto
Fichero que contiene un mdulo de un programa escrito en lenguaje mquina y la informacin necesaria para ser montado con otros programas.
reubicacin
Operacin de adaptacin de las reas de trabajo que hay que efectuar cuando, al cargar en la
memoria un programa ejecutable, la imagen de la memoria se tiene que transformar desde
el espacio de direcciones lgicas hacia el espacio de direcciones fsicas.
sesin de trabajo
Conjunto de acciones que un usuario de un sistema multiusuario tiene que llevar a cabo cuando
desea trabajar con el ordenador: crear su espacio de trabajo, efectuar las tareas correspondientes
46
y finalizar el trabajo de manera explcita. Una de las principales utilidades es la de asignar recursos
a un usuario determinado tras haber realizado la identificacin correspondiente.
trap
Mecanismo de hardware que nos permite hacer llamadas explcitas a los servicios del sistema
operativo.
Bibliografa
Bibliografa bsica
Milenkovic, M. (1994). Sistemas operativos, conceptos y diseo (2. ed., trad. de A. Bautista).
Madrid: McGraw-Hill.
Silberschatz, A.; Peterson, J.; Galvin, P. (1994). Sistemas operativos, conceptos fundamentales (3. ed., trad. de E. Morales). Wilmington: Addison-Wesley Iberoamericana.
Tanembaum, A. (1993). Sistemas operativos modernos (trad. de O. Palmas). Mxico: Prentice
Hall Hispanoamericana.
Bibliografa complementaria
Deitel, H. (1993). Introduccin a los sistemas operativos (2. ed., trad. de R. Escalona). Argentina: Addison-Wesley Iberoamericana.