TP 0 - Implementación de codificador y estructura básica. BitsTranslation. 1.0 Gabriel Ostrowsky, Padrón Nro. 90.762 gaby.ostro@gmail.com Juan Manuel Gonzalez Durand, Padrón Nro. 91.187 juanma.durand@gmail.com Leandro Ismael Gon Aguirre, Padrón Nro. 91.095 gonleandroismael@gmail.com 1er. Cuatrimestre de 2013 66.20 Organización de Computadoras Facultad de Ingeniería, Universidad de Buenos Aires Fecha de entrega: 15-04-2013 Resumen Este artículo explica el desarrollo e implementación en el lenguaje C, de una aplicación codificadora de archivos de texto a cadenas de bits y viceversa, para la asignatura 66.20 Organización de Computadoras de la Facultad de Ingeniería. Esta implementación posee un mínimo grado de portabilidad, ya que el comando se puede utilizar sobre una arquitectura MIPS, además de la plataforma Linux. Los flags del programa Bits- Translation que fueron implementados son: -h, --help Muestra la ayuda y sale del programa. -V, --version Muestra información de la versión y sale del programa. -r, --reverse Opción por default. Selecciona el uso del programa para decodificar una cadena de bytes de 0s y 1s en una frase de texto. -b, --binary Selecciona el uso del programa para codificar una frase de texto en una cadena de bytes de 0s y 1s. -i, --input Especifica el archivo del argumento como el texto de entrada a convertir. El argumento - será entendido para recibir el texto por stdin. -o, --output Especifica el archivo del argumento como el texto de salida de la converción. El argumento - será entendido para escribir el texto por stdout.
1. Introducción En este artículo encontrará las especificaciones de la implementación y ejecución del programa, ya sea en una plataforma Linux, o en el emulador GxEmul para la arquitectura MIPS. Finalmente se mostrarán algunas pruebas corridas para la verificación del producto terminado, y el código del programa en C, además de las conclusiones y bibliografía usada para el presente informe. 2. Diseño En esta sección se detallan algunas de las decisiones de diseño tomadas. Las mismas tienen en cuenta la ejecución por defecto y manejo de la información con un determinado formato. 2.1. Valores Por Defecto El primer aspecto a considerar será la ejecución del programa por defecto, sin especificar alguna o ninguna de las opciones disponibles. En principio, la conversión establecida implicita será la decodificación de una cadena de bits a texto, usando los estandares de Entrada y Salida. Al usarse cualquiera de las opciones por defecto, se avisará al usuario en modo de advertencia con el fin de explicitar, y así, aclarar las opciones que el programa ya tiene previamente configuradas. 2.2. Manejo de Archivos Binarios Otro aspecto interesante para el análisis, es el modo de guardado de la información y su futura lectura y conversión. Luego de convertir un archivo de texto o frase, se genera una cadena ininterrumpida de bits 0s y 1s, los cuales representan cada uno de los caracteres del texto en lenguaje binario del código Ascii. Hacemos hincapié en el formato de la cadena ininterrumpida, sin espacios ni nuevas lineas en los archivos binarios guardados para una futura lectura mas sencilla preservando tambien las cualidades de ser archivos binarios. De todas formas, el programa soportará entrada de archivos binarios que contengan espacios o nuevas lineas, aunque de suceder este escenario, no se podrá volver al formato origianl luego de una reconversión a binario. A modo informativo, no se aceptan archivos binarios con el siguiente formato: Cadenas de caracteres binarios con un largo distinto a una cantidad entera de bytes; Archivos binarios con caracteres inválidos. 1
3. Compilación y ejecución Para la ejecución del programa en la plataforma Linux es necesario obtener un archivo ejecutable a partir del código. Para esto se debe: Abrir una terminal. Navegar a la carpeta donde se encuentra el archivo que contiene al código del programa. Escribir el siguiente comando: gcc Wall main. c o B i t s T r a n s l a t i o n Luego, el programa en su versión más simple, se ejecuta de la siguiente forma:. / b i t s T r a n s l a t i o n utilizando Stdin y Stdout como la entrada y salida del texto a convertir. En este caso, la conversión se hace de una cadena binaria a texto, ya que la acción por defecto es --reverse. Además, la entrada de nuevas lineas por Stdin está soportado, por lo que para terminar de introducir texto al programa, se debe usar la combinación Ctrl+D especificando así el fin del archivo. 4. Emulador MIPS Para poder acceder al emulador GxEmul de la arquitectura MIPS, fue necesario realizar una conexión a modo de puente con el sistema de Linux a través de una IP determinada. Para esto se utilizó un instructivo escrito por la cátedra con los comandos específicos para la instalación y el acceso al emulador. Luego de realizar la conexión entre las dos plataformas, copiamos el archivo del programa y los archivos a convertir mediante el siguiente comando estando situados en la carpeta donde estan los archivos: scp P 2222 root@127. 0. 0. 1 : / Al usar *, el comando scp copia todos los archivos que se encuentran en la carpeta de donde se ejecuta. Y el parametro root@127.0.0.1:/ asigna la dirección donde se copiarán los archivos, que en este caso es en el directorio root de la sesión que corre en GxEmul. Por último, para obtener el ejecutable y correr el programa, se utilizan los comandos explicados en la sección anterior. 2
Figura 1: Compilación y ejecución del programa en el emulador MIPS 5. Pruebas En esta sección mostramos algunas pruebas de la aplicación con los diferentes modos de uso, reportando errores cuando corresponde. 5.1. Modo Help y Version En la imagen que se muestra abajo, se puede observar los mensajes informativos de ayuda y de version del programa. Cabe destacar, que la opción de --help es preferencial sobre cualquier otra opción también especificada. 3
Figura 2: Ejecución de Help y Versión del programa 5.2. Conversión root@ : / usr / orga# cat i n p u t F i l e test. root@ : / usr / orga#. / b i t s T r a n s l a t i o n i i n p u t F i l e b o o u t p u t b i t s Text t o Binary mode Text encoded s u c c e s s f u l l y. root@ : / usr / orga# cat o u t p u t b i t s 0111010001100101011100110111010000101110 root@ : / usr / orga#. / b i t s T r a n s l a t i o n i o u t p u t b i t s output decodedfile Using d e f a u l t r e v e r s e a c t i o n... Binary t o Text mode Text decoded s u c c e s s f u l l y. 4
root@ : / usr / orga# d i f f i n p u t F i l e decodedfile root@ : / usr / orga# echo $? 0 root@ : / usr / orga# Figura 3: Ejecución del programa con error de archivo input 5
5.3. Errores Figura 4: Ejecución del programa con error de archivo input Figura 5: Ejecución del programa con errores en archivo binario 6
6. Conclusiones A partir del desarrollo de una aplicación, se pudo llegar a la familiarización con las herramientas usadas en una plataforma Linux, y su conexión y acceso con el emulador GxEmul de la arquitectura MIPS. De esta forma, se pudo desarrollar una aplicación con una mínima portabilidad entre plataformas, aceptando también algunas banderas a evaluar y eligiendo el tipo de entrada y salida. Referencias [1] Nikos Drakos, Manual de Latex, 1994, Computer Based Learning Unit, University of Leeds, http://www.fceia.unr.edu.ar/lcc/cdrom/instalaciones/latex/latex.html. [2] J. L. Hennessy and D. A. Patterson, Computer Architecture. A Quantitative Approach, 3ra Edición, Morgan Kaufmann Publishers, 2000. [3] Curso Práctica Organización de Computadoras, Instructivo GXEmul y NetBSD, Univ. de Buenos Aires, 2010,. [4] Free Software Foundation, Core GNU utilities manual, 2011, http://www.gnu.org/software/libc/manual/html node/getopt.html. 7