Subido por Mariano Muñoz Masís

Tarea Sistemas Operativos: Verificador de Colores

Anuncio
PRINCIPIOS DE SISTEMAS OPERATIVOS TAREA 1: VERIFICADOR DE COLORES
1
Tarea 1: Verificador de colores
Marı́a-Lucı́a Monge-Golcher, Gerald Valverde Mc kenzie , Mariano Muñoz Ması́s
[email protected] [email protected] [email protected]
Área Académica Ingenierı́a en Computadores
Instituto Tecnológico de Costa Rica
Abstract—Application of an auto executable TCP Server with
a daemon service running on a virtual machine, to receive and
analyze a picture sent from a TCP Client running on a Docker
container.
•
•
•
•
Procesadores: 6 Núcleos
Disco Duro Virtual: 100 Gb
Adaptador de Red: Default Switch
Sistema Operativo: Ubuntu 18.4 LTS
Palabras clave—Cliente, Demonio, Imagen, Sevidor
I. I NTRODUCCI ÓN
Un demonio o servicio es un programa que se ejecuta en
segundo plano, fuera del control interactivo de los usuarios del
sistema. Puede ser ejecutado de forma persistente o reiniciarse
si se intenta matar el proceso, dependiendo de la configuración
y polı́ticas del sistema. [1]
El término demonio se usa en sistemas UNIX y basados
en el mismo, en Windows y otros sistemas operativos se
denominan servicios porque fundamentalmente son programas
que ofrecer servicios al resto del sistema. [2]
Se pretende implementar dicho demonio sobre un servidor
TCP, el cual se ejecuta en una máquina virtual basada en un
sistema operativo de la distribución de Linux, en este caso
Ubuntu. La ejecución del servidor es automática y queda a la
espera de una solicitud de conexión de un cliente.
El cliente a su vez se ejecuta sobre un contenedor de
la plataforma Docker. Se pretende de igual manera que el
contenedor sea en una distribución de Linux, en este caso
CentOS, el contenedor se configura mediante un archivo
denominado Dockerfile.
La intensión de ejecutar el cliente y servidor es de poder
enviar una imagen del cliente al servidor y que este devuelva
la cantidad de pı́xeles superiores a determinado valor dado por
el usuario.
C. Contenedor Docker - CentOS
El contenedor de Docker se configuró con la version más
actualizada de CentOS. El archivo de configuración se muestra
a continuación.
FROM centos:latest
ENV container docker
WORKDIR /etc/yum.repos.d/
RUN sed -i ’s/mirrorlist/#mirrorlist/g’
/etc/yum.repos.d/CentOS-*
RUN sed -i
’s|#baseurl=http://mirror.centos.org|baseurl=\\
http://vault.centos.org|g’ \\
/etc/yum.repos.d/CentOS-*
RUN yum update -y
RUN yum install gcc -y
RUN mkdir -p ./home/Cliente \
&& chmod 775 ./home/Cliente -R
COPY . /home/Cliente/
WORKDIR /home/Cliente
RUN gcc Client.c -o Client
El anterior archivo de configuración se ejecuta con el siguiente
comando desde la terminal.
1) Ejecución del contenedor: Comandos:
II. A MBIENTE DE D ESARROLLO
A. Cliente/Servidor TCP - C
El código base para desarrollar el proyecto de cliente y
servidor se toma de internet y se usa como referencia [5],
[6], se modifica a las necesidades especı́ficas del proyecto.
El lenguaje en el que se desarrolla el modelo TCP es en C,
lenguaje caracterı́stico para manejo de memoria.
B. Máquina Virtual - Ubuntu
Mediante la herramienta nativa de Windows, Administrador
de Hyper-V, se configuro una máquina virtual en el ambiente
de virutualización, se toman como parámetros los valores
listados a continuación.
• Memoria RAM: 6Gb
cd ’path del dockerfile’;
docker stop cliente;
docker rm cliente;
docker rmi centos:cliente;
docker build -t centos:cliente .;
docker run -d
-v /home/Cliente:/Cliente
--name cliente centos:cliente
tail -f /dev/null;
docker exec -it cliente /bin/bash
El comando anterior esta diseñado para evitar cualquier
problema con cambios dentro del dockerfile, ası́ mismo como
para evitar problemas con los contenedores existentes.
El comando inicializa el contenedor con el fin de estar listo
para la ejecución.
PRINCIPIOS DE SISTEMAS OPERATIVOS TAREA 1: VERIFICADOR DE COLORES
D. Procesamiento de imágenes - C
El procesamiento de imágenes es una de las tareas más
básicas e importantes de un sistema operativo con entorno
gráfico, pues permite manipular la imagen a gusto y hacer
algo con ella. Lo primero por hacer en este proceso es obtener
una imagen en un formato legible. . . una vez que la imagen se
encuentra en un formato legible, el software de procesamiento
de imágenes requiere leerla para que posteriormente pueda ser
procesada y escrita en un archivo. [7]
En general, una imagen se puede describir como un arreglo
bidimensional de números donde cada posición del arreglo
consiste en un llamado “pixel” que almacena el dato de color
o tonalidad a partir de un código legible (ejemplo: RGB, HEX,
etc)
En el caso del ImageServer se empleó la librerı́a stb image
la cuál facilitó el procesamiento, almacenamiento, decodificación y obtención de parámetros de archivos de formato
”PNG, JPG, TGA, BMP, PSD, GIF, HDR, JPEG, HDR y PIC”
[4].
E. Daemon con Systemd
Para la creación del demonio en Ubuntu, se utilizo Systemd,
este es un nuevo administrador de de subsistemas, que se
utilizo para la configuración del servicio que se ejecuta en
segundo plano.
Se debe contar con una aplicación con la que el demonio
va a interactuar, en este caso el servidor, y con un archivo que
le indique a systemd como interactuar con la misma, para esto
se debe contar con la configuración de unidad de servicio, un
ejemplo de como se observa esta configuración es el siguiente.
[Unit]
Description=My Service
After=network.target
[Service]
ExecStart=/usr/bin/my-service
Restart=on-failure
[Install]
WantedBy=multi-user.target
Una vez el archivo este creado es necesario instalarlo en
/lib/systemd/system, refrescar los servicios y habilitar el que
se acaba de agregar. Con la configuración completa se puede
iniciar la interacción con el servicio.
III. ATRIBUTOS
Tal como se conoce en la cotidianidad y la programación,
los atributos son todos aquellos aspectos que caracterizan a
un objeto, una situación, una persona, etc. En un documento
como el presente, se generan múltiples atributos de aprendizaje
y desarrollo de herramientas que caracterizan al proceso
de investigación. A continuación, se detallarán los atributos
obtenidos a lo largo de este trabajo:
2
A. Aprendizaje continuo
Estrategia de trabajo en equipo
El objetivo de trabajo en equipo trazado consistió en obtener
resultados lo más rápidos y eficientes posibles. Para lograr
estos objetivos, se planteó como solución que el equipo se
dividiera las tareas de forma equitativa y procurar que cada
integrante trabajara en su área de mayor destreza, permitiendo
ası́, obtener resultados positivos de cada tarea lo más pronto
posible y, con esto, dejar espacios de tiempo disponibles
para colaborar con otros integrantes en tareas que fueran
particularmente retadoras o en resolución de dudas. Además,
se estableció una comunicación constante entre los miembros
para conocer el avance de cada uno con sus asignaciones y
las posibles problemáticas que se encontraban enfrentando, de
modo que alguna otra persona del equipo pudiera ayudar o
consultar al respecto.
Troubleshooting
En todo proceso de investigación y diseño existen problemas que surgen a lo largo del camino y que requieren de
particular atención para avanzar con el trabajo y concretar las
tareas exitosamente. Para conseguir esto, se determinó darle
seguimiento por jerarquı́a a la resolución de problemas. Como
el equipo se dividió las tareas, en la primera lı́nea de reacción
está cada integrante que, basado en su responsabilidades, debe
intentar solventar los problemas que le surgen a lo largo
del planteamiento y ejecución de sus tareas. Seguidamente,
si no se encontró una solución satisfactoria, se procede a
consultar con los otros miembros del equipo, exponer el
problema, la estrategia de solución planteada por la persona
y las falencias de esta, de modo que se le pueda aportar
ayuda con conocimiento de causa. Por último, si dentro de
los miembros del equipo no se logra comprender una tarea o
darle solución, se procede a pactar consulta con el profesor
del curso, quien aclara dudas y/o guı́a al equipo para plantear
nuevas estrategias de solución al problema.
Respaldo de información
Adicional al troubleshooting, es importante guardar un registro de las soluciones obtenidas, pues pueden ser necesarias
en otra tarea o incluso otros trabajos a futuro, de modo que se
documentan las soluciones que dieron resultados satisfactorios
ante los problemas surgidos, de forma que quede el aprendizaje
a posteridad y no se repitan los mismos errores a futuro o
bien, se conozca cómo resolver las tareas por si es necesario
implementar nuevamente esos conocimientos en otros trabajos.
Además, los miembros del equipo respaldan los avances de
sus asignaciones en Github y con esto pueden tener siempre
respaldada la información y programación hecha en un medio
accesible desde cualquier punto, sin necesidad de depender de
la funcionalidad de un único ordenador; esto también aporta al
proceso de troubleshooting pues se pueden recuperar versiones
anteriores de archivos que anteriormente funcionaban y tras
algún cambio o problema, dejan de servir.
PRINCIPIOS DE SISTEMAS OPERATIVOS TAREA 1: VERIFICADOR DE COLORES
3
B. Herramientas de Ingenierı́a
1) Visual Studio Code: Es un editor de código de Microsoft
que brinda varias herramientas y plugins para poder aplicar
casi cualquier lenguaje al editor y que este se adecue a las
necesidades de los programadores.
2) Docker: Es una plataforma que implementa servicios,
en los que se manejan imágenes de software, se les llama
contenedores. Los contenedores se encuentra aislados unos
de otros para manejar de forma independiente su propio
software, librerı́as y configuraciones, aunque si se permite su
comunicación por canales especı́ficos.
3) Máquina Virtual - Hyper-V: Es un programa de vitalización de hardware de Microsoft, actúa como un computador
y ejecuta un sistema operativo y sus programas. Brinda flexibilidad, ahorro de tiempo y dinero. Además permite ejecutar
mas de una maquina virtual en el mismo hardware al mismo
tiempo.
4) Github: Es una herramienta muy utilizada por desarrolladores, para el manejo de versiones en el código o software,
ofrece almacenamiento y disponibilidad a toda hora.
5) Overleaf: Es un editor de LaTex en linea, fácil de usar,
en el que varias personas pueden trabajar juntas para realizar
un documento, no requiere instalaciones y se puede acceder a
los documentos en tiempo real.
Fig. 1. Diagrama de Secuencia TCP
IV. D ETALLES DEL D ISE ÑO
A. Modelo TCP
TCP/IP son las siglas de Transmission Control Protocol/Internet Protocol (Protocolo de control de transmisión/Protocolo
de Internet). TCP/IP es un conjunto de reglas estandarizadas
que permiten a los equipos comunicarse en una red como
Internet. [3]
De esta manera mediante el enlace IP se pueden conectar
dos maquinas mediante el servicio de Cliente-Servidor, en cual
requiere un punto de conexión que medie como servidor y otro
u otros puntos que funcionen como clientes de ese servicio. En
el diagrama de la Figura 1 se puede apreciar como funciona
la secuencia de pasos del modelo TCP desarrollado en el
presente trabajo. Primeramente el servidor habilita el socket de
conexión, y confirma la creación del mismo, una vez creado,
el servidor entra en modo de ”escucha”, a la espera de una
solicitud de un cliente. De la misma manera, el cliente crea
un socket para la conexión, y una vez creado intenta conectar
al servidor que esta escuchando, el enlace se realiza por un
puerto en especı́fico, y hacia una Ip concreta, la del servidor.
En la Figura 2, perteneciente al diagrama de arquitectura, se
puede observar que a pesar que tanto la máquina virtual (VM)
como el contenedor de Docker están en la máquina local, el
usuario puede interactuar con ambos de manera independiente,
y además estas partes pueden comunicarse entre sı́, mediante
el protocolo TCP 3.
Fig. 2. Diagrama de Arquitectura TCP
Fig. 3. Diagrama de Componentes TCP
PRINCIPIOS DE SISTEMAS OPERATIVOS TAREA 1: VERIFICADOR DE COLORES
4
V. I NSTRUCCIONES DEL P ROYECTO
VI. TABLA DE ACTIVIDADES
A. Lucı́a Monge Golcher
A. ImageServer
Para la configuración y funcionamiento de la aplicación
servidor se deben seguir los siguientes pasos:
1) Máquina Virtual:: Se debe crear una instancia de Ubuntu
en una máquina virtual.
TABLE I
ACTIVIDADES REALIZADAS POR L UC ÍA M ONGE
Fecha
10/Mar
12/Mar
2) Descargar repositorio:: Se debe descargar el repositorio del proyecto, el cuál está alojado en Github en
el siguiente link: https://github.com/MarianoIDC/Operativos/
tree/releasev2.0.
Iniciar la máquina virtual, abrir la linea de comandos,
dirigirse a la carpeta ”DaemonConfig” y ejecutar los siguientes
comandos.
14/Mar
###Configurando por primera vez el servicio
de daemon
17/Mar
### Copia el archivo de configuracin en el
path especificado
sudo cp ImageServerDaemon.service
/lib/systemd/system
### Carga el servicio de daemon
sudo systemctl daemon-reload
### Habilita el servicio del daemon del
servidor
sudo systemctl enable ImageServerDaemon
### Inicia y verifica el daemon del servidor
sudo systemctl start ImageServerDaemon
sudo systemctl status ImageServerDaemon
El servidor esta listo para iniciar de manera automática cada
vez que se inicie la máquina.
Nota: Esta configuración solo se requiere una vez.
15/Mar
16/Mar
Actividad
División de tareas del proyecto
Investigación sobre creación de demonios
en linux
Consulta con el profesor sobre los demonios
Implementación del demonio para el
proyecto
Realización de pruebas y correcciones del
demonio con el servidor
Modificaciones en el informe
Corrección y entendimiento de errores en
el demonio
Modificaciones en el informe
Pruebas y verificación de funcionamiento
Finalización del informe
Hora(s)
1h
2h
0.5h
2h
2h
2h
2h
2h
2h
2h
B. Gerald Valderde Mc Kenzie
TABLE II
ACTIVIDADES REALIZADAS POR G ERALD VALVERDE
Fecha
10/Mar
11/Mar
12/Mar
14/Mar
15/Mar
16/Mar
17/Mar
Actividad
División de tareas del proyecto
Investigación sobre procesamiento de
imágenes
Implementación de los métodos para contar pixeles y comparar tamaño de las
imágenes
Implementación del procesamiento de
imágenes en el servidor
Optimización del envı́o de imágenes entre
el servidor y el cliente
Creación y edición del informe
Creación de makefile
Pruebas en conjunto
Optimización del sistema
Horas
1h
2h
4h
2h
5h
4h
0.5h
3h
7h
C. Mariano
B. Cliente
Para el correcto funcionamiento de la aplicación cliente se
deben seguir los siguientes pasos:
1) Descargar repositorio: Se debe descargar el repositorio del proyecto, el cuál está alojado en Github en
el siguiente link: https://github.com/MarianoIDC/Operativos/
tree/releasev2.0.
2) Inicializar contenedor: Se debe situar en el directorio
donde se descargó el repositorio seguidamente ejecutar los
comandos que se muestran acontinuación desde el bash de
Linux.
3) Envı́o de Imágenes: Envio de parámetros
.\Client [IPSERVER] [PORTSERVER] [PATHFILE]
[PIXELS]
Por ejemplo:
.\Client 192.168.100.9 1717 imagen.png 1200
TABLE III
ACTIVIDADES REALIZADAS POR M ARIANO M U ÑOZ
Fecha
5/Mar
10/Mar
11/Mar
12/Mar
13/Mar
14/Mar
16/Mar
17/Mar
Actividades
Creación del Docker File
Primer reunión, división de tareas y objetivos
Actualización del Dockerfile, consulta
con el profesor para solucionar
Creación de Cliente y Servidor base (Chat
entre cliente y servidor)
Cliente-Servidor 2, envio de archivo txt,
tratando de implementar enviar la imagen
Cliente-Servidor 2, envio de archivo
txt,envio de imagen completado, pero incompatible con el método de Gerald
Implementación del demonio desarrollado por Lucı́a
Integración y Documentación
Horas
0.5
1
3
4
4
3
5
6
VII. C ONCLUSIONES
Los servicios que se ejecutan en segundo plano o demonios,
son procesos muy útiles cuando se requiere automatizar, solo
PRINCIPIOS DE SISTEMAS OPERATIVOS TAREA 1: VERIFICADOR DE COLORES
es necesario contar con el ejecutable de para que el programa
sea ejecutado según las condiciones de configuración.
La virtualización de servicios es una manera efectiva de
comunicar y operar sistemas con especificaciones especiales,
aprovechando recursos de una manera óptima,
Los servicios de contenedores como Docker, facilitan y
agilizan el desarrollo de aplicaciones donde la interfáz gráfica
no requiere mayor atención, se utiliza con mucha frecuencia
para verificar fragmentos de código de un proyecto, que toman
y retornan valores especı́ficos, y en los cuales la interacción
con el usuario se limita a ingresar parámetros y verificar resultados, Docker especı́ficamente ofrece la posibilidad de realizar
pruebas en ambientes similares a entornos de producción y
desarrollo, si se combina con el uso de computación en la
nube.
VIII. S UGERENCIAS Y RECOMENDACIONES
Aunque la implementación de los demonios puede ser
simple, se recomienda verificar los datos necesarios para la
configuración, como la ubicación del ejecutable y posibles
dependencias
Se recomienda para el manejo de imágenes, utilizar sockets
y chunks de 256 bytes para el envió correcto de información,
además de facilitar su manipulación.
Si las especificaciones del proyecto lo permiten y los
recursos son suficientes, plantear una solución diferente al
modelo de sockets TCP es muy recomendado, esto con el
criterio que los sockets TCP funcionan dentro de una LAN,
lo que restringe el alcance de las aplicaciones desarrolladas.
IX. R EFERENCIAS
R EFERENCES
[1] Systemd. (s.f.) Writing and packaging system . freedesktop.org. https:
//www.freedesktop.org/software/systemd/man/daemon.html
[2] Jen0f0nte. (2017) Demonio.Colaboratorio.net. https://colaboratorio.net/
glosario/demonio/
[3] Sharon F. (julio 30, 2019), ¿Qué es TCP/IP y cómo funciona?[Online].
Avast, Academy. https://www.avast.com/es-es/c-what-is-tcp-ip
[4] Sean B. (setiembre 10, 2021), STB: Libraries for C/C++[Online]. https:
//github.com/nothings/stb
[5] Shukla Y. (l.u. febrero 2, 2022), TCP Server-Client implementation in C[Online]. geeksforgeeks.org. https://www.geeksforgeeks.org/
tcp-server-client-implementation-in-c/
[6] Nikhil T. (mayo 1, 2020), File Transfer using TCP Socket
in
C[Online].
Idiot
Developer.
https://idiotdeveloper.com/
file-transfer-using-tcp-socket-in-c/
[7] Phillips D. (abril 26, 2000), Image Processing in C[Online]. RD Publications. https://homepages.inf.ed.ac.uk/rbf/BOOKS/PHILLIPS/cips2ed.pdf
5
Descargar