jueves, 11 de agosto de 2016

Historia y Evolución del Computador.


El Abaco

   Fue inventada en Babilonia unos 500 años antes de Cristo, los abacos antiguos eran tableros para contar, no eran una computadora porque no tenian la capacidad para almacenar informacion, pero con este instrumento se realizaban transacciones en diversas ciudades de la antiguedad. Actualmente se pueden realizar operaciones como multiplicacion y division en los abacos y son muy usados en China.


Calculadora de Pascal

   En 1642 por el joven frances BLAISE PASCAL al ver que su padre tenia problemas para llevar una correcta cuenta de los impuestos que cobraba inventa una maquina calculadora que trabajaba a base de engranajes, la mimsa que Pascal la llamo con en nombre de PASCALINA.


Máquina de Multiplicar de Leibniz

    Gottfried Wilhelm von Leibniz agrega a la maquina inventada por Blaise Pascal las funciones de multiplicación y división.


Máquina de Telar de Jacquard 

   En 1801 el Francés Joseph Marie Jacquard inventa una máquina de telar. Una de las ventajas es que por a través de tarjetas perforadas la maquina era capaz de crear diferentes patrones en las telas. Las tarjetas perforadas contenían orificios, los cuales la maquina era capaz de leer y así efectuar el tipo de patrón que se le había indicado. Esto quiere decir que se había inventado el almacenamiento por medio de las tarjetas perforadas los cuales ahora conocemos como discos. 

 
Máquina Diferencia y Analítica de Babbage (1822)

  En 1822 Charles Babbage creo una maquina diferencial capaz de desarrollar polinomios pero varios inconvenientes en las piezas de esta maquina hicieron que fracasara, luego de este fracaso en 1833 Babbage crea la maquina analítica la cual era capaz de hacer todas las operaciones matemáticas y ser programada por medio de tarjetas de cartón perforado y guardar una enorme cantidad de cifras, es por esto que a Charles Babbage se le considera el padre de la informática.


Máquina Tabuladora de Hollerith (1889)

   Entre los años 1880 y 1890 se realizaron censos en los estados unidos, los resultados del primer censo se obtuvieron después de 7 años, por lo que se suponía que los resultados del censo de 1890 se obtendrían entre 10 a 12 años, es por eso que Herman Hollerith propuso la utilización de su sistema basado en tarjetas perforadas, y que fue un exito ya que a los seis meses de haberse efectuado el censo de 1890 se obtuvieron los primeros resultados, los resultados finales del censo fueron luego de 2 años, el sistema que utilizaba Hollerith ordenaba y enumeraba las tarjetas perforadas que contenía los datos de las personas censadas, fue el primer uso automatizado de una maquina. Al ver estos resultados Hollerith funda una compañía de maquinas tabuladoras que posteriormente paso a ser la International Business Machines (IBM).


Las Generaciones del Computador.

   Luego de que éstas grandiosas máquinas antes mencionadas dieran la apertura al desarrollo del computador, llegaron las generaciones que cambiarían al mundo, basadas en la arquitectura de uno de los padres de la computación como lo fué John Von Neuman.

    Disfruta de éste video donde se describen las características y fotos de lo que fué el desarrollo del computador desde su primera generación hasta lo que ha sido la sexta generación, que disfrutamos hoy en día.


Sistemas Numéricos

   El sistema numérico que utilizamos a diario es el sistema decimal, pero este sistema no es conveniente para las máquinas debido a que la información se maneja codificada en forma de bits prendidos o apagados; esta forma de codificación nos lleva a la necesidad de conocer el cálculo posicional que nos permita expresar un número en cualquier base que lo necesitemos.

Convertir números binarios a decimales. 

   Trabajando en el lenguaje ensamblador nos encontramos con la necesidad de convertir números del sistema binario, que es el empleado por las computadoras, al sistema decimal utilizado por las personas. 

   El sistema binario está basado en únicamente dos condiciones o estados, ya sea encendido (1) o apagado (0), por lo tanto su base es dos. 

   Para la conversión podemos utilizar la formula de valor posicional. Por ejemplo, si tenemos el numero binario 10011, tomamos de derecha a izquierda cada dígito y lo multiplicamos por la base elevada a la nueva posición que ocupan: 

   Binario: 1 1 0 0 1 
   Decimal:1*2^0+1*2^1+0*2^2+0*2^3+1*2^4 
              = 1 + 2 + 0 + 0 + 16 = 19 decimal. 

   El caracter ^ es utilizado en computación como símbolo de potenciación y el caracter * se usa para representar la multiplicación. 

Convertir números decimales a binarios.

   Existen varios métodos de conversión de números decimales a binarios; aquí solo se analizará uno. Naturalmente es mucho mas fácil una conversión con una calculadora científica, pero no siempre se cuenta con ella, así que es conveniente conocer por lo menos una forma manual para hacerlo. 

   El método que se explicará utiliza la división sucesiva entre dos, guardando el residuo como dígito binario y el resultado como la siguiente cantidad a dividir. 

   Tomemos como ejemplo el número 43 decimal

   43/2 = 21 y su residuo es 1
   21/2 = 10 y su residuo es 1
   10/2 = 5 y su residuo es 0 
     5/2 = 2 y su residuo es 1 
     2/2 = 1 y su residuo es 0 
     1/2 = 0 y su residuo es 1 

   Armando el número de abajo hacia arriba tenemos que el resultado en binario es 101011.

Sistema hexadecimal.

   En la base hexadecimal tenemos 16 dígitos que van del 0 al 9 y de la letra A hasta la F (estas letras representan los números del 10 al 15). Por lo tanto, contamos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E y F. 

   La conversión entre numeración binaria y hexadecimal es sencilla. Lo primero que se hace para una conversión de un número binario a hexadecimal es dividirlo en grupos de 4 bits, empezando de derecha a izquierda. En caso de que el último grupo (el que quede mas a la izquierda) sea menor de 4 bits se rellenan los faltantes con ceros.

   Tomando como ejemplo el número binario 101011 lo dividimos en grupos de 4 bits y nos queda: 
  
   10; 1011 
  
   Rellenando con ceros el último grupo (el de la izquierda):

   0010; 1011 

  Después tomamos cada grupo como un número independiente y consideramos su valor en decimal:

   0010 = 2; 1011 = 11 

   Pero como no podemos representar este número hexadecimal como 211 porque sería un error, tenemos que sustituir todos los valores mayores a 9 por su respectiva representación en hexadecimal, con lo que obtenemos: 

  2BH (Donde la H representa la base hexadecimal)

  Para convertir un número de hexadecimal a binario solo es necesario invertir estos pasos: se toma el primer dígito hexadecimal y se convierte a binario, y luego el segundo, y así sucesivamente hasta completar el número.

Operaciones con números binarios.

   Un tema importante que aprendimos fue las operaciones básicas con números binarios, como la suma, la resta, la multiplicación y la división.

   Disfruta de éste video que me ayudó a comprender aún más, la forma en que se realizan éstas operaciones de aritmética binaria.


Ensamblador (Assembler)

Ensamblador.
      El término ensamblador cuya traducción al inglés sería assembler  hace referencia a un tipo de programa informático que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina, el cual es ejecutable directamente por el microprocesador.
      ¿Cómo funciona?
      Básicamente el programa lee el fichero escrito en lenguaje ensamblador o assembler y sustituye cada uno de los códigos nemotécnicos que aparecen por su código de operación correspondiente en el sistema binario para la plataforma que se ha elegido como destino en las opciones específicas del ensamblador, los cuales pueden ser de bajo o alto nivel.


Lenguaje de bajo nivel.
      Es un lenguaje totalmente dependiente de la máquina. El programa que se realiza con este tipo de lenguaje no se pueden trasladar o utilizar en otras máquinas y como están diseñados acorde con el hardware, se utilizan y aprovechan al máximo todas las características y rendimientos que éste ofrece.
      Dentro de los lenguajes de bajo nivel están:
  • El lenguaje máquina, es el que da órdenes a la máquina, que son las operaciones fundamentales para su funcionamiento. El ordenador sólo entiende un lenguaje conocido como código binario o código máquina, consistente en ceros y unos, que son las ordenes, y que sean fáciles de entender por el hardware de la máquina. Este lenguaje es mucho más rápido que los lenguajes de alto nivel. La desventaja es que son bastantes difíciles de manejar y usar, además de tener códigos fuente enormes donde encontrar un fallo es casi imposible.
  • El lenguaje ensambladores un derivado del lenguaje máquina y está formado por abreviaturas de letras y números. Con la aparición de este lenguaje se crearon los programas traductores para poder pasar los programas escritos en lenguaje ensamblador a lenguaje máquina. Como ventaja, es que los códigos fuentes eran más cortos y los programas creados ocupaban menos memoria. Las desventajas de este lenguaje siguen siendo prácticamente las mismas que las del lenguaje ensamblador, añadiendo la dificultad de tener que aprender un nuevo lenguaje difícil de probar y mantener.
      En este tipo de lenguajes de bajo nivel se trabaja a nivel de instrucciones, es decir, su programación es al más fino detalle, además, está completamente orientado a la máquina.
  • Adaptación - Máxima entre programación y aprovechamiento del recurso de la máquina.
  • Velocidad - Máxima al contar con un acceso directo a los recursos, sin capas intermedias.
  • Portabilidad - Mínima por estar restringido a las especificaciones del fabricante.
  • Abstracción - Mínima por depender completamente de la técnica del hardware.
  • Uso - Requiere de la máxima atención y de una organización estructurada en base a los planos del hardware y del objetivo del software.
Ventajas e Inconvenientes.
      Ventajas:
  •       Los lenguajes ensambladores presentan la ventaja frente a los lenguajes máquina de su mayor facilidad de codificación y, en general, su velocidad de cálculo.
      Inconvenientes:
  • Dependencia total de la máquina lo que impide la transportabilidad de los programas.
  • La formación de los programadores es más compleja que la correspondiente a los programadores de alto nivel, ya que no sólo las técnicas de programación, sino también el conocimiento del interior de la máquina.
Estructura de un programa en assembler.
      A continuación se presenta la estructura básica de un programa en assembler con extensión .asm. 

Unidad de Control - Memoria - E/S - Bus.

Unidad de Control (UC).

   En éste módulo aprendí que la unidad de control es la encargada de gobernar el funcionamiento del ordenador, tiene como responsabilidad recibir e interpretar cada instrucción a ejecutar por el ordenador, para posteriormente transformarla en una serie de microinstrucciones a muy bajo nivel, particulares para cada arquitectura de ordenador.

   Además la unidad de control dispone de la circuitería necesaria para leer la dirección de memoria que contiene la instrucción a ejecutar, localizar dicha instrucción y escribirla en un registro destinado para tal fin en la UC (registro de instrucción). Posteriormente otro elemento de la unidad de Control (Decodificador) transforma la información de este registro en una información más amplia e inteligible para el secuenciador.

   El secuenciador analiza e interpreta la salida del decodificador, y en función de esta información ejecuta un microprograma contenido en la memoria de control, que produce las microinstrucciones necesarias para que se ejecute la instrucción.

   Esta forma de ejecutar las instrucciones (por firmware) es propia de las UC programadas que son las más extendidas. Existe otro tipo de UC, llamadas UC cableadas donde las instrucciones están implementadas por hardware.

   Al finalizar la ejecución de la instrucción en curso, el registro contador de programa contiene información sobre la dirección de memoria en que se encuentra la siguiente instrucción que debe ejecutarse. Por tanto, una vez finalizada la ejecución de una instrucción, la circuitería de la UC lee de este registro contador de programa la dirección de la instrucción siguiente para su ejecución, volviendo nuevamente a comenzar el ciclo.

   Si la instrucción es compleja, generará muchas microinstrucciones y algunas de ellas necesitarán varios ciclos de reloj para completarse. Como la ejecución de la instrucción se dará por terminada cuando se hayan ejecutado todas las microinstrucciones, esta instrucción compleja necesitará varios ciclos de reloj para su finalización.




Memoria.

   Es el dispositivo fundamental de la computadora ya que almacena datos informáticos durante algún intervalo de tiempo. Ésta interconectada a la unidad central de procesamiento y los dispositivos de entrada/salida, implementan lo fundamental del modelo de computadora de la arquitectura de John von Neumann. Ésta además puede ser Principal, Secundaria, Terciaria, Fuera de línea y de Red.
Dispositivos de Entrada.


   Son aquellos que sirven para introducir datos a la computadora para su proceso. Los datos se leen de los dispositivos de entrada y se almacenan en la memoria central o interna. Los dispositivos de entrada convierten la información en señales eléctricas que se almacenan en la memoria central. Éstos dispositivos son el teclado, mouse, micrófono, webcam, escáner, entre otros.





Dispositivos de Salida.

   Son los que permiten representar los resultados (salida) del proceso de datos. El dispositivo de salida típico es la pantalla o monitor. Otros dispositivos de salida son: impresoras (imprimen resultados en papel), trazadores gráficos (plotters), bocinas, entre otros...



Bus.

   Son el conjunto de conexiones físicas que pueden compartirse con múltiples componentes de hardware para que se comuniquen entre sí. Éstos pueden ser de control, de dirección y de datos.