Está en la página 1de 6

UNIVERSIDAD REGIONAL AUTNOMA DE LOS ANDES

Sistemas mercantiles

Nivel: 3 de Sistemas

Sistemas operativos Tema: Servicios que nos ofrece POSIX Estudiante: Francisco Estacio

13 de Noviembre del 2013


Bibliografa; Sistemas Operativos,Gaston Dachary;2006,
;http://www.dachary.edu.ar/materias/SOII/docs/Programacion_en_Linux.pdf

- Identificacin de procesos: POSIX identifica cada proceso por medio de un entero nico denominado Identificador de Proceso (Process ID, PID) de tipo pid_t. a- Obtener el identificador de un proceso: pid_t getpid(void); b- Obtener el identificador del proceso padre: pid_t getppid(void) Ejemplo:

#include <sys/types.h> #include <stdio.h> main(){ pid_t id_proceso; pid_t id_padre;

id_proceso = getpid(); id_padre = getppid();

printf("Identificador de proceso: %d\n", id_proceso);

printf("Identificador del proceso padre %d\n", id_padre);

Bibliografa; Sistemas Operativos,Gaston Dachary;2006,


;http://www.dachary.edu.ar/materias/SOII/docs/Programacion_en_Linux.pdf

-Entorno de un proceso: Viene definido por una lista de variables que se pasan al mismo en el momento de comenzar su ejecucin. Estas variables se denominan variables de entorno y son accesibles a un proceso a travs de la variable externa environ, declarada de la siguiente forma. extern char **environ; Esta variable apunta a una lista de variables de entorno. Esta lista no es ms que un vector de punteros a cadenas de caracteres de la forma nombre=valor, donde nombre hace referencia al nombre de una variable de entorno y valor al contenido de la misma. Ejemplo: Programa que imprime el entorno de un proceso

#include <stdio.h> #include <stdlib.h>

extern char **environ;

int main(int argc, char **argv) { int i;

printf("Lista de variables de entorno de %s\n",argv[0]);

for (i=0 ; environ[i] != NULL ; i++) printf("environ[%d] = %s\n", i, environ[i]);

Bibliografa; Sistemas Operativos,Gaston Dachary;2006,


;http://www.dachary.edu.ar/materias/SOII/docs/Programacion_en_Linux.pdf

Cada aplicacin interpreta la lista de variables de entorno de forma especfica. POSIX establece el significado de determinadas variables de entorno: HOME: directorio de trabajo inicial del usuario LOGNAME: nombre del usuario asociado al un proceso PATH: prefijo de directorios para encontrar ejecutables TERM: tipo de terminal TZ: informacin de la zona horaria El servicio getenv permite buscar una determinada variable de entorno dentro de la lista de variables de entorno de un proceso. char *getenv(const char *name); Esta funcin devuelve un puntero al valor asociado a la variable de entorno de nombre name. Si la variable no se encuentra definida, la funcin devuelve NULL

- Creacin de procesos: La nica forma es invocando la llamada al sistema fork. El SO realiza un clonacin del proceso que lo solicite. El proceso que solicita el servicio se convierte en el proceso padre del nuevo proceso. pid_t fork() La clonacin se realiza copiando la imagen de memoria y la PCB. El proceso hijo es una copia del proceso padre en el instante en que ste solicita al servicio fork. Esto significa que los datos y la pila del proceso hijo son los que tiene el padre en ese instante de ejecucin. Es ms, dado que, al entrar el sistema operativo a tratar el servicio, lo primero que hace es salva los registro en la PCB del padre, al copiarse la PCB se copian los valores salvado de los registro, por lo que el hijo tiene los mismos valores que el padre.

Bibliografa; Sistemas Operativos,Gaston Dachary;2006,


;http://www.dachary.edu.ar/materias/SOII/docs/Programacion_en_Linux.pdf

-Terminacin de procesos
La funcin suspende la ejecucin del proceso ligero que la invoca hasta que el proceso ligero con identificador thid finalice su ejecucin. La funcin devuelve en el segundo argumento el valor que pasa el proceso ligero que finaliza su ejecucin en el servicio pthread_exit, que se ver a continuacin. nicamente se pude solicitar el servicio pthread_join sobre procesos ligeros creados como no independientes. a) Esperar la terminacin de un proceso ligero: Este servicio es similar a wait, pero a diferencia de ste, es necesario especificar el proceso ligero por el que se quiere esperar, que no tiene por qu ser un proceso ligero hijo. int pthread_join(pthread thid, void **value); La funcin suspende la ejecucin del proceso ligero que la invoca hasta que el proceso ligero con identificador thid finalice su ejecucin. La funcin devuelve en el segundo argumento el valor que pasa el proceso ligero que finaliza su ejecucin en el servicio pthread_exit, que se ver a continuacin. nicamente se pude solicitar el servicio pthread_join sobre procesos ligeros creados como no independientes.

b) Finalizar la ejecucin de un proceso ligero: int pthread_exit(void *value) Incluye un puntero a una estructura que es devuelta al proceso ligero que ha ejecutado la correspondiente llamada a pthread_join, lo que es mucho ms genrico que el parmetro que permite el servicio wait.

Bibliografa; Sistemas Operativos,Gaston Dachary;2006,


;http://www.dachary.edu.ar/materias/SOII/docs/Programacion_en_Linux.pdf

Bibliografa; Sistemas Operativos,Gaston Dachary;2006,


;http://www.dachary.edu.ar/materias/SOII/docs/Programacion_en_Linux.pdf