La llamada
al sistema (en
inglés system call) es
el mecanismo usado por una aplicación
para solicitar un servicio al sistema
operativo
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 (Bloque de Control de Proceso del inglés Process Control
Block), 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.
Implementaciones típicas
La implementación de las
llamadas al sistema requiere un control de transferencia que involucra
características específicas 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, ésta es la única forma, pero arquitecturas CISC como
x86 soportan otras técnicas adicionales. Un ejemplo es SYSCALL/SYSRE.
Llamadas al sistema en Linux
GNU/Linux es un Sistema Operativo multitarea en el que van a
convivir un gran número de procesos. Es posible, bien por un fallo de
programación o bien por un intento malicioso, que alguno de esos procesos haga
cosas que atenten contra la estabilidad de todo el sistema. Por ello, con
vistas a proteger esa estabilidad, el núcleo o kernel del sistema funciona en
un entorno totalmente diferente al resto de programas. Se definen entonces dos
modos de ejecución totalmente separados: el modo kernel y el modo
usuario.
Cada uno de estos modos de ejecución dispone de memoria y procedimientos diferentes, por lo que un programa de usuario no podrá ser capaz de dañar al núcleo.
Las syscalls o llamadas al sistema son el mecanismo por el cual los procesos y aplicaciones de usuario acceden a los servicios del núcleo. Son la interfaz que proporciona el núcleo para realizar desde el modo usuario las cosas que son propias del modo kernel (como acceder a disco o utilizar una tarjeta de sonido). La siguiente figura explica de forma gráfica cómo funciona la syscall read().
El modo usuario necesita acceder al disco para
leer, para ello utiliza la syscall read() utilizando la interfaz de llamadas al
sistema. El núcleo atiende la petición accediendo al hardware y devolviendo el
resultado al proceso que inició la petición.
Para hacer uso de las llamadas al sistema desde el lenguaje de programación C, los sistemas operativos que trabajan con el núcleo Linux ponen a disposición del usuario varias funciones o procedimientos de librería que representan a las llamadas del sistema. Los prototipos relativos a estas funciones o procedimientos pueden encontrarse listados en el archivo de cabecera unistd.h (este se encuentra en el directorio/usr/include/asm/, aquí también pueden encontrarse los archivos unistd_32.h y unistd_64.h, archivos relativos a las arquitecturas de 32 y 64 bits respectivamente).
El sistema operativo de núcleo Linux cuenta con aproximadamente 200 funciones relacionadas con cada llamada al sistema, algunos de los cuales pueden agruparse en ciertas categorías que permiten el manejo o control de: procesos, señales, archivos, tiempo, etc.
El programador
(1): usa las librerías C para llamadas al sistema y otras librerías (2): para
implementar el código fuente de la aplicación (3): y a partir de él generar el
archivo ejecutable de dicha aplicación.
El usuario final (4): ejecuta la aplicación, (5): la cual se comunica a través de llamadas al sistema con el núcleo del sistema operativo (6): el cual toma el control y se encarga de manipular el hardware para realizar el proceso solicitado.
Cuando el proceso se ha completado, el núcleo (7): retorna el control a la aplicación.
-----------------------------------------------------------------------------------------------
El usuario final (4): ejecuta la aplicación, (5): la cual se comunica a través de llamadas al sistema con el núcleo del sistema operativo (6): el cual toma el control y se encarga de manipular el hardware para realizar el proceso solicitado.
Cuando el proceso se ha completado, el núcleo (7): retorna el control a la aplicación.
-----------------------------------------------------------------------------------------------
fuentes: - systopehttp://es.wikipedia.org/wiki/Llamada_al_sistema
No hay comentarios:
Publicar un comentario