Translate

24 jun 2014

Introducción a los Sistemas Informáticos

Como bien dice el título, en esta entrada del blog explicaré cómo funciona internamente un equipo informático y así como su estructura. El contenido de aquí va orientado para los más novatos en este mundillo y que quieran conocer con más detalle el funcionamiento de un ordenador, ¡pero todo el mundo es bienvenido!

Muy bien, el primer paso es saber qué es un equipo informático. En la jerga informática se denomina “Equipo” a un ordenador cualquiera, ya sea un sobremesa, un portátil o un servidor de la NASA. Todos son considerados equipos informáticos, o simplemente equipos.

Ahora bien, la estructura de un equipo informático es realmente sencilla, al menos el concepto, el cual está formado por tres componentes principales: Hardware, Software y Humano. Cada componente por supuesto conlleva una serie de responsabilidades en lo que es el funcionamiento del equipo, y también conlleva ciertos riesgos. Vamos uno por uno:

Hardware; el término de Hardware hace referencia siempre a las piezas del ordenador, a lo que podemos tocar, como el monitor, el teclado, el ratón, el disco duro, la memoria RAM, el microprocesador, los altavoces… El Hardware en sí está compuesto por numerosos dispositivos físicos, sería el equivalente a las piezas de una maquinaria o el motor de un coche, y puede dividirse en:

-Dispositivos de almacenamiento; son dispositivos relacionados con la memoria y destinados a guardar y tratar información, como un Pendrive/Memoria flash, un Disco Duro o una memoria RAM. Y con tratar información me refiero a leer y escribir datos en dicho dispositivo, independientemente de si la información sea volátil (memoria RAM) o no (Pendrive o Disco Duro).

-Periféricos; los periféricos son dispositivos que permiten añadir funciones al equipo y que éste, en principio, no debería traer consigo, como sería un teclado, un ratón, un altavoz, una webcam… Sé que esto puede sonar raro, porque ahora todos los ordenadores suelen traer muchas de estas cosas integradas de fábrica, pero en un sobremesa por ejemplo no es el caso. Se dice que un Disco Duro puede ser también un periférico cuando es externo (que se conecta mediante un puerto USB)

-Piezas de base; así las he denominado yo a las piezas más elementales que componen el ordenador, como es la propia placa base y todos los componentes que trae integrados (resistencias, conectores, puertos para tarjetas adicionales, zócalo del microprocesador…), el monitor, la torre que contiene la placa base…

Software; imagino que éste es el término más conocido por la gente en general. El software es la parte no física, sino lógica, es la opuesta al hardware. Es, básicamente, los programas (Google Chrome, Skype, un videojuego…). Y sobre el software, bueno, no voy a extenderme mucho con esto, solamente quiero dejar el concepto de lo que es y ya en otra ocasión me centraré más en todas sus características (licencias, tipos de programas…).

Humano; eso es, el último componente somos nosotros, porque sin personas, los ordenadores no serían más que máquinas que no sabrían, sencillamente, qué hacer. A pesar de que en Internet haya cientos de teorías sobre que en el futuro los ordenadores gobernarán el mundo con mano de hierro como en Matrix, que el código fuente sea capaz de sentir emociones, que un ordenador emule el razonamiento humano o por mucho que empresas importantes de turno digan que los ordenadores no necesitarán de los humanos para escribir código… ¡esto no es cierto! Porque a fin de cuentas, un ordenador no es más que un conjunto de piezas que funcionan gracias a una corriente eléctrica para esperar nuestras órdenes, son iguales que un coche o una tostadora, ya que sin nosotros, un ordenador no tendría ninguna finalidad. Somos los principales responsables de los fallos de un equipo informático (que también pueden provocar fallos tanto el Hardware como el Software), y de su buen uso, así que confío en que los lectores podáis ser lo suficientemente responsables como para mantener vuestros equipos en buen estado.

A continuación voy a mostrar con una imagen la estructura básica que hoy en día sigue un equipo, una vez tenemos estos últimos conceptos claros, ¡qué tampoco son tan difíciles!

Podemos observar que el componente externo somos nosotros, los humanos, seguido de los programas comunes y corrientes, controlados luego por el Sistema Operativo y su software particular, para finalmente tener al fondo el Hardware, es decir, las piezas. De esta forma se mantiene todo conectado y bien atado. Claro que, cualquier capa de este esquema puede provocar fallos, y hay que saber distinguir cuando es un fallo nuestro a cuando es un fallo ajeno a los humanos.

Muy bien, ahora vamos a adentrarnos todavía más en la estructura lógica de un ordenador, y para esto, agradecería que os leyeseis mi otra entrada denominada “La historia de la informática” en el siguiente enlace: http://alexsoftware93.blogspot.com.es/2014/05/historia-de-la-informatica_30.html

Pues es aquí donde se plasman las principales bases sobre la estructura de un ordenador, especialmente la teoría de Von Neumann, ideada a partir de la Segunda Guerra Mundial.
El esquema propuesto por este hombre era sencillo: mantener un cerebro que realizase todas las operaciones que le fuesen llegando y fuese controlando todos los componentes de la máquina, mientras que en otra zona alejada pudiésemos tener los datos y las instrucciones para manejar dichos datos, esta última zona denominada “memoria”. Así pues, la memoria envía datos e instrucciones al cerebro, que vendría a ser el microprocesador (¡chip más importante de un ordenador!) para que éste trabajara en consecuencia y volviese a enviar datos a la memoria, algún periférico, o a dónde fuese. En una imagen, vendría a ser algo como esto:

Tendríamos tres componentes principales: la Memoria, que almacena datos e instrucciones para manejar dichos datos en celdas de memoria; el Microprocesador, que contiene la Unidad de Control (encargada de enviar señales al resto de componentes para que funcionen en base a las instrucciones que le llegan desde la Memoria, vendría a trabajar en Hercios, por eso al comprar un ordenador o microprocesador nos indica su capacidad en MHz, o la unidad que sea), la ALU/UAL, o Unidad Aritmético Lógica (encargada de realizar operaciones en base a los datos que le llegan desde la Memoria y dependiendo de la instrucción a realizar por la Unidad de Control), y finalmente los Registros, que son memoria muy pequeñitas, carísimas y de pocos bits que trabajan a velocidades bastante altas; y por último los periféricos que podamos tener conectados al equipo. Y todo conectado mediante buses, que vendrían a ser o bien cables o bien circuitos de la placa base diseñados para transmitir información (energía eléctrica, vamos) de un componente a otro.

En base a esto, podemos deducir que un programa, o software concreto, viene a ser un conjunto de datos e instrucciones almacenadas en memoria. Y se ejecutan de forma simple siguiendo estos pasos:
1º Leer (o recoger) de la memoria la instrucción a ejecutar.
2º Decodificar la instrucción en la Unidad de Control.
3º En base a la operación a realizar, enviar señales de control desde la Unidad de Control a los correspondientes componentes para actuar en consecuencia de la instrucción decodificada, como por ejemplo enviar datos a la UAL.
4º Almacenar los resultados de nuevo en memoria.
5º Calcular la siguiente dirección de la próxima instrucción.

Claro que, para comprender mejor esto es necesario tener el concepto de lo que es una celda de memoria. Como ya he comentado, la memoria está compuesta de pequeñas celdas representadas mediante ceros y unos (de hecho, todo esto trabaja a bajo nivel, es decir, a base de ceros y unos. Lo que se envía de memoria a la UAL, las señales de control o las propias instrucciones o celdas de memoria, son todos ceros y unos que solo comprende el ordenador), y cada celda contiene un dato, una instrucción a ejecutar, o bien la dirección de otra celda de memoria. Cuando sucede esto último, lo que hace el procesador es ir a esa otra celda de memoria y recoger lo que allí se encuentre. Para que se comprenda mejor, vamos a poner un caso práctico:

Imaginad que en el Escritorio de vuestro ordenador hay un icono de un videojuego, llamémoslo League of Legends. Todos sabemos que al pinchar dos veces en él se ejecutará y el juego empezará, sin embargo, ¿qué ha sucedido realmente? Toda la información del juego no puede estar almacenada en ese iconito, sino que se encuentra en una carpeta dentro del disco duro acompañada de un fichero o archivo especial denominado “ejecutable” (tiene extensión “.exe” en Windows). Muy bien, lo que hemos hecho al pinchar dos veces sobre el icono para que arranque el juego es decirle al microprocesador: “No, mira, lo que realmente quiero utilizar no es el iconito del Escritorio, sino el fichero ejecutable que está en el disco”. Y así, como el icono del escritorio tiene su propia celda pero contiene la dirección de la celda del ejecutable, el procesador irá a la celda del ejecutable y arrancará el juego.

Un fichero ejecutable es el que permite iniciar los programas para verlos en pantalla.

Ahora bien, como he comentado antes en segundo plano, el ordenador solo trabaja a bajo nivel (ceros y unos), ¿pero qué significa esto realmente? En informática, a la hora de realizar un programa se hace uso de lenguajes de programación, que nos permiten escribir de forma más o menos clara para nosotros las instrucciones que queremos que realice el ordenador, así como definir los datos que estas instrucciones realizarán. Un ejemplo de programa en C muy visual y sencillito:

Int a=2
Int b=2
Int c=a+b
Printf(“El resultado de %d + %d es igual a: %d”, &a, &b, &c);

Definimos los datos que queremos usar, una letrita llamada “a” que contendrá un “2”, una letrita llamada “b” que contendrá otro “2”, y finalmente otra letrita llamada “c” que será la suma de “a” y “b”, es decir, será “4”. Finalmente, la instrucción “printf” imprimirá en pantalla el texto de: “El resultado de 2 + 2 es igual a: 4”.

Con este ejemplo, ignorando lo que pueda significar el “%d” o “&a/&b/&c” (pues esto es más propio del lenguaje de programación que de lo que quiero explicar), hemos definido datos (a, b y c), cada uno con un contenido dentro que será un número (2, 2 y 4), cada uno de estos datos estará en una celda cuyo contenido serán los respectivos numeritos.

Por otro lado tenemos la instrucción para imprimir por pantalla, que también tendrá su propia celda, y la instrucción dirá que recoja de memoria el contenido de las celdas “a, b y c”, que contendrán sus respectivos valores. De esta forma las celdas en memoria pueden encadenarse sucesivamente y recoger así los datos que verdaderamente importan.

En definitiva, ha quedado demostrado que un programa está compuesto de datos, instrucciones y es escrito en un lenguaje de programación concreto. Por lo general, todos los lenguajes de programación son denominados de “alto nivel”, ya que están destinados al uso de nosotros, las personas. Los programadores comprenden por ejemplo los lenguajes de alto nivel practicando mucho, pero luego está el denominado lenguaje de “bajo nivel” o lenguaje máquina, que no es sino una retahíla de ceros y unos interminable, y esto es lo que utiliza el ordenador para funcionar internamente, a nivel de procesador y memoria. ¿Y por qué ceros y unos? Os preguntaréis. Pues detrás de esto hay teorías, e incluso en la entrada de la Historia de la informática que tengo más atrás, que explican claramente que el sistema de numeración binario es el ideal para llevar la información más rápido. No es lo mismo tener un cero y un uno (ausencia o no de información) que un total de diez dígitos donde elegir (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), siendo este último caso el sistema de numeración decimal que todos conocemos.

Ahora bien, como lenguaje de programación que es, el lenguaje máquina puede variar de un microprocesador a otro. Siguen siendo ceros y uno, sí, ¿pero cómo es esto posible? Dependiendo de la compañía que desarrolle el microprocesador, nos podemos encontrar los llamados “juegos de instrucciones”, que serán distintos en una versión u otra.

En resumen, los lenguajes de programación de alto nivel son independientes del equipo (o procesador, más concretamente), y pueden ser: C, Java, C++, SQL, Ruby, Visual Basic…
Mientras que luego tenemos, dependiendo del juego de instrucciones y el modelo del procesador, un lenguaje máquina distinto que permite transformar las instrucciones de alto nivel en bajo nivel, como pueden ser: 8086, Motorola 68K, Zilog Z80…


Y bueno, en resumen, esto es todo hasta ahora. Espero que os haya gustado y hayáis aprendido algo =)