!!!!............. BIENVENIDOOOOOOOOOS....................!!!

BIENVENIDOS A MI BLOG ESPERO QUE LES GUSTE Y QUE LE SEA DE SU AGRADO :) :) :):):)

martes, 27 de julio de 2010

*** Intel Core i7

Intel Core i7 es una familia de procesadores de cuatro núcleos de la arquitectura Intel x86-64. Los Core i7 son los primeros procesadores que usan la microarquitectura Nehalem de Intel y es el sucesor de la familia Intel Core 2. El identificador Core i7 se aplica a la familia inicial de procesadores con el nombre clave Bloomfield.

El pseudónimo Core i7 no tiene un significado concreto, pero continúa con el uso de la etiqueta Core. Estos procesadores, primero ensamblados en Costa Rica, fueron comercializados el 17 de noviembre de 2008, y actualmente es manufacturado en las plantas de fabricación que posee Intel en Arizona, Nuevo México y Oregón, aunque la de Oregón se prepara para la fabricación de la siguiente generación de procesadores de 32 nm.

Las memorias y placas base aptas para Core i7 serán vendidos antes del lanzamiento por algunos proveedores.

Producción: Desde 2008

Fabricante: Intel Velocidad de CPU: 2,66 GHz a 3,33 GHz

Procesos:
(Longitud de canal del MOSFET)
0.045 µm a 0.032 µm

Conjunto de instrucciones: x86, x86-64, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2 Microarquitectura: Nehalem

Socket: Socket B (LGA 1366) (LGA 1156)

Nombre de núcleo: Bloomfield

Características de Core i7

Nehalem representa el cambio de arquitectura más grande en la familia de procesadores Intel x86 desde el Pentium Pro en 1995. La arquitectura Nehalem tiene muchas nuevas características. La primera representa un cambio significativo desde el Core 2:

  • FSB es reemplazado por la interfaz QuickPath en i7 e i5 (socket 1366), y sustituido a su vez en i7, i5 e i3 (socket 1156) por el DMI eliminado el northBrige e implementando puertos PCI Express (16 lineas en total) directamente, debido a que es mas complejo y caro. Las placas base deben utilizar un chipset que soporte QuickPath. De momento solo está disponible para placas base de Asrock, Asus, DFI , EVGA , GigaByte , Intel , MSI y XFX.
  • El controlador de memoria se encuentra integrado en el mismo procesador.
  • Memoria de tres canales (ancho de datos de 192 bits): cada canal puede soportar una o dos memorias DIMM DDR3. Las placa base compatibles con Core i7 tienen cuatro (3+1) o seis ranuras DIMM en lugar de dos o cuatro, y las DIMMs deben ser instaladas en grupos de tres, no dos.
  • Soporte para DDR3 únicamente.
  • Turbo Boost: La misma permite a los distintos núcleos acelerarse "inteligentemente" por sí mismos cada 133 MHz por encima de su velocidad oficial, mientras que los requerimientos térmicos y eléctricos de la CPU no sobrepasen los predeterminados.
  • Dispositivo Single-die: Los cuatro núcleos, el controlador de memoria, y la cache se encuentran dentro del mismo encapsulado.
  • HyperThreading reimplementado. Cada uno de los cuatro núcleos puede procesar dos tareas simultáneamente, por tanto el procesador aparece como ocho CPUs desde el sistema operativo. Esta característica estaba presente en la antigua microarquitectura Netburst introducida en los Pentium 4 HT.
  • Solo una interfaz QuickPath: No concebida para placas base multiprocesador.
  • Tecnología de proceso de 45 nm o 32 nm.
  • 731 millones de transistores (1.170 millones en el Core i7 980x, con 6 núcleos y 12 MB de memoria caché).
  • Sofisticada administración de energía, puede colocar un núcleo no utilizado en modo sin energía.
  • Capacidad de overclocking muy elevada (se puede acelerar sin problemas hasta los 4-4,1 GHz).

Desventajas

  • El Core i7, o por lo menos, las placas base para el Core i7 comercializadas a partir del 13 de noviembre de 2008, no son compatibles con ECC (Error checking and correction) de memoria. Algunos expertos, como por ejemplo, Daniel Bernstein, recomiendan que sistemas sin soporte ECC no se usen para la computación científica, y en general tampoco a menos que al usuario no le importen los errores en los datos críticos.
  • El Core i7 tiene un alto consumo, prácticamente dobla los anteriores, pues es capaz de gastar 160W él solo, con el consiguiente problema térmico. Por tanto, requiere una caja de calidad y una fuente de alimentación potente. Por este motivo se debe tener en cuenta que el equipo entero, más monitor, puede estar consumiendo del orden de 500 ó 600 wats. Aunque tiene un TDP de 130 W, al ser una característica desactivable, su consumo se dispara.

Procesadores

· Las velocidades de reloj listadas aquí son en modo normal. La velocidad en un solo núcleo puede ser incrementada hasta 400 MHz cuando los otros están desactivados.

· El multiplicador del microprocesador aumenta automaticamente cuando las condiciones lo permiten, en los i7 920 pasa de 20 a 21, si esta habilitado el modo turbo.

· El 965 XE tiene multiplicadores separados para la memoria y los núcleos.

  • Las velocidades de memoria de DDR3-2000 son posibles, pero no soportadas por Intel.
  • Se han informado de velocidades de reloj de hasta unos 4 GHz, pero aún no están soportadas por Intel[

· El procesador tiene un Thermal Design Power de 130W y se ralentizará a sí mismo si es excedido. Esta característica puede ser deshabilitada.

· Los modelos Core i7 920, 940 y 965 Extreme, que aparecieron en el mercado el mes de noviembre del 2008 en lotes de 1.000 unidades con unos precios de 284, 562 y 999 dólares respectivamente.

Rendimiento

Se ha utilizado un Core i7 940 a 2.93GHz en un benchmark en 3DMark Vantage dando una puntuación de CPU de 17,966.El Core i7 920 a 2.66GHz da una puntuación de 16,294. En la anterior generación de procesadores Core, un Core 2 Quad Q9450 a 2.66GHz, se obtiene una puntuación de 11,131.

AnandTech ha probado el Intel QuickPath Interconnect (version de 4.8 GT/s) y encontró que el ancho de banda de copia usando triple-channel 1066 MHz DDR3 era de 12.0 GB/s. Un sistema Core 2 Quad a 3.0 GHz usando dual-channel DDR3 a 1066 MHz logra 6.9 GB/s.[16]

La técnica del overclocking será posible con la serie 900 y una placa baseX58. En octubre de 2008, surgieron informes de que no será posible utilizar el "rendimiento" DIMM DDR3 que requieren voltajes superiores a 1.65V porque el controlador de memoria integrado en el núcleo i7 podría dañarse. Algunas pruebas, sin embargo, han demostrado que el límite de voltaje no es aplicado, como en una placa MSI, y los fabricantes pueden escoger enlazar el voltaje de la CPU a la memoria o no. Hacia el final de ese mes, los vendedores de memoria de alto desempeño han anunciado kits de memoria DDR3 1.65V con velocidades de hasta 2GHz. equipada con el chipset

Algunos viejos artículos han sugerido que el diseño del i7 no es ideal para el desempeño en juegos. En un test hecho en hardware filtrado, un Core i7 940 comparado a un QX9770 mostraba que el Core i7 es más lento que el Yorkfield ciclo a ciclo en 2 juegos mientras que fue más rápido en otros dos. La diferencia en todos los casos es pequeña. Sin embargo, pruebas más recientes hechas en todas las velocidades del hardware oficial con controladores finales y revisiones de BIOS muestran que el Core i7 mínimamente vence al Yorkfield ciclo a ciclo de reloj, y en muchos casos lo excede en un promedio del 17%.

En una prueba del Super PI 1M monotarea, un Core i7 920 corriendo a 2.66 Ghz finalizó la prueba en 15.36 segundos, mientras que un QX9770 (3.2 Ghz) la finalizó en 14.42 segundos, entonces el Core i7 ha ejecutado 15.5% menos instrucciones en esta prueba.

El Core i7 posee tres canales de memoria, y la velocidad de los mismos puede ser escogida configurando el multiplicador de memoria. Sin embargo, en antiguos benchmarks, cuando la velocidad es establecida más allá del umbral (1333 para un 965XE) el procesador solo accederá a dos canales de memoria simultáneamente. Un 965XE tiene mejor procesamiento de memoria con 3 módulos DDR3-1333 que con 3 DDR3-1600, y 2 módulos DDR3-1600 tienen casi el mismo rendimiento que 3 DDR3-1600.

Puesto que el Core i7 es un procesador de cuatro núcleos, la tecnología HyperThreading no produce ninguna mejora en la ejecución de cargas de trabajo con menos de cinco tareas simultáneas cuando todos los núcleos estan encendidos, y algunas aplicaciones sufren una bajada en el rendimiento cuando HyperThreading está activado. Esta tecnología ofrece su mejor rendimiento cuando la carga de trabajo es de ocho o más tareas simultáneas.

SISTEMAS OPERATIVOS......!


3.1. Introducción

3.2. Tipos de sistemas operativos

3.3. El Sistema Operativo MS-DOS

3.4. El Sistema Operativo Windows

3.1. INTRODUCCIÓN


Definición:

  • Es un programa (o conjunto de programas) de control que tienen por objeto facilitar el uso del computador y conseguir que este se utilice eficientemente.


Características:

  • Es el único programa del que no se puede prescindir
  • Gestiona periféricos, ficheros y usuarios
  • Ofrece un entorno para el desarrollo del trabajo del ordenador


Los SO más comunes tienen dos grandes niveles diferenciables:

A) Nivel bajo o nucleo del SO

B) Nivel alto, de utilidades y herramientas

A) NÚCLEO DEL SISTEMA OPERATIVO

  • Gestión del procesador y reparto de su tiempo de proceso
  • Gestión de memoria
  • Control de los recursos de almacenamiento y de entrada/salida
  • Control de errores y sistemas de protección
  • Gestión del interfaz con el usuario


B) HERRAMIENTAS Y UTILIDADES

  • Gestión de los periféricos
  • Manipulación de los sistemas de almacenamiento en disco
  • Editor
  • Ensamblador
  • Gestión de usuarios
  • Herramientas de modificación de sistema
  • Compiladores e Interpretes de lenguaje de programación
  • Procedimientos telemáticos


En resumen:

  • Un SO es un conjunto de programas de control que gestiona periféricos, ficheros y usuarios y ofrece un entorno para el desarrollo del trabajo del ordenador


3.2. TIPOS DE SISTEMAS OPERATIVOS

Tradicionalmente se han desarrollado varios tipos de SO, que dividiremos en:

MS-DOS

WINDOWS

OTROS (UNIX, Linux, OS/2, etc.)

1.-MS-DOS

  • Interacción con el usuario en forma de lenguaje de comandos
  • Múltiples utilidades en la manipulación de fichero
  • La estructuración de los directorios es en forma de directorios o subdirectorios jerárquicos
  • Gestión versátil de los periféricos
  • Procesamiento por lotes


2.- WINDOWS (FINDER)

  • La pantalla se convierte en una mesa de escritorio con una serie de objetos y accesorios
  • Utilización del ratón

  • Los programas presentan por sí mismos las distintas alternativas al usuario en forma de menús o diálogos

  • Presentación de la información en forma de ventanas
  • Windows 3.1, Windows 3.11, Windows 95, Windows 98, Windows NT, Windows Millenium, Windows XP…


3.- Otros Sistemas Operativos

Pensados para operar en forma multiusuario y multitareas, con gran cantidad de herramientas y utilidades

  • UNIX, LINUX, OS/2


3.3. El SISTEMA OPERATIVO MS-DOS

3.3.1. Características

  • MS-DOS (Microsoft Disk Operating System) sistema operativo lanzado en 1981 por IBM
  • Carece de interfaz gráfico: pantalla negra en la que escribimos
  • Funciona mediante órdenes y comandos C:\>


3.3.2. LA LÍNEA DE COMANDOS

  • La interacción con el usuario es en forma de comandos (instrucciones), que éste deberá ir escribiendo en la línea de comandos

  • DOS indica la línea de comandos a través del símbolo de sistema : C:\>
  • Los comandos se escriben a continuación para especificar las tareas que el DOS ha de realizar


PARTES DE UN COMANDO

a. Nombre del comando: indica la acción (C:\>del)

b. Parámetros (uno o más): define el elemento sobre el que queremos que se actúe (C:\>del *.doc)

c. Modificadores: modifican la manera en que un comando realiza una tarea. Se representa con una barra diagonal (/) seguida de una sola letra (C:\>dir /p)

Especificación de la unidad de disco : la unidad actual (prompt) se presenta como la primera letra del símbolo de sistema. Generalmente,

A: ó B: unidad de disco

C: unidad de disco duro

D: unidad de zip

E: unidad del CD-ROM

Otras (F:, G:)

3.3.3. TRABAJO CON FICHEROS

Los ficheros sirven para organizar la información

Nombre de un archivo: Nombre + extensión (Nombre.ext)

  1. Nombre: podemos identificar el archivo por su nombre
  • no más de 8 caracteres
  • letras (A-Z), números (0-9), algunos caracteres especiales (subrayado_, símbolo de dólar $, símbolo de porcentaje %...no otros)
  • No podrán tener espacios, comas, barras inversas o puntos
  1. Extensión: sirve para identificar el tipo de archivo

DOS utiliza las siguientes:

.EXE (ejecutable) ó .COM (comando) para archivos que contienen programas

.SYS (sistema) archivos que contienen información del hardware

.BAT (por lotes) para archivos con listas de comandos que se ejecutan automáticamente.

n Al crear un archivo se podrá elegir una extensión que ayude a identificarlo (no mas de 3 carácteres)

n La mayor parte de los programas que crean archivos generan una extensión (.DOC, .XSL, .SAV...)

TIPOS DE ARCHIVOS

  1. Archivos de programa: contienen los programas que se necesitan para que funcione el ordenador (.EXE o .COM)
  2. Archivos de datos especiales: archivos que produce un programa que contienen códigos que sólo pueden ser leídos por ese programa (.DOC, .XLS, .PPT, .SAV, .SPO…)
  3. Archivos de texto sin formato: sólo contienen texto. Código ASCII ( .TXT)
  4. Archivos de sistema: información acerca del hardware (.SYS)
  5. Archivos de procesamiento por lotes: archivos de texto sin formato que contienen los comandos del DOS (.BAT)
  • DOS almacena, además de los nombres y extensión de los archivos, información sobre su tamaño (bytes que ocupan), la fecha y la hora en que fueron creados


OTRAS EXTENSIONES DE ARCHIVOS

.TXT texto normal

.DOC texto de Word

.WP texto de WordPerfect

.RTF texto de Windows

.WAV sonido de Windows

.XLS, .WK1 hoja de cálculo

.FLC, .FLI archivo de animación

.HTLM página web en htlm

.BMP, .TIF, imagen

.PWT, .HGP, PPT presentación

.CDR imagen del CorelDraw

.DBF base de datos

.AVI, .MOV archivo de video

.GIF, .JPG imágenes de Internet

COMODINES del DOS: sirven para sustituir a un nombre o a una extensión cuando deseamos realizar una misma tarea con un grupo de archivos

a) El asterisco (*) toma el lugar de una palabra completa o un grupo de caracteres

b) La interrogación de cierre (?) toma el lugar de un carácter único

3.3.4. TRABAJO CON DIRECTORIOS

Un disco es una especie de archivador compuesto de “carpetas” en las que se guardan grupos de ficheros. Estas carpetas se denominan directorios y nos ayudan a organizar los ficheros

Directorio raíz: al dar formato a un disquete o a un disco duro, DOS creará un directorio en el que serán almacenados todos los otros ficheros y directorios C:\>

Cuando una carpeta contiene tanta información que se hace difícil encontrar lo que se busca, se subdivide. De igual forma, cuando los directorios tienen un número demasiado grande de archivos, se pueden dividir en subdirectorios. De igual forma, se podrán crear subdirectorios dentro de los subdirectorios

Directorios y subdirectorios forman una estructura denominada árbol de directorios

La orden tree nos enseña la lista de directorios y subdirectorios

C:\>tree

En un directorio puede haber archivos y subdirectorios

Podemos seguir agregando directorios en cualquier nivel de la estructura hasta un máximo de 512 archivos y directorios en el directorio raíz de un disco duro

A veces,

  • Directorio padre: contiene subdirectorios
  • Directorio hijo: subdirectorio


Nombres para directorios

Cada directorio tiene un nombre y también puede tener una extensión

Reglas:

  1. El nombre debe tener entre uno y ocho caracteres
  2. Una extensión podrá tener hasta tres caracteres, separados del nombre por un punto
  3. Tanto los nombre como las extensiones podrán contener letras (A-Z), números (0-9), algunos caracteres especiales (subrayado_, símbolo de dólar $, símbolo de porcentaje %...no otros
  4. No podrán tener espacios, comas, barras inversas (\) o puntos.
  5. Dos subdirectorios que estén en el mismo directorio no podrán tener el mismo nombre. Sin embargo, podrá haber subdirectorios con el mismo nombre en directorios distintos

Rutas de acceso

La ruta de acceso indica el emplazamiento de un archivo dentro del árbol de directorios. Es el camino que debe seguir DOS, partiendo del directorio raíz, para llegar a un archivo en otro directorio

Ej: C:>\segundo\proceso\apuntes.doc

A menos que se indique de otro modo, se supondrá que queremos utilizar el árbol de directorios de la unidad actual

Para trabajar con archivos de un directorio que no sea el actual tendremos dos opciones:

  1. escribir la ruta de acceso del otro directorio

convertir el otro directorio en actual utilizando el comando cd (cambiar de directorio)

***JAVA.......!



CARACTERISTICAS DE JAVA


Las características principales que nos ofrece Java respecto a cualquier otro lenguaje de programación, son:

Es SIMPLE :

Java ofrece toda la funcionalidad de un lenguaje potente, pero sin las características menos usadas y más confusas de éstos. C++ es un lenguaje que adolece de falta de seguridad, pero C y C++ son lenguajes más difundidos, por ello Java se diseñó para ser parecido a C++ y así facilitar un rápido y fácil aprendizaje.

Java elimina muchas de las características de otros lenguajes como C++, para mantener reducidas las especificaciones del lenguaje y añadir características muy útiles como el garbage collector (reciclador de memoria dinámica). No es necesario preocuparse de liberar memoria, el reciclador se encarga de ello y como es un thread de baja prioridad, cuando entra en acción, permite liberar bloques de memoria muy grandes, lo que reduce la fragmentación de la memoria.

Java reduce en un 50% los errores más comunes de programación con lenguajes como C y C++ al eliminar muchas de las características de éstos, entre las que destacan:

* aritmética de punteros
* no existen referencias
* registros (struct)
* definición de tipos (typedef)
* macros (#define)
* necesidad de liberar memoria (free)

Aunque, en realidad, lo que hace es eliminar las palabras reservadas (struct, typedef), ya que las clases son algo parecido.

Además, el intérprete completo de Java que hay en este momento es muy pequeño, solamente ocupa 215 Kb de RAM.

ES ORIENTADO A OBJETOS :

Java implementa la tecnología básica de C++ con algunas mejoras y elimina algunas cosas para mantener el objetivo de la simplicidad del lenguaje. Java trabaja con sus datos como objetos y con interfaces a esos objetos. Soporta las tres características propias del paradigma de la orientación a objetos: encapsulación, herencia y polimorfismo. Las plantillas de objetos son llamadas, como en C++, clases y sus copias, instancias . Estas instancias, como en C++, necesitan ser construidas y destruidas en espacios de memoria.

Java incorpora funcionalidades inexistentes en C++ como por ejemplo, la resolución dinámica de métodos. Esta característica deriva del lenguaje Objective C, propietario del sistema operativo Next. En C++ se suele trabajar con librerías dinámicas (DLLs) que obligan a recompilar la aplicación cuando se retocan las funciones que se encuentran en su interior. Este inconveniente es resuelto por Java mediante una interfaz específica llamada RTTI ( RunTime Type Identification ) que define la interacción entre objetos excluyendo variables de instancias o implementación de métodos. Las clases en Java tienen una representación en el runtime que permite a los programadores interrogar por el tipo de clase y enlazar dinámicamente la clase con el resultado de la búsqueda.

ES DISTRIBUIDO :

Java se ha construido con extensas capacidades de interconexión TCP/IP. Existen librerías de rutinas para acceder e interactuar con protocolos como http y ftp . Esto permite a los programadores acceder a la información a través de la red con tanta facilidad como a los ficheros locales.

La verdad es que Java en sí no es distribuido, sino que proporciona las librerías y herramientas para que los programas puedan ser distribuidos, es decir, que se corran en varias máquinas, interactuando.

ES ROBUSTO :

Java realiza verificaciones en busca de problemas tanto en tiempo de compilación como en tiempo de ejecución. La comprobación de tipos en Java ayuda a detectar errores, lo antes posible, en el ciclo de desarrollo. Java obliga a la declaración explícita de métodos, reduciendo así las posibilidades de error. Maneja la memoria para eliminar las preocupaciones por parte del programador de la liberación o corrupción de memoria. También implementa los arrays auténticos , en vez de listas enlazadas de punteros, con comprobación de límites, para evitar la posibilidad de sobreescribir o corromper memoria resultado de punteros que señalan a zonas equivocadas. Estas características reducen drásticamente el tiempo de desarrollo de aplicaciones en Java.

Además, para asegurar el funcionamiento de la aplicación, realiza una verificación de los byte-codes , que son el resultado de la compilación de un programa Java. Es un código de máquina virtual que es interpretado por el intérprete Java. No es el código máquina directamente entendible por el hardware, pero ya ha pasado todas las fases del compilador: análisis de instrucciones, orden de operadores, etc., y ya tiene generada la pila de ejecución de órdenes.

Java proporciona, pues:

* Comprobación de punteros
* Comprobación de límites de arrays
* Excepciones
* Verificación de byte-codes

ES DE ARQUITECTURA NEUTRAL :

Para establecer Java como parte integral de la red, el compilador Java compila su código a un fichero objeto de formato independiente de la arquitectura de la máquina en que se ejecutará. Cualquier máquina que tenga el sistema de ejecución ( run-time ) puede ejecutar ese código objeto, sin importar en modo alguno la máquina en que ha sido generado. Actualmente existen sistemas run-time para Solaris 2.x, SunOs 4.1.x, Windows 95, Windows NT, Linux, Irix, Aix, Mac, Apple y probablemente haya grupos de desarrollo trabajando en el porting a otras plataformas.

El código fuente Java se "compila" a un código de bytes de alto nivel independiente de la máquina. Este código (byte-codes) está diseñado para ejecutarse en una máquina hipotética que es implementada por un sistema run-time, que sí es dependiente de la máquina.

En una representación en que tuviésemos que indicar todos los elementos que forman parte de la arquitectura de Java sobre una plataforma genérica, obtendríamos una figura como la siguiente:

En ella podemos ver que lo verdaderamente dependiente del sistema es la Máquina Virtual Java (JVM) y las librerías fundamentales, que también nos permitirían acceder directamente al hardware de la máquina. Además, habrá APIs de Java que también entren en contacto directo con el hardware y serán dependientes de la máquina, como ejemplo de este tipo de APIs podemos citar:

* Java 2D: gráficos 2D y manipulación de imágenes
* Java Media Framework : Elementos críticos en el tiempo: audio, video...
* Java Animation: Animación de objetos en 2D
* Java Telephony: Integración con telefonía
* Java Share: Interacción entre aplicaciones multiusuario
* Java 3D: Gráficos 3D y su manipulación
Es SEGURO :

La seguridad en Java tiene dos facetas. En el lenguaje, características como los punteros o el casting implícito que hacen los compiladores de C y C++ se eliminan para prevenir el acceso ilegal a la memoria. Cuando se usa Java para crear un navegador, se combinan las características del lenguaje con protecciones de sentido común aplicadas al propio navegador.

El lenguaje C, por ejemplo, tiene lagunas de seguridad importantes, como son los errores de alineación . Los programadores de C utilizan punteros en conjunción con operaciones aritméticas. Esto le permite al programador que un puntero referencie a un lugar conocido de la memoria y pueda sumar (o restar) algún valor, para referirse a otro lugar de la memoria. Si otros programadores conocen nuestras estructuras de datos pueden extraer información confidencial de nuestro sistema. Con un lenguaje como C, se pueden tomar números enteros aleatorios y convertirlos en punteros para luego acceder a la memoria:

printf( "Escribe un valor entero: " );

scanf( "%u",&puntero );

printf( "Cadena de memoria: %sn",puntero );

Otra laguna de seguridad u otro tipo de ataque, es el Caballo de Troya . Se presenta un programa como una utilidad, resultando tener una funcionalidad destructiva. Por ejemplo, en UNIX se visualiza el contenido de un directorio con el comando ls . Si un programador deja un comando destructivo bajo esta referencia, se puede correr el riesgo de ejecutar código malicioso, aunque el comando siga haciendo la funcionalidad que se le supone, después de lanzar su carga destructiva. Por ejemplo, después de que el caballo de Troya haya enviado por correo el /etc/shadow a su creador, ejecuta la funcionalidad de ls persentando el contenido del directorio. Se notará un retardo, pero nada inusual.

El código Java pasa muchos tests antes de ejecutarse en una máquina. El código se pasa a través de un verificador de byte-codes que comprueba el formato de los fragmentos de código y aplica un probador de teoremas para detectar fragmentos de código ilegal -código que falsea punteros, viola derechos de acceso sobre objetos o intenta cambiar el tipo o clase de un objeto-.

Si los byte-codes pasan la verificación sin generar ningún mensaje de error, entonces sabemos que:

* El código no produce desbordamiento de operandos en la pila
* El tipo de los parámetros de todos los códigos de operación son conocidos y correctos
* No ha ocurrido ninguna conversión ilegal de datos, tal como convertir enteros en punteros
* El acceso a los campos de un objeto se sabe que es legal: public, private, protected
* No hay ningún intento de violar las reglas de acceso y seguridad establecidas

El Cargador de Clases también ayuda a Java a mantener su seguridad, separando el espacio de nombres del sistema de ficheros local, del de los recursos procedentes de la red. Esto limita cualquier aplicación del tipo Caballo de Troya , ya que las clases se buscan primero entre las locales y luego entre las procedentes del exterior.

Las clases importadas de la red se almacenan en un espacio de nombres privado, asociado con el origen. Cuando una clase del espacio de nombres privado accede a otra clase, primero se busca en las clases predefinidas (del sistema local) y luego en el espacio de nombres de la clase que hace la referencia. Esto imposibilita que una clase suplante a una predefinida.

En resumen, las aplicaciones de Java resultan extremadamente seguras, ya que no acceden a zonas delicadas de memoria o de sistema, con lo cual evitan la interacción de ciertos virus. Java no posee una semántica específica para modificar la pila de programa, la memoria libre o utilizar objetos y métodos de un programa sin los privilegios del kernel del sistema operativo. Además, para evitar modificaciones por parte de los crackers de la red, implementa un método ultraseguro de autentificación por clave pública. El Cargador de Clases puede verificar una firma digital antes de realizar una instancia de un objeto. Por tanto, ningún objeto se crea y almacena en memoria, sin que se validen los privilegios de acceso. Es decir, la seguridad se integra en el momento de compilación, con el nivel de detalle y de privilegio que sea necesario.

Dada, pues la concepción del lenguaje y si todos los elementos se mantienen dentro del estándar marcado por Sun, no hay peligro. Java imposibilita, también, abrir ningún fichero de la máquina local (siempre que se realizan operaciones con archivos, éstas trabajan sobre el disco duro de la máquina de donde partió el applet), no permite ejecutar ninguna aplicación nativa de una plataforma e impide que se utilicen otros ordenadores como puente, es decir, nadie puede utilizar nuestra máquina para hacer peticiones o realizar operaciones con otra. Además, los intérpretes que incorporan los navegadores de la Web son aún más restrictivos. Bajo estas condiciones (y dentro de la filosofía de que el único ordenador seguro es el que está apagado, desenchufado, dentro de una cámara acorazada en un bunker y rodeado por mil soldados de los cuerpos especiales del ejército), se puede considerar que Java es un lenguaje seguro y que los applets están libres de virus.

Respecto a la seguridad del código fuente, no ya del lenguaje, JDK proporciona un desemsamblador de byte-code, que permite que cualquier programa pueda ser convertido a código fuente, lo que para el programador significa una vulnerabilidad total a su código. Utilizando javap no se obtiene el código fuente original, pero sí desmonta el programa mostrando el algoritmo que se utiliza, que es lo realmente interesante. La protección de los programadores ante esto es utilizar llamadas a programas nativos, externos (incluso en C o C++) de forma que no sea descompilable todo el código; aunque así se pierda portabilidad. Esta es otra de las cuestiones que Java tiene pendientes.

Es PORTABLE :

Más allá de la portabilidad básica por ser de arquitectura independiente, Java implementa otros estándares de portabilidad para facilitar el desarrollo. Los enteros son siempre enteros y además, enteros de 32 bits en complemento a 2. Además, Java construye sus interfaces de usuario a través de un sistema abstracto de ventanas de forma que las ventanas puedan ser implantadas en entornos Unix, Pc o Mac.

Es INTERPRETADO :
El intérprete Java (sistema run-time) puede ejecutar directamente el código objeto. Enlazar (linkar) un programa, normalmente, consume menos recursos que compilarlo, por lo que los desarrolladores con Java pasarán más tiempo desarrollando y menos esperando por el ordenador. No obstante, el compilador actual del JDK es bastante lento. Por ahora, que todavía no hay compiladores específicos de Java para las diversas plataformas, Java es más lento que otros lenguajes de programación, como C++, ya que debe ser interpretado y no ejecutado como sucede en cualquier programa tradicional.

Se dice que Java es de 10 a 30 veces más lento que C, y que tampoco existen en Java proyectos de gran envergadura como en otros lenguajes. La verdad es que ya hay comparaciones ventajosas entre Java y el resto de los lenguajes de programación, y una ingente cantidad de folletos electrónicos que supuran fanatismo en favor y en contra de los distintos lenguajes contendientes con Java. Lo que se suele dejar de lado en todo esto, es que primero habría que decidir hasta que punto Java, un lenguaje en pleno desarrollo y todavía sin definición definitiva, está maduro como lenguaje de programación para ser comparado con otros; como por ejemplo con Smalltalk, que lleva más de 20 años en cancha.

La verdad es que Java para conseguir ser un lenguaje independiente del sistema operativo y del procesador que incorpore la máquina utilizada, es tanto interpretado como compilado. Y esto no es ningún contrasentido, me explico, el código fuente escrito con cualquier editor se compila generando el byte-code. Este código intermedio es de muy bajo nivel, pero sin alcanzar las instrucciones máquina propias de cada plataforma y no tiene nada que ver con el p-code de Visual Basic. El byte-code corresponde al 80% de las instrucciones de la aplicación. Ese mismo código es el que se puede ejecutar sobre cualquier plataforma. Para ello hace falta el run-time, que sí es completamente dependiente de la máquina y del sistema operativo, que interpreta dinámicamente el byte-code y añade el 20% de instrucciones que faltaban para su ejecución. Con este sistema es fácil crear aplicaciones multiplataforma, pero para ejecutarlas es necesario que exista el run-time correspondiente al sistema operativo utilizado.

Es MULTITHREADED :

Al ser multithreaded (multihilvanado, en mala traducción), Java permite muchas actividades simultáneas en un programa. Los threads (a veces llamados, procesos ligeros), son básicamente pequeños procesos o piezas independientes de un gran proceso. Al estar los threads contruidos en el lenguaje, son más fáciles de usar y más robustos que sus homólogos en C o C++.

El beneficio de ser miltithreaded consiste en un mejor rendimiento interactivo y mejor comportamiento en tiempo real. Aunque el comportamiento en tiempo real está limitado a las capacidades del sistema operativo subyacente (Unix, Windows, etc.), aún supera a los entornos de flujo único de programa (single-threaded) tanto en facilidad de desarrollo como en rendimiento.

Cualquiera que haya utilizado la tecnología de navegación concurrente, sabe lo frustrante que puede ser esperar por una gran imagen que se está trayendo. En Java, las imágenes se pueden ir trayendo en un thread independiente, permitiendo que el usuario pueda acceder a la información en la página sin tener que esperar por el navegador.

Es DINAMICO :

Java se beneficia todo lo posible de la tecnología orientada a objetos. Java no intenta conectar todos los módulos que comprenden una aplicación hasta el tiempo de ejecución. Las librería nuevas o actualizadas no paralizarán las aplicaciones actuales (siempre que mantengan el API anterior).

Java también simplifica el uso de protocolos nuevos o actualizados. Si su sistema ejecuta una aplicación Java sobre la red y encuentra una pieza de la aplicación que no sabe manejar, tal como se ha explicado en párrafos anteriores, Java es capaz de traer automáticamente cualquiera de esas piezas que el sistema necesita para funcionar.

Java, para evitar que los módulos de byte-codes o los objetos o nuevas clases, haya que estar trayéndolos de la red cada vez que se necesiten, implementa las opciones de persistencia, para que no se eliminen cuando de limpie la caché de la máquina.

PROGRAMACION



Cuando se programa en Java, se coloca todo el código en métodos, de la misma forma que se escriben funciones en lenguajes como C.

Comentarios
En Java hay tres tipos de comentarios:

// comentarios para una sola línea

/* comentarios de una o

más líneas

*/

/** comentario de documentación, de una o más líneas

*/

Los dos primeros tipos de comentarios son los que todo programador conoce y se utilizan del mismo modo. Los comentarios de documentación, colocados inmediatamente antes de una declaración (de variable o función), indican que ese comentario ha de ser colocado en la documentación que se genera automáticamente cuando se utiliza la herramienta de Java, javadoc. Dichos comentarios sirven como descripción del elemento declarado permitiendo generar una documentación de nuestras clases escrita al mismo tiempo que se genera el código.

En este tipo de comentario para documentación, se permite la introducción de algunos tokens o palabras clave, que harán que la información que les sigue aparezca de forma diferente al resto en la documentación.

Identificadores
Los identificadores nombran variables, funciones, clases y objetos; cualquier cosa que el programador necesite identificar o usar.

En Java, un identificador comienza con una letra, un subrayado (_) o un símbolo de dólar ($). Los siguientes caracteres pueden ser letras o dígitos. Se distinguen las mayúsculas de las minúsculas y no hay longitud máxima.

Serían identificadores válidos:

identificador

nombre_usuario

Nombre_Usuario

_variable_del_sistema

$transaccion

y su uso sería, por ejemplo:

int contador_principal;

char _lista_de_ficheros;

float $cantidad_en_Ptas;

Palabras clave
Las siguientes son las palabras clave que están definidas en Java y que no se pueden utilizar como indentificadores:

abstract continue for new switch

boolean default goto null synchronized

break do if package this

byte double implements private threadsafe

byvalue else import protected throw

case extends instanceof public transient

catch false int return true

char final interface short try

class finally long static void

const float native super while

Palabras Reservadas
Además, el lenguaje se reserva unas cuantas palabras más, pero que hasta ahora no tienen un cometido específico. Son:

cast future generic inner

operator outer rest var

Literales
Un valor constante en Java se crea utilizando una representación literal de él. Java utiliza cinco tipos de elementos: enteros, reales en coma flotante, booleanos, caracteres y cadenas, que se pueden poner en cualquier lugar del código fuente de Java. Cada uno de estos literales tiene un tipo correspondiente asociado con él.

Enteros:

byte 8 bits complemento a dos

short 16 bits complemento a dos

int 32 bits complemento a dos

long 64 bits complemento a dos

Por ejemplo: 21 077 0xDC00

Reales en coma flotante:

float 32 bits IEEE 754

double 64 bits IEEE 754

Por ejemplo: 3.14 2e12 3.1E12
Booleanos:

true

false

Caracteres:

Por ejemplo: a t u????

[????] es un número unicode

Cadenas:

Por ejemplo: "Esto es una cadena literal"

Arrays
Se pueden declarar en Java arrays de cualquier tipo:

char s[];

int iArray[];

Incluso se pueden construir arrays de arrays:

int tabla[][] = new int[4][5];

Los límites de los arrays se comprueban en tiempo de ejecución para evitar desbordamientos y la corrupción de memoria.

En Java un array es realmente un objeto, porque tiene redefinido el operador []. Tiene una función miembro: length. Se puede utilizar este método para conocer la longitud de cualquier array.

int a[][] = new int[10][3];

a.length; /* 10 */

a[0].length; /* 3 */

Para crear un array en Java hay dos métodos básicos. Crear un array vacío:

int lista[] = new int[50];

o se puede crear ya el array con sus valores iniciales:

String nombres[] = {

"Juan","Pepe","Pedro","Maria"

};

Esto que es equivalente a:

String nombres[];

nombres = new String[4];

nombres[0] = new String( "Juan" );

nombres[1] = new String( "Pepe" );

nombres[2] = new String( "Pedro" );

nombres[3] = new String( "Maria" );

No se pueden crear arrays estáticos en tiempo de compilación:

int lista[50]; // generará un error en tiempo de compilación

Tampoco se puede rellenar un array sin declarar el tamaño con el operador new:

int lista[];

for( int i=0; i <>

lista[i] = i;

Es decir, todos los arrays en Java son estáticos. Para convertir un array en el equivalente a un array dinámico en C/C++, se usa la clase vector, que permite operaciones de inserción, borrado, etc. en el array.
Operadores
Los operadores de Java son muy parecidos en estilo y funcionamiento a los de C. En la siguiente tabla aparecen los operadores que se utilizan en Java, por orden de precedencia:

. [] ()

++ --

! ~ instanceof

* / %

+ -

<< >> >>>

< > <= >= == !=

& ^ |

&& ||

? :

= op= (*= /= %= += -= etc.) ,

Los operadores numéricos se comportan como esperamos:

int + int = int

Los operadores relacionales devuelven un valor booleano.

Para las cadenas, se pueden utilizar los operadores relacionales para comparaciones además de + y += para la concatenación:

String nombre = "nombre" + "Apellido";

El operador = siempre hace copias de objetos, marcando los antiguos para borrarlos, y ya se encargará el garbage collector de devolver al sistema la memoria ocupada por el objeto eliminado.

Separadores
Sólo hay un par de secuencias con otros caracteres que pueden aparecer en el código Java; son los separadores simples, que van a definir la forma y función del código. Los separadores admitidos en Java son:

() - paréntesis. Para contener listas de parámetros en la definición y llamada a métodos. También se utiliza para definir precedencia en expresiones, contener expresiones para control de flujo y rodear las conversiones de tipo.

{} - llaves. Para contener los valores de matrices inicializadas automáticamente. También se utiliza para definir un bloque de código, para clases, métodos y ámbitos locales.

[] - corchetes. Para declarar tipos matriz. También se utiliza cuando se referencian valores de matriz.

; - punto y coma. Separa sentencias.

, - coma. Separa identificadores consecutivos en una declaración de variables. También se utiliza para encadenar sentencias dentro de una sentencia for.

. - punto. Para separar nombres de paquete de subpaquetes y clases. También se utiliza para separar una variable o método de una variable de referencia.