Está en la página 1de 11

Instituto Tecnológico de Costa Rica

Área Académica Ingeniería en Mecatrónica

MT Microcontroladres y microprocesadores

Profesor: Felipe Meza

Tarea 2 Manejo de Máquinas Virtuales

I Semestre 2021.

Estudiantes:
Carlos Rojas Espinoza
2013109379

Jorge Jimenez Vargas


201262897

Fecha de entrega: viernes 19 demarzo 2021.


Contenido
Preguntas Teóricas .............................................................................................................................3
¿Qué es el Shell de Linux? ..............................................................................................................3
¿Qué es gcc?...................................................................................................................................3
¿Cuál es la diferencia entre gcc y g++? ...........................................................................................3
¿Cómo se compila un programa en C utilizando el compilador gcc desde la terminal de Linux?
Brinde un ejemplo. .........................................................................................................................3
¿Cómo se ejecuta un programa en C ya compilado desde la terminal de Linux? .............4
¿Qué es el comando ifconfig de Ubuntu? ¿Qué información provee? ................................4
¿Para qué sirve el protocolo SSH? ...........................................................................................4
Explique el concepto de “Máquina Virtual”...............................................................................4
¿Qué es la librería pthread de C? .............................................................................................4
Defina los siguientes conceptos de programación por hilos: Thread, lock, join. ................4
Instalación de una máquina virtual (8 pts) .........................................................................................5
Comunicación SSH con la Máquina Virtual (20 pts)............................................................................6
Código empleado: ..........................................................................................................................8
URL del video:
https://drive.google.com/file/d/1S4yo5VZKvyEigmfxtOLHQQC04bSZb6yA/view?usp=sharing ..10
Bibliografía: ......................................................................................................................................11
Preguntas Teóricas (22 pts, 2pts c/u)
¿Qué es el Shell de Linux?
Debido a que Linux es un sistema computacional basado en el código de su sistema base llamado
Unix, el Shell de Linux también es conocido como el Shell de Unix por su semejanza.

Este Shell, es la interfaz mediante la cual se ejecutan comandos en el sistema operativo, el cual se
encarga de interpretarlos y que por ejemplo, es el medio por el cual se pueden ejecutar y controlar
herramientas del sistema o de la misma computadora o hardware.

¿Qué es gcc?
GCC es un compilador creado por GNU, que al recibir un programa en lenguajes como C y C++ genera
un programa binario en el lenguaje de la máquina donde se ejecutará. Sus siglas significan GNU
C Collection.

¿Cuál es la diferencia entre gcc y g++?


La principal diferencia entre GCC y G++ es que el primero sirve para compilar universalmente en
cualquier lenguaje C, pero el segundo (G++) sirve para C++ (no para C) en donde la diferencia radica
en su compilador que tratará todo archivo tipo C y C++ como uno de C++.

¿Cómo se compila un programa en C utilizando el compilador gcc desde la terminal


de Linux? Brinde un ejemplo.

Se abre una ventana terminal, luego se instala el gc con los siguientes comandos
apt update

apt install build-essential

apt-get install manpages-dev 

Para comprobar la instalacion se utiliza el comando gcc –version

Hay que dirigirse a donde se encuantra el archivo con el codigo fuente utilizando cd para navegar
entre las carpetas

Se escribe el comando gcc (nombre del archivo con el codigo fuente)

Se abre el archivo ejecutable con el comando [executable_name]

donde dentro de los paréntesis se digita el nombre del archivo que se creó el paso anterior
¿Cómo se ejecuta un programa en C ya compilado desde la terminal de
Linux?
Como es un programa en C se debió utilizar un compilador tipo GCC como en la pregunta anterior, y
para su ejecución se debe abrir el Shell de Linux y escribir la variable ./nombre_archivo.out y con
esto bastará.

¿Qué es el comando ifconfig de Ubuntu? ¿Qué información provee?

El comando ifconfig es un parámetro que al ser llamado permitirá la configuración de la


interfaz del sistema y sus parámetros de red como la dirección IP o la máscara de red. En
caso de llamar este parámetro desde el Shell, solamente mostrará la configuración actual
de las redes activas del sistema como por ejemplo la IP estática y dinámica, así como la
dirección MAC.

¿Para qué sirve el protocolo SSH?


Es un protocolo creado para realizar comunicaciones seguras entre dos sistemas por medio de
internet. El SSH encripta la conexión haciendo imposible que alguien obtenga información que no
se desea. Con esto se puede transferir documentos y realizar cambios de un sistema a otro y recibir
respuesta, sin poner en peligro la seguridad del usuario.

¿Qué es la herramienta openssh-server de Linux?


Es un comando con el cual se puede accesar a servidores encargados del control remoto y la
transferencia de archivos

Explique el concepto de “Máquina Virtual”


Una máquina virtual es un software que actúa como una consola adicional e independiente
dentro de una máquina. En ella se tiene otro sistema operativo y programas tal y como en
una maquina real

¿Qué es la librería pthread de C?


Es una librería, la cual se utiliza para programas programas miltihilo y que implemente el standard
POSIX

Defina los siguientes conceptos de programación por


hilos: Thread, lock, join.
 Thread: es una cadena de tareas pequeñas y que es ejecutada por un sistema operativo
 Lock: evita que los hilos puedan modificar variables, gestionando los bloqueos
 Join: es un método que se utiliza para detener un hilo mientras se está ejecutando otro
Instalación de una máquina virtual (8 pts)
Configure una máquina virtual utilizando la imagen descargada. Tome una captura de pantalla con
el nombre de los integrantes que permita verificar que efectivamente realizaron esta asignación
(Adjunte la captura al documento).

Versión 20.04.2.0 de Linux


Comunicación SSH con la Máquina Virtual (20 pts)
Solución:
Se obtiene la dirección IP de nuestra máquina virtual, la cual es: 192.168.100.49

Primero corrobora mediante el cmd de Windows se puede observar que ambas IP están
emparejadas y se procede a abrir el putty una vez ya instalado, se ingresa la dirección IP
especifica en formato SSH y se da click en abrir, y se obtiene la conexión remota entre
nuestra máquina virtual y el PC utilizando el protocolo SSH mediante el programa Putty, por
lo que de ahora en más se tiene un medio de comunicación o enlace entre ambas
máquinas.
Se procede a hacer el login en el siguiente paso, con el usuario y contraseña de la máquina
virtual instalada y se tiene:

Más a detalle, del programa putty se tiene al quedar establecida la conexión lo siguiente:
Programando sobre la máquina virtual (20 pts)
Cree un programa que debe de generar un array de 100000 elementos distintos y realizar
dos recorridos que calcula la potencia de cada elemento del array:
1. Un único hilo desde el elemento 0 al 100000
2. Cuatro hilos repartiendo equitativamente el cálculo de las potencias de cada elemento. (Un hilo
para los elementos del índice 0 a 25000, otro hilo para el índice 25001 al 50000 y así sucesivamente)
Debe medir el tiempo de ejecución del cálculo para presentar una comparación. El código
será verificado para asegurar el uso correcto de hilos y del ejercicio. Usted debe demostrar que
la velocidad con cuatro hilos es superior a la de un solo hilo.

Código empleado:
#include <stdio.h>
#include <pthread.h> //Biblioteca para poder utilizar hilos en C
#include <stdlib.h>
#include <time.h>//Biblioteca para tomar el tiempo de las corridas

clock_t t1;
clock_t t2;
pthread_mutex_t lock;

struct entrada{
int base;
int fin;
int suma;
};//se crea un strcut "entrada" con las variables que se necesitan introducir en la funcion
//que el thread llama

typedef struct entrada struct1; //se crea un struct1 con el formato de entrada

int vacio [100000];// Se crea un array vacio de 100000 elementos


int total = 100000;
int parte = 25000;

void* rellenar (void *abc){ //funcion que llama el hilo para llenar el array

pthread_mutex_lock(&lock);

struct1 *funcione; //se crea puntero funcione de tipo struct1


funcione = (struct1*) abc; //se le asignan los valores de la entrada abc a funcione

//declaracion de variables
int i;

int a = funcione->base; //posicion desde donde empieza a llenarse el array


int b = funcione->fin;//ultima posicion del array
int c = funcione->suma;// valor al que cambia el contador
//cada elemento del struct se asigna a una variable

for(i=a; i<b; i++){


vacio [i] = i;
printf("%d", vacio [i]);
}//funcion para recorrer el array en base a los valores previamente definidos

printf ("\n");
pthread_mutex_unlock(&lock);
return NULL;
}
int main()
{
int hilos=4;
int j=0;
int solo;
int tetra;

pthread_t cuatro[hilos];//crea los tags para el recorrido de 4 hilos


pthread_t uno;// crea el tag para el recorrido con un hilo pthread_t cuatr;

struct1 *abc;//se crea puntero abc de tipo struct1

abc = (struct1 *)malloc(sizeof (struct1));//se define espacio en memoria para abc


//asignacion de valores de abc para un hilo
abc -> base = 0;
abc -> fin = 100000;
abc -> suma = 1;

t1 = clock();// Se toma un tiempo de inicio para el recorrido de un hilo


//se crea un hilo que imprime el array
solo = pthread_create(&uno, NULL, rellenar, (void*) abc);
pthread_join (uno, NULL);

t1 = clock () - t1;//se calcula el tiempo restando a la hora actual el tiempo de inicio

t2 = clock();//Se toma el tiempo de inicio para el recorrido de 4 hilos


for(j=0; j<hilos; j++){
//el for se utiliza para generar cuatro hilos los cuales mediante las variables del struct se reparten la
impresion de los valores del array
int k = j+1;
abc -> base = j*parte;
abc -> fin = k*parte;
abc -> suma = 1;
tetra = pthread_create(&cuatro[j], NULL, rellenar, (void*) abc);
}

for (j=0; j<hilos; j++){


pthread_join (cuatro[j], NULL);
}

t2 = clock()-t2;// calcula el tiempo restando el tiempo medido anteriormente a la hora actual


pthread_mutex_destroy (&lock);
printf("\n");
printf("Con un hilo dura %ld", t1);
printf("\n");
printf("Con 4 hilos dura %ld", t2);
printf("\n");

return 0;
}

URL del video:


https://drive.google.com/file/d/1S4yo5VZKvyEigmfxtOLHQQC04bSZb6yA/view
?usp=sharing
Bibliografía:
[1]] Pieters, T(2016). Threading: programación con hilos. Python 3 para impacientesEspaña.
Recuperado en: https://python-para-impacientes.blogspot.com/2016/12/threading-
programacion-con-hilos-y-
ii.html#:~:text=Los%20objetos%20Lock%20permiten%20gestionar,con%20el%20m%C3%A9todo%
20release()

[2] Cano, A. (2004). Programación Multihilo. Recuperado en:


http://leo.ugr.es/J2ME/CLDC/transjava.old/node11.html#:~:text=Con%20el%20m%C3%A9todo%2
0join(),a%20la%20finalizaci%C3%B3n%20de%20otros

[3] Anónimo (s.f). Red Hat Enterprise Linux 4: Manual de referencia. Recuperado en:
https://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-rg-es-4/ch-
ssh.html#:~:text=SSH%E2%84%A2%20(o%20Secure%20SHell,conectarse%20a%20un%20host%20r
emotamente.

También podría gustarte