Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Informática Aplicada
Trabajo Práctico Nº 1
4 de Mayo de 2020
Autor/es:
Grupo Nº
Nombre y Apellido Nº de Legajo
BOVINA, Matias B-5751/7
LUJAN, Lionel L-2925/4
Corrigió Calificación
Trabajo practico N°1 Bovina, Matias – B-5751/7 Lujan, Lionel – L-2925/4
Enunciado A:
Descripción del Trabajo Práctico:
Todos los campos son binarios. El campo “Frame Control” indica la naturaleza y
prioridad de la trama, con el siguiente formato:
Donde ‘Bn’ es el bit n de los 16 del campo. Por ejemplo: B0...B1 indica un campo
de dos bits, B4...B7 uno de 4 bits (B4, B5, B6 y B7), B9 es un campo de un solo
bit y así con el resto.
El campo ‘Tipo’ (Type) indica la naturaleza de la trama según la tabla siguiente:
B2 y B3 Tipo
00 Trama de control
01 Trama de sincronización
10 Trama ordinaria
11 Trama de streaming
1
Trabajo practico N°1 Bovina, Matias – B-5751/7 Lujan, Lionel – L-2925/4
Usted deberá crear este archivo pidiendo al usuario el número ‘n’ de tramas de entrada
que desea crear (250 < n < 2500). El archivo puede tener el formato que Ud. considere
más adecuado y debe contener tramas de todos los tipos generadas aleatoriamente.
El archivo de salida debe contener grupos de 100 tramas, ordenadas según la opción
elegida.
Es decir, si el usuario elige la opción ‘C’, el archivo de salida debe mostrar primero un
75% de tramas de entrada de Control (en el orden en que aparecen en el archivo de
entrada), luego un 10% de tramas de entrada Ordinarias, un 10% de tramas de
Streaming y finalmente un 5% de tramas de Sincronización, repitiendo el ciclo hasta
procesar todas las tramas del archivo de entrada.
2
Trabajo practico N°1 Bovina, Matias – B-5751/7 Lujan, Lionel – L-2925/4
Estrategia de resolución:
Para la implementación del programa fueron creadas 2 estructuras:
La primera, llamada Frame_format, es una estructura que representa cada uno de los
campos de una trama de datos. Los distintos campos dentro de la estructura son
representados con unsigned short int (2 Bytes). Los campos MAC_Destination,
MAC_Source, MAC_Router y MAC_AP son arreglos que contienen 3 enteros cortos cada
uno (para representar las distintas MAC), el campo CRC es un arreglo de 2 enteros cortos
y el campo Duration es representado por un solo entero corto. El campo Data está
representado por un arreglo de 1156 enteros cortos, ya que este es el tamaño máximo
que puede ocupar el campo data (1156*2 Bytes = 2312 Bytes)1.
Generador de tramas:
Así, el usuario ingresara por teclado la cantidad n de tramas que desea generar, y
utilizando un while se ejecutará esta función n veces generando y copiando todas las
tramas. Luego se imprimirá por pantalla el mensaje “Archivo TRAMAS.DAT generado
exitosamente”.
3
Trabajo practico N°1 Bovina, Matias – B-5751/7 Lujan, Lionel – L-2925/4
1) El programa a través del puntero a archivo fichero_tramas lee una trama completa,
y se fija en el campo Type a ver si es una trama de tipo control. Si es, la copia en el
archivo de salida, si no la ignora y lee otra trama, así hasta leer y copiar la cantidad
de tramas de control pedidas (según el tipo de ordenamiento). Cada vez que copia
una trama de control aumenta el contador de tramas ordenadas y disminuye en 1
la cantidad de tramas de control que quedan por ordenar.
2) Al terminar de ordenar las de control repite el mismo ciclo para el resto de tipos
(sincronización, ordinaria y streaming), hasta conseguir (idealmente3) el grupo de
100 tramas ordenadas, guardando siempre la cantidad de tramas que quedan de
cada tipo y la ubicación de la última trama leída y ordenada de cada tipo (en las
variables control_cur, sincronizacion_cur, ordinaria_cur y streaming_cur)
3) Luego de ordenar un grupo de 100 tramas, comenzará a leer de nuevo y a ordenar
un nuevo grupo. Para no repetir las tramas ya ordenadas, se utiliza la función fseek
que reiniciara el puntero fichero_tramas y lo ubicará luego de la última trama leída
de cada tipo (antes de comenzar a buscar y ordenar estos).
4) El ciclo se repetirá hasta que ya no queden tramas por ordenar en el archivo de
salida.
Además, el programa almacenará la hora de comienzo del programa y la hora de
finalización, y por medio de esto calculara la diferencia4 e imprimirá “Archivo
SALIDA_ROUTER.DAT generado exitosamente” y también el tiempo de ejecución
del programa, además de la cantidad de tramas procesadas y la fecha. Por último,
pedirá que ingreses la letra “Y” y el programa finalizará.
Comentarios extras:
1) La idea inicial fue representar este campo por medio de un puntero. Utilizando
malloc y la función rand() alocábamos un valor aleatorio de memoria y
guardábamos la dirección en un puntero llamado *data. De esta manera cada
trama tenía una cantidad distinta de información (según la memoria dinámica
guardada aleatoriamente). El problema fue que al guardar una variable de tipo
puntero dentro de la estructura, cuando imprimíamos la estructura en el archivo
esa variable guardaba (lógicamente) la dirección de memoria de la información,
y no el contenido. No pudimos descubrir como guardar ese contenido. Además,
nos generaba un problema a la hora de leer el archivo para ordenarlo, ya que
cada trama tenía un tamaño distinto y la función fread (utilizada para leer
archivos binarios) solicita la cantidad de elementos del archivo y el tamaño de
estos (necesitan ser siempre del mismo tamaño).
Por este motivo, recurrimos a utilizar este arreglo, donde pedíamos memoria
para guardar la trama más grande posible y luego la llenábamos hasta un cierto
punto (aleatoriamente) y completábamos el resto con ceros.
2) La función rand genera un número aleatorio entre 0 Y RAND_MAX, donde este
valor es 32767. A pesar de que los campos de la estructura (del campo de bits)
tienen delimitado un entero máximo (dado por la cantidad de bits reservado
para cada campo), si se ingresa un número mayor a este el campo guardará
automáticamente los bits menos significativos de su representación.
Por ej.: la representación binaria del entero 6 es 110 (utiliza 3 bits). Si
almacenáramos un 6 en un campo que tiene reservado solo 2 bits, guardaría 10
(que sería realmente el entero 2).
4
Trabajo practico N°1 Bovina, Matias – B-5751/7 Lujan, Lionel – L-2925/4
5
Trabajo practico N°1 Bovina, Matias – B-5751/7 Lujan, Lionel – L-2925/4