Upload
agota-armendariz
View
11
Download
0
Embed Size (px)
Citation preview
Algoritmos paralelosLab. 1: Introducción
Glen Rodríguez
Máquinas virtuales Vamos a usar máquinas virtuales en el laboratorio de
este curso El concepto de máquina virtual surge con el sistema
VM/370 de IBM en 1972. La idea principal es la de permitir ejecutar varios sistemas operativos simultáneamente sobre el mismo hardware. Para ello, separa las dos funciones básicas que realiza un sistema moderno: multiprogramación y abstracción del hardware. El corazón del sistema es conocido como monitor de máquina virtual, y se ejecuta sobre el hardware proporcionando varias máquinas virtuales al siguiente nivel de software (S.O.). Estas máquinas virtuales, son copias exactas del hardware desnudo. Por esto, cada una puede estar ejecutando cualquier sistema operativo.
Por qué?
Recientemente, ha surgido VmWare, Xen, Virtual Box. Permiten ejecutar Windows, Linux, BSD, etc. de forma simultánea en la misma computadora.
Por qué usarlo? Siempre es mejor probar las cosas en una máquina que no es crítica para el negocio y que, como en el caso de las máquinas virtuales, se puede recuperar en muy poco tiempo.
Definiciones
Sistema operativo anfitrión o host Es el S.O. que realmente corre en la
computadora Junto con la capa de virtualización, simula
un “hardware virtual” donde corre el: Sistema operativo invitado o guest
Corre en un ambiente simulado
Funcionamiento (1)
En primer lugar se crea una máquina virtual, para lo que se dispone de un asistente donde se indican varios detalles como el tamaño del disco duro, cantidad de RAM, conexiones de red, etc.
El siguiente paso es, instalar el sistema operativo y luego el software restante. El proceso es idéntico a instalarlo en una computadora recién salida de fábrica.
Esos pasos ya los hizo el personal FC. El resultado es un archivo donde esta contenido el sistema instalado
Funcionamiento (2) Inicie el sistema operativo anfitrión
(host) Copie la carpeta DebianCC con todos
sus archivos a su disco duro Instale Virtual Box Corra Virtual Box Abra el archivo DebianCC.vbox
(Máquina – Agregar) Ignore el mensaje de error
Funcionamiento (3) Haga los siguientes cambios en la configuración,
haciendo click al botón “Configuración” En sistema, pestaña procesador, ponga 2 ó 4
procesadores (lo que soporte su computadora) y límite ejecución = 100
En sistema, placa base, suba la memoria a 512 En la pestaña de Aceleración activa las dos
opciones que hay. En Almacenamiento, elimine el CDROM del IDE
Controller
Funcionamiento (4)
En USB, desactive el controlador USB 2.9
Cree en el sistema operativo host el directorio cc301 (por ejemplo en windows cree el directorio o carpeta c:\cc301)
Añada esa carpeta, en la opción carpetas compartidas, el directorio cc301
Acepte y cierre configuración
Funcionamiento (5)
Ya puede usar su máquina virtual dando click en Iniciar (flecha verde)
De aceptar a las ventanas de mensajes Bootee la primera opción Login: usuario= root, password= admincc Ejecute: mount -t vboxsf cc301 /mnt TIENE que hacer mount cada vez que
encienda este máquina virtual
Ejemplo de programa paralelo con MPI
Vaya al directorio /home/user (Haga: cd /home/user)
Inicie el deamon de mip (haga: mpd &) Vea el programa hello.c Ejeciute el programa en 1 solo CPU y
en 2 CPUs mpiexec –n 1 ./hello mpiexec –n 2 ./hello
#include <mpi.h> #include <stdio.h> #include <string.h> #define BUFSIZE 128 #define TAG 0 int main(int argc, char *argv[]) { char idstr[32]; char buff[BUFSIZE]; int numprocs; int myid; int i; MPI_Status stat; MPI_Init(&argc,&argv); /* all MPI programs start with MPI_Init; all 'N'
processes exist thereafter */ MPI_Comm_size(MPI_COMM_WORLD,&numprocs); /* find out how big
the SPMD world is */ MPI_Comm_rank(MPI_COMM_WORLD,&myid); /* and this processes'
rank is */
/* At this point, all programs are running equivalently, the rank distinguishes
the roles of the programs in the SPMD model, with rank 0 often used specially... */
if(myid == 0) { printf("%d: We have %d processors\n", myid, numprocs); for(i=1;i<numprocs;i++) { sprintf(buff, "Hello %d! ", i); MPI_Send(buff, BUFSIZE, MPI_CHAR, i, TAG,
MPI_COMM_WORLD); } for(i=1;i<numprocs;i++) { MPI_Recv(buff, BUFSIZE, MPI_CHAR, i, TAG,
MPI_COMM_WORLD, &stat); printf("%d: %s\n", myid, buff); } }
else { /* receive from rank 0: */ MPI_Recv(buff, BUFSIZE, MPI_CHAR, 0, TAG,
MPI_COMM_WORLD, &stat); sprintf(idstr, "Processor %d ", myid); strncat(buff, idstr, BUFSIZE-1); strncat(buff, "reporting for duty\n", BUFSIZE-1); /* send to rank 0: */ MPI_Send(buff, BUFSIZE, MPI_CHAR, 0, TAG,
MPI_COMM_WORLD); } MPI_Finalize(); /* MPI Programs end with MPI Finalize; this is a
weak synchronization point */ return 0; }