![]() |
![]() |
![]() |
|
![]() |
|
TECNOLOGIAS DE LA INFORMACION |
|
|
||||
![]() |
||||||
|
||||||
|
|
Hardware - El lado duro del ordenata | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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.
¿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. HardwareVamos 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-NeumanLa 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: ![]() 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.
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.
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éricosLos 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) Disco (E/S) 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:
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
|
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 |
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 |
2 | 0 | F | E | = 2*163+0*162+15*161+14*160 = 8446 | |
3 | 2 | 1 | 0 | ||
163 | 162 | 161 | 160 |
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 |