1. ¿Qué es una llamada al sistema?
TEXTO
Es un mecanismo usado por una aplicación que consiste en un método o una función que puede invocar un proceso para solicitar un servicio al sistema operativo.
En forma muy simple, podemos definir a el sistema operativo como el medio de comunicación o interfaz entre el hardware y los programas de usuario ya que es quien directamente se encarga de administrar los recursos disponibles en la maquina como dispositivos, memoria, etc y la comunicación entre estos.
Como los programas de usuario pueden presentar errores e incluso estar desarrollados para ocasionar daños en el sistema, se hace necesario establecer dos modos de operación diferentes para el procesador: el modo núcleo (Kernel Mode) y el modo usuario (User Mode), de esta manera el procesador está continuamente alternando entre un modo de operación núcleo y usuario.
En el modo núcleo se tienen a disposición todas las instrucciones y funcionalidades que proporciona la arquitectura del procesador, siendo el núcleo el único que opera en este modo.
El modo usuario solamente dispone de un conjunto muy reducido de las instrucciones y funcionalidades que ofrece la arquitectura y es el modo en el cual operan las aplicaciones de usuario.
El núcleo (o kernel) parte esencial del sistema operativo es quien está en contacto directo con todo el hardware de la máquina y por lo tanto es el único que puede manipularlos, como por ejemplo leer o escribir en el disco… Por lo tanto, si un programa de usuario desea realizar algún proceso sobre el hardware debe solicitarlo al núcleo.
El medio que permite la comunicación (o interfaz) entre los procesos de un programa de usuario y el núcleo es lo que se denomina peticiones o llamadas al sistema , también llamadas en inglés como system call o syscall las cuales se encuentran comúnmente implementadas como librerías de C, así, cuando un proceso se comunica con el núcleo por medio de una syscall, es el núcleo quien toma el control de la solicitud, la verifica, la ejecuta y después de realizado el proceso, vuelve a retornar el control al proceso que hizo la solicitud.
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.