Logo IIB spacio
nombre
spacio

spacio

TECNOLOGIAS DE LA INFORMACION

 

 

 

 

 

espacio

 

 

 

Hardware - El lado duro del ordenata

spacer

spacer

Introducción

¿Para qué sirve un ordenador?

Buena pregunta. Lo que se pretende es que una persona utilice un ordenador con un fin, con alguna aplicación. De ahí que los programas tomen el nombre de aplicación, cuando el fin de estos es ser de utilidad al usuario del ordenador.

Las aplicaciones que corren en los ordenadores, utilizan los dispositivos físicos del ordenador (hardware) para tomar datos de entrada (dispositivos de entrada, como teclado, discos, la red, etc...) procesarlos (usaran la CPU, la memoria, etc...) y mostrar o guardar los resultados o datos de salida (dispositivos de salida como la pantalla, una impresora, disco, red...).

Todas las aplicaciones utilizan este hardware, y para facilitar y sacar máximo provecho a su uso se crearon los sistemas operativos. Estos permiten al programador y al usuario abstraerse del uso directo del hardware, como se hacía por ejemplo en las máquinas que funcionaban con tarjetas perforadas, y usar conceptos como ficheros, ventanas, procesos, conexiones entre ordenadores.

Aún alguno de estos conceptos que nos abstraen del uso directo del hardware son básicos en exceso y en ocasiones nos encontramos con que las aplicaciones utilizan lo que se llama "middleware" que nos permite por ejemplo manejar bases de datos en lugar de ficheros, certificados digitales, flujos de datos multimedia, y otras vaciladas varias.

Los ordenadores actuales, mediante sus sistemas operativos, permiten que el usuario pueda interaccionar con ellos con dispositivos tan complejos como el ratón, ejecutando varias aplicaciones con la sensación de que se ejecutan al mismo tiempo, permitiendo su uso por parte de diversos usuarios sin que se molesten entre ellos, guardando sus datos en bases de datos, o enviándolos a ordenadores remotos mediante sus tarjetas de red.

La estructura que por tanto vamos a ver es la del cuadro de abajo, empezando por el hardware, el sistema operativo y luego nos centraremos definitivamente en la aplicación.

Aplicación - Software
  Middleware
Sistema Operativo
Hardware

¿Cual es el objetivo de este curso?

En realidad el objetivo no es tanto el que la persona sepa programar aplicaciones en un lenguaje de alto nivel como es el Perl, sino más bien el que a través de la programación el alumno entienda el funcionamiento de los ordenadores. Esto le permitirá sacar mayor provecho a estas máquinas ya que se tomará conciencia de lo que un ordenador puede y lo que no puede hacer.

Para ello, nos vamos a poner en la piel del programador. Aquella persona que crea aplicaciones para resolver ciertos problemas en los que la máquina nos puede ayudar. En concreto nos centraremos en los problemas que como biólogos podemos solucionar con la programación.

Hardware

Vamos a comenzar con el hardware. El nivel físico de los ordenadores. Aquello que es susceptible de se roto en cachitos con un martillo.

Para ello vamos a entrar a hablar de lleno sobre la estructura que desde hace ya muchos años se utiliza en todos los ordenadores.

Arquitectura de Von-Neuman

La arquitectura de Von-Neuman nos resulta familiar puesto que se repite en todos los ordenadores actuales, y nos va a permitir entender el funcionamiento de estos. El esquema de la arquitectura es el siguiente:

Von Neumann 1

El elemento principal de un ordenador es la Unidad Central de Proceso (CPU) que podemos considerar como el "cerebro" del ordenador. La CPU se encarga de ejecutar las instrucciones que va obteniendo de una en una y de modo secuencial de la memoria principal del ordenador, donde se alojan los programas en ejecución.
 No confundir esta memoria con el disco del que hablaremos más adelante.

Estas instrucciones consisten en secuencias binarias llamadas código máquina y son ilegibles para las personas. Es por esto que ningún programador generalmente programa directamente en código máquina, sino que se utilizan otros lenguajes de programación que pueden ir desde los de más bajo nivel (más parecidos al lenguaje máquina) como el ensamblador, a lenguajes de alto nivel, independientes de la máquina y el sistema operativo en el que corren, como puede ser el Perl. Pero esto se verá más adelante.

Las instrucciones de código máquina se ejecutan de modo secuencial en la unidad de control "a velocidad de X instrucciones por segurndo" (por ejemplo 3.000.000.000 por segundo en una CPU a 3GHz) aunque la CPU permite saltos en el código a otras direcciones de memoria que pueden estar causadas por:  saltos en el programa condicionales o incondicionales, o por interrupciones. Esto ya es meterse demasiado a fondo. Para profundizar más, existe un montón de literatura al respecto. Yo os dejo aquí unas transparencias en pdf que me parecen guapas.

En todo caso, conviene saber que todos estos programas así como todos los datos que utilizan, se codifican finalmente en código binario (base dos, con 0's y 1's) que es lo que la CPU sabe procesar. De hecho es en función del número de 1's y 0's (bits) que la CPU pueda procesar por cada ciclo, el que digamos que un microprocesador es de 8,16,32,o 64 bits.

Vamos a ver un poco más a fondo la arqutectura Von Neumann para entender esto.

Von Neumann (vista general)
Esquema de interconexión mediante bus

Von Neumann (vista de la CPU)


Como hemos dicho, la CPU  obtiene el código a ejecutar de la memoria. Estos códigos están en "celdas" de memoria de forma secuencial, cada una con su dirección. El microprocesador indica que dirección contiene la siguiente instrucción a ejecutar (se lo indica a la memoria poniendo la dirección en el bus de direcciones) y la memoria pone la información en el bus de datos para pasárselo al micro.

Del mismo modo, todos los datos que se transmiten de la memoria a la CPU (en concreto a la Unidad Aritmetico-lógica de esta) y viceversa son enviados en buses de datos que pueden ser de 8,16,32,64,128 bits, y son también direccionados en buses de dirección de unos de estos números de bits.... y en función de ello, la memoria que puedan manejar los ordenadores, los tamaños máximos de los ficheros, etc...

Todo esto: CPU (o micro), bus de datos, de direcciones y memoria era lo que encontrábamos en la placa madre de los ordenadores. Y rodeando estos, y unidos a través de controladores, nos encontramos los periféricos.




Periféricos

Los periféricos los podemos clasificar fácilmente. Existen por un lado periféricos de entrada (E), de salida (S) y de entrada/salida (E/S). Existen otras clasificaciones que vamos a obviar. Algunos ejemplos pueden ser:

Teclado (E)
Ratón (E)
Terminal (S)
Impresora (S)

Disco (E/S)
Red (E/S)
CD-ROM (E)
Cintas de backup (E/S)
etc..

De todos estos dispositivos el disco siempre a jugado un papel principal que actualmente esta empezando a ser compartido por la red.

La razón de que el disco sea así de importante es que despues de la memoria principal, es el metodo de obtener y guardar datos más rápido (aunque sigue siendo mucho más lento que la memoria) con dos ventajas adicionales: es mucho más barato y no es volatil. Por esto se da que:

  • tengamos que guardar nuestros datos en disco antes de apagar el ordenador si no los queremos perder.
  • que solo tengamos en memoria los programas que estemos utilizando, y el resto de las aplicaciones deben estar cerradas solo presentes en el disco duro.
  • que cuando nos quedamos sin memoria, algunos sistemas operativos nos dan la opción de utilizar memoria virtual. Esto significa utilizar el disco duro, con la desventaja de que todo nos irá más lento y se colgará con más facilidad.

En general el acceso a los periféricos es siempre más complejo que un simple acceso a memoria. En general el acceso se hace mediante sistemas conocidos por los programadores de sistemas operativos como direcciones de entrada/salida, uso de interrupciones o programación de la DMA, pero los programadores de aplicaciones no tienen porqué conocer  como se hace este intercambio de datos, sino que utilizan al sistema operativo para que se encargue de el control del hardware y permita su compartición entre aplicaciones.

En todo caso, existen periféricos que son lo suficientemente sencillos como para poder tratarlos como "flujos de datos". Puede ser el ejemplo del teclado, que lo podemos entender como un flujo de datos de entrada que sería cada uno de los caracteres que tecleamos, u otro ejemplo puede ser la impresora o un terminal, a los que podemos enviar un flujo de datos de salida que serías los caracteres que queremos que nos aparezcan. Este tipo de periféricos se llaman orientados a caracter por esta característica de poderse comportar como flujo de caracteres de entrada y/o salida.

Como ejemplo de dispositivo complejo podemos hablar de la tarjeta gráfica. Ningún programador utiliza directamente la tarjeta gráfica, sino que hacen llamadas al sistema operativo que les permite manejar conceptos como ventanas, botones, menús o listas despliegables. Una forma de mostrar gráficos de un modo similar a un flujo de datos orientado a caracter puede ser componiendo una página web.

Del mismo modo, el sistema operativo como se verá más adelante, también nos evita acceder a los dispositivos orientados a bloque (como por ejemplo el disco) directamente, sino que nos crea lo que se llama un sistema de ficheros que nos permite leer y guardar nuestros datos en ficheros con nombres, en jerarquías de carpetas, y en flujos de datos orientados a caracter de un modo similar a como obtenemos datos del teclado, o los mostramos en el terminal.

Apéndice A
¿Porqué los informáticos hablan en 0 y 1?

  • Un ordenador trabaja con señales eléctricas y puertas lógicas que son la base de los microchips de "toda la vida".
  • Esto lleva a utilizar solo 1's y 0's y lógica booleana (no entro en esto).
  • Con dos dígitos (0 y 1), solo se puede contar en binario (base 2)
  • Igual que en nuestra numeración decimal (base 10) cada dígito hay que multiplicarlo por una potencia de 10 según su posición:
     
    5 3 9 8   = 5*103+3*102+9*101+8*100 = 5398
    3 2 1 0    
    103 102 101 100    


    ... en binario hay que multiplicar cada dígito por una potencia de 2:
     

    1 0 0 1 0 1   =1*25+0*24+0*23+1*22+0*21+1*20 = 25+22+20 = 37
    5 4 3 2 1 0    
    25 24 23 22 21 20    
  • Por esa razón es importante el número de bits (dígitos binarios) con el que trabaja un ordenador, que suele ser en múltiplos de 8 (8 bits = 1 byte).
  • El número de bits con el que trabaja un ordenador viene caracterizado por el número de bits que maneja el microprocesador y por el número de bits de sus buses (en concreto siguiendo la arquitectura Von Neumann, el bus de datos y el bus de direcciones).
  • Como ejemplo, con un bus de direcciones de 10 bits, se pueden direccionar 210 bytes = 1024 bytes = 1 kilobyte. Otros ejemplos:
  • Con 16 bits se direccionan 216 bytes = 64kilobytes.
    Con 20 bits se direccionan 220 bytes = 1 megabyte..
    Con 32 bits se direccionan 232 bytes = 4 gigabytes.
  • Para manejar grupos de 8 bits de un modo más cómodo que con el binario o con el decimal, en programación se utiliza el hexadecimal (base 16) muy habitualmente.
  • En hexadecimal cada dígito puede tener 16 valores que son:
     
    Hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F
    Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  • Y de igual modo que veíamos en binario y en decimal, en hexadecimal hay que multiplicar cada dígito por una potencia de 16:
     
    2 0 F E   = 2*163+0*162+15*161+14*160 = 8446
    3 2 1 0    
    163 162 161 160    
  • La razón por la que se utiliza tanto en programación es que cada dígito en hexadecimal es exactamente equivalente a (agrupa) cuatro dígitos en binario (bits).
  • Por tanto, dos dígitos en hexadecimal equivalen a 8 bits => 1 byte
  • Y siguiendo con la agrupación, 2 bytes (16 bits, también llamados "palabra") se representan con 4 dígitos hexadecimales, 4 bytes (32 bit o 2 palabras) se representan con 8 dígitos hexadecimales, y así sucesivamente.
  • ¿otros ejemplos?
    Dirección IP 4 bytes (32 bits) 150.244.14.3 == 96.F4.0E.03
    Dirección Ethernet 6 bytes (48 bits) 00:08:5C:B7:13:76
    Cod. Color Web 3 bytes (RGB) #FF70B4
    Dirección IPv6 16 bytes (128 bits) 5F05:2000:80AD:5800:0058:0800:2023:1D71

 

 

 

 

spacio
spacio
spacio

 

Ultima modificación: 17 de Septiembre de 2004
Instituto de Investigaciones Biomédicas "Alberto Sols"
C/Arturo Duperier 4. 28029 Madrid. (Spain)
Tel +(34) 91 585 4400 // Fax +(34) 91 585 4401
sobre Email:Servicio de BioInformatica