1.5 Llamadas a servicios del sistema
Una llamada al sistema es un método o función que
puede invocar un proceso para solicitar un cierto servicio al sistema
operativo. Dado que, el acceso a ciertos recursos del sistema requieren la
ejecución de código en modo privilegiado, el sistema operativo ofrece un
conjunto de métodos o funciones que el programa puede emplear para acceder a
dichos recursos. En otras palabras, el sistema operativo actúa como
intermediario, ofreciendo una interfaz de programación (API) que el programa
puede usar en cualquier momento para solicitar recursos gestionados por el
sistema operativo.
Algunos ejemplos de llamadas al sistema son las
siguientes:
v
Time: que permite obtener
la fecha y hora del sistema.
v
Write: que se emplea para
escribir un dato en un cierto dispositivo de salida, tales como una pantalla o
un disco magnético.
v
Read: que es usada para
leer de un dispositivo de entrada, tales como un teclado o un disco magnético.
v
Open: que es usada para
obtener un descriptor de un fichero del sistema, ese fichero suele pasarse a
write.
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.
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.
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.
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.
No hay comentarios:
Publicar un comentario