Presentacion Sobre Procesos en Linux

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 15

Procesos

Técnicas Digitales III Año: 2015 V005 1


Procesos
Proceso:

Un proceso es un programa en ejecución que tiene asociado los registros


utilizados, el contador de programa, el puntero de pila, las variables y otros
registros de hardware.

Estados de un proceso:

Técnicas Digitales III Año: 2015 V005 2


Procesos
Creación de Procesos

Los cuatro principales sucesos que provocan la creación de nuevos procesos


son:


La inicialización del sistema.


La ejecución por parte de un proceso (en ejecución) de una llamada al
sistema de creación de un nuevo proceso.


La petición por parte del usuario de la creación de un nuevo proceso.


El inicio de un trabajo en batch.

Técnicas Digitales III Año: 2015 V005 3


Procesos
Finalización de los procesos

1. El proceso completa su trabajo y termina (voluntariamente).

2. El proceso detecta un error y termina (voluntariamente).

3. El sistema detecta un error fatal del proceso y fuerza su terminación.

4. Otro proceso fuerza la terminación del proceso (por ejemplo en UNIX


mediante la llamada al sistema kill).

Técnicas Digitales III Año: 2015 V005 4


Procesos
Memoria de un proceso
La memoria de un proceso se divide en
segmentos:
● Segmento Text: instrucciones en
lenguaje de máquina que ejecuta el
proceso. Tamaño constante.
● Variables inicializadas. Tamaño
constante.
● Variables no inicializadas. Tamaño
constante.
● La pila (stack): contiene un marco de
datos por cada llamada a función. Varía
dinámicamente. El puntero a pila (stack
pointer) indica la dirección superior de
la pila.
● El heap. Contiene variables que son
creadas en tiempo de ejecución. Varía
dinámicamente.

Técnicas Digitales III Año: 2015 V005 5


Procesos
Creación de un proceso: fork()

La llamada a sistema fork() permite a un proceso (proceso padre) crear otro


proceso (proceso hijo).

#include <sys/types.h> //biblioteca en la que definido el tipo pid_t


#include <unistd.h> //biblioteca en la que definida fork
pid_t fork (void);

fork devuelve:

Al padre el ID de proceso hijo creado

Al hijo 0

-1 en caso de error

El nuevo proceso hijo es casi una copia excacta del proceso padre: obtiene
copias de la pila del padre, los datos, el heap y el segmento de texto

Técnicas Digitales III Año: 2015 V005 6


Procesos
Creación de un proceso hijo

Jerarquía de los Procesos

Un proceso crea a otro proceso, el


proceso padre crea al proceso hijo.
En UNIX un proceso y todos sus
hijos y demás descendientes
forman un grupo de procesos.
En Windows no hay jerarquías de
procesos.

Técnicas Digitales III Año: 2015 V005 7


Procesos
Funciones getpid() y getppid()

#include <unistd.h>
pid_t getpid (void);

getpid() nos devuelve el pid del proceso actual

#include <unistd.h>
pid_t getppid (void);

getppid() nos devuelve el pid del proceso padre

Ejemplo: printf (“soy el pid: %d y mi papa es: %d\n",getpid(),getppid());

Técnicas Digitales III Año: 2015 V005 8


Procesos
Función exit()

La función exit(status), termina un proceso por lo que todos los recursos


(memoria, descriptores etc) utilizados por el proceso quedan disponibles.
El argumento de la función es un entero que determina el estado de
terminación del proceso. Usando la llamada wait(), el padre puede obtener ese
estado.

#include <unistd.h>

void _exit(int status);

Técnicas Digitales III Año: 2015 V005 9


Procesos
Llamada a sistema wait()

La llamada a sistema wait(&status) tiene dos propósitos, si un proceso hijo aún


no termina, esperarlo hasta que termine, una vez terminado el hijo obtener el
estado de terminación en status.

#include <sys/wait.h>
int status;
pid_t wait (&status) ;

Devuelve el ID del proceso hijo terminado o -1 en caso de error

Técnicas Digitales III Año: 2015 V005 10


Procesos
Comando pstree

pstree –p nos muestra los pid


usuario@nombre_pc:~$ pstree -p

init(1)-+-NetworkManager(4530)---{NetworkManager}(5168)
|-NetworkManagerD(4544)
|-acpid(4328)
|-atd(5328)
|-avahi-daemon(4586)---avahi-daemon(4587)
|-bonobo-activati(5662)---{bonobo-activati}(5666)
.
.
.
|-gnome-terminal(7118)-+-bash(7123)-+-pstree(7524)
| | `-watch(7162)
| |-gnome-pty-helpe(7122)
| `-{gnome-terminal}(7124)
`-inetd(4927)

Técnicas Digitales III Año: 2015 V005 11


Procesos
Procesos huérfanos y zombies

● ¿Qué pasa cuando un proceso padre termina antes que un proceso hijo?.
– Al proceso huérfano se le asigna como nuevo padre el proceso (init) con
PID = 1, la función getppid() en un huérfano devuleve 1.

● ¿Qué pasa cuando un proceso hijo termina antes que un proceso padre?.
– El proceso hijo se convierte en zombie. Es borrado de memoria, excepto
su PID y su valor de retorno (status).
– Un zombie no puede ser “matado” por kill.
– Cuando el padre hace un wait(), el zombie es sacado de memoria por
completo.

Técnicas Digitales III Año: 2015 V005 12


Procesos
Funciones de la bliblioteca exec()

Todas estas funciones se encuentran en capas en la parte superior de execve(),


y se diferencian unos de otros y de execve() sólo en la forma en la que se
especifican el nombre del programa, la lista de argumentos, y el entorno del
nuevo programa.

La llamada a sistema execve(pathname, argv, envp) carga un nuevo programa


(nombre de ruta, con la lista de argumentos argv y lista de entornos envp) en la
memoria de un proceso.
El texto del programa existente se descarta, la pila, los datos y los segmentos
del heap son nuevamente creados

Técnicas Digitales III Año: 2015 V005 13


Procesos
Función execl()

Ejecuta un nuevo programa en el mismo proceso.


Se crea un proceso imagen sustituyendo el programa actual por el nuevo.

execl() requiere que el programador especifique los argumentos como una lista
de strings dentro de la llamada.
El puntero NULL debe terminar la lista de argumentos, asi las llamadas pueden
localizar el final de la lista

#include <unistd.h>
int execl(const char *pathname, const char *arg, ...
/* , (char *) NULL */);

No devuelve nada en caso de éxito y -1 en caso de error

Ejemplo:
execl("/bin/ls", "ls", "-l", NULL);

Técnicas Digitales III Año: 2015 V005 14


Procesos
Bibliografía


Tanenbaum, Andrew S. Sistemas Operativos Modernos, 3era Edición.
Prentice Hall. 2009. Capítulo 2.1.

Kerrisk, Michael. The linux programming Interface. 2011. Capítulos 6,
24.1, 24.2, 25.1, 25.2, 26.

Técnicas Digitales III Año: 2015 V005 15

También podría gustarte