Tema 4
Sistemas Operativos Avanzados
Tema 4. Llamadas al sistema
Índice
Esquema
Ideas clave
4.1. ¿Cómo estudiar este tema?
4.2. Llamadas al sistema. Conceptos
4.3. Llamadas al sistema para administración de procesos
4.4. Llamadas al sistema para administración de ficheros
y directorios
4.5. Llamadas al sistema de comunicación entre procesos
A fondo
Funciones de entrada y salida
How System Calls Work on Linux/i86
System call numbers
How Do Windows NT System Calls REALLY Work?
Agregando una llamada a sistema al kernel de Linux
Estándar POSIX
Bibliografía
Test
Esquema
Sistemas Operativos Avanzados 3
Tema 4. Esquema
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.1. ¿Cómo estudiar este tema?
Para estudiar este tema lee las Ideas clave que encontrarás a continuación.
En este tema estudiaremos el mecanismo de las llamadas al sistema de los sistemas
operativos modernos, sin centrarnos en ningún sistema operativo concreto. El
objetivo es conseguir una imagen común que hará más fácil el estudio de los temas
siguientes en los que se verán con detenimiento llamadas al sistema de Windows y
UNIX/Linux.
Sistemas Operativos Avanzados 4
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.2. Llamadas al sistema. Conceptos
Esto es necesario porque por razones, sobre todo de seguridad y eficiencia, se
reserva al sistema operativo, o a algún módulo o subsistema estrechamente
relacionado con él, la posibilidad de llevar a cabo ciertas tareas, especialmente
las de acceso a los dispositivos externos y de planificación de los recursos incluidos
los más importantes como son la memoria y el tiempo de los procesadores.
El kernel o núcleo de un sistema operativo se puede ver como un enorme conjunto
de rutinas que realizan tareas fundamentales para el funcionamiento de todo el
sistema. Normalmente dichas rutinas están escritas en lenguaje C o C++, porque es
un lenguaje que es muy eficiente y versátil. No obstante cuando se necesita tener
código aún más eficiente y cercano al funcionamiento del hardware, se acude a un
lenguaje ensamblador.
Se puede pensar en muchas tareas que las aplicaciones de usuario requieren
continuamente y que son más complejas de lo que parecen, gracias precisamente a
la existencia de las llamadas al sistema.
No hay que dar muchas vueltas para caer en la cuenta de la cantidad de pequeños
detalles que hay que cuidar para que una tarea tan frecuente como leer datos de un
fichero para mantenerlos en la memoria de un programa y que este pueda hacer uso
de ellos funcione como se espera:
▸ Hay que saber en qué dispositivo están los datos a partir de un nombre de archivo
y de una ruta por el árbol de directorios.
▸ Hay que localizar los datos concretos que se necesitan del fichero.
Sistemas Operativos Avanzados 5
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
▸ Hay que comprobar que la aplicación que quiere acceder al fichero tiene permiso
para hacerlo.
▸ El dispositivo debe recibir los comandos necesarios para que recupere los datos y
los coloque en el lugar adecuado de la memoria. A menudo no basta una sola
operación de lectura para obtener todos los datos.
▸ Quizás hay otras aplicaciones que necesitan los mismos datos y otros del
mismo fichero a la vez.
▸ Si una aplicación quiere modificar los datos y otra quiere leerlos, cómo se puede
conseguir que esto se realice sin comprometer la integridad de los datos.
▸ Si ocurre algún error en alguna de las tareas anteriores, la aplicación debería
saberlo para solucionarlo.
Si un programador tuviera que ocuparse de todo esto, cualquier pequeña aplicación
ocuparía miles de líneas de código, obligaría al programador a conocer todos los
detalles del funcionamiento del hardware, y, sobre todo, a repetir una y otra vez las
mismas operaciones.
Sistemas Operativos Avanzados 6
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
De la misma manera que en la programación estructurada el concepto de función,
procedimiento o subrutina organizó la programación para que no fuera ya de tipo
espagueti, así las llamadas al sistema proporcionaron un acceso sencillo que evita
gran parte de la complejidad que tiene explotar los recursos de un sistema
informático.
Todos los sistemas operativos modernos ofrecen a los programadores una API
(Application Programming Interface), una interfaz de programación de
aplicaciones, que indica cómo invocar correctamente a las llamadas al sistema.
Para cada llamada al sistema concreta su nombre, los parámetros de entrada, los
valores retornados y cómo se puede obtener información cuando ocurra un error en
la ejecución de una llamada.
Las dos APIs más importantes son la API POSIX que usan los sistemas Linux y
MacOs y la API Win32/Win64 de los sistemas Windows. También es importante la
API de Java para acceder a los servicios de la máquina virtual de Java.
Normalmente, las interfaces están definidas en C, pero cada vez más se definen
para otros lenguajes. Windows define su API también en C# y Visual Basic.
Existen varios niveles de llamadas al sistema que se han ido desarrollando con el
tiempo y con las versiones de los sistemas operativos. Así puede ocurrir que una
llamada en realidad no sea más que una invocación a otra llamada de nivel más bajo
o una combinación de llamadas a rutinas del kernel.
Algunas llamadas se han quedado obsoletas porque se ofrecen al programador
nuevas versiones con funcionalidad mejorada o acceso a nuevas características de
las sucesivas versiones de los sistemas operativos.
Un ejemplo claro de esto es la API Win32/Win64 de Windows que no denomina a sus
interfaces llamadas al sistema, sino funciones, porque así define un nivel extra
sobre las verdaderas llamadas al sistema del núcleo.
Sistemas Operativos Avanzados 7
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
De esta manera un programador puede escribir su aplicación usando una API que
sabe que puede compilar y ejecutar en cualquier sistema que admita la misma API,
aunque desafortunadamente no se puede confiar completamente de que después
cada versión del sistema operativa no incluya pequeños cambios que puedan impedir
o modificar el correcto funcionamiento de su programa.
Para implementar correctamente las llamadas al sistema los compiladores
proporcionan una biblioteca con funciones que realizan el enlace entre las llamadas
al sistema y las rutinas del núcleo que les prestan servicio. Se suelen denominar
sistema de soporte en tiempo de ejecución.
Lo más frecuente es que cada llamada al sistema tenga asociado un código
numérico, que sirve como índice a una tabla de punteros o referencias a las rutinas
del kernel. Por lo tanto, el nombre de cada llamada de la API se traduce por el
compilador por un código que en tiempo de ejecución se utiliza para invocar a la
rutina correspondiente que sirve como punto de entrada al servicio que se solicita.
Cuando se termina la ejecución de la llamada, el sistema devuelve un valor al
programa como cualquier otra función. En este valor puede ir implícita una
notificación de que el servicio requerido no ha sido realizado en su totalidad porque
ha ocurrido algún tipo de error.
El objetivo de este sistema es que cuando el programador incluya una llamada en
su aplicación no tiene por qué saber exactamente cómo el sistema va a realizar la
llamada durante la ejecución de la misma. Lo que sí que tiene que tener cuidado es
con ajustarse a la especificación de la API que use y el efecto final de la ejecución de
la llamada para su aplicación.
La API busca ocultar al programador la mayor parte de los detalles de
Sistemas Operativos Avanzados 8
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
funcionamiento del sistema operativo, sin embargo, eso puede hacer que el
programador se imagine por su parte lo que «debería» hacer el sistema operativo sin
que esto corresponda a la realidad, lo que le va a llevar a cometer errores que son
difíciles de descubrir porque no son errores de programación ni del sistema
operativo. Son errores de diseño, por eso merece mucho la pena no solamente
conocer el API, si no también dedicar tiempo a conocer lo que sea posible del
funcionamiento interno de los sistemas operativos.
Las llamadas al sistema se invocan de formas diferentes dependiendo del
sistema operativo y de la información que se precise además del nombre, es decir, el
código de la llamada que indica su identidad. Por ejemplo, si se desea escribir una
variable en un fichero de un disco, habrá que especificar el dispositivo, la identidad
del fichero, el lugar en los datos del fichero dónde se va a guardar la variable, el
tamaño de la variable y el lugar de la memoria en que la misma se encuentra.
Asimismo el programador querrá saber si ha podido guardarse correctamente el valor
de la variable donde pueda ir a buscarlo más adelante.
Existen varias formas para pasar parámetros al sistema operativo junto con las
llamadas al sistema. La forma más sencilla consiste en usar los registros del
sistema. El problema viene cuando se necesita pasar más parámetros que registros
hay disponibles a la hora de realizar la llamada. Para resolver este problema se
pueden tomar todos los parámetros y compactarlos en bloque en la memoria y
después se le pasa al sistema operativo la dirección donde se encuentra dicho
bloque por medio de un registro. El bloque puede ser una estructura de C o una
tabla.
Otra forma de pasar los parámetros para que los recoja la rutina correspondiente
dentro del sistema operativo es que el sistema de tiempo de ejecución coloque o
inserte los parámetros en la pila, de forma similar a como se pasan los parámetros
de las funciones creadas por usuario. Cuando se complete la invocación el sistema
operativo se encarga de extraer de la pila los parámetros. Este método tiene la
Sistemas Operativos Avanzados 9
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
ventaja de que no pone límites al número de los parámetros que se necesita
pasar o al espacio que ocupan.
En los siguientes apartados se van a recorrer las posibilidades de las llamadas al
sistema que ofrecen los sistemas operativos modernos. Las clasificaremos en cuatro
grupos:
▸ Llamadas al sistema de control de procesos:
• Terminar y abortar el proceso en ejecución.
• Cargar y ejecutar otro código.
• Crear procesos y terminarlos.
• Obtener y definir atributos de un proceso.
• Pausar y continuar procesos.
• Definir temporizadores.
• Definir sucesos y sincronizarse con ellos.
• Asignar y liberar memoria.
• Obtener y definir la hora y la fecha.
• Conocer y modificar datos del sistema.
• Cambiar atributos de los procesos, ficheros y dispositivos.
▸ Llamadas al sistema de administración de ficheros:
• Crear ficheros.
• Eliminar ficheros, borrar su contenido.
Sistemas Operativos Avanzados 10
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
• Abrir y cerrar ficheros.
• Leer, escribir y moverse por los datos del fichero.
• Crear, abrir, leer y eliminar directorios.
• Conectar y liberar dispositivos externos.
• Leer, escribir y moverse por los datos almacenados en un dispositivo.
• Acceder y modificar los atributos de un dispositivo externo.
• Definir y usar ficheros en memoria.
▸ Llamadas al sistema de comunicación:
• Crear, abrir, usar y cerrar tuberías.
• Crear, abrir, usar y cerrar buzones.
• Crear, abrir, usar y cerrar semáforos y mutex.
• Crear, abrir, usar y cerrar memoria compartida.
• Enviar y recibir mensajes.
• Sincronizar procesos con objetos.
• Crear, configurar y eliminar terminales de comunicación remota.
• Enviar y recibir datos por la red.
• Conectar y desconectar dispositivos remotos.
▸ Llamadas al sistema sobre seguridad:
• Acceder y modificar los atributos de seguridad de un usuario.
Sistemas Operativos Avanzados 11
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
• Acceder y modificar los atributos de seguridad de un proceso.
• Acceder y modificar los atributos de seguridad de un fichero o directorio.
• Acceder y modificar los atributos de seguridad de un objeto del sistema.
Sistemas Operativos Avanzados 12
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.3. Llamadas al sistema para administración de
procesos
Un proceso en ejecución puede necesitar detener su ejecución de forma normal y
tomándose tiempo para dejar todos los recursos del sistema que ha utilizado en
orden o interrumpir inmediatamente la ejecución de las instrucciones de su código,
dejando al sistema que se ocupe de poner todo en orden si es posible después.
En algunos sistemas cuando se aborta un proceso, el sistema operativo recoge
todo el contenido de la memoria y lo guarda, lo vuelca, en un fichero.
Se supone que eso puede ayudar al programador a conocer mejor y, por tanto,
prevenir la naturaleza del error que produjo el abrupto fin de su la ejecución de su
programa. Lo habitual es que no merezca la pena dedicar tiempo a analizar el
volcado de la memoria. Se puede utilizar un programa depurador para analizar el
contenido del fichero de volcado, que por razones históricas se sigue denominado
core.
En un sistema interactivo, sea como sea la forma en la que un proceso ha
terminado, el sistema operativo transfiere la ejecución al intérprete de comandos
para que siga con la ejecución del siguiente proceso. O si el proceso está dentro de
un grupo de trabajo, normalmente se dará por terminado todo el procesamiento
actual y se dirigirá al siguiente trabajo del lote. En los sistemas con interfaz gráfica
se dibujará una ventana en la pantalla informando al usuario de que se ha
producido un error y se le proporcionarán los medios adecuados (por ejemplo
botones) para que decida qué hacer a continuación.
Sistemas Operativos Avanzados 13
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Hay sistemas donde se permite definir varios niveles de error para que el sistema
operativo pueda saber qué es lo que tiene que hacer después de que un proceso ha
concluido anormalmente su ejecución.
Aparte del intérprete de comandos, un proceso puede querer crear otro u otros
procesos que ejecuten el mismo código o un programa completamente distinto.
Asimismo, un proceso puede necesitar cambiar de código, cargando en memoria
otras instrucciones diferentes. Lo que ocurra después depende de cómo funcione la
ejecución de procesos en el sistema concreto. Puede que el control de ejecución
vuelva al programa anterior si este todavía existe. De hecho estas llamadas al
sistema son las que continuamente están invocando los intérpretes de comandos
cuando se pulsa dos veces el ratón sobre el icono de una aplicación, o se introduce
un nuevo comando en la línea de órdenes o se pasa al siguiente trabajo del lote.
Para que el control regrese al programa que ha creado el que acaba de terminar, es
necesario que exista un mecanismo que pueda guardar toda la imagen de memoria
del proceso y la pueda volver a cargar cuando la necesite. Es como cuando un
fragmento de código invoca a una función o a una biblioteca, solamente que en este
caso es un programa que llama a otro.
Puede ocurrir que los dos programas, el creador y el creado, sigan ejecutándose en
paralelo más o menos independientemente. Estamos en el escenario usual de la
multiprogramación: varios procesos se ejecutan aparentemente de forma
simultánea. Un proceso que crea otro usualmente quiere también controlarlo. Por un
lado desea poder determinar y restablecer atributos del proceso como es su
prioridad, su propietario, el grupo al que pertenece, los recursos que puede utilizar, el
tiempo máximo que puede ser ejecutado, etc. Por supuesto, también tiene que existir
una llamada que permita detener el proceso creado permanente o temporalmente.
Otras llamadas útiles son las que pueden permitir que los procesos sincronicen
su ejecución unos con otros. El caso más simple es el de un proceso que quiere
Sistemas Operativos Avanzados 14
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
saber cuándo otro termina o por qué causa ha terminado. Son llamadas que hacen
que un proceso espere a otro y que suelen permitir determinar un tiempo máximo de
espera para no bloquear indefinidamente la ejecución del proceso. Si un proceso ha
creado directamente o indirectamente varios procesos, será muy útil poder esperar a
uno o a un grupo determinado de los mismos.
De estas llamadas de espera de procesos hay un paso a disponer otras llamadas
que esperen a que ocurran otras circunstancias o sucesos (mal traducidos por
eventos). Solamente hace falta que el núcleo sea capaz de llevar la cuenta de ciertos
estados asociados a objetos más allá de los procesos, como por ejemplo, ficheros,
bloqueos, semáforos, secciones críticas, etc.
Existen también llamadas para depurar programas, para volcar la imagen en
memoria del proceso y para producir una traza de las instrucciones que se van
ejecutando. Algunos microprocesadores permiten elevar excepciones tras cada
instrucción para realizar la traza.
Otros permiten que el reloj del sistema genere interrupciones con tal frecuencia que
se pueda obtener de modo fiable el tiempo que tarda en ejecutarse cada instrucción
y cualquier parte del programa. Utilizando las llamadas al sistema adecuadas se
pueden obtener estadísticas muy útiles de la eficiencia del proceso.
Sistemas Operativos Avanzados 15
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.4. Llamadas al sistema para administración de
ficheros y directorios
Como se puede entender fácilmente, las primeras llamadas que se usan son las
q u e crean y eliminan un fichero. Las dos necesitan que se les proporcione el
nombre del fichero y el directorio donde está situado. En el momento de la creación
se pueden establecer alguno de sus atributos, aunque más tarde pueden ser
modificados. Si no se indica otra cosa, un fichero se crea con un conjunto de
atributos por defecto.
Una vez creado un fichero en un dispositivo de almacenamiento, el sistema necesita
mantener en memoria una cierta cantidad de información para que las operaciones
que se realicen correctamente. Sobre todo en los sistemas con multiprogramación
en los que en un momento dado varios procesos del mismo o de diferentes usuarios
requieran realizar operaciones de consulta y modificación sobre los datos del fichero.
Una vez que el fichero ya no es utilizado por un proceso, debe notificarlo al sistema
operativo para que libere el espacio de memoria que ocupan sus datos. Esto se hace
por medio de una llamada que cierra el fichero. Aunque las estructuras asociadas
con un fichero no se liberan hasta que ningún proceso activo esté queriendo acceder
al fichero.
L a s llamadas al sistema de lectura y escritura de un archivo tienen que ser
simples para que se puedan utilizar para cualquier tipo de dispositivo. Lo más
sencillo es que las operaciones de lectura y escritura sean secuenciales. Es decir,
que sucesivas operaciones van accediendo a segmentos contiguos del fichero. En
este caso, se necesitan otras llamadas que manejen algún tipo de puntero al fichero,
Sistemas Operativos Avanzados 16
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
de forma que puedan modificarlo y así hacer que las operaciones de lectura y
escritura puedan realizarse para cualquier posición del fichero donde se encuentren
los datos que se necesiten.
Si el sistema organiza los ficheros en uno o varios árboles de directorios y
subdirectorios, se requieren llamadas parecidas a las anteriores sobre los directorios,
sean cuales sean los detalles de implementación de los directorios.
Necesitamos también llamadas que permitan consultar y modificar los atributos
de ficheros y directorios. Dichos atributos pueden ser de muchos tipos: el nombre
del fichero, el tipo del fichero, la lista de los usuarios que pueden acceder, los que
puedan leer, escribir, ejecutarlo o eliminarlo.
Algunos sistemas proporcionan funciones de más alto nivel, como por ejemplo copiar
o mover ficheros o directorios, que no son más que pequeños programas que a su
vez invocan a las llamadas al sistema más básicas o simples.
Los datos que las aplicaciones precisan están organizados en ficheros, que a su vez
se organizan en directorios y subdirectorios, todos ellos almacenados físicamente
en algún dispositivo. Aunque no sea tan común las aplicaciones necesitan disponer
de llamadas al sistema que permitan acceder a los dispositivos directamente, es
decir, a sus bloques de datos para leerlos o modificarlos sin pasar por los ficheros y
directorios.
Por lo tanto, tendrá que ofrecerse un conjunto de llamadas que permitan abrir un
dispositivo y cerrarlo. Antes de eso cada dispositivo debe tener algún tipo de nombre
que permita al programa referirse al mismo. En algunos sistemas primero hay que
solicitar el uso del dispositivo y cuando se termine de usar, no hay que olvidar
liberarlo.
Sistemas Operativos Avanzados 17
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
Una vez que el sistema concede acceso al dispositivo, se podrán utilizar las llamadas
que permitan posicionarnos en un byte concreto del dispositivo y después leerlo o
escribir los datos que deseemos sobre el mismo.
En los sistemas multiprogramación y multiusuario no es infrecuente en el escenario
en que varios procesos de un mismo propietario o de usuarios diferentes deseen
acceder al mismo tiempo al mismo fichero al mismo directorio e incluso a los mismos
datos.
Cuando varios procesos acceden a los mismos datos pero solamente para leerlos, es
decir, consultarlos sin pretender modificarlos, el sistema puede permitírselo sin que
haya más complicación que ordenar las operaciones en el tiempo. Ahora bien, si
algún proceso requiere la modificación de los datos, el sistema tiene que ofrecer
mecanismos que permitan que los procesos puedan tener garantizada la integridad
de los datos que usan.
Uno de los mecanismos más básicos consiste en ofrecer llamadas al sistema que
bloqueen el acceso a un fichero o a una porción del mismo. Los bloqueos
pueden impedir el acceso a los procesos que quieran escribir sobre la parte
bloqueada o también a los que solamente deseen consultar su contenido. Al mismo
tiempo el sistema tiene que ofrecer llamadas que permitan a un proceso interrogar al
sistema sobre si un fichero está bloqueado en cierto instante y después decidir si
espera a que sea liberado el bloqueo, o prefiere seguir y probar más tarde, o quiere
indicarle al kernel que le avise cuando los datos estén disponibles.
Hemos mencionado muchas llamadas parecidas que pueden llamarse algo así como
leerfichero, leerdirectorio, leerdisco, leercdrom, etc. El sistema, sin embargo, puede
Sistemas Operativos Avanzados 18
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
diseñarse de tal manera que con una sola llamada al sistema versátil o simple
puedan leerse datos de cualquier dispositivo. Eso puede hacer más complejo el
diseño del sistema operativo, pero más simple la vida del programador.
Sistemas Operativos Avanzados 19
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
4.5. Llamadas al sistema de comunicación entre
procesos
En un sistema multiproceso y multiprogramación existe la posibilidad de que se creen
varios procesos para realizar una tarea común explotando más eficientemente los
recursos del sistema. Sin embargo, los sistemas operativos están diseñados para
que los espacios de memoria de cada proceso sean completamente estancos, para
que ningún proceso por error o con malas intenciones pueda interferir en los datos o
el código de otro proceso. Con el tiempo se han probado diversos esquemas para
permitir que los procesos se sincronicen entre sí y/o se puedan pasar información en
forma de datos o variables de diversos tipos.
Los esquemas de comunicación entre procesos que han resultado útiles y fiables
son variaciones de paso de mensajes, o de memoria compartida, o de una mezcla de
ambos. En el esquema de paso de mensajes, los procesos se pasan mensajes que
contienen la información que desean compartir o bien utilizan la transferencia del
mensaje como objeto de sincronización.
Los mensajes pueden pasar de un proceso a otro directamente o a través de un
intermediario que hace las funciones de buzón que recoge mensajes de diferentes
orígenes y que los distribuye a sus destinos, o espera a que los destinatarios los
soliciten. Antes de que pueda realizarse cualquier tipo de comunicación, se debe
abrir un canal o un terminal de conexión. Es un proceso análogo a la apertura de
un fichero. El sistema reserva memoria para mantener la conexión funcionando
correctamente hasta que sea cerrado el canal.
De antemano debe conocerse el nombre del destinatario, si es un proceso que se
está ejecutando en el mismo sistema, pero si está ejecutándose en otro sistema hay
que saber la dirección de su máquina de forma suficiente para que el mensaje pueda
llegar íntegramente a su destino. En los modelos de red habituales cada nodo de la
Sistemas Operativos Avanzados 20
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
red tiene un nombre público asociado por el cual se le puede localizar y un
identificador de red como son las direcciones IP para los protocolos de Internet. Los
procesos también pueden localizarse dentro de un sistema porque tienen
identificadores únicos.
Por lo tanto, tienen que existir llamadas al sistema que devuelvan el nombre y la
dirección de la máquina actual y de la máquina remota, así como otras llamadas
que recuperen la identificación remota de un proceso. Todos estos
identificadores son los que se pasarán a las llamadas del tipo abrirconexion y
cerrarconexion , cuyo formato concreto dependerá de los protocolos subyacentes,
aunque se intenta que dicha dependencia sea mínima. De hecho el objetivo es que el
paso de mensajes local o remoto pueda manejarlo el programador como la escritura
o lectura en un dispositivo de comunicación por flujo de bytes.
Una vez que la conexión, el canal o el terminal están abiertos, es decir, listos para el
paso de mensajes, el otro extremo debe ser contactado por el sistema /o por la red
para que dé su asentimiento al establecimiento de la conexión. La recepción de la
aquiescencia se realizará por medio de una llamada semejante a aceptarconexion
que da por establecido el canal en ambos sentidos.
En algunos modelos las conexiones se realizan con procesos que permanecen
dormidos mientras no llegue una petición de conexión por medio de una llamada
esperarconexion .
El intercambio de mensajes entre ambos extremos se realiza con llamadas al
sistema leermensaje y enviarmensaje , hasta que se cierre la conexión con cerrarconexion
Sistemas Operativos Avanzados 21
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
Ideas clave
. En el esquema de comunicación y sincronización entre procesos por medio de
memoria compartida, hay que solicitar al kernel que reserve un segmento de
memoria para que varios procesos puedan acceder al mismo.
Usualmente el kernel no incluye un mecanismo que ordene el acceso a una región
de memoria porque se supone que si más de un proceso accede a la misma página
es una condición de error. Por lo tanto, son los procesos los que tienen que utilizar
algún otro mecanismo de sincronización para evitar incoherencias cuando van a
escribir y leer de las mismas direcciones de memoria.
Así que, las llamadas al sistema que se precisan son crearmemoriacompartida y
conectarmemoriacompartida para crear y obtener acceso a regiones de memoria
asignada por el sistema para poder ser compartidas por otros procesos.
Normalmente, un proceso es el encargado de solicitar la creación de una memoria
compartida y es el mismo el único que le indicará al sistema que ya no se necesita la
región de memoria.
La memoria compartida es para los procesos como cualquier otra región de su
espacio de direcciones. El kernel no controla el formato de los datos que se escriben
o leen, por lo cual los procesos pueden intercambiarse los mensajes que deseen
simplemente escribiendo o leyendo en las direcciones de memoria asignadas o
conectadas. Este método de intercambio de información es el más rápido y
fiable para grandes cantidades de datos, frente al paso de mensajes. Sin
embargo, implementar un mecanismo parecido a la memoria compartida ente
procesos remotos que no comparten el mismo kernel es evidentemente muy
problemático.
Sistemas Operativos Avanzados 22
Tema 4. Ideas clave
© Universidad Internacional de La Rioja (UNIR)
A fondo
Funciones de entrada y salida
Cabanes, N. (2010). Fundamentos de programación en C, pp. 94-108. Autoedición.
http://www.etnassoft.com/biblioteca/fundamentos-de-programacion-en-c/
Te vendrá muy bien repasar las funciones de entrada y salida de la biblioteca
estándar de C, ahora que sabes que por debajo hay llamadas al sistema en cada
sistema operativo. También te serán útiles al compararlas con las llamadas al
sistema que verás en los últimos temas.
Sistemas Operativos Avanzados 23
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
How System Calls Work on Linux/i86
http://www.tldp.org/LDP/khg/HyperNews/get/syscall/syscall86.html
La mejor manera de entender el funcionamiento de las llamadas al sistema es
conocer cómo se implementa paso a paso el mecanismo por el cual se ejecuta
código del kernel en beneficio de las aplicaciones de usuario. Lo encontrarás todo
bien explicado en esta página.
Sistemas Operativos Avanzados 24
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
System call numbers
http://www.win.tue.nl/~aeb/linux/lk/lk-4.html
Como se ha comentado en las Ideas clave cada llamada al sistema se identifica por
medio de un código ante el núcleo del sistema operativo. En esta página puedes ver
todos los códigos y lo que significan.
Sistemas Operativos Avanzados 25
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
How Do Windows NT System Calls REALLY Work?
http://www.codeguru.com/cpp/w-
p/system/devicedriverdevelopment/article.php/c8035/How-Do-Windows-NT-System-
Calls-REALLY-Work.htm
El artículo anterior se refería a Linux, que siempre está mejor documentado. En este
otro artículo puedes ver y comparar cómo se implementan las llamadas al sistema en
los sistemas Windows.
Sistemas Operativos Avanzados 26
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Agregando una llamada a sistema al kernel de
Linux
En este vídeo puedes ver cómo las llamadas se integran en el kernel. Aunque no es
una habilidad que tienes que adquirir, ver el vídeo te dará una visión más cercana al
funcionamiento de las llamadas al sistema.
Accede al vídeo:
https://www.youtube.com/embed/fDOHYQ4QtBM
Sistemas Operativos Avanzados 27
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Estándar POSIX
FIPS (1988). POSIX: portable operating system interface for computer environments.
National Institute of Standards and Technology (U.S.), 151.
Disponible en la biblioteca virtual.
En la biblioteca virtual puedes consultar este artículo que te dará una idea de cómo el
estándar POSIX lleva décadas buscando simplificar y homogeneizar las llamadas al
sistema de todos los sistemas operativos.
Sistemas Operativos Avanzados 28
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
A fondo
Bibliografía
Mandl, P. (2013). Grundkurs Bertriebssysteme. Wiesbaden: Springer Vieweg.
Silberschatz, A. & Galvin, P. B. (2008). Operating System Concepts. John Wiley &
Sons.
Tanenbaum, A. S. & Woodhull, A. S. (2000). Sistemas Operativos: Diseño e
Implementación. México: Prentice Hall.
Sistemas Operativos Avanzados 29
Tema 4. A fondo
© Universidad Internacional de La Rioja (UNIR)
Test
1. Asocia cada nombre de llamada al sistema con la funcionalidad que piensas que
ofrece:
2. Asocia cada nombre de llamada al sistema con la funcionalidad que piensas que
ofrece:
3. Asocia cada nombre de llamada al sistema con la funcionalidad que piensas que
ofrece:
Sistemas Operativos Avanzados 30
Tema 4. Test
© Universidad Internacional de La Rioja (UNIR)
Test
4. ¿Cuál es la diferencia principal entre las llamadas al sistema y las funciones de
un lenguaje como C?
A. El número máximo de parámetros.
B. El valor que devuelve al código llamante.
C. El código de las llamadas al sistema está en el kernel.
D. Las funciones tardan más en ejecutarse.
5. Una tubería es un mecanismo que permite:
A. Comunicar dos procesos.
B. Escribir más rápido en un disco.
C. Conectar dos regiones de la memoria.
D. Crear procesos idénticos.
E. Compartir señales de disco.
6. Un buzón se utiliza para:
A. Depositar mensajes de error para los procesos de usuario.
B. Listar los procesos activos en el sistema.
C. Distribuir mensajes entre procesos.
D. Crear procesos idénticos.
E. Compartir señales de dispositivos externos.
7. Cuál de las siguientes es una ventaja de la memoria compartida:
A. Sirve tanto para comunicaciones remotas como locales.
B. Es más rápida.
C. Permite comunicarse a procesos con diferentes protocolos.
D. Está directamente sincronizada por el kernel.
E. Es más segura.
Sistemas Operativos Avanzados 31
Tema 4. Test
© Universidad Internacional de La Rioja (UNIR)
Test
8. Cuál de las siguientes en una desventaja de la memoria compartida:
A. Solamente permite la comunicación entre dos procesos.
B. No sirve para comunicar procesos no emparentados.
C. No sirve para compartir arrays de reales.
D. No incluye sincronización.
E. Deja desprotegida a la memoria de los procesos.
9. El siguiente mecanismo no se puede utilizar para pasar parámetros en las
llamadas al sistema:
A. Los parámetros se dejan en la pila.
B. Los parámetros se pasan por valor.
C. Los parámetros se pasan por referencia.
D. Los parámetros se dejan en un disco externo.
E. Los parámetros se pasan en un solo paquete.
10. Las llamadas al sistema no sirven para:
A. Facilitar el acceso a los dispositivos de entrada/salida.
B. Obtener servicios del sistema operativo.
C. Evitar errores de algoritmos incorrectos.
D. Obtener información del sistema.
E. Obtener información sobre otros procesos.
Sistemas Operativos Avanzados 32
Tema 4. Test
© Universidad Internacional de La Rioja (UNIR)