jueves, 15 de octubre de 2009

Exokernel

Que es ?

Primero tendremos que definir que es un nucleo, y pues el nucleo es la parte o componente mas importante de un sistema operativo ya que es el que actua como interfaz entre los distintos software y hardware del computador, existen varios tipos de nucleos, pero este en particular es una de las nuevos diseños para la creacion de nucleos en donde no se virtualizan o abstraen los recursos del hardware es decir que no se ocultan los recursos del hardware a las aplicaciones y lo que se obtenia como resultado eran una limitacion en el rendimiento pero para los programadores era mucho mas fácil escribir programas ya que para acceder a los recursos del hardware lo hacian de una forma conceptual, todo lo contrario a lo que ocurre con este nucleo en donde los programas desarrollados por los programadores pueden acceder directamente a la memoria, bloques del disco duro, y el nucleo se limita unicamente a asegurar la proteccion de los recursos es decir que esten disponibles y que puedan ser utilizados por las aplicaciones y tambien el multiplexado de los recursos



Como funciona ?

Para asegurar la proteccion de los recursos el exokernel se vale de tres tecnicas las cuales son:Negrita
  • Secure Bindings: utiliza estos enlaces seguros para que las aplicaciones de forma segura puedan unir recursos del hardware y controlar asi los eventos.
  • Visible Resource Revocation: utilizando la revocacion de los recursos visibles las aplicaciones solicitan un recurso mediante el uso de un protocolo de revocacion de los recursos.
  • Abort Protocol:utilizando un protocolo de aborto el exonucleo puede romper los enlaces de las solicitudes que no responden.
Como se puede observar solo se proporciona una interfaz ha muy bajo nivel es por eso que ademas de las especificaciones anteriores el exokernel brinda una "Biblioteca del Sistema Operativo" para facilitar de cierta forma al programador a crear soluciones de software con funcionalidades extendibles.



Caracteristicas :

  • El exokernel es eficiente debido al numero limitado de operaciones primitivas sencillas que aporta.
  • Debido al bajo nivel de seguridad en la multiplexación de los recursos de hardware proporciona baja utilizacion de los recursos del sistema.
  • Abstracciones tradicionales como la Memoria Virtual (VM) y los Interprocesos de Comunicacion (IPC) pueden ser implementados de forma eficiente a nivel de aplicación, en donde podria extenderse fácilmente, especializarse o sustituirse.
  • Las aplicaciones pueden crear efectos especiales de las implementaciones de las abstracciones adaptandolas a sus necesidades y funcionalidades de rendimiento.

Ventajas:
  • Mejor utilización de los recursos.
  • Mayor rendimiento en los recursos.
  • Mayor eficiencia en lautilizacion de los recursos.

Desventajas:
  • Mayor complejidad para el desarrollo de software.
  • Carece de funcionalidades de alto nivel a comparacion de otros Sistemas Operativos.

Enlaces Consultados:
Exonucleo (wikipedia)
Exonucleo (MIT)
Exonucleo (Cambridge, MA 02139, U.S.A)
Exonucleo (Francisco J. Ballesteros )
Kernel (Lycos)




Creative Commons License
Esta obra está bajo una licencia Creative Commons.

jueves, 24 de septiembre de 2009

Gusanos Informaticos


Que son ?

Son programas maliciosos o malware por su abreviatura en ingles, los cuales viajan por la red residiendo en la memoria y pueden reproducirse de si mismo en grandes cantidades, por esta razón de que se reproduzcan en grandes cantidades son fácilmente detectados ya que consume los recursos inmediatamente del sistema, son conocidos también como IWorm.




Como funcionan ?

A diferencia de los virus no necesitan alojarse en el disco duro y se reproducen de si mismos sin la intervención del usuario y pueden viajar de terminal en terminal únicamente conociendo la dirección de otra terminal y así sucesivamente un ejemplo de estos podría ser en los correos en donde el gusano informático podría enviarse como adjunto del correo y al ejecutarse podría obtener las direcciones de correo de todos los usuarios y reenviarse, también puede reenviarse conociendo las cabeceras de los correos para obtener las direcciones ip y basándose en protocolos para viajar como el ICMP el cual es un protocolo de transferencia de correos e IRC que es un protocolo de comunicación utilizado para chat, y así lograr su propagación.




Que daños provoca ?

Sus principales objetivos son la de ocupar el ancho de banda, distribuyéndose por toda la red ya sea Intranet o Internet, lo que provoca que las conexiones se vuelvan lentas y así hacer que servidores completos caigan o que un usuario tenga que esperar bastante tiempo por un servicio ofrecido por uno de estos servidores y en el peor de los casos pueden provocar que un usuario sin autorización tome control remotamente del sistema..


Que sistemas operativos pueden ser afectados ?

Todos los sistemas operativos se encuentran propensos a sufrir de este tipo software malicioso algunos quizá en menor medida que otros pero debido a que viajan por protocolos estándar de red de comunicacion mayormente pueden estar presentes en cualquier sistema, por ejemplo uno de los primeros ataques que se dio con este tipo de malware fue acceder a un servidor Unix de donde se obtuvieron las ips de las terminales que accedían a el y así poder replicarse.
Información de este tipo de malware en otros sistemas diferentes a windows se puede encontrar en los siguientes enlaces


Malware Linux
Malware Mac

Enlaces consultados

es.kioskea.net
es.wikipedia.org
masadelante.com

Imagenes
Noticias Tech





Creative Commons License
Esta obra está bajo una licencia Creative Commons.

miércoles, 5 de agosto de 2009

Firmware



Qué es ?

Es la capa que se encuentra entre el hardware y el software, o que actúa como interfaz entres estas dos partes, es un intermedio entre software y hardware, se dice que es software porque es almacenado en memorias de solo lectura (ROM) estableciendo una lógica para el manejo de componentes del hardware y se crea bajo un lenguaje, también se dice que es hardware porque se incrusta en el circuito mismo del algún dispositivo de hardware, en síntesis el firmware es un contenido programado incrustado en dispositivos de hardware para su manejo, ejemplos de estos son los celulares , procesadores, iphone, calculadoras, pantallas electrónicas, etc.



Para qué Sirve?

Sirve para controlar los componentes de los dispositivos a los cuales pertenezca dicho firmware, para que cumpla con diferentes funciones a nivel del hardware, ya sea para iniciarlo al momento de encender el aparato, como lo son las BIOS de los computadores y los Celulares Programables, etc..



Donde se Implementan?

Los Firmware son implementados en todos aquellos dispositivos que son programables, es decir en aquellos dispositivos a los cuales se les puede dar instrucciones para que las ejecute el hardware, es entonces cuando el Firmware entra en acción y estas acciones introducidas por el usuario son implementadas o realizadas por el hardware debido a esta interfaz o capa de comunicacion.


Ventajas/Desventajas de Actualización
Las ventajas que uno puede obtener al actualizar un Firmware son que se corrijan algunos bugs que contiene el firmware que actualmente se tiene, o que incorporen nuevas características en el manejo del hardware, ejemplos de estos hardwares que actualizan su firmware son los iPod, calculadoras programables, BIOS, camaras fotograficas, unidades de CD, impresoras, desventajas realmente no se tienen ya que siempre en una actualización se esperan mejoras, únicamente lo que existe son riesgos al momentos de realizar la actualización, ya que algunos procesos de actualizacion son complicados, aunque actualmente las actualizaciones de firmware liberados por las empresas creadoras del hardware, son bastante faciles de instalar ya que ahora traen interfaces vistosas y muy faciles de utilizar, ejemplo de estos tipos de software para instalar Firmware es RockBox el cual brinda un software para instalar un Firmware Open Source para controlar los iPod.



Enlaces de Interes:
Diferencia Firmware y Driver

Definiciones Hardware,Software,Firmware (ingles)
Rockbox Firmware para iPod (ingles)
Rockbox en Accion (video)
Pagina de Firmware de algunos dispositivos



Articulos Consultados:
Wikipedia: firmware (ingles)
Wikipedia: firmware (español)

Definiciones Hardware,Software,Firmware (ingles)




Creative Commons License
Esta obra está bajo una licencia Creative Commons.

sábado, 4 de julio de 2009

JUnit y Assert en Java

Que es Junit ?

Es un framework o conjunto de librerias, que se utilizan en las aplicaciones escritas en lenguaje

java las cuales puden ser testeadas apartir de pruebas unitarias con la ayuda de este framework

la cual proporciona clases de las cuales se pueden heredar para formar las nuevas clases que

seran las que realizen las pruebas unitarias ha cada una de las clases que conformen nuestra

aplicacion o proyecto, una prueba puede estar conformada por una serie de datos, utilizacion y

resultados, este ultimo se compara con los datos que en realidad deberia de mostrar el software

para tener un conocimiento si nuestra aplicacion esta cumpliendo con hacer lo solicitado.

Para iniciar con la construccion del testeo habra que creear una clase que herede de TestCase

del paquete junit.framewok para cada una de las clases de nuestra aplicacion y por cada metodo

que tengamos hacer tambien un metodo de prueba, cuyos nombre de metodos empiezen por

"test" y dentro de estos aplicar los diferentes ASSERT.


Que es un Assert ?

Es una clase del paquete junit.framework la cual nos proporciona un conjunto de metodos los cuales

son lo que realmente hacen la prueba si un metodo especifico de nuestra clase esta hacien las cosas

correctamente como deberia, y el funcionamiento de estos metodos no es complicada simplemente

si la condicion da algun tipo de error entonces la prueba no cumple con lo solicitado es decir que se

genero un error en la prueba unitaria.



A continuacion una lista de las pruebas que nos proporciona Assert:


assertArrayEquals ( byte[] esperado, byte[] real )

Afirma que dos matrices de bytes son iguales.

assertArrayEquals ( char[] esperado, char[] real )

Afirma que dos conjuntos de caracteres son iguales.

assertArrayEquals ( int[] esperado, int[] real )

Afirma que dos matrices son iguales int.

assertArrayEquals ( long[] esperado, long[] real )

Afirma que dos matrices son iguales largo.

assertArrayEquals ( Object[] esperado, Object[] real )

Afirma que dos conjuntos de objetos son iguales.

assertArrayEquals ( short[] esperado, short[] real )

Afirma que dos breves conjuntos son iguales.

assertArrayEquals (String mensaje, byte[] esperado, byte[] real)

Afirma que dos matrices de bytes son iguales.

assertArrayEquals ( String mensaje, char[] esperado, char[] real )

Afirma que dos conjuntos de caracteres son iguales.

assertArrayEquals ( String mensaje, int[] esperado, int[] real)

Afirma que dos matrices son iguales int.

assertArrayEquals ( String mensaje, long[] esperado, long[] real )

Afirma que dos matrices son iguales largo.

assertArrayEquals ( String mensaje, Object[] esperado, Object[] real)

Afirma que dos conjuntos de objetos son iguales.

assertArrayEquals ( String mensaje, short[] esperado, short[] real )

Afirma que dos breves conjuntos son iguales.

assertEquals (double esperado, double real, double delta)

Afirma que dos doubles o float son iguales dentro de un delta.

assertEquals ( long esperado, long real )

Asserts that two longs are equal. Afirma que dos largos son iguales.

assertEquals (Object esperado, Object real )

Afirma que dos objetos son iguales.

assertEquals (String mensaje, double esperado, double real, double delta)

Afirma que dos doubles o float son iguales dentro de un delta.

assertEquals ( String mensaje, long esperado, long real )

Afirma que dos long son iguales.

assertEquals ( String message, Object expected, Object actual )

Afirma que dos objetos son iguales.

assertFalse ( boolean condicion )

Afirma que una condición es falsa.

assertFalse (String mensaje, boolean condicion)

Afirma que una condición es falsa.

assertNotNull (Object objeto)

Afirma que un objeto no es nulo.

assertNotNull (String mensaje, Object objeto)

Afirma que un objeto no es nulo.

assertNotSame (Object noEsperado, Object real)

Afirma que dos objetos no se refieren al mismo objeto.

assertNotSame (String mensaje, Object noEsperado, Object real)

Afirma que dos objetos no se refieren al mismo objeto.

assertNull (Object objeto)

Afirma que un objeto es nulo.

assertNull ( String mensaje, Object objeto)

Afirma que un objeto es nulo.

assertSame (Object esperado, Object real)

Afirma que dos objetos se refieren al mismo objeto.

assertSame (String mensaje, Object esperado, Object real) Afirma que dos objetos se refieren al mismo objeto.

assertTrue (boolean condicion) Afirma que una condición es verdadera.

assertTrue (String mensaje, boolean condicion) Afirma que una condición es verdadera.

fail () Falla una prueba y sin mensaje.

fail (String message) Falla una prueba con un mensaje dado.



CREANDO UNAS PRUEBAS PARA UNAS CLASES EN NETBEANS


Primero que nada creamos un nuevo proyecto, y por ejemplo creamos la clase llamada Usuario, en el podremos agregar un metodo que nos pida como parametros el anio de nacimiento del usuario y que
nos devuelva la edad que tiene el usuario, seria un metodo asi:

int agregarANacimiento(int anio)
{
this.edad = 2009 - anio;
return this.edad;
}

Ahora creamos seleccionamos la clase que contiene este metodo, nos vamos a la opciones de herramientas
de NETBEANS seleccionamos la opcion de CREATE JUNITS TEST nos aparece una ventanita donde podemos elegir algunas opciones que deseemos como los comentarios y algunos otros metodos que pueden ser generados automaticamente, nos despreocupamos de eso por el momento y clikeamos en la opcion OK, esto hace que se genere una nueva clase con el postfijo TEST es decir en mi caso la claseseria UsuarioTest.java aca estan los metodos que podemos utilizar para realizar nuestras pruebas unitarias haciendo uso de ASSERTS como vamos ha ver a continuacion

public void testAgregarANacimiento() {
System.out.println("agregarANacimiento");
int anio = 0;
Usuario instance = new Usuario();
int expResult = 0;
int result = instance.agregarANacimiento(anio);
assertEquals(expResult, result);
// TODO review the generated test code and remove the default call to fail.
fail("The test case is a prototype.");
}

el codigo anterior es lo que nos genera NETBEANS, ahora supongamos q OBLIGATORIAMENTE los usuarios deben tener una edad igual a 18 años, entonces podemos hacer uso del metodo "assertEquals" para comparar si el metodo agregarANacimiento(int anio) devuelve un valor igual a 18, para asi determinar si el usuario tiene 18 años, modificando el codigo generado queda de la siguiente forma.

public void testAgregarANacimiento() {
System.out.println("agregarANacimiento");
int anio = 2000;
Usuario instance = new Usuario();
int expResult = 18;
int result = instance.agregarANacimiento(anio);
assertEquals("USTED NO TIENE 18 años",expResult, result);

}

podemos darnos cuenta que "anio" ahora tiene un valor de 2000 esto quiere decir que al querer hacer el calculo de la edad tendremos un resultado igual a 9, por lo que el metodo

assertEquals("USTED NO TIENE 18 años",expResult, result);

espera un resultado igual a 18, sino es asi lanza el mensaje que nosotros queramos que seria el primer parametro enviado, luego el "expResult" es donde hemos dicho que lo compare con el valor de 18 y "result" es el resultado de la operacion realizada por el metodo que se esta testeando(probando), ahora para probarlo seleccionamos la clase de prueba en este caso UsuarioTest.java y le damos click derecho y le damos RUN, observamos lo siguiente


podemos observar que aparece el mensaje que nosotros definimos si quisieramos que el TEST o prueba sea satisfactorio unicamente deberemos colocar un valor a "expResult" de 9 q es el resultado de 2009 - 2000 o restarle con un anio igual 1991 y eso es lo que nos dara como resultado una prueba satisfactoria.