lunes, 17 de noviembre de 2014

Electrónica (Parte I)


La electrónica es el campo de la ingeniería y de la física aplicada relativo al diseño y aplicación de dispositivos, por lo general circuitos electrónicos, cuyo funcionamiento depende del flujo de electrones para la generación, transmisión, recepción, almacenamiento de información, entre otros.

Prácticamente en todos los aspectos de la vida interviene, de una u otra forma, la energía eléctrica, siendo cada día más frecuente el uso que de ella se hace. Desde que suena el despertador por la mañana, encendemos la luz, conectamos la radio, la televisión, la lavadora, el ordenador, etc.; todo un sin fin de aparatos electrodomésticos, medios de transporte, comunicación y maquinaria funcionan con electricidad. Es, pues, de especial interés adquirir conceptos claros y concisos acerca de esta parte de la ciencia para poder aplicarlos práctica y correctamente a lo largo de nuestra vida profesional.

Teoría electrónica


Los átomos son la unidad básica de toda la materia, la estructura que define a todos los elementos y tiene propiedades químicas bien definidas. Todos los elementos químicos de la tabla periódica están compuestos por átomos con exactamente la misma estructura y a su vez, éstos se componen de tres tipos de partículas, como los protones, los neutrones y los electrones.

Cualquier átomo está constituido por un núcleo subdividido, a su vez, en protones y neutrones; en torno a dicho núcleo giran los electrones. El protón tiene carga positiva y el electrón carga negativa. En un átomo eléctricamente neutro, el número de protones es igual al número de electrones.



Si un átomo pierde electrones queda electrizado positivamente; si, por el contrario, los adquiere, queda electrizado negativamente. De todos es conocido el fenómeno de electrización de los cuerpos por frotamiento. El electrón es la parte más importante del átomo, ya que de su facilidad para moverse a lo largo de los cuerpos va a depender que éstos sean conductores o aislantes. Por tanto, podemos decir que la unidad elemental de carga eléctrica es el electrón.

Amperaje

El amperaje no es otra cosa que la fuerza o la potencia en una corriente eléctrica circulando entre dos puntos, estos son el negativo y el positivo a través de un conductor o cable eléctrico. La corriente eléctrica circula del negativo hacia el positivo.

Divisor de tensión

Un divisor de tensión es una configuración de circuito eléctrico que reparte la tensión de una fuente entre una o más impedancias conectadas en serie.

Electricidad

En electricidad se entiende por fuente al elemento activo que es capaz de generar una diferencia de potencial entre sus bornes o proporcionar una corriente eléctrica para que otros circuitos funcionen.

Tierra

Se emplea en las instalaciones eléctricas para llevar a tierra cualquier derivación indebida de la corriente eléctrica a los elementos que puedan estar en contacto con los usuarios (carcasas, aislamientos,...) de aparatos de uso normal, por un fallo del aislamiento de los conductores activos, evitando el paso de corriente al posible usuario.

Electrón

Un electrón es una partícula elemental estable cargada negativamente que constituye uno de los componentes fundamentales del átomo.

Cargas eléctricas

Las cargas eléctricas son partículas que ejercen fuerzas atractivas y repulsivas entre ellas.

Potenciómetro

Un potenciómetro es un componente electrónico similar a los resistores pero cuyo valor de resistencia en vez de ser fijo es variable, permitiendo controlar la intensidad de corriente a lo largo de un circuito conectándolo en paralelo ó la caída de tensión al conectarlo en serie

Circuito Abierto

Un Circuito Abierto (c.a.), es simplemente la no unión de dos conexiones, es decir, si por ejemplo tenemos un cable donde pasan unos 5 V, si lo cortáramos tendríamos dos cables, uno donde aún siguen pasando los 5 V y el otro extremo donde no existe ninguna tensión, es decir el cable está abierto. Como podemos ver, al estar abierto el circuito, no existe continuidad de corriente, o sea, no hay paso de corriente, esto es equivalente que tener una resistencia de valor infinito, donde esta absorbe toda la tensión y no deja pasar la corriente.

Fuente de Voltaje

Es un dispositivo que convierte la tensión alterna de la red de suministro, en una o varias tensiones, prácticamente continuas, que alimentan los distintos circuitos del aparato electrónico al que se conecta (ordenador, televisor, impresora, router, etc.).

Las fuentes de alimentación, para dispositivos electrónicos, pueden clasificarse básicamente como fuentes de alimentaciones lineales y conmutadas. Es un dispositivo electrónico capaz de generar una diferencia de potencial entre sus terminales (un voltaje) para generar una corriente eléctrica. En otras palabras son dispositivos que nos proveen el voltaje necesario para que los circuitos electrónicos funcionen, sin una fuente de voltaje, los circuitos simplemente no encienden.

Electrón libre

Electrón libre Aquel que sólo está débilmente sujeto por un átomo.

Aislante eléctrico

Un aislante eléctrico es un material con escasa capacidad de conducción de la electricidad, utilizado para separar conductores eléctricos evitando un cortocircuito y para mantener alejadas del usuario determinadas partes de los sistemas eléctricos que de tocarse accidentalmente cuando se encuentran en tensión pueden producir una descarga

Circuito eléctrico

El circuito eléctrico es el recorrido preestablecido por el que se desplazan las cargas eléctricas.

Circuito Cerrado

La noción de circuito cerrado refiere a la interconexión de dos o más componentes con, al menos, una trayectoria cerrada. El circuito cerrado en la electricidad implica un conjunto de fuentes, interruptores, resistencias, semiconductores, inductores, condensadores y cables, entre otros componentes. Gracias al circuito cerrado, el flujo de corriente eléctrica circula entre los componentes.

La corriente directa

La corriente directa (CD) o corriente continua (CC) es aquella cuyas cargas eléctricas o electrones fluyen siempre en el mismo sentido en un circuito eléctrico cerrado, moviéndose del polo negativo hacia el polo positivo de una fuente de fuerza electromotriz (FEM), tal como ocurre en las baterías, las dinamos o en cualquier otra fuente generadora de ese tipo de corriente eléctrica.

Tubos de vacío

Dispositivos electrónicos que consisten en una cápsula de vacío de Acero o de Vidrio, con dos o más electrodos entre los cuales pueden moverse libremente los Electrones.


Terminal

Un terminal es el punto en que un conductor de un componente eléctrico, dispositivo o red llega a su fin y proporciona un punto de conexión de circuitos externos.

El terminal puede ser simplemente el final de un cable o puede estar equipado con un conector o tornillo. En teoría de circuitos, terminal significa punto donde teóricamente se pueden hacer conexiones a una red. No se refiere necesariamente a ningún objeto físico real.

Regiones de operación

Un transistor de unión bipolar está formado por dos Uniones PN en un solo cristal semiconductor, separados por una región muy estrecha. De esta manera quedan formadas tres regiones:
  • Emisor, que se diferencia de las otras dos por estar fuertemente dopada, comportándose como un metal. Su nombre se debe a que esta terminal funciona como emisor de portadores de carga.
  • Base, la intermedia, muy estrecha, que separa el emisor del colector.
  • Colector, de extensión mucho mayor.

Amplificador electrónico

Amplificador electrónico puede significar tanto un tipo de circuito electrónico o etapa de este, como un equipo modular que realiza la misma función; y que normalmente forma parte de los equipos HIFI. Su función es incrementar la intensidad de corriente, la tensión o la potencia de la señal que se le aplica a su entrada; obteniéndose la señal aumentada a la salida. Para amplificar la potencia es necesario obtener la energía de una fuente de alimentación externa. En este sentido, se puede considerar al amplificador como un modulador de la salida de la fuente de alimentación.

La impedancia

La impedancia es la oposición al paso de la corriente alterna. A diferencia de la resistencia, la impedancia incluye los efectos de acumulación y eliminación de carga (capacitancia) e/o inducción magnética (inductancia). Este efecto es apreciable al analizar la señal eléctrica implicada en el tiempo.

Silicio

Símbolo Si, número atómico 14 y peso atómico 28.086. El silicio es el elemento electropositivo más abundante de la corteza terrestre. Es un metaloide con marcado lustre metálico y sumamente quebradizo. Por lo regular, es tetravalente en sus compuestos, aunque algunas veces es divalente, y es netamente electropositivo en su comportamiento químico. Además, se conocen compuestos de silicio pentacoordinados y hexacoordinados.

Corriente eléctrica

Recibe el nombre de corriente eléctrica el desplazamiento de electrones sobre un cuerpo conductor. Todos los cuerpos tienden a quedar en estado eléctricamente neutro; así, si se ponen en contacto dos cuerpos, uno cargado con exceso de electrones y otro con defecto. Se establecerá entre ellos un intercambio de electrones hasta que se igualen eléctricamente,

Circuito eléctrico

El circuito eléctrico es el camino a través del cual se desplazan los electrones.

Magnitudes eléctricas

En todo circuito eléctrico se ponen de manifiesto una serie de magnitudes eléctricas, como son: fuerza electromotriz, diferencia de potencial, cantidad de electricidad, intensidad de corriente, densidad de corriente, resistencia, potencia y energía.

Fuerza electromotriz (fem): Es la causa que origina el movimiento de los electrones en todo circuito eléctrico. Su unidad es el voltio (V).

Diferencia de potencial (ddp): También se conoce como tensión eléctrica y voltaje. Es el desnivel eléctrico existente entre dos puntos de un circuito. Su unidad es el voltio (V). Se mide con un voltímetro. Se representa con la letra U.

Cantidad de electricidad (Q): Es el número total de electrones que recorre un conductor. Como la carga del electrón es de un valor muy pequeño, la unidad práctica que se emplea es el Culombio (C).

Intensidad de corriente (1): Es la cantidad de electricidad que atraviesa un conductor en la unidad de tiempo (1 s). La unidad es el amperio (A). Se mide con un amperímetro.

Densidad de corriente eléctrica (b): Es el número de amperios que circula por cada mm2 de conductor, esto es, intensidad por unidad de sección. La unidad es el A/mm 2•

Resistencia (R): Es la dificultad que presenta un material al paso de la corriente eléctrica. Se representa con la letra R y su unidad es el ohmio (Q). Dicha dificultad responde a la atracción de los núcleos sobre los electrones en su propio desplazamiento. Cada material posee una resistencia específica característica que se conoce con el nombre de resistividad. Se representa con la letra griega «ro» (p).

Ley de Ohm

El famoso físico Ohm descubrió experimentalmente la relación que existe entre estas tres magnitudes eléctricas: intensidad, tensión y resistencia, estableciendo una ley que lleva su nombre y que dice así:

En un circuito eléctrico, la intensidad de corriente que lo recorre, es directamente proporcional a la tensión aplicada e inversamente proporcional a la resistencia que presenta éste.

La Figura nos muestra el circuito eléctrico básico, compuesto por pila o batería y un elemento resistivo R como carga. El voltímetro V nos medirá el valor de la tensión del circuito y el amperímetro A la intensidad que circula por él.



Potencia eléctrica (P)

Es la cantidad de trabajo desarrollada en la unidad de tiempo. En un circuito eléctrico es igual al producto de la tensión por la intensidad. Su unidad es el vatio (W). Se mide con un vatímetro. Son múltiplos del vatio (W), el kilovatio (1 kW = 1.000 W) y el megavatio (1 MW = 1.000.000 W).


Energía eléctrica (E)

Es el trabajo desarrollado en un circuito eléctrico durante un tiempo determinado. Viene dada por la fórmula:



Voltaje, corriente y resistencia

El voltaje es la magnitud física que, en un circuito eléctrico, impulsa a los electrones a lo largo de un conductor. Es decir, conduce la energía eléctrica con mayor o menor potencia.

Llamamos corriente eléctrica a aquella magnitud física que nos indica la cantidad de electricidad que recorre un conductor, durante una unidad de tiempo determinada

Resistencia eléctrica es toda oposición que encuentra la corriente a su paso por un circuito eléctrico cerrado, atenuando o frenando el libre flujo de circulación de las cargas eléctricas o electrones. Cualquier dispositivo o consumidor conectado a un circuito eléctrico representa en sí una carga, resistencia u obstáculo para la circulación de la corriente eléctrica.

Materiales conductores

Un conductor eléctrico es un material que ofrece poca resistencia al movimiento de carga eléctrica. Son materiales cuya resistencia al paso de la electricidad es muy baja. Los mejores conductores eléctricos son metales, como el cobre, el oro, el hierro y el aluminio, y sus aleaciones, aunque existen otros materiales no metálicos que también poseen la propiedad de conducir la electricidad, como el grafito o las disoluciones y soluciones salinas (por ejemplo, el agua de mar) o cualquier material en estado de plasma.

En general podemos denominar material conductor a cualquier sustancia o material que sometido a una diferencia de potencial eléctrico proporciona un paso continuo de corriente eléctrica.
En general todas las sustancias en estado sólido o líquido poseen la propiedad de conductividad eléctrica, pero algunas sustancias son buenos conductores, las mejores sustancias conductoras son los metales.

Dentro de los materiales metálicos más utilizados mencionamos: la Plata, el cobre, aluminio, aleaciones de aluminio, aleaciones de cobre y conductores compuestos de aluminio-acero y cobre-acero cuyas aplicaciones en las industrias eléctricas son muy útiles.

Resistencia

La  resistencia de un material es una medida que indica la facilidad con que una corriente eléctrica puede fluir a través de él. La resistencia de un conductor es directamente proporcional a su longitud e inversamente proporcional a su sección y varía con la temperatura.

Dirección de la corriente y el circuito eléctrico

Un electrón fluye en dirección contraria al campo eléctrico y sube la pendiente de potencial desde la placa negativa hasta la placa positiva. Si definimos la corriente como un flujo de carga positiva, la pérdida en energía a medida que la carga encuentra resistencia será de más a menos o "baja la pendiente de potencial". Por convención, se considerarán todas las corrientes como un flujo de carga positiva.

La dirección de la corriente convencional siempre es la misma que la dirección en la que se moverían las cargas positivas, incluso si la corriente real consiste en un flujo de electrones.


Aplicación de la Ley de ohm a circuitos resistivos serie-paralelo

La Ley de Ohm, postulada por el físico y matemático alemán George Simon Ohm, es una de las leyes fundamentales de la electrodinámica, estrechamente vinculada a los valores de las unidades básicas presentes en cualquier circuito eléctrico como son:

1. Tensión o voltaje (E), en volt (V).
2. Intensidad de la corriente (I), en ampere (A) o sus submúltipos.
3. Resistencia (R) de la carga o consumidor conectado al circuito en ohm ( ), o sus múltiplos.

La Ley de Ohm: establece que "La intensidad de la corriente eléctrica que circula por un conductor eléctrico es directamente proporcional a la diferencia de potencial aplicada e inversamente proporcional a la resistencia del mismo".

Esta ley no se cumple, por ejemplo, cuando la resistencia del conductor varía con la temperatura, y la temperatura del conductor depende de la intensidad de corriente y el tiempo que esté circulando.

La ley define una propiedad específica de ciertos materiales por la que se cumple la relación:
  • Circuito serie:
El circuito serie es una configuración de conexión en la que los bornes o terminales de los dispositivos (generadores, resistencias, condensadores, interruptor, entre otros.) se conectan secuencialmente.

El terminal de salida de un dispositivo se conecta al terminal de entrada del dispositivo siguiente, por ejemplo, el terminal positivo de una pila eléctrica se conecta al terminal negativo de la pila siguiente, con lo cual entre los terminales extremos de la asociación se tiene una diferencia de potencial igual a la suma de la de ambas pilas. Esta conexión de pilas eléctricas en serie da lugar a la formación de una batería eléctrica. Cabe anotar que la corriente que circula en un circuito serie es la misma en todos los puntos del circuito.
  • Circuito paralelo:
El circuito paralelo es una conexión donde, los bornes o terminales de entrada de todos los dispositivos (generadores, resistencias, condensadores, etc.) conectados coincidan entre sí, lo mismo que sus terminales de salida.

Dos depósitos de agua conectados en paralelo tendrán una entrada común que alimentará simultáneamente a ambos, así como una salida común que drenará a ambos a la vez. Las bombillas de iluminación de una casa forman un circuito en paralelo. Porque si una bombilla se apaga, las demás siguen encendidas.

La configuración contraria es el circuito en serie. En el cual, si una bombilla se apaga todas las demás bombillas se apagaran también.

Aplicación de la primera y segunda ley de kirchhoff

  • La primera ley de Kirchhoff:
Se conoce como la ley de corrientes de Kirchhoff (LCK) y Se basa en la ley de conservación de la carga eléctrica, y establece que:

"la suma de la corrientes en todo nodo debe ser siempre igual a cero"

Esto es la cantidad de carga que entra a un nodo cualquiera en un cierto instante, es igual a la cantidad de carga que sale de ese nodo.

Para entender mejor esta ley se puede asimilar un nodo como la interconexión de una red de acueducto, donde se tiene una conexión en forma de T, con tres tubos de los cuales por dos de ellos llega el agua y por el tercero sale la suma de los dos anteriores, si se lleva esto a la teoría de circuitos, la corriente viene siendo representada por el flujo de agua y los conductores por los tubos, dentro de los tubos, no se puede acumular el agua, por lo tanto toda la cantidad que entra en este sistema debe ser la misma que sale, de la misma forma se asume que en los conductores y nodos no se puede acumular carga, ni hay pérdidas de energía por calor, la corriente que entra al nodo debe ser la misma que sale.

  • La segunda ley de kirchhoff:
La segunda ley de Kirchhoff se conoce como la ley de voltajes de Kirchhoff (LVK) y su enunciado es el siguiente:

"La suma algebraica de los voltajes alrededor de cualquier lazo (camino cerrado) en un circuito, es igual a cero en todo instante".

La segunda regla se deduce de la conservación de la energía. Es decir, cualquier carga que se mueve en torno a cualquier circuito cerrado (sale de un punto y llega al mismo punto) debe ganar tanta energía como la que pierde.

Los condensadores

Los condensadores son dispositivos capaces de almacenar una determinada cantidad de electricidad. Se componen de dos superficies conductoras, llamadas armaduras, puestas frente a frente y aisladas entre sí por un material aislante que es llamado daléctrico. La capacidad de almacenar electricidad es proporcional directamente a la superficie enfrentada; inversamente proporcional a la distancia que separa las armaduras y depende del dieléctrico existente entre ambas.


Funcionamiento de un Condensador 


Aquí tenemos un ejemplo del funcionamiento de un condensador frente a una corriente alterna. Vemos un generador de corriente alterna que está conectado a un condensador. Debido a la tensión alterna U, el condensador resulta cargado, descargado, vuelto a cargar con polaridad opuesta; una vez más descargado, y así sucesivamente. Con ello circula una corriente cuya variación es senoidal. Pero, la corriente no circula a través del condensador, es decir a través de su dieléctrico que es aislante como hemos dicho, la corriente sólo circula de los bornes del generador a las armaduras del condensador y viceversa, es decir, aunque el circuito realmente no está cerrado el efecto es como si lo estuviera; y siendo éste el efecto, se suele decir que por el circuito circula una corriente eléctrica.

La intensidad de la corriente o, mejor dicho, el valor eficaz de la corriente alterna depende, aparte de la tensión del generador, de la capacidad del condensador y de la frecuencia de la propia corriente alterna. Cuanto mayor es la capacidad y más elevada la frecuencia, con tanta más violencia se desarrolla el proceso continuo de carga y descarga y, en consecuencia, tanto más intensa será la corriente. A pequeñas capacidades y frecuencias circulará sólo una débil corriente.

En lo que respecta a la corriente continua el comportamiento del condensador es diferente. Aquí  hay una interpretación práctica de la corriente. Frente a la corriente continua el condensador se comporta como un depósito que solamente se abre cuando la presión de alimentación (tensión) varía. Cuando la tensión continua aumenta, la corriente pasa de + hacia el polo -; cuando se estabiliza no hay paso de corriente, y cuando disminuye la tensión, la corriente circula en sentido inverso. El caso de la corriente alterna resulta diferente porque, como se deduce de lo explicado antes, esta corriente con sus cambios de fase carga y descarga sucesivamente al condensador.
Dentro de un circuito electrónico los condensadores se utilizan en los circuitos oscilantes uniendo su función a la que ejercen las inductancias (o bobinados) aprovechando sus condiciones de paso de la corriente alterna y bloqueo de la continua. 

Semiconductores

Son elementos que se comportan como un conductor o como aislante dependiendo de diversos factores, como por ejemplo el campo eléctrico o magnético, la presión, la radiación que le incide, o la temperatura del ambiente en el que se encuentre.

Los semiconductores suelen ser aislantes a cero grados Kelvin, y permiten el paso de corriente a la temperatura ambiente. Son elementos, como el germanio y el silicio, que a bajas temperaturas son aislantes, pero a medida que se eleva la temperatura o bien por la adicción de determinadas impurezas resulta posible su conducción. Algunos materiales semiconductores son por ejemplo el silicio, el germanio y el selenio.


Semiconductores extrínsecos: tipo n y tipo p

En el mismo momento que un cristal semiconductor de silicio de conducción “tipo-p” (positivo) se pone en contacto con otro cristal semiconductor también de silicio, pero de conducción 
“tipo-n”(negativo), se crea un diodo de unión “p-n”.

Si a un semiconductor intrínseco se le añade un pequeño porcentaje de impurezas, es decir, elementos trivalentes o pentavalentes, el semiconductor se denomina extrínseco, y se dice que está dopado. Evidentemente, las impurezas deberán formar parte de la estructura cristalina sustituyendo al correspondiente átomo de silicio.

Un Semiconductor tipo P se obtiene llevando a cabo un proceso de dopado, añadiendo un cierto tipo de átomos al semiconductor para poder aumentar el número de portadores de carga libres (en este caso positivos).

Un Semiconductor tipo N se obtiene llevando a cabo un proceso de dopado añadiendo un cierto tipo de átomos al semiconductor para poder aumentar el número de portadoras de carga libres (en este caso, negativas). 

Diodo semiconductor

El diodo semiconductor es el dispositivo semiconductor más sencillo y se puede encontrar, prácticamente en cualquier circuito electrónico. Los diodos se fabrican en versiones de silicio (la más utilizada) y de germanio.

Los diodos constan de dos partes, una llamada N y la otra llamada P, separados por una juntura llamada barrera o unión. Esta barrera o unión es de 0.3 voltios en el diodo de germanio y de 0.6 voltios aproximadamente en el diodo de silicio.

Principio de operación de un diodo

El semiconductor tipo N tiene electrones libres (exceso de electrones) y el semiconductor tipo P tiene huecos libres (ausencia o falta de electrones)

Cuando una tensión positiva se aplica al lado P y una negativa al lado N, los electrones en el lado N son empujados al lado P y los electrones fluyen a través del material P mas allá de los límites del semiconductor. De igual manera los huecos en el material P son empujados con una tensión negativa al lado del material N y los huecos fluyen a través del material N.

En el caso opuesto, cuando una tensión positiva se aplica al lado N y una negativa al lado P, los electrones en el lado N son empujados al lado N y los huecos del lado P son empujados al lado P. En este caso los electrones en el semiconductor no se mueven y en consecuencia no hay corriente


El diodo se puede hacer trabajar de 2 maneras diferentes:
  • Polarización directa
Es cuando la corriente que circula por el diodo sigue la ruta de la flecha (la del diodo), o sea del ánodo al cátodo. En este caso la corriente atraviesa el diodo con mucha facilidad comportándose prácticamente como un corto circuito.
  • Polarización inversa
Es cuando la corriente en el diodo desea circular en sentido opuesto a la flecha (la flecha del diodo), o sea del cátodo al ánodo. En este caso la corriente no atraviesa el diodo, y se comporta prácticamente como un circuito abierto.

Comparación entre el silicio y el germanio

  • Diodos de silicio
La construcción de un diodo de silicio comienza con silicio purificado. Cada lado del diodo se implanta con impurezas (boro en el lado del ánodo y arsénico o fósforo en el lado del cátodo), y la articulación donde las impurezas se unen se llama la "unión pn". Los diodos de silicio tienen un voltaje de polarización directa de 0,7 voltios. Una vez que el diferencial de voltaje entre el ánodo y el cátodo alcanza los 0,7 voltios, el diodo empezará a conducir la corriente eléctrica a través de su unión pn. Cuando el diferencial de voltaje cae a menos de 0,7 voltios, la unión pn detendrá la conducción de la corriente eléctrica, y el diodo dejará de funcionar como una vía eléctrica. Debido a que el silicio es relativamente fácil y barato de obtener y procesar, los diodos de silicio son más frecuentes que los diodos de germanio.
  • Diodos de germanio
Los diodos de germanio se fabrican de una manera similar a los diodos de silicio. Los diodos de germanio también utilizan una unión pn y se implantan con las mismas impurezas que los diodos de silicio. Sin embargo los diodos de germanio, tienen una tensión de polarización directa de 0,3 voltios. El germanio es un material poco común que se encuentra generalmente junto con depósitos de cobre, de plomo o de plata. Debido a su rareza, el germanio es más caro, por lo que los diodos de germanio son más difíciles de encontrar (y a veces más caros) que los diodos de silicio.


lunes, 3 de noviembre de 2014

Gestión de Memoria: Windows vs Linux

Gestión de memoria en Linux


Usa una tabla de página de tres niveles que son:


1. Directorio de páginas.
2. Directorio intermedio de páginas.
3. Tabla de páginas.


Para aumentar la eficiencia al  cargar y descargar estas  páginas desde o  hacia la memoria, utiliza un mecanismo llamado Sistema de Colegas, en donde las  páginas son agrupadas en marcos de tamaño fijo y para reemplazar páginas se utiliza el algoritmo del reloj en donde las páginas tienen una especie de variable de edad.


El algoritmo de reloj consiste en asociar un bit de usado y otro de modificado con cada una de las paginas, el usado se reemplaza por una variable de 8 bits, cada vez que se accede a una página esta variable se incrementa, después Linux recorre periódicamente la lista completa de páginas y decrementa la variable de edad de cada página a medida que va rotando por todas ellas en memoria principal. Una página que tiene un 0 es una página vieja ya que no se ha hecho referencia a ella desde hace ya algún tiempo y es el mejor candidato para el reemplazo.

Gestión de memoria en Windows


El gestor de memoria en Windows está hecho para trabajar con paginas que van de los 4kB hasta los 64kB. Cuando se crea un proceso el tamaño máximo es de 2GB, este espacio está dividido en páginas de tamaño fijo y poseen uno de los siguientes estados:

  • Disponible
  • Reservada
  • Asignada
Cuando hay espacio disponible en la memoria, el gestor de memoria virtual permite que los conjuntos residentes de los procesos activos crezcan. Entonces se trae una nueva página a la memoria sin expulsar ninguna.

Cuando la memoria empieza a escasear, el gestor de memoria virtual mueve las páginas que se han utilizado hace más tiempo de cada uno de los procesos hacia swap, liberando así memoria principal.

En conclusión existen algunas similitudes en cuanto a la  gestión de memoria en Windows y Linux pero cuando es necesario liberar memoria Windows lo hace una vez por segundo a diferencia en Linux que lo hace solo cuando es necesario, esto hace de Linux más eficiente.

Gestión de Memoria

La Memoria


La memoria física consiste en un área de almacenamiento temporal para los programas y los datos que se usan. A grandes rasgos, mientras más grande sea el espacio de memoria, más aplicaciones se podrán ejecutar al mismo tiempo. Además, mientras más rápida sea la memoria, más rápida será la reacción del sistema. Por eso, el sistema operativo debe estar organizado de manera lo suficientemente eficiente como para obtener el mejor rendimiento posible.

Gestión de memoria

Se denomina gestión de memoria al acto de gestionar la memoria de un dispositivo informático. De forma simplificada se trata de proveer mecanismos para asignar secciones de memoria a los programas que las solicitan, y a la vez, liberar las secciones de memoria que ya no se utilizan para que estén disponibles para otros programas.

La gestión de memoria también debe realizar las siguientes funciones:
  • permitir que la memoria se comparta (en sistemas de multiprocesos).
  • asignar bloques de espacio de memoria a distintas tareas;
  • proteger los espacios de memoria utilizados (por ejemplo, evitar que un usuario modifique una tarea realizada por otro usuario).
  • optimizar la cantidad de memoria disponible, específicamente a través de sistemas de expansión de memoria.

Expansión de memoria

Existen dos formas posibles de expandir la memoria:
  1. Dividiendo un programa de modo que una parte permanezca en la memoria de acceso aleatorio y que una parte se cargue en la memoria cuando se necesite acceder a los datos.
  2. Utilizando un mecanismo de memoria virtual que consiste en utilizar el disco duro como memoria principal y almacenar solamente las instrucciones y los datos utilizados por el procesador en la memoria RAM. El sistema operativo realiza esta operación creando un archivo temporal (conocido como SWAP o "archivo de intercambio") en el que se almacena la información cuando la memoria RAM ya no es suficiente. Esta operación produce una disminución considerable en el rendimiento, dado que se puede acceder al disco duro mucho más rápido que a la memoria RAM.
Los sistemas de memoria virtual separan las direcciones de memoria utilizadas por un proceso de las direcciones físicas reales, permitiendo la separación de procesos e incrementando la cantidad efectiva de memoria de acceso aleatorio utilizando la paginación. La calidad de la gestión de la memoria es crucial para las prestaciones del sistema. Los sistemas de gestión de memoria de sistemas operativos multitarea normalmente tratan con las siguientes tareas:

Reasignación: En los sistemas con memoria virtual, los programas en la memoria debe ser capaz de residir en diferentes partes de la memoria en diferentes momentos. Esto se debe a que cuando el programa se cambió de nuevo en la memoria después de ser intercambiado por un tiempo que no siempre se puede colocar en el mismo lugar. La unidad de gestión de memoria virtual también debe hacer frente a la concurrencia gestión de memoria en el sistema operativo por lo tanto debe ser capaz de trasladar los programas en la memoria y manejar referencias de la memoria y las direcciones en el código del programa para que siempre apuntan a la ubicación correcta en la memoria.

Protección: Los procesos no deberían poder referenciar la memoria de otros procesos sin permiso, para evitarlo existe la protección de memoria, que evita que código malicioso o erróneo de un programa interfiera con la operación de otros programas en ejecución.

Memoria compartida: Aunque la memoria utilizada por diferentes procesos suele estar protegida, algunos procesos puede que sí tengan que compartir información y, para ello, han de acceder la misma sección de memoria. La memoria compartida es una de las técnicas más rápidas para posibilitar la comunicación entre procesos.

Organización lógica: Los programas a menudo están organizados en módulos, algunos de los cuales pueden ser compartidos por diferentes programas, algunos son de sólo-lectura y otros contienen datos que se pueden modificar. La gestión de memoria es responsable de manejar esta organización lógica, que se contrapone al espacio de direcciones físicas lineales. Una forma de lograrlo es mediante la segmentación de memoria.

Organización física: La memoria suele dividirse en un almacenamiento primario de alta velocidad y uno secundario de menor velocidad. La gestión de memoria del sistema operativo se ocupa de trasladar la información entre estos dos niveles de memoria.

Memoria dinámica

Es un tipo de tecnología de memoria RAM. La memoria dinámica de acceso aleatorio se usa principalmente en los módulos de memoria RAM y en otros dispositivos, como memoria principal del sistema. Se denomina dinámica, ya que para mantener almacenado un dato, se requiere revisar el mismo y recargarlo, cada cierto período, en un ciclo de refresco

Es memoria que se reserva en tiempo de ejecución. Su principal ventaja frente a la estática, es que su tamaño puede variar durante la ejecución del programa. (En C, el programador es encargado de liberar esta memoria cuando no la utilice más). El uso de memoria dinámica es necesario cuando no conocemos el número de datos/elementos a tratar; sin embargo es algo más lento, ya que el tiempo ejecución depende del espacio que se vaha usar Hay que mencionar que la memoria estática es más rápida ya que está disponible desde que se inicio el programa.

Memoria estática


Es un tipo de memoria basada en semiconductores que a diferencia de la memoria DRAM, es capaz de mantener los datos, mientras esté alimentada, sin necesidad de circuito de refresco. Sin embargo, sí son memorias volátiles, es decir que pierden la información si se les interrumpe la alimentación eléctrica.


Es la memoria que se reserva en el momento de la compilación antes de comenzar a ejecutar el programa. Los objetos son creados al iniciar el programa y destruidos al finalizar el mismo. Mantienen la misma localización en memoria durante todo el transcurso del programa hasta que son destruidos. Los objetos administrados de este modo son: variables globales, variables estáticas de funciones, miembros static de clases y literales de cualquier tipo. 


Asignación de memoria


En informática, la asignación de memoria es el método de reservar memoria para fines específicos, por lo general, ejecución de programas. En otras palabras, es una forma de distribuir los recursos de memoria limitados, entre múltiples fragmentos de datos y códigos.

En la asignación dinámica de memoria, la memoria necesaria se asigna a medida que se necesita durante el tiempo de ejecución. Esto contrasta con la asignación estática de memoria, donde se asigna memoria en tiempo de compilación, antes de que el programa sea ejecutado.


La Asignación estática de memoria

La Asignación estática de memoria consiste en el proceso de asignar memoria en tiempo de compilación antes de que el programa asociado sea ejecutado, a diferencia de la asignación dinámica o la automática donde la memoria se asigna a medida que se necesita en tiempo de ejecución. La asignación estática de memoria es el proceso de asignar memoria en tiempo de compilación antes de que el programa sea ejecutado. Esto contrasta con la asignación dinámica de memoria, donde la memoria necesaria se asigna a medida que se necesita durante el tiempo de ejecución.

Por ejemplo, en programación, las constantes, que son conocidas en tiempo de compilación, tienen asignadas las porciones de memoria de forma estática antes de la ejecución del programa. También todas a las variables declaradas estáticamente se les asignan una porción estática de memoria.El inconveniente de la reserva estática es que la cantidad de memoria se reserva siempre antes de conocer los datos concretos del problema.




Asignación dinámica de la memoria

La asignación dinámica de la memoria es la asignación de almacenamiento de memoria para utilización por parte de un programa de computador durante el tiempo de ejecución de ese programa. Es una manera de distribuir la propiedad de recursos de memoria limitada entre muchas piezas de código y datos.



Un objeto asignado dinámicamente permanece asignado hasta que es desasignado explícitamente, o por el programador o por un recolector de basura; esto es notablemente diferente de la asignación automática de memoria y de la asignación estática de memoria (la de las variables estáticas). Se dice que tal objeto tiene tiempo de vida dinámico.



La memoria dinámica es un espacio de almacenamiento que se puede solicitar en tiempo de ejecución. Además de solicitar espacios de almacenamiento, también podemos liberarlos (en tiempo de ejecución) cuando dejemos de necesitarlos. El número de particiones y su tamaño es variable, las cuales son creadas dinámicamente para que se acomoden a las necesidades de cada proceso solicitante. Cuando un proceso termine o sea retirado de memoria el gestor de memoria puede devolver el espacio vacante al fondo de áreas de memoria libres a partir del cual se efectúan las asignaciones de particiones. El gestor de memoria puede continuar creando y asignando particiones a procesos solicitantes hasta que agote toda la memoria física o alcance el máximo grado de multiprogramación permitido. 


La segmentación

La segmentación es una forma de administrar la memoria que permite que el usuario vea la memoria como una colección de segmentos (partes), cada uno de los cuales tiene un nombre y un tamaño (que, además, puede variar dinámicamente).
  • Segmentación simple: cada proceso está dividido en varios segmentos. Un proceso carga todos los segmentos en partes dinámicas que no necesitan ser contiguas.
  • Segmentación de memoria virtual: como la segmentación simple, excepto que no es necesario cargar todos los segmentos de un proceso. Los segmentos no residentes necesarios se traen después de forma automática.
Un segmento es un espacio de memoria de tamaño variable, compuesto por:
  • Descriptor: Identificador único del segmento (dentro del espacio de memoria del proceso).
  • Tamaño del segmento
Ventajas de la segmentación
  • Al usuario se le simplifica el manejo de estructuras de datos de tamaño dinámico.
  • Se facilita el que los procesos compartan memoria.
  • Los segmentos pueden estar protegidos según la semántica de su contenido.
Características de la segmentación
  • Cuando un proceso requiere más memoria se crea un nuevo segmento.
  • Es posible la redimensión de segmentos siempre que haya posiciones libres contiguas, o crear un nuevo segmento y copiar el contenido del anterior
  • Es posible que los segmentos crezcan dinámicamente según las necesidades del programa en ejecución.
  • Existe la posibilidad de definir segmentos que aun no existan. Así, no se asignara memoria, sino a partir del momento que sea necesario hacer usos del segmento. Un ejemplo de esto, serian los  Arrays cuya dimensión no se conoce hasta tanto no se comienza a ejecutar el programa. En algunos casos, incluso podría retardar la asignación de memoria hasta el momento en el cual se referencia el Array  u otra estructura de dato por primera vez.

Paginación

Paginación Simple

La memoria principal se divide en varios marcos del mismo tamaño. Cada proceso se divide en varias páginas iguales del mismo tamaño que los marcos. Un proceso carga todas sus páginas en marcos disponibles n necesariamente contigua.


Paginación de memoria virtual


Cómo la paginación simple excepto que no es necesario cargar todas las páginas de un proceso. Las páginas no residentes necesarias se traen después en forma automática.

Los sistemas de paginación de memoria dividen los programas en pequeñas partes o páginas. Del mismo modo, la memoria es dividida en trozos del mismo tamaño que las páginas llamados marcos de página. De esta forma, la cantidad de memoria desperdiciada por un proceso es el final de su última página, lo que minimiza la fragmentación interna y evita la externa.

En un momento cualquiera, la memoria se encuentra ocupada con páginas de diferentes procesos, mientras que algunos marcos están disponibles para su uso. El sistema operativo mantiene una lista de estos últimos marcos, y una tabla por cada proceso, donde consta en qué marco se encuentra cada página del proceso.

En la tabla de páginas de un proceso, se encuentra la ubicación del marco que contiene a cada una de sus páginas. Las direcciones lógicas ahora se forman como un número de página y de un desplazamiento dentro de esa página (conocido comúnmente comooffset). El número de página es usado como un índice dentro de la tabla de páginas, y una vez obtenida la dirección del marco de memoria, se utiliza el desplazamiento para componer la dirección real o dirección física. Este proceso se realiza en una parte del computador específicamente diseñada para esta tarea, es decir, es un proceso hardware y no software.

De esta forma, cuando un proceso es cargado en memoria, se cargan todas sus páginas en marcos libres y se completa su tabla de páginas.

Veamos un ejemplo:
Número de marco
Programa.#página
Dirección física
0
Programa A.0
1000:0000
1
Programa A.1
1000:1000
2
Programa A.2
1000:2000
3
Programa D.0
1000:3000
4
Programa D.1
1000:4000
5
Programa C.0
1000:5000
6
Programa C.1
1000:6000
7
Programa D.2
1000:7000



La tabla de arriba muestra una posible configuración de la memoria en un momento dado, con páginas de 4Kb. La forma en que se llegó a este estado puede haber sido la siguiente:
Se tienen cuatro procesos, llamados A, B, C y D, que ocupan respectivamente 3, 2, 2 y 3 páginas.
  1. El programa A se carga en memoria (se le asignan los marcos 0, 1 y 2)
  2. El programa B se carga en memoria (se le asignan los marcos 3 y 4)
  3. El programa C se carga en memoria (se le asignan los marcos 5 y 6)
  4. El programa B termina, liberando sus páginas
  5. El programa D se carga en memoria (se le asignan los marcos 3 y 4 que usaba el proceso B y el marco 7 que permanecía libre)

Paginación en memoria virtual

El único inconveniente de paginación pura es que todas las páginas de un proceso deben estar en memoria para que se pueda ejecutar. Esto hace que si los programas son de tamaño considerable, no puedan cargarse muchos a la vez, disminuyendo el grado de multiprogramación del sistema. Para evitar esto, y aprovechando el principio de cercanía de referencias donde se puede esperar que un programa trabaje con un conjunto cercano de referencias a memoria (es decir con un conjunto residente más pequeño que el total de sus páginas), se permitirá que algunas páginas del proceso sean guardadas en un espacio de intercambio (fragmentación interna) mientras no se necesiten.

Cuando ejecutamos un programa este puede caber o no en la memoria física, si se da la situación de que el proceso es mayor que la memoria, el SO se encarga de mantener en memoria las partes del programa que estamos usando y el resto en el disco duro. Pues bien, la técnica llamada ‘paginación’ se encarga del intercambio de información entre nuestra memoria y el disco duro cuando tiene que pasar información de la memoria al disco duro debido a lo comentado antes



La memoria virtual

La memoria virtual es una técnica de gestión de la memoria que permite que el sistema operativo disponga, tanto para el software de usuario como para sí mismo, de mayor cantidad de memoria que esté disponible físicamente. La mayoría de los ordenadores tienen cuatro tipos de memoria: registros en la CPU, la memoria caché (tanto dentro como fuera del CPU), la memoria RAM y el disco duro. En ese orden, van de menor capacidad y mayor velocidad a mayor capacidad y menor velocidad.


Muchas aplicaciones requieren acceso a más información (código y datos) que la que se puede mantener en memoria física. Esto es así sobre todo cuando el sistema operativo permite múltiples procesos y aplicaciones ejecutándose simultáneamente. Una solución al problema de necesitar mayor cantidad de memoria de la que se posee consiste en que las aplicaciones mantengan parte de su información en disco, moviéndola a la memoria principal cuando sea necesario. Hay varias formas de hacer esto.


Una opción es que la aplicación misma sea responsable de decidir qué información será guardada en cada sitio (segmentación), y de traerla y llevarla. La desventaja de esto, además de la dificultad en el diseño e implementación del programa, es que es muy probable que los intereses sobre la memoria de dos o varios programas generen conflictos entre sí: cada programador podría realizar su diseño teniendo en cuenta que es el único programa ejecutándose en el sistema. La alternativa es usar memoria virtual, donde la combinación entre hardware especial y el sistema operativo hace uso de la memoria principal y la secundaria para hacer parecer que el ordenador tiene mucha más memoria principal (RAM) que la que realmente posee. Este método es invisible a los procesos. La cantidad de memoria máxima que se puede hacer ver que hay tiene que ver con las características del procesador.


Marcos de Paginas


En sistemas operativos de computadoras, los sistemas de paginación de memoria dividen los programas en pequeñas partes o páginas. Del mismo modo, la memoria es dividida en trozos del mismo tamaño que las páginas llamados marcos de página. De esta forma, la cantidad de memoria desperdiciada por un proceso es el final de su última página, lo que minimiza la fragmentación interna y evita la externa.

Tablas de páginas


En las tablas de páginas de un proceso, se encuentra la ubicación del marco que contiene a cada una de sus páginas. Las direcciones lógicas ahora se forman como un número de página y de un desplazamiento dentro de esa página (conocido comúnmente como offset).

El número de página es usado como un índice dentro de la tabla de páginas, y una vez obtenida la dirección del marco de memoria, se utiliza el desplazamiento para componer la dirección real o dirección física. Este proceso se realiza en una parte del computador específicamente diseñada para esta tarea, es decir, es un proceso hardware y no software.

Historia de los lenguajes de programación

Historia de los lenguajes de programación


La historia de la informática y de la computación se ha caracterizado fundamentalmente en la existencia de centenares de lenguajes de programación, de forma tal que siempre se ha hablado de “la Babel de los lenguajes”, aunque bien es cierto que son solo unas decenas escasas los que han tenido un impacto significativo, y uno pocos los utilizados en la industria, los negocios y la ciencia.

Muchos de los lenguajes de programación actuales tienen sus raíces en los lenguajes que nacieron a finales de los cincuenta y primeros años de los sesenta, tales como COBOL (1960) , FORTRAN IV(1961), BASIC (1964), LOGO (1967). Estos lenguajes representaron la primera alternativa a los lenguajes ensambladores. En la década de los setenta y primeros años de los ochenta emergieron nuevos lenguajes, como Pascal (1971), C (1972) y Ada (1979), que se convirtieron en dominantes, desplazando por ejemplo a otros como ALGOL Y BASIC. Otros lenguajes, como COBOL y FORTRAN, lograron adaptarse y se mantuvieron como lenguajes de referencia en el mundo de los negocios y en el campo científico, respectivamente, con versiones actualizadas y estandarizadas por organizaciones como ANSI.

Todos esto lenguajes anteriores seguían el estilo de programación estructurada y se conocían lenguajes de programación imperativos o estructurados. En paralelo con el desarrollo de estos lenguajes surgieron dos nuevos estilos o paradigmas de programación; programación funcional y programación orientada a objetos. Posteriormente a principios de los ochenta apareció C++ como lenguaje imperativo con propiedades de orientación a objetos y que durante la década de los noventa ha sido el lenguaje de programación orientada a objetos por excelencia. En 1995 se presento oficialmente por el constructor Sun el lenguaje Java, un lenguaje orientado a objetos y con una funcionalidad muy dirigida a la red Internte. En el año 2000 Microsoft presento C#.

El lenguaje C: historia y características


C es el lenguaje de programación de propósito general asociado, de modo universal, al sistema operativo UNIX. Sin embargo la popularidad, eficacia y potencia de C se ha producido porque este lenguaje no esta prácticamente asociado a ningún sistema operativo, ni a ninguna maquina en especial. Esta es la razón fundamental por la cual C es conocido como el lenguaje de programación de sistemas por excelencia.

C es una evolución de los lenguajes BCPL – desarrollado por Martin Richards- y B- desarrollado por Ken Thompson en 1970—para el primitivo UNIX de la computadora DEC PDP-7.
C nació realmente en 1978. Desde su nacimiento, C fue creciendo en popularidad y los sucesivos cambios en el lenguaje a lo largo de los años junto a la creación de compiladores por grupos no involucrados en su diseño hicieron necesario pensar en la estandarizacion de la definición del lenguaje C.

C es un lenguaje de alto nivel, que permite programar con instrucciones de lenguajes de propósito genera. También C se define como un lenguaje de programación estructurado de propósito general; aunque en su diseño también primo el hecho de fuera especificado como un lenguaje de programación de sistemas, lo que proporciona una enorme cantidad de potencia y flexibilidad.

Ventajas de C


El lenguaje C tiene una gran cantidad de ventajas sobre otros lenguajes y constituye precisamente la razón fundamental de que después de casi dos décadas de uso C siga siendo uno de los lenguajes mas populares, utilizados en empresas, organizaciones y fabricas de software de todo el mundo.

Algunas ventajas que posee este lenguaje son:

  • El lenguaje C es poderoso y flexible, con ordenes, operaciones y funciones de biblioteca que se pueden utilizar para escribir la mayoría de los programas que corren en la computadora.
  • C se utiliza por programadores profesionales para desarrollar software en la mayoría de los modernos sistemas de computadora.
  • Se puede utilizar C para desarrollar sistema operativos, compiladores, sistemas de tiempo real y aplicaciones de comunicaciones.
  • Un programa C puede ser escrito para un tipo de computadora y trasladarse a otro computadora con pocas o ninguna modificación .   
C se caracteriza por su velocidad de ejecución. En los primeros días de la informática los problemas de tiempo de ejecución se resolvían escribiendo todo o parte de una aplicación en lenguaje ensamblador. Debido a que existen mucho programas escritos en C se han creado numerosas bibliotecas C para programadores profesionales que soportan gran variedad de aplicaciones.

 Características técnicas de C


Hay numerosas características que diferencias a C de otros lenguajes y lo hacen eficiente y potente a la vez

  • Una nueva sintaxis para declarar funciones. Una declaración de función puede añadir una descripción de los argumentos de la función. Esta información adicional sirve para que los compiladores detecten mas fácilmente los errores causados por argumentos que no coinciden.
  • Asignación de estructuras y enumeraciones.
  • Pre-procesador mas sofisticado.
  • Una nueva definición de la biblioteca que acompaña a C. Entre otras funciones se incluyen: acceso al sistema operativo (por ejemplo, lectura y escritura de archivos), entrada y salida con formato, asignación dinámica de memoria, manejo de cadenas de caracteres.
  • Una colección de cabeceras estándar que proporciona acceso uniforme a las declaraciones de funciones y tipos de datos.

 Breve historia de C++


C++ es heredero directo del lenguaje C que a su vez se deriva del lenguaje B. C se mantiene como un subconjunto de C++. El lenguaje de programación C fue desarrollado por Dennos Ritche de AT&T Bell Laboratorios que se utilizo para escribir y mantener el sistema operativo Unix. C es un lenguaje de propósito general que se puede utilizar para escribir cualquier tipo de programa. Aunque C es un lenguaje muy potente, tiene dos características que lo hacen inapropiado como una introducción moderna a la programación. Primero, C requiere un nivel de sofisticacion a sus usuarios que les obliga a un difícil aprendizaje para los programadores principiantes, ya que es de comprensión difícil. Segundo, C fue diseñado al principio de los setenta, y la naturaleza de la programación ha cambiado de modo significativo en la década de los ochenta y noventa.

Para subsanar estas deficiencias Bjarne Stroustrup de AT&T Bell Laboratorios desarrollo C++ al principio de la década de los ochenta. Stroustrup diseño C++ como un mejor C. En general, C estándar es un subconjunto de C++ y la mayoría de los programas C son también programas C++. C++, ademas de añadir propiedades a C, presenta características y propiedades de programación orientada a objetos, que es una técnica de programación muy potente.

Se han presentado varias versiones de C++ y su evolución continua en la actualidad. Las características mas notables que han ido incorporándose a C++ son : herencia múltiple, genericidad, plantillas, funciones virtuales, excepciones, etc.


Breve historia de Java


Ocho años después de su lanzamiento, Java se convirtió  en un estándar de la industria, en un lenguaje de programación para desarrollo de aplicaciones tanto de propósito general como de Internet y también en un lenguaje para comenzar la formación en programación, al tener características excelentes para el aprendizaje.

Java, desarrollado por Sun Microsystems en 1995, es un magnifico y completo lenguaje de programación orientado a objetos diseñado para distribuir contenidos a través de una red. Una de sus principales características es que permite operar de forma independiente de la plataforma y del sistema operativo que se este utilizando. Esto quiere decir que permite crear una aplicación que podrá descargarse de la red y funcionar posteriormente en cualquier tipo de plataforma de hardware o software. Generalmente, por el contrario, todo programa o aplicación queda atado a dos cosas: a hardware y al sistema operativo.

La idea de Java por el contrario, es poner una capa sobre cualquier plataforma de hardware y sobre cualquier sistema operativo para permitir que cualquier aplicación desarrollada en Java quede ligada únicamente a Java, independizada por lo tanto de la plataforma. Esta concepción queda recogida en el concepto de maquina virtual JVM (Java Virtual Machina), un software que interpreta instrucciones para cualquier maquina sobre la que este corriendo y que permite, una vez instalado, que una misma aplicación pueda funcionar en un PC o en un Mac sin tener que tocarla. Hoy en día cualquier sistema operativo (Windows, Macintosh, Linux, Unix, Solaris, etc.) cuenta con una JVM, Así que, lo que hace java en combinación con esta “maquina” es funcionar como hardware y como sistema operativo virtual, emulando en software una CPU universal. Al instalar Java esta actuara como una capa de abstracción entre un programa y el sistema operativo, otorgando una total independencia de lo que haya por debajo, es decir; cualquier aplicación funcionara en cualquier maquina e incluso en cualquier dispositivo.

Otra gran ventaja es que los programadores no tendrán que desarrollar varias versiones de la misma aplicación, puesto que el modelo de desarrollo es el mismo se trate del dispositivo mas pequeño o del mas grande de los servidores. Otra gran ventaja es que permite que todas las maquinas, plataformas y aplicaciones se comuniquen entre si accediendo desde cualquier equipo, donde quiera que este. En definitiva, se puede decir que Java es lo mas cercano a un lenguaje de computación universal que existe hoy día, lo que significa que puede correr en cualquier plataforma siempre y cuando una maquina virtual haya sido escrita para ella.

C# el mas joven


A pesar del éxito de java, indudable por otra parte, también tiene sus lagunas. Entre ellas la dificultad para la interoperabilidad de lenguajes cruzados o programación de lenguajes mezclados. ES decir, la capacidad para que el código producido por un lenguaje funcione fácilmente con el código producido por otro. La interoperabilidad de lenguajes cruzados se requiere para la creación de sistemas de software grandes y distribuidos, así como para la construcción de componentes de software.

Otra carencia notable de Java es la no integración completa de la plataforma Java, aunque los programas java se pueden ejecutar en un entorno Windows ( suponiendo que se ha instalado la Maquina Virtual Java). Para responder a estas necesidades Microsoft creo C# dentro de su estrategia global .NET y nombro arquitecto jefe del proyecto a Anders Hejlsberg , uno de los grandes expertos mundiales en lenguajes de programación (entre otros proyectos creo en los ochenta el popular Turbo Pascal).

C# esta relacionado directamente con C, C++ y Java. De C ha heredado su sintaxis, muchas de las palabras reservadas y sus operadores. De C++ ha heredado su modelo de objetos. La relación con Java es mas bien de “amor/odio”. C# y Java son familia, mas bien primos hermanos, sin embargo C# no es descendiente de Java, aunque compartan unos descendientes comunes, C y C++. Por ejemplo, ambos soportan programación distribuida y ambos utilizan código intermedio para conseguir portabilidad, pero difieren en los detalles. C# añade importantes innovaciones al arte de la programación. Por ejemplo, C# incluye delegados, propiedades, indexadores y eventos como elementos del lenguaje.

También añade sintaxis que soporta atributos. Además C# racionaliza la creación de componentes, eliminado los problemas asociados con COM. También, en este caso como Java, ofrece una cantidad significativa de verificación de errores en tiempo de ejecución , seguridad y gestión de la ejecución. En resumen C# reúne la potencia de C++ con la seguridad de tipos de Java.

 C# representa en la primera década del siglo XXI (21) a un lenguaje de programación con la mayoría de las grandes propiedades que todo buen lenguaje debe cumplir. Por esta razón es un lenguaje que ningún programador profesional puede ignorar si desea realizar desarrollador elegantes y eficientes.

Lenguajes de Programación

Lenguajes de Programación


Los lenguajes de programación sirven para escribir programas que permitan la comunicación usuario/maquina. Unos programas especiales llamados traductores (compiladores o interpretes) convierten las instrucciones escritas en lenguajes de programación en instrucciones escritas en lenguajes maquina (0 y 1, bits) que la computadora pueda entender.

Los programas de utilidad facilitan el uso de la computadora. Un ejemplo es un editor de textos que permite la escritura y edición de documentos. Los programas que realizan tareas concretas, nominas, contabilidad etc.., se denominan programas de aplicación.

Se debe diferenciar entre el acto de crear un programa y la acción de la computadora cuando ejecuta las instrucciones del programa. La creación de un programa se hace inicialmente en papel y a continuación se introduce en la computadora y se convierte en lenguaje entendible por la computadora.

El propósito de un lenguaje informático (lenguaje de computadora) es permitir a las personas comunicarse con una computadora. Los lenguajes de los humanos y los lenguajes de la maquina son muy diferentes, ya que las características y posibilidades de las personas y de las maquinas son muy diferentes. Los lenguajes de computadoras permiten a las personas escribir en un lenguaje que sea mas apropiado a las características humanas y se puedan traducir al lenguaje maquina de diferentes tipos de maquinas.

Los principales tipos de lenguajes utilizados en la actualidad son tres:

  1. Lenguaje maquina
  2. Lenguaje de bajo nivel (ensamblador)
  3. Lenguajes de alto nivel


Lenguajes maquinas


Los lenguajes maquina son aquellos que están escritos en lenguajes directamente inteligibles por la maquina (computadora), ya que sus instrucciones son cadenas binarias (cadenas o series de caracteres—dígitos—0 y 1)que especifican una operación, y las posiciones (dirección) de memoria implicadas en la operación se denominan instrucciones de maquina o código maquina. El código maquina es el conocido código binario.

Las instrucciones en lenguaje maquina dependen del hardware de la computadora y, por tanto diferirán de una computadora a otra. El lenguaje maquina de un PC sera diferente de un sistema HP, Dell, Compaq etc…


 Las ventajas de programar en lenguaje maquina se refieren, fundamentalmente, a la posibilidad de cargar (transferir un programa a la memoria) sin necesidad de traducción posterior, lo que supone una velocidad de ejecución superior a cualquier otro lenguaje de programación.

Los inconvenientes superan a las ventajas, lo que hace prácticamente no recomendables los lenguajes maquina al programador de aplicaciones. Estos inconvenientes son:

  • Dificultad y lentitud en la codificación.
  • Poca fiabilidad,
  • Dificultad grande de verificar y poner a punto los programas,
  • Los programas solo son ejecutables en el mismo procesador (UCP),

 Para evitar los lenguajes maquina, desde el punto de vista del usuario, se han creado otros lenguajes que permiten escribir programas con instrucciones similares al lenguaje humano. Esto lenguajes se denominan de alto y bajo nivel.

Lenguajes de bajo nivel


Los lenguajes de bajo nivel son mas fáciles de utilizar que los lenguajes maquina, pero al igual que ellos, dependen de la maquina en particular. El lenguaje de bajo nivel por excelencia es el ensamblador. Las instrucciones en lenguaje ensamblador son instrucciones conocidas como nemotécnicos . Por ejemplo, nemotécnicos típicos de operaciones aritméticas son: en ingles ADD, SUB, DIV, etc., en español, SUM, RES, DIV, etc.

Una instrucción típica de suma seria:

ADD, M, N, P

Esta instrucción podía significar “sumar el numero contenido en la posición de memoria M al numero almacenado en la posición de memoria N y situar el resultado en la posición de memoria P”. Evidentemente , es mucho mas sencillo recordar la instrucción anterior con un nemotécnico que su equivalente en código maquina:

0110 1001 1010 1011

Un programa escrito en lenguaje ensamblador no puede ser ejecutado directamente por la computadora – en esto se diferencia esencialmente del lenguaje maquina- , sino que requiere una fase de traducción al lenguaje maquina.

El programa original escrito en lenguaje ensamblador se denomina programa fuente y el programa traducido en lenguaje maquina se conoce como programa objeto, ya directamente inteligible por la computadora.

El traductor de programas fuente a objeto es un programa llamado ensamblador, existente en casi todas las computadoras.

No se debe confundir el programa ensamblador, encargado de efectuar la traducción del programa fuente escrito a lenguaje maquina, que el lenguaje ensamblador, lenguaje de programación con una estructura y gramática definidas.

Los lenguajes ensambladores presentan la ventaja frente a los lenguajes maquina de su mayor facilidad de codificación y , en general, su velocidad de calculo.

Los inconvenientes mas notables de los lenguajes ensambladores son:

  • Dependencia total de la maquina, lo que impide la transportabilidad de los programas (posibilidad de ejecutar un programa en diferentes maquinas).
  • La formación de los programadores es mas compleja que la correspondiente a los programadores de alto nivel, ya que exige no solo las técnicas de programación, sino también el conocimiento del interior de la maquina.

Lenguajes de alto nivel


Los lenguajes de alto nivel son los mas utilizados por los programadores. Están diseñados para que las personas escriban y entiendan los programas de un modo mucho mas fácil que los lenguajes maquina y ensambladores. Otra razón es que un programa escrito en lenguaje de alto nivel es independiente de la maquina; esto es, las instrucciones del programa de la computadora no dependen del diseño del hardware o de una computadora en particular. En consecuencia, los programas escritos en lenguaje de alto nivel son portables o transportables, lo que significa la posibilidad de poder ser ejecutados con poca o ninguna modificación en diferentes tipos de computadoras; al contrario que los programas en lenguaje maquina o ensamblador, que solo se pueden ejecutar en un determinado tipo de computadora. Los lenguajes de alto nivel presentan las siguientes ventajas:

  • El tiempo de formación de los programadores es relativamente corto comparado con otros lenguajes.
  • La escritura de programas se basa en reglas sintácticas similares a los lenguajes humanos. Nombres de las instrucciones, pueden ser READ, WRITE, PRINT, OPEN, etc.
  • Las modificaciones puestas a punto de los programas son mas fáciles.
  • Reducción del conste de los programas.
  • Transportabilidad.

Los inconvenientes se concretan en:

  • Incremento del tiempo de puesta a punto, al necesitarse diferentes traducciones del programa fuente para conseguir el programa definitivo.
  • No se aprovechan los recursos internos de la maquina, que se explotan mucho mejor en lenguajes máquina y ensambladores.
  • Aumento de la ocupación de memoria.
  • El tiempo de ejecución de los programas es mucho mayor.

 Al igual que sucede con los lenguajes ensambladores, los programas fuente tienen que ser traducidos por los programas traductores, llamados en este caso compiladores e interpretes.

Traductores de lenguaje


Los traductores de lenguaje son programas que traducen a su vez los programas fuente escritos en lenguajes de alto nivel a código maquina. Los traductores se dividen en:
  • Compiladores
  •  Interpretes

Interpretes


Un interprete es un traductor que toma un programa fuente, lo traduce y a continuación lo ejecuta. Los programas interpretes clásicos, como BASIC, prácticamente ya no se utilizan, aunque puede encontrarse una vieja computadora que funcione con la versión QBASIC bajo el sistema operativo DOS que corre en las computadoras personales.


Compiladores


Después que se ha diseñado el algoritmo y escrito el programa en un papel, se debe comenzar el proceso de introducir el programa en un archivo (fichero) en el disco duro de la computadora. La introducción y modificación de su programa en un archivo se hace utilizando un editor de texto o simplemente un editor, un programa que viene con su computadora, normalmente, y que le permite el almacenamiento y recuperaron de lo que se ha escrito en el disco. El aprendizaje de cómo utilizar un editor hace la tarea de introducir un programa una tarea muy fácil.

El programa que se ha introducido esta escrito en C o en Java, pero ni C ni java son lenguajes maquina de su computadora, muy al contrario son lenguajes de alto nivel diseñados para hacer mas fácil la programación que utilizando el lenguaje maquina. Una computadora no entiende los lenguajes de alto nivel. En consecuencia, un programa escrito en un lenguaje de alto nivel debe ser traducido a un lenguaje que la maquina pueda comprender. Los lenguajes que la computadora puede comprender mas o menos directamente se llaman lenguajes de bajo nivel. La traducción de un programa escrito en en lenguaje de alto nivel, como C++ o Java, a un lenguaje que pueda entender la computadora se hace mediante otro programa conocido como compilador.

Los lenguajes de bajo nivel que la computadora puede entender directamente se conocen como lenguajes ensamblador o lenguajes maquina. En realidad, aunque son muy similares y en ocasiones se les considera sinónimos, tienen algunas pequeñas diferencias. El lenguaje que la computadora puede comprender directamente se denomina lenguaje maquina. El lenguaje ensamblador es casi la misma cosa, pero necesita un paso adicional para que la traducción pueda ser entendida por la maquina. Si un compilador traduce su programa de alto nivel a algún lenguaje de bajo nivel, no es exactamente lenguaje de maquina, se necesitara, por tanto una pequeña traducción adicional antes de ser ejecutado en la computadora, pero normalmente este proceso suele ser automático y no es problemático.

Cuando se ejecuta un programa en lenguaje de alto nivel, tal como C, C++ o Java, se esta ejecutando realmente una traducción de ese programa a un lenguaje de bajo nivel. Por consiguiente, antes de que se ejecute un programa escrito en un lenguaje de alto nivel, se debe ejecutar en primer lugar el compilador en el programa. Cuando se ejecuta un compilador sobre sus programa se dice que se compila el programa.

Una desventaja del proceso de traducción que se acaba de describir es que se necesita un compilador diferente para cada tipo de computadora y cada sistema operativo. Si se desea ejecutar su programa en lenguaje de alto nivel en tres maquinas diferentes, se necesitaran utilizar tres diferentes compiladores y se debe compilar su programa tres veces.

En resumen , para crear y ejecutar un programa en un lenguaje tal como C, C++ o Java, se necesita introducir el programa utilizando un editor de texto; ejecutar un programa especial denominado compilador, traducir el lenguaje de alto nivel a lenguaje maquina y a continuación cargar el lenguaje maquina en memoria principal y ejecutarlo.

La compilación y sus fases


La compilación es el proceso de traducción de programas fuente a programas objeto. El programa objeto obtenido de la compilación ha sido traducido normalmente a código maquina.

Para conseguir el programa maquina real se debe utilizar un programa llamado montador o enlazador. El proceso de montaje conduce a un programa en lenguaje maquina directamente ejecutable.

El proceso de ejecución de un programa escrito en un lenguaje de programación y mediante un compilador suele tener los siguientes pasos:

  1. Escritura del programa fuente con un editor y guardarlo en un dispositivo de almacenamiento.
  2. Introducir el programa fuente en memoria.
  3. Compilar el programa con el compilador 
  4. Verificar y corregir errores de compilación (listado de errores),
  5. Obtención del programa objeto.
  6. El enlazador obtiene el programa ejecutable
  7. Se ejecuta el programa y, si no existen errores, se tendrá la salida del programa.