Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Sistemas mercantiles
Nivel: 3 de Sistemas
Sistemas operativos Tema: Servicios que nos ofrece POSIX Estudiante: Francisco Estacio
- 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:
-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
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.
-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.