← SEARCHABLE ARCHIVE
Operating System · 2026-07-12

Llamadas al sistema e intercambio de contexto.

¿Cómo funciona una solicitud de programa de usuario desde el kernel?

INTERACTIVE READING MODE →

Los artículos escritos en este blog fueron creados con el objetivo de enseñar. Además, la información del artículo puede ser incorrecta, así que tenga cuidado.

Los programas en modo de usuario no pueden controlar directamente el disco o los dispositivos de red. En cambio, solicita trabajo del sistema operativo y este método de solicitud formal se denomina llamada al sistema.

¿En qué se diferencia de una llamada a función normal?

Una llamada a función general solo cambia la ubicación de ejecución dentro de la misma área de privilegios. Para las llamadas al sistema, los permisos de la CPU cambian del modo de usuario al modo de kernel y, después de que el kernel procesa la solicitud, regresa al modo de usuario.

Llamada de función genérica
Código de usuario → Función de usuario → Código de usuario

llamada al sistema
Código de usuario → Entrada del kernel → Verificación de permisos y argumentos → Operación del kernel → Código de usuario

Funciones como abrir archivos, mapeo de memoria, comunicación de socket y creación de procesos utilizan en última instancia llamadas al sistema. Los programadores generalmente llaman a la API del sistema operativo o a la biblioteca estándar, y la llamada al sistema apropiada se ejecuta en la capa siguiente.

Es diferente del cambio de contexto.

Invocar una llamada al sistema no necesariamente cambia a otro proceso. El mismo hilo puede ingresar al modo kernel, procesar la solicitud y regresar inmediatamente.

El cambio de contexto es el proceso de cambiar el objetivo de ejecución guardando el estado de ejecución actual y restaurando el estado de otro hilo o proceso.

Llamada al sistema: el mismo ejecutor solicita trabajo desde el kernel.
Cambio de contexto: la CPU cambia el sujeto para ejecutar

Sin embargo, las llamadas al sistema que necesitan esperar archivos o datos de red pueden poner el hilo actual en estado de espera. Mientras tanto, el sistema operativo ejecuta otros subprocesos para evitar desperdiciar la CPU y es posible que se produzca un cambio de contexto en este momento.

Las llamadas al sistema no son gratuitas

El cambio de privilegios y la verificación de parámetros cuestan dinero. Ésta es una de las razones por las que resulta ventajoso recopilar datos pequeños en un búfer y escribirlos de una vez en lugar de escribir miles de veces un byte.

std::string buffer;

for (const auto& line : lines)
{
    buffer += line;
    buffer += '\n';
}

file.write(buffer.data(), buffer.size());

Sin embargo, esto no significa que deban evitarse a toda costa las llamadas al sistema. Es un límite necesario para que el sistema operativo administre los recursos de manera segura, y es una buena idea observar la cantidad de llamadas y métodos en espera cuando se identifican problemas de rendimiento.