0% encontró este documento útil (0 votos)
21 vistas32 páginas

Llamadas al Sistema en SO Avanzados

Este documento presenta un esquema sobre llamadas al sistema en sistemas operativos avanzados. Explica que las llamadas al sistema permiten a las aplicaciones acceder a servicios del sistema operativo de forma sencilla, evitando que los programadores tengan que lidiar directamente con la complejidad subyacente. Define conceptos clave como APIs, códigos numéricos de llamadas al sistema, y bibliotecas de soporte en tiempo de ejecución que vinculan las llamadas de la API con las rutinas del núcleo. El objetivo es proporcionar una
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
21 vistas32 páginas

Llamadas al Sistema en SO Avanzados

Este documento presenta un esquema sobre llamadas al sistema en sistemas operativos avanzados. Explica que las llamadas al sistema permiten a las aplicaciones acceder a servicios del sistema operativo de forma sencilla, evitando que los programadores tengan que lidiar directamente con la complejidad subyacente. Define conceptos clave como APIs, códigos numéricos de llamadas al sistema, y bibliotecas de soporte en tiempo de ejecución que vinculan las llamadas de la API con las rutinas del núcleo. El objetivo es proporcionar una
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

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)

También podría gustarte