Sie sind auf Seite 1von 4

Metodo de interacción usado en un sistema operativo para que los programas realicen

peticiones al nucleo del sistema operativo. En inglés: system call.

Fundamentos
Los programas son un conjunto de instrucciones organizadas con un objetivo. Un
proceso es conceptualmente un programa en ejecución. En los sistemas operativos
multitarea, puede haber varios procesos ejecutándose concurrentemente. Cada proceso
puede requerir el uso de recursos de hardware, como periféricos, o espacio de memoria
principal, u otros recursos.

Dado que el hardware es compartido por múltiples procesos, el acceso a los recursos
debe ser administrado para garantizar su correcto uso y evitar problemas de seguridad
(si procesos malintencionados desean acceder a recursos asignados a otros procesos).
Por estas razones,en los sistemas duales, el acceso al ambiente físico es manejado
exclusivamente por el Sistema Operativo. La única forma de acceder al hardware es a
través de las llamadas al sistema, que están perfectamente definidas. Esto no ocurre en
los Sistemas Operativos no duales, como el MS-DOS, donde cualquier proceso podía
acceder a todos los niveles del hardware.

Los procesadores actuales pueden ejecutar las instrucciones en diferentes estados. En


los sistemas duales, normalmente son llamados modo supervisor y modo usuario. Los
procesadores proveen diferentes niveles de privilegio de forma tal que los sistemas
operativos pueden restringir las operaciones que ejecutan los programas tanto por
razones de seguridad como de estabilidad. Estas operaciones incluyen el acceso a
periféricos, habilitar o deshabilitar interrupciones, cambiar el estado del procesador, y
acceder a la memoria, entre otras.

[editar] Mecanismo
Las llamadas al sistema comúnmente usan una instrucción especial de la CPU que causa
que el procesador transfiera el control a un código privilegiado, previamente
especificado por el mismo código. Esto permite al código privilegiado especificar donde
va a ser conectado así como el estado del procesador.

Cuando una llamada al sistema es invocada, la ejecución del programa que invoca es
interrumpida y sus datos son guardados, normalmente en su PCB, para poder continuar
ejecutándose luego. El procesador entonces comienza a ejecutar las instrucciones de
código de alto nivel de privilegio, para realizar la tarea requerida. Cuando esta finaliza,
se retorna al proceso original, y continúa su ejecución. El retorno al proceso
demandante no obligatoriamente es inmediato, depende del tiempo de ejecución de la
llamada al sistema y del algoritmo de planificación de CPU.

[editar] Las bibliotecas como intermediarias


Generalmente, los sistemas operativos proveen bibliotecas que relacionan los programas
de usuario y el resto del sistema operativo, usualmente una biblioteca C como glibc o el
runtime de Microsoft C. Esta biblioteca maneja los detalles de bajo nivel para transferir
información al kernel y conmutar a modo supervisor, así como cualquier procesamiento
de datos o tareas que deba ser realizada en modo supervisor. Idealmente, esto reduce la
dependencia entre el sistema operativo y la aplicación, e incrementa su portabilidad.

[editar] Ejemplos y herramientas


En los sistemas operativos bajo norma POSIX o similares, algunas llamadas al sistema
muy usadas son open, read, write, close, wait, exec, fork, exit y kill. Los sistemas
operativos actuales tienen cientos de llamadas, por ejemplo Linux 2.x y FreeBSD tienen
más de 300.

[editar] Implementaciones típicas


La implementación de las llamadas al sistema requiere un control de transferencia que
involucra características especificas de la arquitectura del procesador. Una forma típica
de implementar es usar una interrupción por software. Linux usa esta implementación
en la arquitectura x86.

Para los procesadores con arquitectura RISC, está es la única forma, pero arquitecturas
CISC como x86 soportan otras técnicas adicionales. Un ejemplo es SYSCALL/SYSRE.

Las llamadas al sistema

Ya se ha comentado que el sistema operativo es una interfaz que oculta


las peculiaridades del hardware. Para ello ofrece una serie de servicios
que constituyen una máquina virtual más fácil de usar que el hardware
básico. Estos servicios se solicitan mediante llamadas al sistema.

La forma en que se realiza una llamada al sistema consiste en colocar


una serie de parámetros en un lugar específico (como los registros del
procesador), para después ejecutar una instrucción del lenguaje máquina
del procesador denominada trap (en castellano, trampa). La ejecución
de esta instrucción máquina hace que el hardware guarde el contador de
programa y la palabra de estado del procesador (PSW, Processor Status
Word) en un lugar seguro de la memoria, cargándose un nuevo contador
de programa y una nueva PSW. Este nuevo contador de programa
contiene una dirección de memoria donde reside una parte (un programa)
del sistema operativo, el cual se encarga de llevar a cabo el servicio
solicitado. Cuando el sistema operativo finaliza el servicio, coloca un
código de estado en un registro para indicar si hubo éxito o fracaso, y
ejecuta una instrucción return from trap, esta instrucción provoca que el
hardware restituya el contador de programa y la PSW del programa que
realizó la llamada al sistema, prosiguiéndose así su ejecución.

Normalmente los lenguajes de alto nivel tienen una (o varias) rutinas de


biblioteca por cada llamada al sistema. Dentro de estos procedimientos
se aísla el código (normalmente en ensamblador) correspondiente a la
carga de registros con parámetros, a la instrucción trap, y a obtener el
código de estado a partir de un registro. La finalidad de estos
procedimientos de biblioteca es ocultar los detalles de la llamada al
sistema, ofreciendo una interfaz de llamada al procedimiento. Como una
llamada al sistema depende del hardware (por ejemplo, del tipo de
registros del procesador), la utilización de rutinas de biblioteca hace el
código portable.

El número y tipo de llamadas al sistema varía de un sistema operativo a


otro. Existen, por lo general, llamadas al sistema para ejecutar ficheros
que contienen programas, pedir más memoria dinámica para un
programa, realizar labores de E/S (como la lectura de un carácter de un
terminal), crear un directorio, etc. Ejemplos de rutinas de biblioteca que
realizan llamadas al sistema en un entorno del sistema operativo C-
UNIX son: read, write, malloc, exec, etc.

Llamadas al Sistema

Las llamadas al sistema proveen una interfaz entre los procesos y el Sistema de
Operación. Por lo general estas llamadas se encuentran disponibles como instrucciones
en lenguaje ensamblable. En algunos sistemas podemos realizar llamadas al sistema
desde programas en lenguajes de alto nivel, en cuyo caso se asemejan a llamadas a
funciones o procedimientos

Llamadas al sistema

l A cada llamada al sistema le corresponde un procedimiento que el programa de


usuario puede llamar
l El procedimiento se encarga de iniciar la llamada al sistema (mediante un
TRAP)
l Son distintas en cada sistema
l ej: count = read (file, buffer, nbytes);

Elementos de Sistemas Operativos – Llamadas al Sistema


1. Control de procesos y tareas
�cargar, ejecutar
� fin, abortar
� crear proceso, terminar proceso
� obtener atributos, establecer atributos del proceso
� esperar tiempo
� esperar sucesos, indicar sucesos
� asignar, liberar memoria
2. Manipulación de Archivos
� crear, eliminar
� abrir, cerrar
� leer, escribir, reposicionar
� obtener atributos, establecer atributos
3. Manipulación de Dispositivos
� solicitar, liberar
� leer, escribir, reposicionar
� obtener atributos, establecer atributos
� conectar, desconectar lógicamente
4. Mantenimiento de Información
� obtener, establecer fecha y hora
� obtener, establecer datos del sistema
� obtener atributos de proceso, archivo o dispositivo
� establecer atributos de proceso, archivo o dispositivo
5. Comunicaciones
� crear, eliminar conexión
� enviar, recibir mensajes
� transferir información de estado
� conectar, desconectar dispositivos remotos
Categorías
Interfaz entre el proceso y el Sistema Operativo
Llamadas al Sistema
Disponibles como instrucciones en lenguaje
ensamblador o lenguajes de alto nivel, y se listan en
los manuales empleados en la programación del
lenguaje