En el mundo actual, los sistemas ope­ra­ti­vos deben ofrecer a los usuarios no solo el mayor confort posible, sino también la máxima es­ta­bi­li­dad y seguridad. Para esto, los de­sa­rro­lla­do­res de sistemas como Linux o Windows se ocupan, entre otras cosas, de minimizar el riesgo de posibles co­m­pli­ca­cio­nes en el sistema causados por una ne­gli­ge­n­cia personal in­vo­lu­n­ta­ria o por ataques dirigidos desde el exterior. Una de las medidas más im­po­r­ta­n­tes tomadas para este propósito es la se­pa­ra­ción estricta del núcleo del sistema operativo y los programas de apli­ca­ción o procesos de usuario. Esto quiere decir que los programas y procesos que no pe­r­te­ne­cen al sistema no tienen acceso directo a la CPU y a la memoria, sino que dependen de las llamadas al sistema.

¿Qué hay exac­ta­me­n­te detrás de las llamadas al sistema, y qué tipos hay?

¿Qué es una llamada al sistema (syscall)?

Una llamada al sistema o system call es un método utilizado por los programas de apli­ca­ción para co­mu­ni­car­se con el núcleo del sistema. En los sistemas ope­ra­ti­vos modernos, esto es necesario cuando una apli­ca­ción o proceso de usuario necesita tra­n­s­mi­tir a o leer in­fo­r­ma­ción del hardware, de otros procesos o del propio núcleo. De este modo, la llamada es el punto de enlace entre el modo de usuario y el modo de núcleo, los dos modos cruciales de pri­vi­le­gio y seguridad para el pro­ce­sa­mie­n­to de las in­s­tru­c­cio­nes de la CPU en los sistemas in­fo­r­má­ti­cos.

Antes de que la llamada al sistema termine de pro­ce­sar­se y se tra­n­s­mi­tan o reciban los datos co­rre­s­po­n­die­n­tes, el núcleo del sistema toma el control del programa o proceso. La ejecución se in­te­rru­m­pe durante este período. Una vez realizada la acción so­li­ci­ta­da por una llamada al sistema, el núcleo renuncia al control y el código continúa desde el punto en el que se inició pre­via­me­n­te la llamada al sistema.

Nota

La mayoría de los sistemas ope­ra­ti­vos modernos proveen ciertas llamadas al sistema en forma de funciones de bi­blio­te­ca que se pueden realizar a través de una interfaz de pro­gra­ma­ción, que también está incluida. Gracias a ello, la tarea de los de­sa­rro­lla­do­res de software se facilita eno­r­me­me­n­te, ya que no se requiere un co­no­ci­mie­n­to más preciso del fu­n­cio­na­mie­n­to interno del re­s­pe­c­ti­vo software de sistema.

¿Para qué se necesitan las system calls?

Las system calls están es­tre­cha­me­n­te ligadas al modelo moderno de sistema operativo con modo usuario y modo núcleo, que se introdujo en respuesta al creciente número de procesos que se ejecutan si­mu­l­tá­nea­me­n­te en la memoria principal (RAM) de los or­de­na­do­res. De este modo, cada proceso in­di­vi­dual tiene sus propios datos con derechos de acceso es­pe­cia­les y, solo si se di­s­tri­bu­yen los recursos co­rre­c­ta­me­n­te, el sistema y los programas pueden eje­cu­tar­se según lo esperado.

El modo núcleo de mayor pri­vi­le­gio es aquí la instancia de control decisiva, porque, como me­n­cio­na­mos, en este no solo se ejecutan todos los servicios y procesos del sistema en sí, sino también las acciones críticas del sistema de los programas de apli­ca­ción que en el modo usuario están blo­quea­das. Para esto, es necesario que el programa realice una llamada al sistema, que en la mayoría de los casos es si­m­ple­me­n­te una cuestión de acceso a la potencia de cálculo (CPU) o a las es­tru­c­tu­ras de memoria (memoria de trabajo y espacio de disco duro). Por ejemplo, si una apli­ca­ción requiere más potencia de cálculo o espacio de al­ma­ce­na­mie­n­to, o si se solicita un archivo no es­pe­cí­fi­co de la apli­ca­ción (abrir, leer, editar, etc.), es necesario realizar una system call.

En resumen

Se puede decir que una llamada al sistema es necesaria siempre que un proceso que se ejecuta en modo usuario intente ejecutar una función que solo sea eje­cu­ta­ble en modo núcleo.

¿Qué tipos de llamadas al sistema hay?

En principio, como se dijo arriba, todas las llamadas al sistema se pueden utilizar como unidades de control para la co­mu­ni­ca­ción entre los procesos de apli­ca­ción y el sistema operativo o el hardware. Además, las llamadas al sistema es­ta­ble­ci­das también se pueden cla­si­fi­car en di­fe­re­n­tes ca­te­go­rías, por lo que se han es­ta­ble­ci­do en pa­r­ti­cu­lar estos cinco tipos:

  • Control de procesos: todos los procesos de un sistema in­fo­r­má­ti­co deben co­n­tro­lar­se para que en cualquier momento se puedan detener u otros procesos los puedan dirigir. Para esto, las llamadas al sistema de esta categoría su­pe­r­vi­san, por ejemplo, el inicio o la ejecución o la detención/te­r­mi­na­ción de procesos.
  • Gestión de archivos: los programas de apli­ca­ción requieren este tipo de llamadas al sistema para acceder a las ope­ra­cio­nes típicas con archivos. Estos métodos de ma­ni­pu­la­ción de archivos incluyen la creación, eli­mi­na­ción, apertura, cierre, escritura y lectura (create, delete, open, close, write y read).
  • Gestión de di­s­po­si­ti­vos: la categoría “Gestión de di­s­po­si­ti­vos” incluye todas las llamadas al sistema que sirven para solicitar o ad­mi­ni­s­trar los recursos de hardware ne­ce­sa­rios, como la potencia de co­mpu­tación o el espacio de al­ma­ce­na­mie­n­to.
  • Gestión de la in­fo­r­ma­ción: los procesos tienen mucha in­fo­r­ma­ción asociada, y la pu­n­tua­li­dad y la in­te­gri­dad son muy im­po­r­ta­n­tes. Para in­te­r­ca­m­biar o solicitar in­fo­r­ma­ción, los programas de apli­ca­ción utilizan llamadas al sistema para la gestión o el ma­n­te­ni­mie­n­to de la in­fo­r­ma­ción.
  • Co­mu­ni­ca­ción entre procesos: solo se puede ga­ra­n­ti­zar una in­ter­ac­ción fluida entre el sistema operativo y los distintos programas de apli­ca­ción si los procesos in­di­vi­dua­les están coor­di­na­dos. Con este fin, es in­di­s­pe­n­sa­ble la co­mu­ni­ca­ción a través de las co­rre­s­po­n­die­n­tes llamadas al sistema.

Windows y Linux: visión general de las llamadas al sistema

La medida en que los tipos de llamadas al sistema enu­me­ra­dos se pueden im­ple­me­n­tar o realizar depende pri­n­ci­pa­l­me­n­te del hardware y de la ar­qui­te­c­tu­ra del sistema uti­li­za­dos, pero también del sistema operativo. En Linux, por ejemplo, las llamadas al sistema se almacenan di­re­c­ta­me­n­te en el núcleo de Linux en la “Tabla de llamadas al sistema”. Cada entrada de esta tabla tiene asignados un número único y una función es­pe­cí­fi­ca que se ejecutará en el modo núcleo. Para ejecutar cualquier llamada al sistema Linux, se carga el número en la memoria de la CPU y después se carga mediante una in­te­rru­p­ción de software 128 (llamada a una su­b­fu­n­ción del sistema operativo que in­te­rru­m­pe la ejecución del programa en el modo de usuario).

La fu­n­cio­na­li­dad es similar en los sistemas ope­ra­ti­vos Windows, pero aquí una llamada al sistema siempre se convierte primero in­te­r­na­me­n­te: una función de bi­blio­te­ca de la API de Windows (abre­via­tu­ra WinAPI) se convierte au­to­má­ti­ca­me­n­te en una llamada al sistema que el sistema operativo puede leer, in­clu­ye­n­do un número único que hace re­fe­re­n­cia a la función deseada en el modo núcleo.

En la siguiente tabla se enumeran algunos ejemplos concretos de llamadas al sistema de Windows y Linux:

Tipo de system call Función Linux Windows
Control del proceso Crear proceso fork() Crea­te­Pro­ce­ss()
Control del proceso Terminar proceso exit() Exi­t­Pro­ce­ss()
Gestión de archivos Crear/abrir archivo open() Crea­te­Fi­le()
Gestión de archivos Leer archivo read() ReadFile()
Gestión de archivos Editar archivo write() WriteFile()
Gestión de archivos Cerrar archivo close() Clo­seHa­n­d­le()
Gestión de di­s­po­si­ti­vos Abrir di­s­po­si­ti­vo read() Read­Co­n­so­le()
Gestión de di­s­po­si­ti­vos Cerrar di­s­po­si­ti­vo close() Clo­se­Co­n­so­le()
Gestión de la in­fo­r­ma­ción De­fi­ni­ción de un intervalo de tiempo es­pe­cí­fi­co alarm() SetTimer()
Gestión de la in­fo­r­ma­ción Pausa (por ejemplo, de un proceso) sleep() Sleep()
Co­mu­ni­ca­ción Crear Pipe (memoria in­te­r­me­dia para el flujo de datos entre dos procesos) pipe() Crea­te­Pi­pe()
Co­mu­ni­ca­ción Creación de una memoria co­m­pa­r­ti­da (Shared memory) shmget() Crea­te­Fi­le­Ma­p­pi­ng()
Consejo

¿Buscas un hardware potente para manejar los procesos de tu apli­ca­ción? Las https://www.ionos.com/servers/vps "Se­r­vi­do­res virtuales VPS">so­lu­cio­nes VPS de IONOS te ofrecen el mejor servidor en la nube a un precio ex­ce­p­cio­nal, con Windows o Linux como sistema operativo.

Ir al menú principal