Llamadas al sistema
Llamada al sistema (en inglés system call) es el mecanismo
usado por una aplicación para solicitar un servicio al sistema operativo.
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 (generalmente es el núcleo), previamente especificado. 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 bajo 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.
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 de tiempo de ejecución (runtime) de C como la glibc
de GNU o la biblioteca de C de Microsoft. Esta biblioteca maneja, entre otras
cosas, 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.
Ejemplos y herramientas
En los sistemas operativos bajo norma POSIX o similares,
algunas llamadas al sistema muy usadas son open, Read (system call), 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.
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, esta es la
única forma, pero arquitecturas CISC como x86 soportan otras técnicas
adicionales. Un ejemplo es SYSCALL/SYSRE.
Comentarios
Publicar un comentario