Contamos con tu apoyo para compartir nuestros ensayos con relación a las ciencias de la computación.
Solución:
El kernel realiza la programación de trabajos y proporciona llamadas al sistema.
Cuando se ejecuta un proceso, el kernel programa su tiempo de ejecución, especialmente le asigna un PID; dicha información se almacena dentro del espacio de direcciones del kernel, en estructuras de datos (por ejemplo, dentro de una estructura de tareas).
Así, cuando un proceso llama al getpid()
llamada al sistema, el kernel solo tiene que buscar en la estructura de tareas del proceso de llamada (es decir, actualmente en ejecución).
Cuando se ejecuta una llamada al sistema, hay un cambio de privilegio, es decir, el código ejecutado puede ejecutar más instrucciones y acceder a datos prohibidos para el código de usuario.
Sin embargo, no hay un cambio de contexto de proceso, por lo que el código del kernel aún se ejecuta en el contexto del proceso de llamada. Eso significa que el núcleo no necesita buscar qué proceso lo está llamando, ya lo sabe. El código de llamada al sistema getpid simplemente recupera la identificación del proceso desde un puntero a una estructura interna que contiene su propia información específica de proceso/subproceso. Esta estructura depende de la implementación del sistema operativo.
Por ejemplo, con Illumos (OpenSolaris), la estructura se denomina proc: http://src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/sys/proc.h#131
En un sistema de una sola CPU, hay una variable global que apunta a la estructura del proceso en ejecución o al subproceso actual. La estructura proc contiene la identificación del proceso.
En un sistema de CPU múltiple, hay un puntero similar para cada CPU o se utiliza el contexto de MMU para configurar una variable global de este tipo para la llamada al sistema.
int64_t
getpid(void)
{
rval_t r;
proc_t *p;
p = ttoproc(curthread);
r.r_val1 = p->p_pid;
En este ejemplo, curthread es la variable global que se utiliza.
valoraciones y reseñas
Recuerda que puedes comunicar esta sección si te fue útil.