CLICK HERE FOR THOUSANDS OF FREE BLOGGER TEMPLATES »

martes, 19 de febrero de 2008

Lenguajes de bajo nivel

Un lenguaje de bajo nivel es el que proporciona poca o ninguna abstracción del microprocesador de un ordenador. Consecuentemente es fácilmente trasladado a lenguaje de máquina.

La palabra "bajo" no implica que el lenguaje sea inferior a un lenguaje de alto nivel; se refiere a la reducida abstacción entre el lenguaje y el hardware.

Los lenguajes de bajo nivel son mas fáciles de utilizar que los lenguajes máquina, pero, al igual que ellos, dependen de la máquina en particular. El lenguaje de bajo nivel por excelencia es el ensamblador. Las instrucciones en lenguaje ensamblador son instrucciones conocidas como nemotécnicos.

Un programa escrito en lenguaje ensamblador no puede ser ejecutado directamente por la computadora en esto se diferencia esencialmente del lenguaje máquina, sino que requiere una fase de traducción al lenguaje máquina.
El programa original escrito en lenguaje ensamblador se denomina programa fuente y el programa traducido en lenguaje máquina se conoce como programa objeto, ya directamente entendible por la computadora.
El traductor de programas fuente a objeto es un programa llamado ensamblador, existente en casi todos los computadores.

Programa fuente en ensamblador
(assembly)
Programa Ensamblador
(assembler)
Programa objeto en código
máquina.

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


Ensamblador

El término ensamblador (del inglés assembler) se refiere a un tipo de programa informático que se encarga de traducir un fichero fuente scrito en un lenguaje ensamblador, a un fichero objeto que contiene un código máquina ejecutable directamente por la máquina para la que se ha generado. El propósito para el que se crearon este tipo de aplicaciones es la de facilitar la escritura de programas, ya que escribir directamente en código binario, que es el único código entendible por la computadora, es en la práctica imposible. La evolución de los lenguajes de programación a partir del lenguaje ensamblador originó también la evolución de este programa ensamblador hacia lo que se conoce como programa compilador.


Compilador

Un compilador es un programa que traduce los programas fuente escritos en lenguajes de alto nivel: Pascal,FORTRAN, etc; a lenguaje máquina.
Los programas escritos en lenguajes de alto nivel se llaman programa fuente y el programa traducido se le llama programa objeto ó código objeto. El compilador traduce sentencia a sentencia el programa fuente.

Lenguajes compiladores típicos son: Pascal, FORTRAN, COBOL..., hoy día es posible encontrar tambiénversiones de compiladores BASIC y de C.

La compilación es el proceso de traducción de programas fuente a programas objeto.

Programa Fuente.
Compilador.
Programa Objeto.

El programa objeto obtenido de la compilación no ha sido traducido normalmente a código máquina sino a ensamblador. Para conseguir el programa máquina real se debe utilizar un programa llamado montador o enlazador (linker). El proceso de montaje conduce a un programa en lenguaje máquina directamente ejecutable.

Programa Fuente.
Compilador (traductor).
Programa Objeto.
Montador.
Programa ejecutable en lenguaje máquina.

lunes, 11 de febrero de 2008

Arquitectura de Hardware

Es la forma de seleccionar e interconectar componentes de hardware para crear computadores según los requerimientos de funcionalidad, rendimiento y costo.

En las cadenas de montaje, el producto pasa a través de varias etapas de producción antes de tener el producto terminado. Cada etapa o segmento de la cadena está especializada en un área específica de la línea de producción y lleva a cabo siempre la misma actividad. Esta tecnología es aplicada en el diseño de procesadores eficientes. A estos procesadores se les conoce como pipeline processors.

Un pipeline processor está compuesto por una lista de segmentos lineales y secuenciales en donde cada segmento lleva a cabo una tarea o un grupo de tareas computacionales.

Los datos que provienen del exterior se introducen en el sistema para ser procesados. La computadora realiza operaciones con los datos que tiene almacenados en memoria, produce nuevos datos o información para uso externo.


Arquitectura de Hardvard

Es el tipo de arquitectura de computadores que utiliza dispositivos de almacenamiento físicamente separados para las instrucciones y para los datos.

Los computadores constan de dos partes principales, la CPU que procesa los datos, y la memoria que guarda los datos. Cuando se habla de memoria manejamos dos parámetros, los datos en sí, y el lugar donde se encuentran almacenados (o direcció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.

Se puede fabricar memoria mucho más rápida, pero a costa de un precio muy alto. La solución, por tanto, es proporcionar una pequeña cantidad de memoria muy rápida conocida con el nombre de caché. Mientras los datos que necesita el procesador estén en la caché, el rendimiento será mucho mayor que si la caché tiene que obtener primero los datos de la memoria principal. La optimización de la caché es un tema muy importante de cara al diseño de computadoras.

La arquitectura Harvard ofrece una solución particular a este problema. Las instrucciones y los datos se almacenan en cachés separadas para mejorar el rendimiento. Por otro lado, tiene el inconveniente de tener que dividir la cantidad de caché entre los dos, por lo que funciona mejor sólo cuando la frecuencia de lectura de instrucciones y de datos es aproximadamente la misma. Esta arquitectura suele utilizarse en DSPs, o procesador de señal digital, usados habitualmente en productos para procesamiento de audio y video.



Arquitectura de Eckert-Mauchly o de Von Neumann

Es la arquitectura de computador que utiliza el mismo dispositivo de almacenamiento tanto para las instrucciones como para los datos (a diferencia de la arquitectura Harvard).

Los computadorescon arquitectura Eckert-Mauchly constan de cinco partes: La unidad aritmético-lógica o ALU, la unidad de control, la memoria, un dispositivo de entrada/salida y el bus de datos que proporciona un medio de transporte de los datos entre las distintas partes.

Modelo básico de la arquitectura Eckert-Mauchly, en la que se basan todos los ordenadores modernos

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

1. 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.
2. Aumenta el contador de programa en la longitud de la instrucción para apuntar a la siguiente.
3. Descodifica 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.
4. 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.
5. Vuelve al paso 2.

Hoy en día, la mayoría de ordenadores están basados en esta arquitectura, aunque pueden incluir otros dispositivos adicionales.




Microcontroladores

Un microcontrolador es un circuito integrado o chip que incluye en su interior las tres unidades funcionales de una computadora: CPU, Memoria y Unidades de E/S, es decir, se trata de un computador completo en un solo circuito integrado.

Son diseñados para disminuir el costo económico y el consumo de energía de un sistema en particular. Por eso el tamaño de la CPU, la cantidad de memoria y los periféricos incluidos dependerán de la aplicación.

Un microcontrolador difiere de una CPU normal, debido a que es más fácil convertirla en una computadora en funcionamiento, con un mínimo de chips externos de apoyo. La idea es que el chip se coloque en el dispositivo, enganchado a la fuente de energía y de información que necesite, y eso es todo. Un microprocesador tradicional no le permitirá hacer esto, ya que espera que todas estas tareas sean manejadas por otros chips. Hay que agregarle los modulos de entrada/salida (puertos) y la memoria para almacenamiento de información.

Por ejemplo, un microcontrolador típico tendrá un generador de reloj integrado y una pequeña cantidad de memoria RAM y ROM/EPROM/EEPROM/FLASH, significando que para hacerlo funcionar, todo lo que se necesita son unos pocos programas de control y un cristal de sincronización. Los microcontroladores disponen generalmente también de una gran variedad de dispositivos de entrada/salida, como convertidores de analógico a digital, temporizadores, UARTs y buses de interfaz serie especializados, como I2C y CAN. Frecuentemente, estos dispositivos integrados pueden ser controlados por instrucciones de procesadores especializados. Los modernos microcontroladores frecuentemente incluyen un lenguaje de programación integrado, como el BASIC que se utiliza bastante con este propósito.

Los microcontroladores negocian la velocidad y la flexibilidad para facilitar su uso. Debido a que se utiliza bastante sitio en el chip para incluir funcionalidad, como los dispositivos de entrada/salida o la memoria que incluye el microcontrolador, se ha de prescindir de cualquier otra circuitería.

domingo, 10 de febrero de 2008

Automatas

Los autómatas son mecanismos formales que hacen derivaciones en gramáticas formales. La manera en que las realizan es mediante la noción de reconocimiento. Una palabra será generada en una gramática si y sólo si la palabra hace transitar al autómata correspondiente a sus condiciones terminales. Por esto es que los autómatas son analizadores léxicos (llamados en inglés ``parsers'') de las gramáticas a que corresponden.

Automatas regulares:

Estos son los autómatas finitos más sencillos. Los autómatas finitos pueden ser deterministas, que tienen una transición por cada símbolo del alfabeto, y los no deterministas, que pueden, o no, tener una o más transiciones por cada símbolo del alfabeto, aún cuando existen estas diferencias, los dos autómatas, tanto deterministas como no deterministas pueden aceptar los mismos lenguajes.

En un autómata finito determinista, el autómata acepta una palabra si existe al menos un camino desde el estado q0 a un estado final F etiquetado con la palabra de entrada. Si una transición no está definida, de manera que el autómata no puede saber como continuar leyendo la entrada, la palabra es rechazada.

Además de ser capaz de alcanzar más estados leyendo un símbolo, permite alcanzarlos sin leer ningún símbolo. Si un estado tiene transiciones etiquetadas con ε, entonces el Automata Finito No Determinista puede encontrarse en cualquier de los estados alcanzables por las transiciones ε, directamente o a través de otros estados con transiciones ε. El conjunto de estados que pueden ser alcanzados mediante este método desde un estado q, se denomina la clausura ε de q.



Autómatas de pila

Son autómatas regulares finitos con una memoria elemental, tipo pila, el cual es un almacenamiento lineal que funciona bajo el principio PEUS: Primero en Entrar, Último en Salir.

"Sea Q un conjunto de estados, sea T el alfabeto de entrada y sea V un alfabeto de pila. La función de transición es de la forma $t : Q \times T \times V \rightarrow Q \times V^*$, donde la relación $t(q, a, v) = (p, \mbox{\bf v})$ se interpreta como sigue: ``Si se está en el estado q, arriba el símbolo a y en el tope de la pila está el símbolo b entonces se pasa al estado p y se empila la palabra $\mbox{\bf v}$''. Un autómata de pila reconoce a una palabra si, tras haberla leído, termina con su pila vacía. " (1)



Autómatas lineales.

Son autómatas de pila deterministas que a lo largo de su computación sólo hacen un "cambio de turno''. A grandes rasgos, esto significa que toda computación consiste de un procedimiento de empilar consecutivamente para después pasar a desempilar.

Un autómata lineal acotado (LBA de sus siglas en inglés Linear-Bounded Autómata) es una máquina de Turing no determinística (explicada mas adelante) que satisface las siguientes dos condiciones:

  1. El alfabeto de entrada de cinta incluye dos símbolos: <>, los señaladores de extremo izquierdo y derecho, respectivamente.
  2. El LBA no tiene movimientos a la izquierda de <>, ni puede sustituir los símbolos <>.

Autómatas de pila no deterministas

Son iguales que los autómatas de pila salvo en que su transición no es propiamente una función. Aquí se tiene que la transición es un subconjunto $t \subset (Q \times T \times V) \times (Q \times V^*)$.


Maquinas de Turing

Son autómatas finitas con dos pilas que tienen un tope común. O equivalentemente, son autómatas que poseen una memoria dada por una cinta la cual es un almacenamiento lineal, infinito a ambos lados, con acceso a cualquier localidad en ella. El tope común es la casilla leída, una pila es la parte de la cinta a la derecha de la casilla leída y otra pila es su parte izquierda.


Las transiciones de la máquina quedan determinadas por una función $t : Q \times T \rightarrow Q \times T \times \mbox{\it Mov\/}$, donde $\mbox{\it Mov\/} = \{\mbox{\it Der\/},\mbox{\it Izq\/}\}$. Esta vez, la relación $t(q,a) = ( p, b, \mu )$ se interpreta como sigue: ``Si se está en el estado q y se lee el símbolo a entonces se escribe b, se pasa a p y se va a examinar la casilla al lado $\mu$ de la leída''. De hecho, la relación $t(q,a) = ( p, b, \mu )$ puede escribirse como $(q,a;p,b,\mu)$, y por esto, decimos que una máquina de Turing queda especificada por su lista de quíntuplas.


Jerarquía de Chomsky en autómatas.

La complejidad de un autómata está determinada por sus capacidades de transición, de su dispositivo de memoria y las capacidades de inspección en su memoria. De manera natural la jerarquí a gramatical se traduce en una jerarquía equivalente en los autómatas.

(2)

Tipo Nombres Tipo de autómata reconocedor
0 Irrestricta Máquinas de Turing
1 Irrestricta con memoria limitada Máquinas de Turing con cinta acotada
2 Sensibles al contexto con borro Máquinas de Turing con dominio total
3 Sensibles al contexto no reductivas Máquinas de Turing con ``espacio lineal''
4 Libres de contexto Autómatas de pila no-deterministas
5 Libres de contexto deterministas Autómatas de pila deterministas
6 Lineales Autómatas lineales
7 Regulares Autómatas regulares







Referencias:

(1) Tomado de http://delta.cs.cinvestav.mx/~gmorales/ta/node14.html

(2) Tomado de http://delta.cs.cinvestav.mx/~gmorales/ta/node18.html