ANUNCIOS
Imagen de ArticuloAbstracción del sistema
operativo

Llamados al sistema

Una llamada al sistema permite a una aplicación solicitar un servicio al nucleo del sistema operativo. Lo cual incluye servicios relacionado con hardware, creación y ejecución de nuevos procesos y comunicación integral con los servicios del kernel.

Las libreria como intermediaria

Por lo general los sistemas operativos proveen apis o librerías que comunica los programas y el sistema operativo.
Estas librerias del sistema operativo contienen las funciones para los llamados del sistemas. Estas funciones responden a convenciones de llamados para hacer el llamado al sistema

Estas funciones contenidas permiten mayor modularidad del sistema operativo y permiten tener un único llamado al sistema incrementando la portabilidad.

Ejemplos de llamados al sistema

En los sistemas operativos unix, unix-like y en general compatibles con los estándares POSIX, existen llamadas al sistema tales como las populares open ,read,write,close los cuales permiten abrir, leer escribir y cerrar archivos, lo que permite hacer operaciones de entrada y salida, wait,fork,exit,kill permiten la manipulación de procesos, como creación, sincronización y espera, entre otras.

Ejemplo uso del fork

El fork crea un clon del proceso padre y la ejecuta en paralelo. Con fork no se comparte ni el espacio de memoria, ni el avance del proceso. El llamado a esta función retorna un entero menor a cero si existe algún error, un numero mayor que cero si es el padre y su valor es el pid del hijo. o retorna cero si es el hijo.

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {

pid_t pid = fork();

   if(pid < 0){
   printf("Existió algún error");
   }

   if(pid > 0){
     printf("Soy el proceso padre \n");

   }

   if(pid == 0){

     printf("Soy el proceso hijo \n");

   }

     printf("Mi variable pid vale %i \n", pid);

}


Suponiendo que el codigo está guardado en un archivo de nombre fork.c.
Para compilar el programa se usa desde consola:

  gcc fork.c -o fork

Para ejecutarlo:

  ./fork

El resultado de ejecucion será algo como:

Soy el proceso padre
Mi variable pid vale 5451
Soy el proceso hijo
Mi variable pid vale 0

El resultado puede variar, ya que los dos procesos se ejecutan en paralelo y su ejecución es intercalada por el sistema operativo.

El uso indebido de la funcion system()

int system ( const char * command );

es una funcion que permite invocar a la linea de comandos desde el proceso que se está ejecutando un comando.
Esto implica que el programa pierde el control dándoselo a la linea de comandos y esperando a que esta de un resultado a este llamado.
Los programas que hacen uso de la función system() son mas vulnerables y lentos.

Para evitar el uso de system() se hacen llamados directos a las librerías provistas por el sistema operativo. como es int execv(const char *path, char *const argv[]); en sistemas operativos tipo UNIX y linux o ShellExecute en Windows. la funcion execv remplaza la imagen del proceso actual por la nueva imagen del proceso y ShellExecute ejecuta una funcion en el shell del sistema operativo.


Bibliografía

- Wikipedia la enciclopedia libre System Call

- Why system() is evil http://www.cplusplus.com/forum/articles/11153/

Etiquetas:   API   PROCESOS

Articulos Relacionados
Publicidad
Comentarios
comments powered by Disqus