Sie sind auf Seite 1von 20

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN

FACULTAD DE INGENIERA

ESCUELA PROFESIONAL DE INGENIERA EN INFORMTICA Y SISTEMAS

PRCTICA DE LABORATORIO N09

CREACIN DE PROCESOS BAJO LINUX

CURSO: Sistemas Operativos

DOCENTE: Ing. Hugo Barraza Vizcarra

AUTOR: Mara Fernanda Zevallos Gmez CDIGO: 2015-119031

AO: Tercero SECCIN: Maana GRUPO: 1

FECHA DE ELABORACIN: Mircoles 16/07/17

FECHA DE ENTREGA DE INFORME: Viernes 28/07/17

TACNA PER

2017

1
NDICE GENERAL

Pg.

I. OBJETIVOS...........................................................................................................3
II. FUNDAMENTO TERICO..................................................................................3
III. MATERIAL Y EQUIPO.........................................................................................3
IV. PROCEDIMIENTO Y DESARROLLO.................................................................4
4.1. PARTE 1: Identificacin de procesos hijos..................................................................4
4.2. PARTE 2: Procesos padres e hijos...............................................................................5
4.3. PARTE 3. Funcin fork().............................................................................................6
4.3.1. Ejemplo 03...............................................................................................................6
Ejecucin del programa......................................................................................................6
4.3.2. Ejemplo 04...............................................................................................................6
Ejecucin del programa......................................................................................................7
4.3.3. Ejemplo 05...............................................................................................................7
Ejecucin del programa......................................................................................................7
4.3.4. Ejemplo 06...............................................................................................................8
Ejecucin del programa......................................................................................................8
4.3.5. Ejemplo 07...............................................................................................................8
Ejecucin del programa......................................................................................................9
4.3.6. Ejemplo 08...............................................................................................................9
Ejecucin del programa......................................................................................................9
4.3.7. Ejemplo 09.............................................................................................................10
4.4. PARTE 4. Funcin exec ().........................................................................................10
4.4.1. Ejemplo 10.............................................................................................................10
4.4.2. Ejemplo 11..............................................................................................................11
V. TAREA PROGRAMADA....................................................................................12
5.1. Primer programa procesos ligeros........................................................................12
5.2. Segundo programa -procesos ligeros....................................................................14
VI. CONCLUSIONES................................................................................................17
VII. REFERENCIAS BIBLIOGRFICAS..................................................................18

2
INFORME DE LABORATORIO N09

CREACIN DE PROCESOS BAJO LINUX

I. OBJETIVOS

Analizar la creacin de procesos bajo Linux.


Comprender la interaccin de un proceso hijo con su proceso padre

II. FUNDAMENTO TERICO

2.1. Proceso

Segn Molina J. (2003, pg. 18) un proceso, en s es el programa

ejecutndose en un momento dado con unos conceptos importantes.

2.2. Gestin de procesos

Segn Candela S. et al (2007, pg. 61) la gestin de procesos es una

tarea bsica, pero de gran importancia y trascendencia en el rendimiento

global del sistema operativo.

2.3. Llamadas al sistema

Es una demanda al sistema operativo para que haga una operacin

hardware/sistema especfico privilegiada.

2.4. Multitarea

La forma bsica de la multitarea es usar interrupciones, ms conocida

como multitarea en serie; un programa se detiene temporalmente

mientras que a otro se le permite ser ejecutado.

III. MATERIAL Y EQUIPO

Practica N09. Creacin de procesos bajo Linux

3
Un computador con Virtual Box instalado

Mquina virtual de Ubuntu Desktop

IV. PROCEDIMIENTO Y DESARROLLO

4.1. PARTE 1: Identificacin de procesos hijos

Cdigo del programa

#include<stdio.h>
#include<unistd.h>
void main(void)
{
int pid;
pid = getpid();
printf("El nmero de indentificacin del proceso
es %d\n", pid);
}

4
Ejecucin del programa

Interpretacin:

5
Primero se almacena en la variable pid el nmero de identificacin

que el sistema operativo asign al proceso que resulto de ejemplo1. c.

Luego se escribe en pantalla el PID tal como se muestra en la figura 1.

En la segunda figura se observan todos los procesos que se estn

ejecutando, pero no aparece el PID del proceso resultante de ejemplo1.

c.

Aparece el id de su programa en la salida del mandato ps-e?

Fundamente su respuesta

No aparece el PID del programa porque el comando ps solo muestra los

procesos hijos que se estn corriendo. El proceso que est corriendo es

resultante de ejemplo1. c. Dicho comando muestra los procesos

lanzados desde el terminal actual y con el mismo EUID que el usuario

que lo lanz.

4.2. PARTE 2: Procesos padres e hijos

Cdigo del programa

#include<stdio.h>
#include<unistd.h>
void main(void){
int ppid;
ppid = getppid();
printf("EL nmero de identificacin del proceso
padre es: %d\n", ppid);
}

Ejecucin del programa

6
Busque el id que obtuvo de salida de su programa en la lista

generada por ps Aparece? Cul es el nombre del proceso padre?

Por que?

Si. Su nombre es bash cuyo PID es 2805 porque al usar la funcin


getppid se retorna el pid del proceso que la invoc.Devuelve el
identificador del proceso padre del proceso actual.

4.3. PARTE 3. Funcin fork()

4.3.1. Ejemplo 03

Cdigo del programa

#include<stdio.h>
#include<unistd.h>
void main(void){
fork();
printf("Hola alumnos de sistemas
operativos\n");
}

Ejecucin del programa

Interpretacin:

Al usarse la funcin fork se est creando un hijo que es el

duplicado del padre. Comienza despus de hacer la llamada a la

funcin fork. Es por eso que en la ejecucin de programa se

observa que el cdigo: Hola alumnos de sistemas operativos,

aparece dos veces en pantalla.

7
4.3.2. Ejemplo 04

Cdigo del programa

#include<stdio.h>
#include<unistd.h>
void main(void){
printf("Demoestracin de la funcin
fork()\n");
fork();
printf("Hola alumnos de sistemas
operativos\n");
}

Ejecucin del programa

Interpretacin:

De igual forma que en el caso anterior al colocarse la funcin

fork() despus del texto Demostracin de funcin fork,este

solo se imprimi una vez. Pero lo dems si se mostr dos veces

ya que se cre un proceso hijo que es duplicado del proceso

padre.

4.3.3. Ejemplo 05

Cdigo del programa


#include<stdio.h>
#include<unistd.h>
void main(void){
fork();
fork();
printf("Hola alumnos de sistemas operativos\n");
}

8
Ejecucin del programa

Interpretacin:

Al ejecutarse dos veces la funcin fork() ejecuta el cdigo dos

veces ,pero al volverse a repetir la funcin fork ,nuevamente se

crea un proceso hijo que es el duplicado del proceso padre.Es por

eso que se repite el texto 4 veces.

4.3.4. Ejemplo 06

Cdigo del programa

#include<stdio.h>
#include<unistd.h>
void main(void){
fork();
printf("El PID es: %d\n",getpid());
}
Ejecucin del programa

Interpretacin:

Primero se hace un llamado a la funcin fork (),el cual crea un proceso

hijo que sera el duplicado del padre pero el cual no tendra el mismo

PID ,ya que cada proceso hijo creado est asociado a un identificador

nico ,diferente al de su padre. Es por eso que en dicha figura

observamos que el PID del padre es 2988 y el del hijo es 2989.

9
4.3.5. Ejemplo 07

Cdigo del programa

#include<stdio.h>
#include<unistd.h>
void main(void){
int pid;
pid = fork();
if(pid > 0){
printf("El PID del proceso padre es:
%d\n", getpid());
}
}
Ejecucin del programa

Interpretacin:

Primero se llama a la funcin fork() para crear el proceso hijo, el cual

obtiene una copia de la variable pid.El proceso padre debe tener la

variable pid con una valor mayor a 0 .Si tiene un valor menor a 0

significa que fall la creacin del proceso .

4.3.6. Ejemplo 08

Cdigo del programa


#include<stdio.h>
#include<unistd.h>
void main(void){
int pid;
pid = fork();
if(pid == 0){
printf("El PID del proceso hijo
es: %d\n", getpid());
}
}

10
Ejecucin del programa

Interpretacin:

Lo que se observa en pantalla es el valor del PID del proceso

hijo. Primero se llama a la fucin fork().El valor de la variable

pid toma el valor de 0 para el proceso hijo .

4.3.7. Ejemplo 09

Cdigo del programa


#include<stdio.h>
#include<unistd.h>
void main(void){
int pid;
pid = fork();
if(pid == 0){
printf("Soy el proceso hijo,el
numero del procesos es: %d\n", getpid());
}
else
{
printf("Soy el proceso padre,mi numero
de proceso es: %d\n", getpid());
}
}
Ejecucin del programa

Interpretacin:

En este caso lo que se hace primero es usar la funci fork() y

luego mostrar el PID del proceso padre e hijo. En el primero el

11
valor de la variable pid debe tomar el valor de 0 y en el segundo

debe ser menor o mayor a 0.

4.4. PARTE 4. Funcin exec ()

4.4.1. Ejemplo 10

Cdigo del programa

#include<stdio.h>
#include<unistd.h>
void main(void){
printf("Antes de exec mi PID es: %d\n",
getpid());
printf("El id del proceso padre es: %d\n",
getppid());
printf("exec inicia...\n");
execl(" /bin/ls","ls",(char *)0);
printf("Esto no se imprimir\n");
}
Ejecucin del programa

Interpretacin:

Primero se muestra el PID del proceso sin haber ejecutado la

funcin execl().Luego se muestra el id del proceso padre.

Finalmente se ejecuta execl() que reemplaza la imagen del

proceso en curso con una nueva imagen de memoria.

4.4.2. Ejemplo 11

Cdigo del programa

12
#include<stdio.h>
#include<unistd.h>
void main(void){
int pid;
pid = fork();
if (pid == 0)
{
printf("exec inicia... \n");
execl(" /bin/ls","ls",(char *)0);
}
else
{
wait(0);
printf("Padre:ls se ha completado en
el hijo\n");
}
}

Ejecucin del programa

Interpretacin:

Primero se usa la funcin fork().Luego el proceso hijo hace el llamado a

la funcin execl() siendo reemplazado en la memoria por el programa ls

.Cuando termin ls el proceso padre es activado y el cdigo se muestra

en pantalla.

V. TAREA PROGRAMADA

V.1. Primer programa procesos ligeros

Cdigo del programa

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

13
void *hilo1(void *arg)
{
int i;
for(i=0; i<10; i++)
{
printf("Mensaje generado por hilo1\n");
}
return (NULL);
}
int main(void)
{
pthread_t mihilo;
int i;
printf("Esperando finalizacion de hilos \n");
if(pthread_create(&mihilo, NULL, hilo1, NULL))
{
printf("Error creando el hilo 1 ");
abort();
}
for(i=0;i<10;i++)
{
printf("Mensaje generado por main\n ");
}
if(pthread_join(mihilo, NULL))
{
printf("Error esperando finalizacion
de hilos ");
abort();
}
printf("Fin ejecucion de hilos\n");
exit(0);

14
Ejecucin del programa

Interpretacin:

Se ejecuta 10 veces el hilo1. Se crea el hilo. se tiene una funcin para cada

tarea que se realiza en un hilo. Se impone que toda funcin que vaya a

ejecutarse en un hilo debe tener un parmetro de entrada de tipo puntero a

void (void *) y tiene que devolver tambien un puntero a void.

Pthread_t almacena el identificador de cada uno de los dos hilos que

se crearon. El identificador de un hilo es necesario guardarlo ya que,

una vez que un hilo comienza a funcionar, la nica forma de

controlarlo es a travs de su identificador.

El lanzamiento o creacin de los hilos se realiza con la funcin

pthread create que tambin est definida en pthread.h.

Se ejecutan los hilos atraves de pthread_join.

15
V.2. Segundo programa -procesos ligeros

Cdigo del programa

#include<stdio.h>
#include<pthread.h>
#include<stdlib.h>
#include<unistd.h>
void *hilo1(void *arg)
{
int i;
for(i=0; i<10; i++)
{
printf("Mensaje generado por hilo1\n");
}
return (NULL);
}
void *hilo2(void *arg)
{
int i;
for(i=0; i<10; i++)
{
printf("Mensaje generado por
hilo2\n");
}
return (NULL);
}
void *hilo3(void *arg)
{
int i;
for(i=0; i<10; i++)
{
printf("Mensaje generado por
hilo3\n");
}
return (NULL);
}

int main(void)
{
pthread_t mihilo_1;
pthread_t mihilo_2;
pthread_t mihilo_3;
if(pthread_create(&mihilo_1, NULL, hilo1, NULL))
{
printf("Error creando el hilo ");
abort();

16
}
if(pthread_create(&mihilo_2, NULL, hilo2,
NULL))
{
printf("Error creando el hilo ");
abort();
}
if(pthread_create(&mihilo_3, NULL, hilo3, NULL))
{
printf("Error creando el hilo ");
abort();
}
printf("Esperando finalizacion de hilos \n");
int i;
for(i=0;i<10;i++)
{
printf("Mensaje generado por main\n ");
sleep(1);
}
if(pthread_join(mihilo_1, NULL))
{
printf("Error esperando finalizacion
HILO 1 ");
abort();
}
if(pthread_join(mihilo_2, NULL))
{
printf("Error esperando finalizacion
HILO 2 ");
abort();
}
if(pthread_join(mihilo_3, NULL))
{
printf("Error esperando finalizacion
HILO 3 ");
abort();
}

printf("Fin ejecucion de hilos\n");


exit(0);

17
Ejecucin del programa

Interpretacin:

Se muestra 30 veces. De la misma forma se crea3 tipos de hilos :

hilo1,hilo2,hilo3.Se usa la funcin funcin pthread_create para cada

uno as como pthread_join para su posterior ejecucin.

18
Se impone que toda funcin que vaya a ejecutarse en un hilo debe

tener un parmetro de entrada de tipo puntero a void (void *) y tiene

que devolver tambien un puntero a void.

Con la funcin pthread crate se realiza el lanzamiento o creacin de

los hilos se realiza que tambin est definida en pthread.h. Esta

funcin crea un hilo, inicia la ejecucin de la funcin que se le pasa

como tercer argumento dentro de dicho hilo y guarda el identificador

del hilo en la variable que se le pasa como primer argumento.

VI. CONCLUSIONES

En Linux hay dos funciones para la creacin de procesos: fork() y clone(). Las

dos crean un nuevo proceso a partir del proceso padre, pero de una manera

distinta. En esta prctica se us

la llamada al sistema fork, el proceso hijo creado es una copia exacta del padre

(salvo por el PID y la memoria que ocupa). Al proceso hijo se le facilita una

copia de las variables del proceso padre y de los descriptores de fichero. Es

importante destacar que las variables del proceso hijo son una copia de las del

padre (no se refieren fsicamente a la misma variable), por lo que modificar

una variable en uno de los procesos no se refleja en el otro.

Un proceso hijo es un proceso creado por otro proceso, estos se crean

mediante la llamada al sistema fork() y en realidad, todos los procesos en

algn momento son hijos, todos menos el proceso init. En el caso de que un

proceso sea creado mediante la shell (ejecutado desde esta), la shell ser el

padre.

19
VII. REFERENCIAS BIBLIOGRFICAS

Candela S., Garca C., Quesada A., Santana F. y Santos J. (2007)

Fundamentos de sistemas operativos: teora y ejercicios resueltos.

Primera edicin .Espaa: Editorial Paraninfo

Molina J. (2003). Sistemas Operativos en Entornos monousuario y

multiusuario, Windows 2003 Server y Linux. Primera edicin. Espaa:

Editorial Visin Libros

20

Das könnte Ihnen auch gefallen