ANUNCIOS
Abstracción del sistema
operativo
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);
}
#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/
- Why system() is evil http://www.cplusplus.com/forum/articles/11153/
Etiquetas: API PROCESOS
Articulos Relacionados
Publicidad
Comentarios