martes, 21 de julio de 2015

MAQUINAS VIRTUALES


Una Máquina Virtual de Sistema es un programa que nos permite albergar un Ordenador Ficticio dentro de un Ordenador existente, es decir, un software que simula por completo el comportamiento de un Ordenador real sin que este exista, albergado virtualmente en un ordenador físico.

Este tipo de programas nos permitirán con un solo PC disponer de múltiples Sistemas Operativos funcionando simultáneamente usando tan solo una única máquina físicaLas Máquinas virtuales tienen multitud de aplicaciones, nos permiten disponer de un ordenador con el que podemos funcionar sin miedo a estropear la configuración del ordenador anfitrión, podemos probar Sistemas Operativos nuevos en versión beta, instalar otros que no conocemos para familiarizarnos con los mismos y hacer experimentos de todo tipo sin correr ningún riesgo.

En una sola máquina Virtual podemos por ejemplo instalar varios PCS virtuales con distintos sistemas operativos y estudiar la forma de conectarlos en una red a través también de routers virtuales.

Otra utilidad primordial consiste en poder trabajar con aplicaciones que funcionan sobre distintos sistemas operativos al que posee el ordenador anfitrión, disponiendo de un solo Ordenador físico, esto a veces, resulta prácticamente imprescindible, cuando un ordenador con un sistema Operativo Servidor necesita trabajar con un programa que no corre sobre ese sistema servidor.


ALGUNAS MAQUINAS VIRTUALES

• VMware Workstation: Software desarrollado por EMC Corporation, empresa especializada en entornos de virtualización, es un programa completísimo y muy usado a nivel profesional, dispone de varias aplicaciones adicionales algunas de ellas gratuitas, nos permite incluso virtualizar un sistema físico real completo y transportarlo a cualquier ordenador anfitrión, es multiplataforma pudiendo instalarse sobre sistemas anfitriones Windows, Linux y Mac, evidentemente es una aplicación que en su versión completa es de pago, aunque algunas de sus aplicaciones son gratuitas.

• Virtual PC: Software propiedad de Microsoft, gratuito para instalar Windows XP sobre un Equipo Anfitrión con SO Windows 7, siempre y cuando la licencia de este sea legal. Solo funciona correctamente con Sistemas Windows tanto como Anfitrión o como Sistema invitado.

• Hiper-V: Es un Sistema de Máquina Virtual implementado en el Sistema Operativo Servidor Windows Server 2008, por lo tanto, está diseñado para funcionar exclusivamente sobre este Sistema Operativo quedando por lo tanto su uso relegado en la práctica al uso profesional.

• VirtualBox: Software desarrollado y propiedad de Oracle, completamente gratuito para uso no comercial, muy completo e indicado para el uso privado dada su gratuidad y eficacia, es además multiplataforma, siendo totalmente compatible con Sistemas Linux, Windows y Mac, muy recomendable para iniciarse en el mundo de la virtualización.

jueves, 16 de julio de 2015


Código de Hamming





Es un código que se utiliza en la detección y corrección de errores que se producen en la transmisión de códigos binarios, la palabra de código se conforma por los bits de comprobación y los bits de información.

Para poder continuar con el desarrollo del código es necesario tener en cuenta algunas generalidades y conceptos básicos:
Código binario: Es una representación unívoca de las cantidades, de tal forma que a cada una de éstas se le asigna una combinación de símbolos binarios.

Distancia entre dos combinaciones binarias: Viene dada por el número de bits que hay que cambiar en una de ellas para obtener la otra.

Distancia mínima de un código: Es la menor de las distancias entre dos combinaciones binarias cualesquiera pertenecientes a dicho código

El código de Hamming agrega tres bits adicionales de comprobación por cada cuatro bits de datos del mensaje. El algoritmo de Hamming puede corregir cualquier error de un solo bit, pero cuando hay errores en más de un bit, la palabra transmitida se confunde con otra con error en un sólo bit, siendo corregida, pero de forma incorrecta, es decir que la palabra que se corrige es otra distinta a la original, y el mensaje final será incorrecto sin saberlo.
El algoritmo es el siguiente:




Posición 1: salta 0, comprueba 1, salta 1, comprueba 1, 
Posición 2: salta 1, comprueba 2, salta 2, comprueba 2, etc.
Posición 4: salta 3, comprueba 4, salta 4, comprueba 4, etc.
Posición 8: salta 7, comprueba 8, salta 8, comprueba 8, etc.
Posición 16: salta 15, comprueba 16, salta 16, comprueba 16, etc.
Regla general para la posición n es: salta n-1 bits, comprueba n bits, salta n bits, comprueba n bits...




En otras palabras, el bit de paridad de la posición 2k comprueba los bits en las posiciones que tengan al bit k en su representación binaria. Dicho a la inversa, el bit 13, por ejemplo, es chequeado por los bits 8, 4 y 1, al ser estos los de su representación binaria: 13=1101(2); 8=1000(2); 4=0100(2); 1=0001(2). Así, por ejemplo, para los primeros términos se tiene: En la Posición 1 (2^0 = 1), comprobaríamos los bits: 3, 5, 7, 9, 11, 13... En la Posición 2 (2^1 = 2), los bits: 3, 6, 7, 10, 11, 14, 15...En la Posición 4 (2^2 = 4), los bits: 5, 6, 7, 12, 13, 14, 15, 20, 21, 22, 23...En la Posición 8 (2^3 = 8) tendríamos: 9, 10, 11, 12, 13, 14, 15, 24-31...



Siguiendo el algoritmo hasta completar la nueva cadena.



Consideremos la palabra de datos de 7 bits "0110101". Para ver cómo se generan y utilizan los códigos Hamming para detectar un error, observe las tablas siguientes. Se utiliza la d para indicar los bits de datos y la p para los de paridad. En primer lugar los bits de datos se insertan en las posiciones apropiadas y los bits de paridad calculados en cada caso usando la paridad par. 




La nueva palabra de datos (con los bits de paridad) es ahora "10001100101". Consideremos ahora que el bit de la derecha, por error, cambia de 1 a 0. La nueva palabra de datos será ahora "10001100100".





Si se analiza en la tabla anterior la paridad que se debe obtener a la derecha tras la llegada del mensaje sin errores debe ser siempre 0 (por cada fila), pero en el momento en que ocurre un error esta paridad cambia a 1, de allí el nombre de la columna "prueba de paridad 1". Se observa que en la fila en que el cambio no afectó la paridad es cero y llega sin errores.


El paso final es evaluar los bits de paridad (recuerde que el fallo se encuentra en d7). El valor entero que representan los bits de paridad es 11 (si no hubieran ocurrido errores este valor seria 0), lo que significa que el bit décimo primero de la palabra de datos (bits de paridad incluidos) es el erróneo y necesita ser cambiado.

Todos los bits cuya posición es potencia de dos se utilizan como bits de paridad (posiciones 1, 2, 4, 8, 16, 32, 64, etc.). Los bits del resto de posiciones son utilizados como bits de datos (posiciones 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, etc.). Cada bit de paridad se obtiene calculando la paridad de alguno de los bits de datos. La posición del bit de paridad determina la secuencia de los bits que alternativamente comprueba y salta, a partir de éste, tal y como se explica a continuación.
CODIGOS DE HUFFMAN

Definición : La codificación de Huffman es una técnica para la compresión de datos, ampliamente usada y muy efectiva.


Fichero con 100.000 caracteres. Se sabe que aparecen 6 caracteres diferentes y la frecuencia de aparición de cada uno de ellos es :


¿Cómo codificar los caracteres para comprimir el espacio ocupado utilizando un código binario?

Solución 1: Código de longitud fija

Para 6 caracteres se necesitan 3 bits (300000 bits)




Solución 2 : Código de longitud variable en el que los más frecuentes tienen el código más corto. Restricción : ningún código es prefijo de otro.

( 224000 bits )



Esta técnica de codificación se denomina código prefijo.

Codificación : Basta con concatenar el código de cada uno de los caracteres.
Ejemplo :
aabacd  º 0×0×101×0×100×111º 001010100111

Descodificación : Fácil porque ningún código es prefijo de otro código Þ NO hay ambigüedad.

Ejemplo :
101011101111011100 º  badadcf

¡ Es la única posibilidad !

Un árbol binario  es una forma de representar el código prefijo que simplifica el proceso de descodificación :
  •  Las hojas son los caracteres.
  •  El camino de la raíz a la hojas con la interpretación 0 a la izquierda y 1 a la derecha nos da el código de cada hoja.


Este sería el árbol binario de la codificación de longitud fija:


Y éste el de la codificación de longitud variable :



Dado T el árbol binario que corresponde a una codificación prefijo, es fácil averiguar el número de bits necesarios para codificar el fichero :

Para cada carácter c diferente del alfabeto C que aparece en el fichero,
  • Sea f(c) la frecuencia de c en la entrada.
  • Sea dT(c)la profundidad de la hoja c en el árbol T, entonces el número de bits requeridos es :


B(T) = å  f(c)× dT(c)
         cÎ C
B(T) nos da el coste de T.

Algoritmo Greedy
Huffman inventó un algoritmo voraz que construye una codificación prefijo óptima.
Construye un árbol binario de códigos de longitud variable de manera ascendente de modo que [MIN] B(T).

Ejemplo de funcionamiento


Fase 1. : Caracteres colocados en orden creciente de frecuencia.



Fase 2. y posteriores : Fusionar hasta obtener un sólo árbol manteniendo la ordenación creciente





jueves, 9 de julio de 2015

código binario



Mi nombre en Números Binarios






TANIA = 01010100 01000001 01001110 01001001 01000001

LOPEZ= 01001100 01001111 01010000 0100101 01011010

PEREZ= 01000101 01000101 01010010 01000101 01011010