Beruflich Dokumente
Kultur Dokumente
GUIA DE LABORATORIO
ECP 1 de 12
I.
II.
OBJETIVO DE LA PRACTICA
III.
TRABAJO PREPARATORIO.
Para un trabajo con mejores resultados, es imprescindible que el estudiante:
1. Tenga conocimientos de programacin en C en el sistema operativo Linux
2. Conozca la teora de gestin de procesos en los sistemas operativos.
IV.
MATERIALES.
Para el desarrollo de la presente prctica es necesario contar con:
1. Computador con arquitectura x86.
2. Sistema operativo Linux instalado en el computador o en su defecto un liveCD o
liveUSB que incluya el compilador GCC y un editor de texto pre instalado.
SISTEMAS DE OPERACIONES
GUIA DE LABORATORIO
ECP 2 de 12
V.
MARCO TEORICO
IDENTIFICACIN DE PROCESOS
POSIX identifica cada proceso por medio de un entero nico llamado identificador de
proceso de tipo pid_t.
A continuacin se indica las funciones para la identificacin de procesos:
Obtener el identificador de proceso
pid_t getpid(void);
EL ENTORNO DE UN PROCESO
El 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 manera:
extern char **environ;
GESTIN DE PROCESOS
La creacin de procesos se realiza utilizando el servicio fork(). El sistema operativo trata
este servicio realizando una clonacin del proceso que lo solicite, el mismo que se convierte
en el proceso padre del nuevo proceso el cual es, a su vez, el proceso hijo.
SISTEMAS DE OPERACIONES
GUIA DE LABORATORIO
ECP 3 de 12
Ejecutar un programa
El servicio exec tiene por objeto cambiar el programa que est ejecutando un proceso. En
POSIX existe una familia de funciones exec, cuyos prototipos se muestran a continuacin:
int
int
int
int
int
int
la familia de funciones exec no retornan al programa que las invoca, pues al ser invocadas,
sobreescriben el contexto del proceso llamante.
SISTEMAS DE OPERACIONES
GUIA DE LABORATORIO
ECP 4 de 12
VI.
TRABAJO DE LABORATORIO.
Solucin
//Nombre
//Proposito
//Autor
//FCreacion
//FModificacion
:
:
:
:
:
idProcesos
muestra el pid de procesos padre e hijo
E. Carrasco (basado en [L01] y [L04])
11/02/2008
27/02/2013
#include <sys/types.h>
#include <stdio.h>
int main()
{
//Variables
pid_t id_proceso;
pid_t id_padre;
//Indicar proposito del programa
puts("\n==== ESTE PROGRAMA MUESTRA EL IDENTIFICADOR DE PROCESO
DE UN PROCESO Y DE SU PROCESO PADRE ====\n");
//Procesar
id_proceso = getpid();
id_padre = getppid();
//Mostrar resultados
printf("Identificador de proceso : %d\n", id_proceso);
printf("Identificador del proceso padre : %d\n", id_padre);
//Salir
return 0;
}
Solucin
//Nombre
//Proposito
:
:
nombreMasId
muestra el nombre y el identificador de un
proceso
SISTEMAS DE OPERACIONES
GUIA DE LABORATORIO
ECP 5 de 12
//Autor
:
//FCreacion
:
//FModificacion :
Edwin carrasco
27/02/2013
----
#include <stdio.h>
#include <sys/types.h> //tipos de datos v.g. pid_t
int main (int argc, char *argv[])
{
//Variables
char *nombreDePrograma = argv[0];
pid_t processId;
//Indicar proposito del programa
puts("\n==== ESTE PROGRAMA MUESTRA SU NOMBRE Y SU IDENTIFICADOR
DE PROCESO ====\n");
//Procesar
processId = getpid();
//Mostrar resultados
//Sumamos 2 para omitir los caracteres "./"
printf("Mi nombre de programa es: %14s\n", nombreDePrograma+2);
printf("Mi identificador de proceso es: %6d\n\n", processId);
//salir
return 0;
}
3. Escriba un programa que permita mostrar informacin del usuario y el grupo de usuario
que ejecuta un proceso
Solucin
//Nombre
//Proposito
:
:
//Autor
:
//FCreacion
:
//FModificacion :
infoProc
muestra informacion del usuario y el grupo de
usuario que ejecuta un proceso
E. Carrasco (basado en [L01] y [L04])
11/02/2008
27/02/2013
#include <sys/types.h>
#include <stdio.h>
int main()
{
//Indicar proposito del programa
SISTEMAS DE OPERACIONES
GUIA DE LABORATORIO
ECP 6 de 12
//Salir
return 0;
}
Solucin
//Nombre
//Proposito
:
:
//Autor
:
//FCreacion
:
//FModificacion :
printHome
imprime el contenido de la variable de
entorno HOME
E. Carrasco (basado en [L01] y [L04])
11/02/2008
28/02/2013
#include <stdio.h>
#include <stdlib.h>
int main()
{
//Variables
char *home = NULL;
//Indicar proposito del programa
puts("\n==== ESTE PROGRAMA MUESTRA EL CONTENIDO DE LA VARIABLE
HOME DEL SISTEMA ====\n");
//Procesar y mostrar
home = getenv("HOME");
if (home == NULL)
printf("HOME no se encuentra definida\n");
else
printf("El valor de HOME es %s\n", home);
//Salir
return 0;
}
SISTEMAS DE OPERACIONES
GUIA DE LABORATORIO
ECP 7 de 12
Solucin
//Nombre
//Proposito
//Autor
//FCreacion
//FModificacion
:
:
:
:
:
entornoProc
imprime informacion del entorno de un proceso
E. Carrasco (basado en [L01] y [L04])
11/02/2008
28/02/2013
#include <stdio.h>
extern char **environ; //Variable externa
int main()
{
//Variables
char** var;
//Indicar proposito del programa
puts("\n==== ESTE PROGRAMA MUESTRA INFORMACION DEL ENTORNO DE
UN PROCESO ====\n");
//Procesar y mostrar resultados
for(var = environ; *var != NULL; ++var)
printf("%s\n", *var);
//Salir
return 0;
}
6. Escriba un programa que cree un proceso hijo. Cada proceso debe mostrar su
identificador
Solucin
//Nombre
//Proposito
//Autor
//FCreacion
//FModificacion
:
:
:
:
:
creaProcesoHijo
crea un proceso hijo y muestra su ID
E. Carrasco (basado en [L01] y [L04])
11/02/2008
28/02/2013
#include <stdio.h>
#include <sys/types.h>
SISTEMAS DE OPERACIONES
GUIA DE LABORATORIO
ECP 8 de 12
Solucin
//Nombre
//Proposito
//Autor
//FCreacion
//FModificacion
:
:
:
:
:
creaNHijos
crea N hijos para un proceso
E. Carrasco (basado en [L01] y [L04])
11/02/2008
28/02/2013
#include <stdio.h>
#include <sys/types.h>
int main()
{
//Variables
pid_t forkReturn;
int i;
int n=5;
SISTEMAS DE OPERACIONES
GUIA DE LABORATORIO
ECP 9 de 12
8. Escriba un programa que cree un proceso hijo, el cual debe invocar el comando ls para
listar el contenido de la carpeta actual.
Solucin
//Nombre
//Proposito
//Autor
//FCreacion
//FModific.
#include
#include
#include
#include
:
:
:
:
:
listar
lista el contenido de la carpeta actual
Edwin Carrasco
29/06/2013
---
<sys/types.h>
<stdio.h>
<unistd.h>
<sys/wait.h>
int main()
{
//Variables
pid_t valFork;
//Procesar
valFork = fork();
switch (valFork)
{
SISTEMAS DE OPERACIONES
GUIA DE LABORATORIO
ECP 10 de 12
case -1:
//Error al crear hijo
fprintf(stderr, "Error al crear archivo\n");
break;
case 0:
//Proceso hijo
printf("\nProceso hijo con valFork = %d e id de
proceso %d\n", valFork, getpid());
printf("\nListado de la carpeta actual\n\n");
execlp("/bin/ls", "ls", NULL);
break;
default:
//Proceso padre
wait(NULL);
printf("\nProceso padre con id de proceso %d,
informa que\n", getpid());
printf("\nel proceso hijo (%d) ha terminado!!\n",
valFork);
break;
}
//Salir
return 0;
}
SISTEMAS DE OPERACIONES
GUIA DE LABORATORIO
ECP 11 de 12
VII.
PRACTICAS DE LABORATORIO
1. Escriba un programa que cree una jerarqua de procesos como la mostrada en el grfico
adjunto
2. Escriba un programa que cree un proceso hijo que calcule el cuadrado de un numero
ingresado por el usuario. El proceso padre debe calcular el cubo de dicho nmero.
3. Escriba un programa que cree un hijo, espere su terminacin y muestre la informacin de
estado de terminacin del mismo.
4. Escriba un programa que cree un proceso hijo que determine la raz cuadrada de un
numero ingresado por el usuario. El proceso padre debe mostrar el resultado calculado
(investigue la llamada vfork()).
5. Escriba un programa que cree un proceso hijo el cual genere un nmero entero aleatorio,
cuya primalidad sea verificada por el padre.
SISTEMAS DE OPERACIONES
GUIA DE LABORATORIO
ECP 12 de 12
VIII.
BIBLIOGRAFIA
LIBROS
[L01]. Carretero J, et. al Sistemas Operativos. Una Visin Aplicada, 1ra edicin. Editorial
McGraw Hill 2001
[L02]. Deitel, H Operating Systems. Editorial Addison Wesley 1990.
[L03]. Deitel & Deitel, Como Programar En C/C++. Editorial Prentice Hall 2da edicin.
[L04]. Marquez, M. UNIX. Programacin Avanzada. 2da edicin. Editorial Alfaomega
2001.
[L05]. Perez F, et. al. Problemas De Sistemas Operativos. De La Base Al Diseo. 2da
edicin. Editorial McGraw Hill, 2003.
[L06]. Stallings, W. Sistemas Operativos. 5ta edicin. Editorial Prentice Hall 2005
[L07]. Tanenbaum, A. Sistemas Operativos. Diseo e Implementacin. 3ra edicin.
Editorial Prentice Hall 2006.
[L08]. Tanenbaum, A. Sistemas Operativos Modernos. 2da edicin. Editorial Prentice
Hall 2001.
REFERENCIAS WEB
[W01]. Carrasco E. Sitio web de la asignatura http://in.unsaac.edu.pe/ecarrasco/so.