Examen Convocatoria Apolo 2021 2
Examen Convocatoria Apolo 2021 2
Examen Convocatoria Apolo 2021 2
1
Apolo Examen Convocatoria 2021-1 14 de agosto de 2021
IMPORTANTE: Por favor muestre el procedimiento y justifique todas sus respuestas. Respuesta
que no se encuentre correctamente argumentada no será válida. El examen tiene una duración estimada
de 4 horas pero, dado que deben descargar CentOS 7 para crear las máquinas virtuales, tienen
hasta el lunes a las 08:00 AM para entregar la parte práctica. Pueden consultar internet y las
referencias bibliográficas que tengan a su disposición, pero el trabajo debe ser realizado por usted y,
en caso de ser necesaria una sustentación, deben estar en capacidad de explicar el trabajo
realizado.
INSTRUCCIONES:
1. Se recomienda que ponga a descargar el instalador de CentOS 7. mientras desarrolla los puntos
teóricos. Así, puede avanzar en el desarrollo del examen mientras descarga la aplicación. Los insta-
ladores están disponibles en https://www.centos.org/download/. Como se van a utilizar máquinas
virtuales, deben tener un virtualizador instalado en la máquina. Pueden utilizar el virtualizador
con el que se sientan más cómodo. Algunas opciones son VirtualBox (https://www.virtualbox.org/
y VMWare (https://www.vmware.com/).
2. Desarrolle el componente teórico.
3. Envíe por correo, a apolo@eafit.edu.co, la respuesta del componente teórico.
4. Desarrolle el componente práctico:
a) Instale y configure las máquinas virtuales de acuerdo con las instrucciones en el punto 1.
b) Desarrolle los demás puntos del componente práctico utilizando las máquinas virtuales.
5. Comparta la imagen de la máquina virtual y envíe el link, junto con el hash de la máquina
virtual, al correo apolo@eafit.edu.co. Puede utilizar Dropbox, OneDrive, Google Drive,
WeTransfer o cualquier servicio similar.
CONDICIONES ADICIONALES:
• En caso de no poder configurar las máquinas virtuales con CentOS, puede realizar la
instalación con Ubuntu (https://ubuntu.com/). Esta opción tiene una penalización del 50 % en la
evaluación.
• En caso de no poder configurar ninguna máquina virtual, los ejercicios de compilación, punto
2, y programación, punto 3 pueden ser desarrollados en cualquier máquina. En este caso, no
hay penalización en la evaluación.
1. Examen Teórico
1.1. Sistemas Operativos
(a) En los procesadores existen varios modos (o anillos) de ejecución, cada uno con diferentes privilegios.
Lo normal es denominar modo kernel al modo que tiene todos los privilegios y modo usuario al
que tiene menos privilegios. El proceso que se ejecuta en modo usuario debe realizar una llamada
al sistema (system call ) para utilizar los servicios del sisetema operativo, el cual se ejecuta en modo
kernel. Explique qué es una llamada al sistema (system call ).
(b) Una de las funciones más importantes de un sistema operativo es permitir que múltiples procesos
utilicen el procesador. El componente responsable de esta tarea es el planificador o scheduler. En
general, estos son los estados, que denominaremos S, en los que puede estar un proceso:
Ready: El proceso está listo para su ejecución. El scheduler lo puede ejecutar cuando lo considere
apropiado.
Running: El proceso está siendo ejecutado en ese momento
Blocked: El proceso está esperando que termine una operación de entrada/salida, por lo que no
puede ser ejecutado
Página 2 de 6
Apolo Examen Convocatoria 2021-1 14 de agosto de 2021
Página 3 de 6
Apolo Examen Convocatoria 2021-1 14 de agosto de 2021
Página 4 de 6
Apolo Examen Convocatoria 2021-1 14 de agosto de 2021
2. Examen Práctico
2.1. Configuración de las máquinas virtuales
Importante: Se recomienda tomar snapshots de las máquinas virtuales regularmente. Así, en caso de
tener problema en la configuración, pueden regresar a un estado previo.
(a) Instalación: Descargue el instalador de CentOS 7 y configure dos (2) máquinas virtuales con dicho
sistema operativo.
(b) Red:
i. Asegúrese de que cada máquina tenga dos interfaces de red. Una interfaz que le permita salir
a Internet y otra interfaz que le permita comunicarse con la otra máquina. La interfaz NAT deberá
tener una IP dada por DHCP. La interfaz Host Only deberá tener una IP estática en el rango
de red 192.168.56.0/24
ii. Muestre por medio el comando ping que las máquinas tienen conectividad entre ellas y que
tenga internet.
iii. Establezca e ingrese por medio de ssh a ambas máquinas desde su terminal y desde una
máquina a otra.
iv. Copie un archivo que usted haya creado de una máquina a otra.
v. Instale en la máquina virtual, si no están instaladas, los compiladores de C, C++ y Fortran, y
Anaconda (https://www.anaconda.com/), el ambiente de desarrollo de Python.
2.2. Compilación de QuEST QuEST es un simulador de computación cuántica que tiene varios
modos de funcionamiento:
local: Utiliza todos los núcleos de todos los procesadores del nodo para realizar los cálculos.
GPU: Utiliza CUDA (GPU) para ejecutar los cálculos.
local+GPU: Utiliza todos los núcleos de todos los procesadores del nodo y CUDA (GPU) para para
realizar los cálculos.
Distribuido: Utiliza todos los núcleos de todos los procesadores de todos los nodos para realizar los
cálculos.
Nota: Tenga presente que la compilación de QuEST puede requerir instalar paquetes adicionales.
(a) Descargue el codigo de QuEST (https://github.com/QuEST-Kit/QuEST/) en la máquina virtual
y compile la aplicación en modo local, registrando cada una de las actividades que realizó para
poderlo compilar.
(b) Comprima en un solo archivo todos los archivos, incluyendo el registro de las actividades, y llámelo
QuEST-local. Este archivo es parte de los productos que deben entregar.
(c) Compile la aplicación en modo distribuido, registrando cada una de las actividades que realizó
para poderlo compilar.
(d) Ejecute el programa distribuyendo su ejecución en las dos máquinas virtuales, registrando cada una
de las actividades que realizó para ejecutarlo.
(e) Comprima en un solo archivo todos los archivos, incluyendo los registros de las actividades, y llámelo
QuEST-distribuido. Este archivo es parte de los productos que deben entregar.
2.3. Programación
(a) Escriba una función en C o C++ que reciba el nombre de un programa como parámetro, lo
ejecute y espere a que termine su ejecución.
(b) Un buen programador debe encontrar un balance entre la claridad del código y su eficiencia. Una
forma de lograr es ese balance es escribiendo el código de manera que pueda ser optimizado por
el compilador. A continuación, encontrará dos algoritmos. El primero, algoritmo 1, es una implemen-
tación recursiva de la factorización que utiliza una técnica llamada tail recursion, mientras que el
segundo, algoritmo 2 es la implementación tradicional.
Página 5 de 6
Apolo Examen Convocatoria 2021-1 14 de agosto de 2021
Algorithm 2 Factorial
1: procedure FacT(n)
2: if n == 0 then
3: return 1
4: end if
5: return Fact(n-1)*a
6: end procedure
3. Entregables
El desarrollo del examen debe ser enviado por correo a la cuenta apolo@eafit.edu.co. Se debe entregar en
dos correos de la siguiente manera:
Primer correo: Debe ser enviado el sábado 14 de agosto de 2021 antes de las 8:30 PM. El tiempo
adicional es para que puedan organizar todo en formato PDF. Este correo debe contener las respuestas
a las preguntas teóricas.
Segundo correo: Debe ser enviado a más tardar el lunes 16 de agosto de 2021 a las 08:00 AM. Este correo
debe contener: los archivos QuEST-local, QuEST-distribuido, las implementaciones y la explicación
de los problemas de programación, los hash (utilice MD5) de la imagen de las máquinas virtuales y
los links para descargarlas.
Muchos éxitos!
Página 6 de 6