Llamadas al sistema


Para entender como funcionan las llamadas al sistema primero debemos entender como funcionan los modos de operación de la unidad central de procesamiento. Tenemos dos modos, el modo usuario y el modo Kernel.

En el modo kernel, la CPU puede realizar cualquier operación permitida por su arquitectura, es decir cualquier instrucción puede ser ejecutada, cualquier área de la memoria puede ser accedida, etc... Mientras que en el modo usuario, no se tiene ese acceso directo a los recursos.


¿Que pasa cuando un programa en modo usuario necesita acceder a la RAM o a otro recurso ?
El programa le pide al kernel el acceso a ese recurso, y esto se hace con las llamadas al sistema.

Cuando un programa hace una llamada al sistema, el modo es cambiado de usuario a kernel. El kernel provee los recursos pedidos por el programa y el modo vuelve a cambiar, pero esta vez de modo kernel a modo usuario.

Generalmente, las llamadas al sistema son hechas por los programas en las siguientes situaciones:


  1. El manejo de archivos ya sea crearlos, abrirlos, cerrarlos o eliminarlos.
  2. En el manejo y la creación de nuevos procesos.
  3. Haciendo una conexión a la red, recibiendo o enviando paquetes.
  4. Pidiendo el acceso a un dispositivo como un mouse o una impresora. 
Ejemplo de la llamada al sistema Fork()
Esta llamada al sistema es usada para crear procesos. Cuando un proceso hace esta llamada, una copia del proceso es creada, y ahora se tendrían dos procesos. Un proceso sería el padre y el otro el proceso hijo.


#include <stdio.h>
void main() {
   int val;  
   val = fork();  // linea A
   printf("%d",val);  // linea B
}
Cuando este código es ejecutado, en la linea A se crea un proceso hijo. Ambos procesos empiezan después la ejecución del a linea B. Para ver la diferencia entre los procesos debemos de ver el valor de retorno de la llamada fork().

La diferencia está en que en el proceso padre, fork() returna un valor que representa el identificador del proceso hijo. En el proceso hijo fork() retorna el valor de 0.


(Ejemplo extraído de fuente 1 )

Fuentes:

Comentarios

Entradas populares de este blog

Arquitectura del conjunto de instrucciones (ISA)

Pipelining

Ejercicio lenguaje ensamblador