SlideShare una empresa de Scribd logo
1 de 20
Descargar para leer sin conexión
INTRODUCCIÓN
Con el tiempo el hombre va inventando cosas nuevas para ir
mejorando su calidad de vida, a fin de hacer las cosas más
eficientes. Así es como surgen las computadoras, un aparato
electrónico que hoy en día nos facilita la vida. Realiza un
sin fin de funciones que para un persona le llevaría horas e
incluso días. Por citar un algo, seria el comparativo de las
reglas de cálculo, con las calculadoras científicas, las
primeras nos facilitaban la idea de hacer un montón de
cálculos a mano, pero aun así, el tiempo era muy largo.
Ahora con las calculadoras científicas, el tiempo se reduce
a minutos y segundos.

Por eso, las computadoras son una gran herramienta muy
fascinante, además de útiles. Cada día van evolucionando y
siendo mejores cada día, es una de las herramientas más
usadas hoy en día y todo es por el núcleo, el alma de la
computadora, que es el microprocesador. Este componente hace
las millones de intrusiones necesarias para el hombre a una
enorme velocidad.
Arquitectura de Von Neumann
Es una familia de arquitecturas de computadoras que utilizan
el mismo dispositivo de almacenamiento tanto para las
instrucciones como para los datos a diferencia de la
arquitectura Harvard, que que almacenaba las instrucciones
en cintas perforadas y los datos en interruptores.

Todas las computadoras constan principalmente de dos partes,
la CPU que procesa los datos, y la memoria que guarda los
datos. Cuando hablamos de memoria manejamos dos parámetros,
los datos en sí, y el lugar donde se encuentran almacenados
(odirección). Los dos son importantes para la CPU, pues
muchas instrucciones frecuentes se traducen a algo así como
"coge los datos de ésta dirección y añádelos a los datos de
ésta otra dirección", sin saber en realidad qué es lo que
contienen los datos.

En los últimos años la velocidad de las CPUs ha aumentado
mucho en comparación a la de las memorias con las que
trabaja, así que se debe poner mucha atención en reducir el
número de veces que se accede a ella para mantener el
rendimiento. Si, por ejemplo, cada instrucción ejecutada en
la CPU requiere un acceso a la memoria, no se gana nada
incrementando la velocidad de la CPU - este problema es
conocido como 'limitación de memoria'.




Nombre

El término arquitectura de Von Neumann se acuñó a partir del
memorando First Draft of a Report on the EDVAC (1945)
escrito por el conocido matemático John von Neumann en el
que se proponía el concepto de programa almacenado. Dicho
documento fue redactado en vistas a la construcción del
sucesor   de  la computadora ENIAC y    su   contenido   fue
desarrollado    por John   Presper   Eckert, John    William
Mauchly, Arthur Burks y otros durante varios meses antes de
que von Neumann redactara el borrador del informe. Es por
ello que otros tecnólogos como David A. Patterson y John L.
Hennessy promueven la sustitución de este término por el
de arquitectura Eckert-Mauchly.
ENIAC
Electronic Numerical Integrator AndComputer (Computador  e
Integrador    Numérico  Electrónico),   utilizada   por el
Laboratorio de Investigación Balística del Ejército de los
Estados Unidos

Era totalmente digital, es decir, que ejecutaba sus procesos
y operaciones mediante instrucciones en lenguaje máquina, a
diferencia de otras máquinas computadoras contemporáneas de
procesos analógicos.




EDVAC
(Electronic Discrete Variable Automatic Computer) por sus
siglas    en   inglés,    fue    una    de   las    primeras
computadoras electrónicas. A diferencia de la ENIAC, no
era decimal, sino binaria y tuvo el primer programa diseñado
para ser almacenado. Este diseño se convirtió en el estándar
de arquitectura para la mayoría de las computadoras
modernas.

El diseño de la EDVAC es considerado un éxito en la historia
de la informática.

El diseño de la EDVAC fue desarrollado aún antes de que la
ENIAC fuera puesta en marcha y tenía la intención de
resolver muchos de los problemas encontrados en el diseño de
la ENIAC. Así como la ENIAC, la EDVAC fue construida por el
laboratorio de investigación de balística de Estados Unidos
de la universidad de Pensilvana. A los diseñadores de la
ENIAC, J. Presper Eckert y John William Mauchlyse les unió
el gran matemático John von Neumann.

La computadora fue diseñada para ser binaria con adición,
sustracción   y   multiplicación   automática   y   división
programada. También poseería un verificador automático con
capacidad para mil palabras (luego se estableció en 1,024).
Físicamente la computadora fue construida de los siguientes
componentes: Un lector-grabador de cinta magnética, una
unidad de control con osciloscopio, una unidad para recibir
instrucciones del control y la memoria y para dirigirlas a
otras unidades, una unidad computacional para realizar
operaciones aritméticas en un par de números a la vez y
mandarlos a la memoria después de corroborarlo con otra
unidad idéntica, un cronómetro, y una unidad de memoria
dual.

Una preocupación importante   en   el   diseño   era   balancear
fiabilidad y economía.


Lenguaje Máquina
Los circuitos microprogramables son sistemas digitales, lo
que significa que trabajan con dos únicos niveles de
tensión. Dichos niveles, por abstracción, se simbolizan con
el cero, 0, y el uno, 1, por eso el lenguaje de máquina sólo
utiliza dichos signos. Esto permite el empleo de las teorías
del álgebra booleana y del sistema binario en el diseño de
este tipo de circuitos y en su programación.

Álgebra booleana
También   llamada   Algebra   de   Boole, en   informática y
matemática, es una estructura algebraica que contiene las
operaciones lógicas AND, OR y NOT, así como el conjunto de
operaciones unión, intersección y complemento.




Sistema Binario
En matemáticas e informática, es un sistema de numeración en
el que los números se representan utilizando solamente
las cifras cero y uno (0 y 1).   Los ordenadores    trabajan
internamente con dos niveles de voltaje, por lo que su
sistema de numeración natural   es   el   sistema   binario
(encendido 1, apagado 0).
John von Neumann zu Margitta
(28 de diciembre de 1903 - 8 de febrero de 1957)

Fue   un matemáticohúngaro-estadounidense,    de  ascendencia
judía, que realizó contribuciones importantes en física
cuántica, análisis     funcional, teoría     de    conjuntos,
informática, economía, análisis numérico, hidrodinámica (de
explosiones), estadística y    muchos    otros   campos    de
la matemática. Recibió su doctorado en matemáticas de
la Universidad de Budapest a los 23 años.

Fue pionero de la computadora digital moderna y de la
aplicación de la teoría de operadores a lamecánica cuántica.
Trabajó     con Eckert y Mauchly en     la Universidad     de
Pennsylvania,   donde   publicó  un   artículo   acerca   del
almacenamiento de programas. El concepto de programa
almacenado permitió la lectura de un programa dentro de la
memoria de la computadora, y después la ejecución de las
instrucciones del mismo sin tener que volverlas a escribir.
La primera computadora en usar el citado concepto fue la
llamada EDVAC (Electronic     Discrete-Variable     Automatic
Computer, es decir 'computadora automática electrónica de
variable discreta'), desarrollada por Von Neumann, Eckert y
Mauchly. Los programas almacenados dieron a las computadoras
flexibilidad y confiabilidad, haciéndolas más rápidas y
menos sujetas a errores que los programas mecánicos.

Von Neumann le dio su nombre a la arquitectura de von
Neumann, utilizada en casi todos los computadores, por su
publicación del concepto; aunque muchos piensan que este
nombramiento    ignora   la   contribución   de J.    Presper
Eckert y John William Mauchly, quienes aportaron al concepto
durante su trabajo en ENIAC. Virtualmente, cada computador
personal, microcomputador, minicomputador y supercomputador
es una máquina de von Neumann. También creó el campo de
los autómatas celulares sin computadores, construyendo los
primeros ejemplos de autómatas autorreplicables con lápiz y
papel. El concepto de constructor universal fue presentado
en    su    trabajopóstumo   Teoría    de    los    Autómatas
Autorreproductivos. El término "máquina de von Neumann" se
refiere alternativamente a las máquinas autorreplicativas.
Von Neumann probó que el camino más efectivo para las
operaciones    mineras    a  gran    escala,     como   minar
una luna entera o un cinturón de asteroides, es a través del
uso de máquinas auto-replicativas, para tomar ventaja
del crecimiento exponencial de tales mecanismos.
Adicional a su trabajo en arquitectura computacional, von
Neumann es acreditado con al menos una contribución al
estudio de algoritmos. Donald Knuth denomina a von Neumann
como el inventor, en 1945, del conocido algoritmomerge sort,
en el cual la primera y segunda mitad de un array (vector)
son cada una clasificadas recursivamente y luego fusionadas
juntas.



PARTES DE LA ARQUITECTURA DE VON
NEUMANN
Los ordenadores con arquitectura Eckert-Mauchly constan de
cinco partes:

   La unidad aritmético-lógica (ALU)
   La unidad de control
   La memoria
   Un dispositivo de entrada/salida
   El bus de datos que proporciona un medio de transporte
     de los datos entre las distintas partes.




Un ordenador con arquitectura Eckert-Mauchly realiza o emula
los siguientes pasos secuencialmente:

   Enciende   el   ordenador  y   obtiene  la   siguiente
    instrucción desde la memoria en la dirección indicada
    por el contador de programa y la guarda en el registro
    de instrucción.
 Aumenta el contador de programa en la longitud de la
  instrucción para apuntar a la siguiente.

 Decodifica la   instrucción mediante la unidad de
  control. Ésta se encarga de coordinar el resto de
  componentes del ordenador para realizar una función
  determinada.

 Se ejecuta la instrucción. Ésta puede cambiar el valor
  del contador del programa, permitiendo así operaciones
  repetitivas. El contador puede cambiar también cuando
  se cumpla una cierta condición aritmética, haciendo
  que el ordenador pueda 'tomar decisiones', que pueden
  alcanzar cualquier grado de complejidad, mediante la
  aritmética y lógica anteriores.

 Vuelve al paso 2.
LENGUAJE DE PROGRAMACIÓN
Con   la  aparición   de  las computadoras desaparecen   las
secuencias de posiciones de llaves mecánicas que debían
desconectarse para obtener una acción determinada, una llave
conectada era un 1 y una llave desconectada era un 0. Una
sucesión de llaves en cualquiera de sus dos posiciones
definía una secuencia de ceros y unos (por ejemplo:
0100011010011101...) que venía a representar una instrucción
o un conjunto de instrucciones (programa) para el ordenador
(o computador) en el que se estaba trabajando. A esta
primera forma de especificar programas para una computadora
se la denomina lenguaje máquina o código máquina.

La necesidad de recordar secuencias de programación para las
acciones usuales llevó a denominarlas con nombres fáciles de
memorizar y asociar: ADD (sumar), SUB (restar), MUL
(multiplicar), CALL (ejecutar subrutina), etc. A esta
secuencia de posiciones se le denominó "instrucciones", y a
este conjunto de instrucciones se le llamó lenguaje
ensamblador.

Posteriormente   aparecieron   diferentes lenguajes   de
programación, los cuales reciben su denominación porque
tienen una estructura sintáctica similar a los lenguajes
escritos por los humanos.

Concepto
Un lenguaje de programación es un conjunto de símbolos y
reglas sintácticas y semánticas que definen su estructura y
el significado de sus elementos y expresiones, y utilizado
para controlar el comportamiento físico y lógico de una
máquina.

Un   lenguaje   de   programación  permite   a   uno  o  más
programadores especificar de manera precisa: sobre qué datos
una   computadora debe     operar, cómo    deben ser estos
almacenados, transmitidos y qué acciones debe tomar bajo una
variada gama de circunstancias. Todo esto, a través de
un lenguaje que    intenta   estar relativamente próximo  al
lenguaje humano o natural, tal como sucede con el lenguaje
Léxico. Una característica relevante de los lenguajes de
programación es precisamente que más de un programador
puedan tener un conjunto común de instrucciones que puedan
ser comprendidas entre ellos para realizar la construcción
del programa de forma colaborativa.
Los procesadores usados en las computadoras son capaces de
entender y actuar según lo indican programas escritos en un
lenguaje fijo llamado lenguaje de máquina. Todo programa
escrito en otro lenguaje puede ser ejecutado de dos maneras:

   Mediante   un    programa   que   va   adaptando   las
    instrucciones conforme son encontradas. A este proceso
    se lo llama interpretar y a los programas que lo hacen
    se los conoce como intérpretes.

   Traduciendo este programa al programa equivalente
    escrito en lenguaje de máquina. A ese proceso se lo
    llama compilar y al traductor se lo conoce como un
    malhecho compilador.



Clasificación         de      los      lenguajes         de
programación
Los lenguajes de programación se determinan según el nivel
de abstracción, Según la forma de ejecución y Según el
paradigma de programación que poseen cada uno de ellos y
esos pueden ser:


Según su nivel de abstracción

Lenguajes Maquina
Están escritos en lenguajes directamente inteligibles por la
maquina (computadora), ya que sus instrucciones son cadenas
binarias (0 y 1). Da 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, solo que
con poca fiabilidad y dificultad de verificar y poner a
punto los programas.

Lenguajes de bajo nivel
Los lenguajes de bajo nivel son lenguajes de programación
que se acercan al funcionamiento de una computadora. El
lenguaje de más bajo nivel es, por excelencia, el código
máquina. A éste le sigue el lenguaje ensamblador, ya que al
programar en ensamblador se trabajan con los registros
e memoria de la computadora de forma directa.
Lenguajes de medio nivel
Hay lenguajes de programación que son considerados por
algunos expertos como lenguajes de medio nivel (como es el
caso del lenguaje C) al tener ciertas características que
los acercan a los lenguajes de bajo nivel pero teniendo, al
mismo tiempo, ciertas cualidades que lo hacen un lenguaje
más cercano al humano y, por tanto, de alto nivel.

Lenguajes de alto nivel
Artículo principal: Lenguaje de alto nivel
Los lenguajes de alto nivel son normalmente fáciles de
aprender porque están formados por elementos de lenguajes
naturales, como el inglés. En BASIC, el lenguaje de alto
nivel más conocido, los comandos como "IF CONTADOR = 10 THEN
STOP" pueden utilizarse para pedir a la computadora que pare
si CONTADOR es igual a 10. Por desgracia para muchas
personas esta forma de trabajar es un poco frustrante, dado
que a pesar de que las computadoras parecen comprender un
lenguaje natural, lo hacen en realidad de una forma rígida y
sistemática.

Según la forma de ejecución

Lenguajes compilados
Naturalmente, un programa que se escribe en un lenguaje de
alto nivel también tiene que traducirse a un código que
pueda utilizar la máquina. Los programas traductores que
pueden realizar esta operación se llaman compiladores.
Éstos, como los programas ensambladores avanzados, pueden
generar muchas líneas de código de máquina por cada
proposición del programa fuente. Se requiere una corrida de
compilación antes de procesar los datos de un problema.

Los compiladores son aquellos cuya función es traducir un
programa escrito en un determinado lenguaje a un idioma que
la computadora entienda (lenguaje máquina con código
binario).

Al usar un lenguaje compilado (como lo son los lenguajes del
popular   Visual   Studio   de   Microsoft),   el   programa
desarrollado nunca se ejecuta mientras haya errores, sino
hasta que luego de haber compilado el programa, ya no
aparecen errores en el código

Lenguajes interpretados
Se puede también utilizar una alternativa diferente de los
compiladores para traducir lenguajes de alto nivel. En vez
de traducir el programa fuente y grabar en forma permanente
el código objeto que se produce durante la corrida de
compilación para utilizarlo en una corrida de producción
futura, el programador sólo carga el programa fuente en la
computadora junto con los datos que se van a procesar. A
continuación, un programa intérprete, almacenado en el
sistema operativo del disco, o incluido de manera permanente
dentro de la máquina, convierte cada proposición del
programa fuente en lenguaje de máquina conforme vaya siendo
necesario durante el proceso de los datos. No se graba el
código objeto para utilizarlo posteriormente.

La siguiente vez que se utilice una instrucción, se le debe
interpretar otra vez y traducir a lenguaje máquina. Por
ejemplo, durante el procesamiento repetitivo de los pasos de
un ciclo, cada instrucción del ciclo tendrá que volver a ser
interpretado cada vez que se ejecute el ciclo, lo cual hace
que el programa sea más lento en tiempo de ejecución (porque
se va revisando el código en tiempo de ejecución) pero más
rápido en tiempo de diseño (porque no se tiene que estar
compilando a cada momento el código completo). El intérprete
elimina la necesidad de realizar una corrida de compilación
después de cada modificación del programa cuando se quiere
agregar funciones o corregir errores; pero es obvio que un
programa objeto compilado con antelación deberá ejecutarse
con mucha mayor rapidez que uno que se debe interpretar a
cada paso durante una corrida de producción

Según el paradigma de programación


Un   paradigma  de   programación   representa  un   enfoque
particular o filosofía para la construcción del software. No
es mejor uno que otro, sino que cada uno tiene ventajas y
desventajas. Dependiendo de la situación un paradigma
resulta más apropiado que otro.

Atendiendo   al  paradigma   de   programación,   se   pueden
clasificar los lenguajes en :

   El paradigma   imperativo   o   por   procedimientos es
    considerado el más común y está representado, por
    ejemplo, por el C o por BASIC.
   El   paradigma  funcional está representado por la
    familia              de              lenguajes LISP (en
    particular Scheme), ML o Haskell.
   El paradigma lógico, un ejemplo es PROLOG.
   El   paradigma  orientado   a   objetos.   Un  lenguaje
    completamente orientado a objetos es Smalltalk.
  
Si bien puede seleccionarse la forma pura de estos
paradigmas al momento de programar, en la práctica es
habitual que se mezclen, dando lugar a la programación
multiparadigma.

Actualmente el paradigma de programación más usado debido a
múltiples   ventajas   respecto   a   sus  anteriores,   es
la programación orientada a objetos.
Lenguaje ensamblador
El lenguaje ensamblador es un tipo de lenguaje de bajo nivel
utilizado para escribir programas informáticos, y constituye
la representación más directa del código máquina específico
para cada arquitectura de computadoras legible por un
programador.

Fue usado ampliamente en el pasado para el desarrollo
de software, pero actualmente sólo se utiliza en contadas
ocasiones, especialmente cuando se requiere la manipulación
directa del hardware o se pretenden rendimientos inusuales
de los equipos.

Características
   Programar       en     lenguaje       ensamblador      es    difícil     de
     aprender,      entender,           leer,    escribir,       depurar     y
     mantener, por eso surgió la necesidad de los lenguajes
     compilados.


   A     pesar    de     perder       rendimiento    en    un   proceso    de
     compilación,        en    la      actualidad    la    mayoría   de     las
     computadoras son suficientemente rápidas.




   El lenguaje ensamblador no es portable.


   Programar en lenguaje ensamblador lleva mucho tiempo.




   Los       programas       hechos     en   lenguaje     ensamblador      son
     generalmente más rápidos. Al programar cuidadosamente
     en lenguaje ensamblador se pueden crear programas de 5
     a   10    veces más       rápidos que      con   lenguajes      de    alto
     nivel.
 Los      programas   hechos   en   lenguaje   ensamblador
  generalmente ocupan menos espacio. Un buen programa en
  lenguaje ensamblador puede ocupar casi la mitad de
  espacio que su contraparte en lenguaje de alto nivel.




 Con el lenguaje ensamblador se pueden crear segmentos
  de código imposibles de formar en un lenguaje de alto
  nivel.
Ventajas y desventajas                               del
Lenguaje Ensamblador
El proceso de evolución trajo consigo algunas desventajas,
que ahora veremos como las ventajas de usar el Lenguaje
Ensamblador, respecto a un lenguaje de alto nivel:

   Velocidad
   Eficiencia de tamaño
   Flexibilidad


Velocidad
El proceso de traducción que realizan los intérpretes,
implica un proceso de cómputo adicional al que el
programador quiere realizar. Por ello, nos encontraremos con
que un intérprete es siempre más lento que realizar la misma
acción en Lenguaje Ensamblador, simplemente porque tiene el
costo adicional de estar traduciendo el programa, cada vez
que lo ejecutamos.

De ahí nacieron los compiladores, que son mucho más rápidos
que los intérpretes, pues hacen la traducción una vez y
dejan el código objeto, que ya es Lenguaje de Máquina, y se
puede ejecutar muy rápidamente. Aunque el proceso de
traducción es más complejo y costoso que el de ensamblar un
programa, normalmente podemos despreciarlo, contra las
ventajas de codificar el programa más rápidamente.
Sin embargo, la mayor parte de las veces, el código generado
por un compilador es menos eficiente que el código
equivalente que un programador escribiría. La razón es que
el compilador no tiene tanta inteligencia, y requiere ser
capaz de crear código genérico, que sirva tanto para un
programa como para otro; en cambio, un programador humano
puede aprovechar las      características  específicas del
problema, reduciendo la generalidad pero al mismo tiempo, no
desperdicia ninguna instrucción, no hace ningún proceso que
no sea necesario.

Para darnos una idea, en una PC, y suponiendo que todos son
buenos programadores, un programa para ordenar una lista
tardará cerca de 20 veces más en Visual Basic (un
intérprete), y 2 veces más en C (un compilador), que el
equivalente en Ensamblador.
Por ello, cuando es crítica la velocidad del programa,
Ensamblador se vuelve un candidato lógico como lenguaje.
Ahora bien, esto no es un absoluto; un programa bien hecho
en C puede ser muchas veces más rápido que un programa mal
hecho en Ensamblador; sigue siendo sumamente importante la
elección apropiada de algoritmos y estructuras de datos. Por
ello, se recomienda buscar optimizar primero estos aspectos,
en el lenguaje que se desee, y solamente usar Ensamblador
cuando se requiere más optimización y no se puede lograr por
estos medios.

Eficiencia de Tamaño

Por las mismas razones que vimos en el aspecto de velocidad,
los compiladores e intérpretes generan más código máquina
del necesario; por ello, el programa ejecutable crece. Así,
cuando es importante reducir el tamaño del ejecutable,
mejorando el uso de la memoria y teniendo también beneficios
en velocidad, puede convenir usar el lenguaje Ensamblador.
Entre los programas que es crítico el uso mínimo de memoria,
tenemos a los virus y manejadores de dispositivos (drivers).
Muchos de ellos, por supuesto, están escritos en lenguaje
Ensamblador.

Flexibilidad

Las razones anteriores son cuestión de grado: podemos hacer
las cosas en otro lenguaje, pero queremos hacerlas más
eficientemente. Pero todos los lenguajes de alto nivel
tienen limitantes en el control; al hacer abstracciones,
limitan su propia capacidad. Es decir, existen tareas que la
máquina puede hacer, pero que un lenguaje de alto nivel no
permite. Por ejemplo, en Visual Basic no es posible cambiar
la resolución del monitor a medio programa; es una
limitante, impuesta por la abstracción del GUI Windows. En
cambio, en ensamblador es sumamente sencillo, pues tenemos
el acceso directo al hardware del monitor.



Por otro lado, al ser un lenguaje más primitivo, el
Ensamblador tiene ciertas desventajas respecto a los
lenguajes de alto nivel:

     Tiempo de programación
     Programas fuente grandes
     Peligro de afectar recursos inesperadamente
     Falta de portabilidad
Tiempo de programación

Al ser de bajo nivel, el Lenguaje Ensamblador requiere más
instrucciones para realizar el mismo proceso, en comparación
con un lenguaje de alto nivel. Por otro lado, requiere de
más cuidado por parte del programador, pues es propenso a
que los errores de lógica se reflejen más fuertemente en la
ejecución.

Por todo esto, es más lento el desarrollo de programas
comparables en Lenguaje Ensamblador que en un lenguaje de
alto nivel, pues el programador goza de una menor
abstracción.

Programas fuente grande
Por las mismas razones que aumenta el tiempo, crecen los
programas fuentes; simplemente, requerimos más instrucciones
primitivas para describir procesos equivalentes. Esto es una
desventaja porque dificulta el mantenimiento de los
programas, y nuevamente reduce la productividad de los
programadores.

Peligro de afectar recursos inesperadamente
Tenemos la ventaja de que todo lo que se puede hacer en la
máquina, se puede hacer con el Lenguaje Ensamblador
(flexibilidad). El problema es que todo error que podamos
cometer, o todo riesgo que podamos tener, podemos tenerlo
también en este Lenguaje. Dicho de otra forma, tener mucho
poder es útil pero también es peligroso.

En la vida práctica, afortunadamente no ocurre mucho; sin
embargo, al programar en este lenguaje verán que es mucho
más común que la máquina se "cuelgue", "bloquee" o "se le
vaya el avión"; y que se reinicialize. ¿Por qué?, porque con
este lenguaje es perfectamente posible (y sencillo) realizar
secuencias de instrucciones inválidas, que normalmente no
aparecen al usar un lenguaje de alto nivel.

En ciertos casos extremos, puede llegarse a sobrescribir
información del CMOS de la máquina (no he visto efectos más
riesgosos); pero, si no la conservamos, esto puede causar
que dejemos de "ver" el disco duro, junto con toda su
información.
Falta de portabilidad

Como ya se mencionó, existe un lenguaje ensamblador para
cada máquina; por ello, evidentemente no es una selección
apropiada de lenguaje cuando deseamos codificar en una
máquina y luego llevar los programas a otros sistemas
operativos o modelos de computadoras. Si bien esto es un
problema general a todos los lenguajes, es mucho más notorio
en ensamblador: yo puedo reutilizar un 90% o más del código
que desarrollo en "C", en una PC, al llevarlo a una RS/6000
con UNIX, y lo mismo si después lo llevo a una Macintosh,
siempre y cuando esté bien hecho y siga los estándares de
"C", y los principios de la programación estructurada. En
cambio, si escribimos el programa en Ensamblador de la PC,
por bien que lo desarrollemos y muchos estándares que
sigamos, tendremos prácticamente que reescribir el 100 % del
código al llevarlo a UNIX, y otra vez lo mismo al llevarlo a
Mac.

Más contenido relacionado

La actualidad más candente

Arquitecturas del harvard y von neumann maria
Arquitecturas del harvard y von neumann mariaArquitecturas del harvard y von neumann maria
Arquitecturas del harvard y von neumann mariamariagrau14
 
Arquitectura de Von Neumann
Arquitectura de Von NeumannArquitectura de Von Neumann
Arquitectura de Von Neumannjaguilar69
 
Funciones de administracion de memoria
Funciones de administracion de memoriaFunciones de administracion de memoria
Funciones de administracion de memoriaMiguel Magaña
 
CARACTERISTICAS DE LA ALU Y LA UC
CARACTERISTICAS DE LA ALU Y LA UCCARACTERISTICAS DE LA ALU Y LA UC
CARACTERISTICAS DE LA ALU Y LA UCltguevara
 
Manejo de los procesos en los sistemas operativos
Manejo de los procesos en los sistemas operativosManejo de los procesos en los sistemas operativos
Manejo de los procesos en los sistemas operativosCarolina Cols
 
Diagrama de-estado-de-procesos
Diagrama de-estado-de-procesosDiagrama de-estado-de-procesos
Diagrama de-estado-de-procesosGiant_serch
 
Interrupciones del microprocesador
Interrupciones del microprocesadorInterrupciones del microprocesador
Interrupciones del microprocesadorJorge Luis Tinoco
 
Procesadores Vectoriales
Procesadores VectorialesProcesadores Vectoriales
Procesadores VectorialesCeciliaOrtega
 
IMPORTANCIA DE LA INFORMATICA
IMPORTANCIA DE LA INFORMATICAIMPORTANCIA DE LA INFORMATICA
IMPORTANCIA DE LA INFORMATICAgaby18gonzalez
 
Arquitectura de computadoras
Arquitectura de computadorasArquitectura de computadoras
Arquitectura de computadorasfarmero
 
Asignación de memoria continua
Asignación de memoria continuaAsignación de memoria continua
Asignación de memoria continuaEdgar Pauta
 
Analisis arquitectura computador
Analisis arquitectura computadorAnalisis arquitectura computador
Analisis arquitectura computadorfreferbar
 
Arquitectura de computadoras
Arquitectura de computadorasArquitectura de computadoras
Arquitectura de computadoras16kemhernandez
 
Modelos de arquitecturas de computo
Modelos de arquitecturas de computoModelos de arquitecturas de computo
Modelos de arquitecturas de computoYESENIA CETINA
 
Arquitectura de Computadoras - Memoria
Arquitectura de Computadoras - MemoriaArquitectura de Computadoras - Memoria
Arquitectura de Computadoras - MemoriaMiguel Rodríguez
 
Modelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasModelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasYESENIA CETINA
 
Introduccion Administracion De Un Centro De Computo
Introduccion Administracion De Un Centro De ComputoIntroduccion Administracion De Un Centro De Computo
Introduccion Administracion De Un Centro De Computodjelektro
 

La actualidad más candente (20)

Arquitecturas del harvard y von neumann maria
Arquitecturas del harvard y von neumann mariaArquitecturas del harvard y von neumann maria
Arquitecturas del harvard y von neumann maria
 
Arquitectura de computadores
Arquitectura de computadoresArquitectura de computadores
Arquitectura de computadores
 
Arquitectura de Von Neumann
Arquitectura de Von NeumannArquitectura de Von Neumann
Arquitectura de Von Neumann
 
Funciones de administracion de memoria
Funciones de administracion de memoriaFunciones de administracion de memoria
Funciones de administracion de memoria
 
CARACTERISTICAS DE LA ALU Y LA UC
CARACTERISTICAS DE LA ALU Y LA UCCARACTERISTICAS DE LA ALU Y LA UC
CARACTERISTICAS DE LA ALU Y LA UC
 
Memoria virtual
Memoria virtualMemoria virtual
Memoria virtual
 
Manejo de los procesos en los sistemas operativos
Manejo de los procesos en los sistemas operativosManejo de los procesos en los sistemas operativos
Manejo de los procesos en los sistemas operativos
 
Diagrama de-estado-de-procesos
Diagrama de-estado-de-procesosDiagrama de-estado-de-procesos
Diagrama de-estado-de-procesos
 
Interrupciones del microprocesador
Interrupciones del microprocesadorInterrupciones del microprocesador
Interrupciones del microprocesador
 
Procesadores Vectoriales
Procesadores VectorialesProcesadores Vectoriales
Procesadores Vectoriales
 
IMPORTANCIA DE LA INFORMATICA
IMPORTANCIA DE LA INFORMATICAIMPORTANCIA DE LA INFORMATICA
IMPORTANCIA DE LA INFORMATICA
 
Arquitectura de computadoras
Arquitectura de computadorasArquitectura de computadoras
Arquitectura de computadoras
 
Asignación de memoria continua
Asignación de memoria continuaAsignación de memoria continua
Asignación de memoria continua
 
Analisis arquitectura computador
Analisis arquitectura computadorAnalisis arquitectura computador
Analisis arquitectura computador
 
Arquitectura de computadoras
Arquitectura de computadorasArquitectura de computadoras
Arquitectura de computadoras
 
Arquitectura harvard
Arquitectura harvardArquitectura harvard
Arquitectura harvard
 
Modelos de arquitecturas de computo
Modelos de arquitecturas de computoModelos de arquitecturas de computo
Modelos de arquitecturas de computo
 
Arquitectura de Computadoras - Memoria
Arquitectura de Computadoras - MemoriaArquitectura de Computadoras - Memoria
Arquitectura de Computadoras - Memoria
 
Modelos de arquitecturas de computadoras
Modelos de arquitecturas de computadorasModelos de arquitecturas de computadoras
Modelos de arquitecturas de computadoras
 
Introduccion Administracion De Un Centro De Computo
Introduccion Administracion De Un Centro De ComputoIntroduccion Administracion De Un Centro De Computo
Introduccion Administracion De Un Centro De Computo
 

Similar a Introducción a la arquitectura de Von Neumann y sus componentes

Arquitectura de von newman
Arquitectura de von newmanArquitectura de von newman
Arquitectura de von newmancoolsk8r
 
El futuro de la computacion castañeda rendón
El futuro de la computacion castañeda rendónEl futuro de la computacion castañeda rendón
El futuro de la computacion castañeda rendónFelipe1190
 
Concepto sobre la arquitectura de von neuman
Concepto sobre la arquitectura de von neumanConcepto sobre la arquitectura de von neuman
Concepto sobre la arquitectura de von neumanmaritza-1995
 
Programacion y metodos numericos resumen unidad 1 y 2
Programacion y metodos numericos resumen unidad 1 y 2Programacion y metodos numericos resumen unidad 1 y 2
Programacion y metodos numericos resumen unidad 1 y 2David Hernandez
 
Arquitectura de Von Neumann
Arquitectura de Von NeumannArquitectura de Von Neumann
Arquitectura de Von Neumannvictor medra
 
Tarea de sistemas operativos.
Tarea de sistemas operativos.Tarea de sistemas operativos.
Tarea de sistemas operativos.Jonathan Cañas
 
Arquitectura de von neumann
Arquitectura de von neumannArquitectura de von neumann
Arquitectura de von neumannE1i2eo
 
Computadora
ComputadoraComputadora
Computadoraomayra21
 
Arquitectura de neumann y harvard keneling gullo compu 1
Arquitectura de neumann y harvard keneling gullo compu 1Arquitectura de neumann y harvard keneling gullo compu 1
Arquitectura de neumann y harvard keneling gullo compu 1kenelinggullo
 
Historiadelacomputadora
HistoriadelacomputadoraHistoriadelacomputadora
HistoriadelacomputadoraDiego Guilcapi
 
Historia de la computacion
Historia de la computacionHistoria de la computacion
Historia de la computacionJuan Antonio
 
Historia de la computadora.
Historia de la computadora.Historia de la computadora.
Historia de la computadora.jafete21
 

Similar a Introducción a la arquitectura de Von Neumann y sus componentes (20)

Arquitectura de von newman
Arquitectura de von newmanArquitectura de von newman
Arquitectura de von newman
 
Jjj
JjjJjj
Jjj
 
El futuro de la computacion castañeda rendón
El futuro de la computacion castañeda rendónEl futuro de la computacion castañeda rendón
El futuro de la computacion castañeda rendón
 
Von neumann
Von neumannVon neumann
Von neumann
 
Informatica1
Informatica1Informatica1
Informatica1
 
Maquina de computadoras
Maquina de computadorasMaquina de computadoras
Maquina de computadoras
 
Maquina de computadoras
Maquina de computadorasMaquina de computadoras
Maquina de computadoras
 
Concepto sobre la arquitectura de von neuman
Concepto sobre la arquitectura de von neumanConcepto sobre la arquitectura de von neuman
Concepto sobre la arquitectura de von neuman
 
Arquitectura de Von Neumann
Arquitectura de Von NeumannArquitectura de Von Neumann
Arquitectura de Von Neumann
 
Arquitectura de von newman terminado
Arquitectura de von newman  terminadoArquitectura de von newman  terminado
Arquitectura de von newman terminado
 
Programacion y metodos numericos resumen unidad 1 y 2
Programacion y metodos numericos resumen unidad 1 y 2Programacion y metodos numericos resumen unidad 1 y 2
Programacion y metodos numericos resumen unidad 1 y 2
 
Arquitectura de Von Neumann
Arquitectura de Von NeumannArquitectura de Von Neumann
Arquitectura de Von Neumann
 
Tarea de sistemas operativos.
Tarea de sistemas operativos.Tarea de sistemas operativos.
Tarea de sistemas operativos.
 
Arquitectura de von neumann
Arquitectura de von neumannArquitectura de von neumann
Arquitectura de von neumann
 
Computadora
ComputadoraComputadora
Computadora
 
Arquitectura de neumann y harvard keneling gullo compu 1
Arquitectura de neumann y harvard keneling gullo compu 1Arquitectura de neumann y harvard keneling gullo compu 1
Arquitectura de neumann y harvard keneling gullo compu 1
 
Historiadelacomputadora
HistoriadelacomputadoraHistoriadelacomputadora
Historiadelacomputadora
 
Historia de la computacion
Historia de la computacionHistoria de la computacion
Historia de la computacion
 
Power point
Power pointPower point
Power point
 
Historia de la computadora.
Historia de la computadora.Historia de la computadora.
Historia de la computadora.
 

Más de Agustin Marcillo Indacochea (7)

Ejemplos de conocimiento absatracto
Ejemplos de conocimiento absatractoEjemplos de conocimiento absatracto
Ejemplos de conocimiento absatracto
 
20111201 ontsi redes_sociais
20111201 ontsi redes_sociais20111201 ontsi redes_sociais
20111201 ontsi redes_sociais
 
Tesis empresa telecomuinicaciones
Tesis empresa telecomuinicacionesTesis empresa telecomuinicaciones
Tesis empresa telecomuinicaciones
 
85763244 ut1
85763244 ut185763244 ut1
85763244 ut1
 
Arq teorico05 von neuman-hardvar
Arq teorico05 von neuman-hardvarArq teorico05 von neuman-hardvar
Arq teorico05 von neuman-hardvar
 
2188 6889-1-pb
2188 6889-1-pb2188 6889-1-pb
2188 6889-1-pb
 
12 realidad nacional
12 realidad nacional12 realidad nacional
12 realidad nacional
 

Introducción a la arquitectura de Von Neumann y sus componentes

  • 1. INTRODUCCIÓN Con el tiempo el hombre va inventando cosas nuevas para ir mejorando su calidad de vida, a fin de hacer las cosas más eficientes. Así es como surgen las computadoras, un aparato electrónico que hoy en día nos facilita la vida. Realiza un sin fin de funciones que para un persona le llevaría horas e incluso días. Por citar un algo, seria el comparativo de las reglas de cálculo, con las calculadoras científicas, las primeras nos facilitaban la idea de hacer un montón de cálculos a mano, pero aun así, el tiempo era muy largo. Ahora con las calculadoras científicas, el tiempo se reduce a minutos y segundos. Por eso, las computadoras son una gran herramienta muy fascinante, además de útiles. Cada día van evolucionando y siendo mejores cada día, es una de las herramientas más usadas hoy en día y todo es por el núcleo, el alma de la computadora, que es el microprocesador. Este componente hace las millones de intrusiones necesarias para el hombre a una enorme velocidad.
  • 2. Arquitectura de Von Neumann Es una familia de arquitecturas de computadoras que utilizan el mismo dispositivo de almacenamiento tanto para las instrucciones como para los datos a diferencia de la arquitectura Harvard, que que almacenaba las instrucciones en cintas perforadas y los datos en interruptores. Todas las computadoras constan principalmente de dos partes, la CPU que procesa los datos, y la memoria que guarda los datos. Cuando hablamos de memoria manejamos dos parámetros, los datos en sí, y el lugar donde se encuentran almacenados (odirección). Los dos son importantes para la CPU, pues muchas instrucciones frecuentes se traducen a algo así como "coge los datos de ésta dirección y añádelos a los datos de ésta otra dirección", sin saber en realidad qué es lo que contienen los datos. En los últimos años la velocidad de las CPUs ha aumentado mucho en comparación a la de las memorias con las que trabaja, así que se debe poner mucha atención en reducir el número de veces que se accede a ella para mantener el rendimiento. Si, por ejemplo, cada instrucción ejecutada en la CPU requiere un acceso a la memoria, no se gana nada incrementando la velocidad de la CPU - este problema es conocido como 'limitación de memoria'. Nombre El término arquitectura de Von Neumann se acuñó a partir del memorando First Draft of a Report on the EDVAC (1945) escrito por el conocido matemático John von Neumann en el que se proponía el concepto de programa almacenado. Dicho documento fue redactado en vistas a la construcción del sucesor de la computadora ENIAC y su contenido fue desarrollado por John Presper Eckert, John William Mauchly, Arthur Burks y otros durante varios meses antes de que von Neumann redactara el borrador del informe. Es por ello que otros tecnólogos como David A. Patterson y John L. Hennessy promueven la sustitución de este término por el de arquitectura Eckert-Mauchly.
  • 3. ENIAC Electronic Numerical Integrator AndComputer (Computador e Integrador Numérico Electrónico), utilizada por el Laboratorio de Investigación Balística del Ejército de los Estados Unidos Era totalmente digital, es decir, que ejecutaba sus procesos y operaciones mediante instrucciones en lenguaje máquina, a diferencia de otras máquinas computadoras contemporáneas de procesos analógicos. EDVAC (Electronic Discrete Variable Automatic Computer) por sus siglas en inglés, fue una de las primeras computadoras electrónicas. A diferencia de la ENIAC, no era decimal, sino binaria y tuvo el primer programa diseñado para ser almacenado. Este diseño se convirtió en el estándar de arquitectura para la mayoría de las computadoras modernas. El diseño de la EDVAC es considerado un éxito en la historia de la informática. El diseño de la EDVAC fue desarrollado aún antes de que la ENIAC fuera puesta en marcha y tenía la intención de resolver muchos de los problemas encontrados en el diseño de la ENIAC. Así como la ENIAC, la EDVAC fue construida por el laboratorio de investigación de balística de Estados Unidos de la universidad de Pensilvana. A los diseñadores de la ENIAC, J. Presper Eckert y John William Mauchlyse les unió el gran matemático John von Neumann. La computadora fue diseñada para ser binaria con adición, sustracción y multiplicación automática y división programada. También poseería un verificador automático con capacidad para mil palabras (luego se estableció en 1,024). Físicamente la computadora fue construida de los siguientes componentes: Un lector-grabador de cinta magnética, una unidad de control con osciloscopio, una unidad para recibir instrucciones del control y la memoria y para dirigirlas a otras unidades, una unidad computacional para realizar operaciones aritméticas en un par de números a la vez y mandarlos a la memoria después de corroborarlo con otra
  • 4. unidad idéntica, un cronómetro, y una unidad de memoria dual. Una preocupación importante en el diseño era balancear fiabilidad y economía. Lenguaje Máquina Los circuitos microprogramables son sistemas digitales, lo que significa que trabajan con dos únicos niveles de tensión. Dichos niveles, por abstracción, se simbolizan con el cero, 0, y el uno, 1, por eso el lenguaje de máquina sólo utiliza dichos signos. Esto permite el empleo de las teorías del álgebra booleana y del sistema binario en el diseño de este tipo de circuitos y en su programación. Álgebra booleana También llamada Algebra de Boole, en informática y matemática, es una estructura algebraica que contiene las operaciones lógicas AND, OR y NOT, así como el conjunto de operaciones unión, intersección y complemento. Sistema Binario En matemáticas e informática, es un sistema de numeración en el que los números se representan utilizando solamente las cifras cero y uno (0 y 1). Los ordenadores trabajan internamente con dos niveles de voltaje, por lo que su
  • 5. sistema de numeración natural es el sistema binario (encendido 1, apagado 0).
  • 6. John von Neumann zu Margitta (28 de diciembre de 1903 - 8 de febrero de 1957) Fue un matemáticohúngaro-estadounidense, de ascendencia judía, que realizó contribuciones importantes en física cuántica, análisis funcional, teoría de conjuntos, informática, economía, análisis numérico, hidrodinámica (de explosiones), estadística y muchos otros campos de la matemática. Recibió su doctorado en matemáticas de la Universidad de Budapest a los 23 años. Fue pionero de la computadora digital moderna y de la aplicación de la teoría de operadores a lamecánica cuántica. Trabajó con Eckert y Mauchly en la Universidad de Pennsylvania, donde publicó un artículo acerca del almacenamiento de programas. El concepto de programa almacenado permitió la lectura de un programa dentro de la memoria de la computadora, y después la ejecución de las instrucciones del mismo sin tener que volverlas a escribir. La primera computadora en usar el citado concepto fue la llamada EDVAC (Electronic Discrete-Variable Automatic Computer, es decir 'computadora automática electrónica de variable discreta'), desarrollada por Von Neumann, Eckert y Mauchly. Los programas almacenados dieron a las computadoras flexibilidad y confiabilidad, haciéndolas más rápidas y menos sujetas a errores que los programas mecánicos. Von Neumann le dio su nombre a la arquitectura de von Neumann, utilizada en casi todos los computadores, por su publicación del concepto; aunque muchos piensan que este nombramiento ignora la contribución de J. Presper Eckert y John William Mauchly, quienes aportaron al concepto durante su trabajo en ENIAC. Virtualmente, cada computador personal, microcomputador, minicomputador y supercomputador es una máquina de von Neumann. También creó el campo de los autómatas celulares sin computadores, construyendo los primeros ejemplos de autómatas autorreplicables con lápiz y papel. El concepto de constructor universal fue presentado en su trabajopóstumo Teoría de los Autómatas Autorreproductivos. El término "máquina de von Neumann" se refiere alternativamente a las máquinas autorreplicativas. Von Neumann probó que el camino más efectivo para las operaciones mineras a gran escala, como minar una luna entera o un cinturón de asteroides, es a través del uso de máquinas auto-replicativas, para tomar ventaja del crecimiento exponencial de tales mecanismos. Adicional a su trabajo en arquitectura computacional, von Neumann es acreditado con al menos una contribución al estudio de algoritmos. Donald Knuth denomina a von Neumann
  • 7. como el inventor, en 1945, del conocido algoritmomerge sort, en el cual la primera y segunda mitad de un array (vector) son cada una clasificadas recursivamente y luego fusionadas juntas. PARTES DE LA ARQUITECTURA DE VON NEUMANN Los ordenadores con arquitectura Eckert-Mauchly constan de cinco partes:  La unidad aritmético-lógica (ALU)  La unidad de control  La memoria  Un dispositivo de entrada/salida  El bus de datos que proporciona un medio de transporte de los datos entre las distintas partes. Un ordenador con arquitectura Eckert-Mauchly realiza o emula los siguientes pasos secuencialmente:  Enciende el ordenador y obtiene la siguiente instrucción desde la memoria en la dirección indicada por el contador de programa y la guarda en el registro de instrucción.
  • 8.  Aumenta el contador de programa en la longitud de la instrucción para apuntar a la siguiente.  Decodifica la instrucción mediante la unidad de control. Ésta se encarga de coordinar el resto de componentes del ordenador para realizar una función determinada.  Se ejecuta la instrucción. Ésta puede cambiar el valor del contador del programa, permitiendo así operaciones repetitivas. El contador puede cambiar también cuando se cumpla una cierta condición aritmética, haciendo que el ordenador pueda 'tomar decisiones', que pueden alcanzar cualquier grado de complejidad, mediante la aritmética y lógica anteriores.  Vuelve al paso 2.
  • 9. LENGUAJE DE PROGRAMACIÓN Con la aparición de las computadoras desaparecen las secuencias de posiciones de llaves mecánicas que debían desconectarse para obtener una acción determinada, una llave conectada era un 1 y una llave desconectada era un 0. Una sucesión de llaves en cualquiera de sus dos posiciones definía una secuencia de ceros y unos (por ejemplo: 0100011010011101...) que venía a representar una instrucción o un conjunto de instrucciones (programa) para el ordenador (o computador) en el que se estaba trabajando. A esta primera forma de especificar programas para una computadora se la denomina lenguaje máquina o código máquina. La necesidad de recordar secuencias de programación para las acciones usuales llevó a denominarlas con nombres fáciles de memorizar y asociar: ADD (sumar), SUB (restar), MUL (multiplicar), CALL (ejecutar subrutina), etc. A esta secuencia de posiciones se le denominó "instrucciones", y a este conjunto de instrucciones se le llamó lenguaje ensamblador. Posteriormente aparecieron diferentes lenguajes de programación, los cuales reciben su denominación porque tienen una estructura sintáctica similar a los lenguajes escritos por los humanos. Concepto Un lenguaje de programación es un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones, y utilizado para controlar el comportamiento físico y lógico de una máquina. Un lenguaje de programación permite a uno o más programadores especificar de manera precisa: sobre qué datos una computadora debe operar, cómo deben ser estos almacenados, transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural, tal como sucede con el lenguaje Léxico. Una característica relevante de los lenguajes de programación es precisamente que más de un programador puedan tener un conjunto común de instrucciones que puedan ser comprendidas entre ellos para realizar la construcción del programa de forma colaborativa.
  • 10. Los procesadores usados en las computadoras son capaces de entender y actuar según lo indican programas escritos en un lenguaje fijo llamado lenguaje de máquina. Todo programa escrito en otro lenguaje puede ser ejecutado de dos maneras:  Mediante un programa que va adaptando las instrucciones conforme son encontradas. A este proceso se lo llama interpretar y a los programas que lo hacen se los conoce como intérpretes.  Traduciendo este programa al programa equivalente escrito en lenguaje de máquina. A ese proceso se lo llama compilar y al traductor se lo conoce como un malhecho compilador. Clasificación de los lenguajes de programación Los lenguajes de programación se determinan según el nivel de abstracción, Según la forma de ejecución y Según el paradigma de programación que poseen cada uno de ellos y esos pueden ser: Según su nivel de abstracción Lenguajes Maquina Están escritos en lenguajes directamente inteligibles por la maquina (computadora), ya que sus instrucciones son cadenas binarias (0 y 1). Da 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, solo que con poca fiabilidad y dificultad de verificar y poner a punto los programas. Lenguajes de bajo nivel Los lenguajes de bajo nivel son lenguajes de programación que se acercan al funcionamiento de una computadora. El lenguaje de más bajo nivel es, por excelencia, el código máquina. A éste le sigue el lenguaje ensamblador, ya que al programar en ensamblador se trabajan con los registros e memoria de la computadora de forma directa.
  • 11. Lenguajes de medio nivel Hay lenguajes de programación que son considerados por algunos expertos como lenguajes de medio nivel (como es el caso del lenguaje C) al tener ciertas características que los acercan a los lenguajes de bajo nivel pero teniendo, al mismo tiempo, ciertas cualidades que lo hacen un lenguaje más cercano al humano y, por tanto, de alto nivel. Lenguajes de alto nivel Artículo principal: Lenguaje de alto nivel Los lenguajes de alto nivel son normalmente fáciles de aprender porque están formados por elementos de lenguajes naturales, como el inglés. En BASIC, el lenguaje de alto nivel más conocido, los comandos como "IF CONTADOR = 10 THEN STOP" pueden utilizarse para pedir a la computadora que pare si CONTADOR es igual a 10. Por desgracia para muchas personas esta forma de trabajar es un poco frustrante, dado que a pesar de que las computadoras parecen comprender un lenguaje natural, lo hacen en realidad de una forma rígida y sistemática. Según la forma de ejecución Lenguajes compilados Naturalmente, un programa que se escribe en un lenguaje de alto nivel también tiene que traducirse a un código que pueda utilizar la máquina. Los programas traductores que pueden realizar esta operación se llaman compiladores. Éstos, como los programas ensambladores avanzados, pueden generar muchas líneas de código de máquina por cada proposición del programa fuente. Se requiere una corrida de compilación antes de procesar los datos de un problema. Los compiladores son aquellos cuya función es traducir un programa escrito en un determinado lenguaje a un idioma que la computadora entienda (lenguaje máquina con código binario). Al usar un lenguaje compilado (como lo son los lenguajes del popular Visual Studio de Microsoft), el programa desarrollado nunca se ejecuta mientras haya errores, sino hasta que luego de haber compilado el programa, ya no aparecen errores en el código Lenguajes interpretados Se puede también utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma permanente
  • 12. el código objeto que se produce durante la corrida de compilación para utilizarlo en una corrida de producción futura, el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuación, un programa intérprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la máquina, convierte cada proposición del programa fuente en lenguaje de máquina conforme vaya siendo necesario durante el proceso de los datos. No se graba el código objeto para utilizarlo posteriormente. La siguiente vez que se utilice una instrucción, se le debe interpretar otra vez y traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo, cada instrucción del ciclo tendrá que volver a ser interpretado cada vez que se ejecute el ciclo, lo cual hace que el programa sea más lento en tiempo de ejecución (porque se va revisando el código en tiempo de ejecución) pero más rápido en tiempo de diseño (porque no se tiene que estar compilando a cada momento el código completo). El intérprete elimina la necesidad de realizar una corrida de compilación después de cada modificación del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una corrida de producción Según el paradigma de programación Un paradigma de programación representa un enfoque particular o filosofía para la construcción del software. No es mejor uno que otro, sino que cada uno tiene ventajas y desventajas. Dependiendo de la situación un paradigma resulta más apropiado que otro. Atendiendo al paradigma de programación, se pueden clasificar los lenguajes en :  El paradigma imperativo o por procedimientos es considerado el más común y está representado, por ejemplo, por el C o por BASIC.  El paradigma funcional está representado por la familia de lenguajes LISP (en particular Scheme), ML o Haskell.  El paradigma lógico, un ejemplo es PROLOG.  El paradigma orientado a objetos. Un lenguaje completamente orientado a objetos es Smalltalk. 
  • 13. Si bien puede seleccionarse la forma pura de estos paradigmas al momento de programar, en la práctica es habitual que se mezclen, dando lugar a la programación multiparadigma. Actualmente el paradigma de programación más usado debido a múltiples ventajas respecto a sus anteriores, es la programación orientada a objetos.
  • 14. Lenguaje ensamblador El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del código máquina específico para cada arquitectura de computadoras legible por un programador. Fue usado ampliamente en el pasado para el desarrollo de software, pero actualmente sólo se utiliza en contadas ocasiones, especialmente cuando se requiere la manipulación directa del hardware o se pretenden rendimientos inusuales de los equipos. Características  Programar en lenguaje ensamblador es difícil de aprender, entender, leer, escribir, depurar y mantener, por eso surgió la necesidad de los lenguajes compilados.  A pesar de perder rendimiento en un proceso de compilación, en la actualidad la mayoría de las computadoras son suficientemente rápidas.  El lenguaje ensamblador no es portable.  Programar en lenguaje ensamblador lleva mucho tiempo.  Los programas hechos en lenguaje ensamblador son generalmente más rápidos. Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas de 5 a 10 veces más rápidos que con lenguajes de alto nivel.
  • 15.  Los programas hechos en lenguaje ensamblador generalmente ocupan menos espacio. Un buen programa en lenguaje ensamblador puede ocupar casi la mitad de espacio que su contraparte en lenguaje de alto nivel.  Con el lenguaje ensamblador se pueden crear segmentos de código imposibles de formar en un lenguaje de alto nivel.
  • 16. Ventajas y desventajas del Lenguaje Ensamblador El proceso de evolución trajo consigo algunas desventajas, que ahora veremos como las ventajas de usar el Lenguaje Ensamblador, respecto a un lenguaje de alto nivel:  Velocidad  Eficiencia de tamaño  Flexibilidad Velocidad El proceso de traducción que realizan los intérpretes, implica un proceso de cómputo adicional al que el programador quiere realizar. Por ello, nos encontraremos con que un intérprete es siempre más lento que realizar la misma acción en Lenguaje Ensamblador, simplemente porque tiene el costo adicional de estar traduciendo el programa, cada vez que lo ejecutamos. De ahí nacieron los compiladores, que son mucho más rápidos que los intérpretes, pues hacen la traducción una vez y dejan el código objeto, que ya es Lenguaje de Máquina, y se puede ejecutar muy rápidamente. Aunque el proceso de traducción es más complejo y costoso que el de ensamblar un programa, normalmente podemos despreciarlo, contra las ventajas de codificar el programa más rápidamente. Sin embargo, la mayor parte de las veces, el código generado por un compilador es menos eficiente que el código equivalente que un programador escribiría. La razón es que el compilador no tiene tanta inteligencia, y requiere ser capaz de crear código genérico, que sirva tanto para un programa como para otro; en cambio, un programador humano puede aprovechar las características específicas del problema, reduciendo la generalidad pero al mismo tiempo, no desperdicia ninguna instrucción, no hace ningún proceso que no sea necesario. Para darnos una idea, en una PC, y suponiendo que todos son buenos programadores, un programa para ordenar una lista tardará cerca de 20 veces más en Visual Basic (un intérprete), y 2 veces más en C (un compilador), que el equivalente en Ensamblador.
  • 17. Por ello, cuando es crítica la velocidad del programa, Ensamblador se vuelve un candidato lógico como lenguaje. Ahora bien, esto no es un absoluto; un programa bien hecho en C puede ser muchas veces más rápido que un programa mal hecho en Ensamblador; sigue siendo sumamente importante la elección apropiada de algoritmos y estructuras de datos. Por ello, se recomienda buscar optimizar primero estos aspectos, en el lenguaje que se desee, y solamente usar Ensamblador cuando se requiere más optimización y no se puede lograr por estos medios. Eficiencia de Tamaño Por las mismas razones que vimos en el aspecto de velocidad, los compiladores e intérpretes generan más código máquina del necesario; por ello, el programa ejecutable crece. Así, cuando es importante reducir el tamaño del ejecutable, mejorando el uso de la memoria y teniendo también beneficios en velocidad, puede convenir usar el lenguaje Ensamblador. Entre los programas que es crítico el uso mínimo de memoria, tenemos a los virus y manejadores de dispositivos (drivers). Muchos de ellos, por supuesto, están escritos en lenguaje Ensamblador. Flexibilidad Las razones anteriores son cuestión de grado: podemos hacer las cosas en otro lenguaje, pero queremos hacerlas más eficientemente. Pero todos los lenguajes de alto nivel tienen limitantes en el control; al hacer abstracciones, limitan su propia capacidad. Es decir, existen tareas que la máquina puede hacer, pero que un lenguaje de alto nivel no permite. Por ejemplo, en Visual Basic no es posible cambiar la resolución del monitor a medio programa; es una limitante, impuesta por la abstracción del GUI Windows. En cambio, en ensamblador es sumamente sencillo, pues tenemos el acceso directo al hardware del monitor. Por otro lado, al ser un lenguaje más primitivo, el Ensamblador tiene ciertas desventajas respecto a los lenguajes de alto nivel:  Tiempo de programación  Programas fuente grandes  Peligro de afectar recursos inesperadamente  Falta de portabilidad
  • 18.
  • 19. Tiempo de programación Al ser de bajo nivel, el Lenguaje Ensamblador requiere más instrucciones para realizar el mismo proceso, en comparación con un lenguaje de alto nivel. Por otro lado, requiere de más cuidado por parte del programador, pues es propenso a que los errores de lógica se reflejen más fuertemente en la ejecución. Por todo esto, es más lento el desarrollo de programas comparables en Lenguaje Ensamblador que en un lenguaje de alto nivel, pues el programador goza de una menor abstracción. Programas fuente grande Por las mismas razones que aumenta el tiempo, crecen los programas fuentes; simplemente, requerimos más instrucciones primitivas para describir procesos equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los programas, y nuevamente reduce la productividad de los programadores. Peligro de afectar recursos inesperadamente Tenemos la ventaja de que todo lo que se puede hacer en la máquina, se puede hacer con el Lenguaje Ensamblador (flexibilidad). El problema es que todo error que podamos cometer, o todo riesgo que podamos tener, podemos tenerlo también en este Lenguaje. Dicho de otra forma, tener mucho poder es útil pero también es peligroso. En la vida práctica, afortunadamente no ocurre mucho; sin embargo, al programar en este lenguaje verán que es mucho más común que la máquina se "cuelgue", "bloquee" o "se le vaya el avión"; y que se reinicialize. ¿Por qué?, porque con este lenguaje es perfectamente posible (y sencillo) realizar secuencias de instrucciones inválidas, que normalmente no aparecen al usar un lenguaje de alto nivel. En ciertos casos extremos, puede llegarse a sobrescribir información del CMOS de la máquina (no he visto efectos más riesgosos); pero, si no la conservamos, esto puede causar que dejemos de "ver" el disco duro, junto con toda su información.
  • 20. Falta de portabilidad Como ya se mencionó, existe un lenguaje ensamblador para cada máquina; por ello, evidentemente no es una selección apropiada de lenguaje cuando deseamos codificar en una máquina y luego llevar los programas a otros sistemas operativos o modelos de computadoras. Si bien esto es un problema general a todos los lenguajes, es mucho más notorio en ensamblador: yo puedo reutilizar un 90% o más del código que desarrollo en "C", en una PC, al llevarlo a una RS/6000 con UNIX, y lo mismo si después lo llevo a una Macintosh, siempre y cuando esté bien hecho y siga los estándares de "C", y los principios de la programación estructurada. En cambio, si escribimos el programa en Ensamblador de la PC, por bien que lo desarrollemos y muchos estándares que sigamos, tendremos prácticamente que reescribir el 100 % del código al llevarlo a UNIX, y otra vez lo mismo al llevarlo a Mac.