Cómo funciona un procesador
-
Operar con el procesador
Hasta ahora hemos visto al procesador como sistema digital. Ahora vamos a ver cual es su trabajo.
Primero vamos a ver con algo más de detalle las partes de un procesador cualquiera. Como hemos dicho antes, un procesador está constituido por una unidad de control (UC) y una unidad aritmético-lógica (ALU). La UC se encarga de ejecutar las instrucciones y de enviar a la ALU las operaciones que necesite realizar. Pero también disponen de una memoria interna diferente a la caché mucho más rápida que esta y de menor tamaño que se divide en los llamados registros internos.
Registros internos
Su función es la de almacenar temporalmente información. Un procesador manipula esencialmente dos tipos de información: los datos y las direcciones de memoria. Para los datos se emplean registros de datos y para las direcciones se emplean registros de direcciones. Esto de separar esta información se produce porque existen varios métodos para tratar las direcciones de memoria. En los procesadores x86, los registros de direcciones se dividen a su vez en otros más especializados (memoria virtual, segmentación y virtualización). Además de estos, en cualquier procesador podemos encontrar los siguientes registros:
• Contador de programa, que no es más que un contador que le dice al procesador la dirección de memoria RAM donde se encuentra la siguiente instrucción a leer. Así pues se trata de un registro de direcciones.
• Registro de instrucción sirve para almacenar la instrucción que se está ejecutando en este momento.
• Puntero de pila: su función es almacenar la dirección del comienzo de la pila. La pila es una memoria en la que se van almacenando información y a la hora de recuperarla primero sale la última que ha entrado y por ultima sale la primera que ha entrado (como si hacemos un montón de cosas y luego vamos cogiendo las de más arriba hasta llegar a las de más abajo).
• Registro de estado: Indican el estado de la ALU, por ejemplo, si se ha producido desbordamiento (se ha realizado una operación con más cifras de las que puede realizar la máquina; en la casos de las calculadoras el desbordamiento parece como ERROR), si alguna operación ha dado como resultado cero, etc.
Direccionamiento de memoria
Cuando un procesador quiere obtener información de la memoria RAM, este debe saber en qué parte de la memoria se encuentra dicho dato. La memoria RAM de un ordenador x86 está dividida en fragmentos de un byte y a cada byte le corresponde una dirección de memoria. Cuanto mayor sea la dirección mayor será la cantidad de memoria direccionable y por lo tanto mayor será la cantidad de RAM que se pueda instalar. Para saber la cantidad de memoria que se puede instalar en un ordenador x86 tan solo tenemos que hace la operación 2 elevado al número de bits. Por ejemplo, un ordenador con un procesador de 16 bits podría direccionar 65.536 Bytes o lo que es lo mismo, 64 KBytes de RAM.
Como muchos hemos visto últimamente, a los ordenadores que operan con un procesador o un sistema operativo de 32 bits y tal y como sale como resultado de hacer 2 elevado a 32, la memoria máxima que detecta como es lógico es de ¿3 GBytes y pico?
Acceso a dispositivos
Algo tan necesario para un procesador como es acceder a la memoria RAM es tener acceso a los distintos dispositivos que hay conectados a nuestro ordenador (controladora de disco duro, tarjeta gráfica, buses USB, etc, etc, etc) ya que de ellos se capta información y también se envían resultados. La forma que tiene un ordenador x86 de acceder a los distintos dispositivos conectados es mediante direcciones de memoria. Por ello, cuando conectamos algún hardware, el sistema automáticamente reserva un rango de direcciones para el acceso a dicho dispositivo. Si por ejemplo el procesador quiere coger información del disco duro no tiene más que saber la dirección de la controladora (eso se lo dice la BIOS) y empezar a operar en el disco duro. Si los dispositivos tienen funciones más complejas que la BIOS no sabe (como la aceleración gráfica) harán falta controladores que le digan al procesador (el realidad al sistema operativo) como manejar dichas funciones. Y esta es la razón por la que en un sistema x86 de 32 bits, los cuales pueden direccional 4 gbytes tan solo funcionan más de 3 gbytes de RAM.
Código máquina
Todos los programas que ejecutamos en nuestro ordenador, desde la BIOS hasta el juego más novedoso, pasando por Windows y todas sus utilidades están compuesto por instrucciones máquina. Estas instrucciones son las operaciones que puede realizar un procesador. Un ejemplo puede ser la suma de dos números. Otro podría ser enviar tal información a tal dirección de memoria. Existen cuatro tipos de instrucciones máquina:
• De transferencia de datos: Su función es mover información de unos sitios a otros del ordenador. Dicha información permanece inalterada. Si por ejemplo queremos copiar un archivo del disco duro y un reproductor de MP3 tendremos que acceder a la controladora del disco duro, captar la información que queremos, moverla a RAM (en forma de caché para que la transferencia se agilice), acceder al dispositivo USB mediante su dirección de memoria correspondiente y depositar ahí la información que previamente hemos copiado en RAM.
• Procesamiento de datos: Básicamente son las operaciones aritmético-lógica, de incremento-decremento o de rotación, como las que se producen cuando por ejemplo movemos el cursor de ratón incrementando o decrementando la posición en los ejes XY.
• Control: Su función es realizar paradas en el procesador para ejecutar otras instrucciones. A esto se le llama interrupciones y en los sistemas x86 se produce una interrupción cada vez que pulsamos una tecla, movemos el ratón o cualquier dispositivo le pide atención al procesador. Realmente lo que se hace es parar todo lo que se está haciendo para atender la petición pero los procesadores son tan rápidos que dicha interrupción para desapercibida por nosotros.
• Ruptura de secuencias: Todo lo relacionado con saltos y condiciones. Más adelante pondré algún ejemplo.
Este apartado es realmente difícil de explicar de forma extendida para los profanos en programación, así que lo haré de la forma más simple posible.
La programación en código máquina es secuencial. Esto quiere decir que las instrucciones se van ejecutando por orden: primero la primero, después la segunda, etc. Para que un procesador en un sistema x86 pueda ejecutar un programa este tiene que estar en la memoria RAM. Una vez ahí y con ayuda del contador de programa irá ejecutando una instrucción detrás de otra. Supongamos que queremos hacer la suma de dos número que están en la dirección 1221 y 1222 de memoria, que el resultado lo queremos en la dirección 1223 y que además aparezca en la pantalla del ordenador, siendo la dirección de la tarjeta gráfica para texto la 7576. Para ello el procesador tendrá que ejecutar un código como el siguiente:
SUMA A,1221,1222 (hace la suma de los datos que hay en esas direcciones y lo envía al registro de datos “A”).
COPIA 1223,A (Hace una copia de lo que hay en el registro de datos “A” a la dirección de memoria 1223).
COPIA 7576, 1223 (Vuelve a hacer una copia de la dirección donde está el resultado a la dirección que enviará la información a la tarjeta gráfica como texto y esta aparecerá en la pantalla).
Fijaos que algo tan simple como hacer una suma y mostrar el resultado en la pantalla requiere tres operaciones para el procesador. ¿Os imagináis qué haría falta para hacer la copia de un diskette al disco duro? Gracias al sistema operativo, entre otras muchas cosas, nos ahorra nos solo tener que saber código máquina, sino también tener que hacer miles de operaciones para poder copiar un archivo de unos poco megas.
Otras veces durante la ejecución del programa es necesario dar un salto, es decir, saltarse unas cuantas instrucciones hasta llegar a la deseada. Para esto se usan las instrucciones de ruptura de secuencia. Imaginemos que estamos copiando una película en una lápiz USB. Entonces se van copiando fragmentos de archivo siguiendo un programa secuencial, pero de repente del pendrive se queda sin memoria y nos aparece un mensaje diciendo que el lápiz no tiene capacidad suficiente. En este caso se ha roto la continuidad del programa y en vez de seguir copiando se ha ido a la parte del código que envía el mensaje de error. Este es un ejemplo sencillo de la función de las instrucciones condicionales.
El sistema operativo
En principio para poder operar con un ordenador es necesario programarlo, es decir, decirle todo lo que tiene que hacer y con todo me refiero a absolutamente todo. Gracias a los sistemas operativos todo este tema de la programación del procesador se hace totalmente transparente para el usuario. Cuando queremos acceder al disco duro no tenemos más que hacer clic en el icono del disco duro y automáticamente nos aparecen todas las carpetas y archivos que hay dentro. Esto en realidad es un proceso muchísimo más complejo que el sistema operativo nos simplifica. Uno de los primeros sistemas operativos para x86 fue el MS-DOS, que significa Microsoft Disk Operating System. La razón de este nombre no es otra que la función de este sistema operativo era la administración de los medios de almacenamiento. Para los que hemos tenido la oportunidad de vivir el momento en el que todo se manejaba con comandos sabemos que MS-DOS tenía utilidades de todo tipo, pero el tipo más abundante eran las de administración de discos duros y diskettes. Aunque pueda parecer raro, MS-DOS era una simplificación enorme para el manejo de la información de un ordenador, aunque hubiera que escribir varios comando para hacer algo que hoy se hace con un clic.
Además de hacernos la vida más fácil a la hora de manipular información en dispositivos de almacenamiento masivo los sistemas operativos se encargan de gestionar la memoria RAM disponible y la que usa cada programa, da la posibilidad de ejecutar numerosos programas en un solo procesador, administra los dispositivos de forma que solo nos tengamos que preocupar de instalar unos controladores, etc, etc, etc.
Eficiencia en la ejecución de instrucciones
Para finalizar voy a hablar sobré algo que desde los Athlon XP está “de moda” y es una de las razones por la que un procesador a una frecuencia inferior a otro opera más rápido que el segundo.
Cada vez que un procesador ejecuta una instrucción esta consume unos ciclos determinados. Por ejemplo en un 8086, la suma de dos números puede consumir hasta 7 ciclos de reloj. Si conseguimos diseñar un procesador en el que esa misma operación gaste tan solo 3 ciclos, a la mitad de frecuencia que el 8086 dicho procesador hará la suma más rápido que este primero. Así ocurre con todo el repertorio de instrucciones. Desde las nativas del x86 a las SSE3 (MMX4), cada vez se necesitan menos ciclos para hacer lo mismo y por eso últimamente aunque los procesadores no han aumentado su frecuencia significativamente si lo ha hecho su rendimiento. Por eso un Athlon XP a 1.6 GHz va igual de rápido que un Pentium 4 a 2 GHz y un solo núcleo de un Conroe a 1.6 GHz va el doble de rápido que el mismo Athlon XP a 1.6 GHz.
En resumen cada instrucción consume su número de ciclos y con el tiempo se van sacando nuevos repertorios cada vez más especializados y se van puliendo los anteriores.
-
Hombre yo me he enterado, pero vamos, que ya me lo sabía de antes… y he visto que aún entiendo la electrónica digital y me he ilusionado oye XD
-
Gran trabajo cobito auque un poco complejo. Saludos!!!!!
-
Fenomenal, me ha gustado. Muchas gracias por el aporte.
-
Pues yo no tenía conocimientos exactos en este tema pero conocía picos de cosas que había hecho en electrotecnia y la verdad me ha ayudado a comprender mejor el funcionamiento. :sisi: :sisi: :sisi:
Gracias, Cobi!!
-
Te daría reputación pero me dice que tengo que darle reputación a más personas antes de volverte a dar a ti Así que solo me queda decirte, buen trabajo
Salu2
-
Te daría reputación pero me dice que tengo que darle reputación a más personas antes de volverte a dar a ti Así que solo me queda decirte, buen trabajo
Salu2
Eso me pasa a mí con 2 ó 3 personas que he intentado dar reputación.
Buen trabajo cobito :sisi:
-
Muy bueno cobito, felicidades!!
No te has planteado enviarlo a alguna revista de informatica? quizas te compren el articulo y te sacas unos €€ o quizas te cogen para que vayas haciendo mini guias de estas, porque capacidad te sobra ;D .Saludos!
-
Alguien ha pedido chincheta?
-
Estais hechos unos reputadores
Tremendo el trabajo cobito, me lo he leido de principio a fin y me ha encantado aunque no sea mi campo -
Te daría reputación pero me dice que tengo que darle reputación a más personas antes de volverte a dar a ti Así que solo me queda decirte, buen trabajo
Salu2
Lo mismo digo, pero 5 estrellas quedan de lugo al lado de la rama ;).
-
Gran trabajo cobito auque un poco complejo. Saludos!!!!!
Esto es de primero de carrera, con verlo un par de veces se coge enseguida.
Buena guía cobito.
-
Gracias a todos.
No te has planteado enviarlo a alguna revista de informatica? quizas te compren el articulo y te sacas unos €€ o quizas te cogen para que vayas haciendo mini guias de estas, porque capacidad te sobra.
La verdad es que no lo había pensado aunque no creo que les interese algo así. Como ha dicho Forenaits, esto es de primero de carrera y cualquiera con un poco de ganas y tiempo puede hacerlo. Yo por falta de tiempo y ganas solo me puedo permitir hacer este tipo de cosas un par de veces al año. De todas formas gracias por la sugerencia.
-
Verdaderamente interesante, a mi no me gusta la electrónica pero sí este tipo de cosas que tienen que ver con el funcionamiento de los componentes, de todas maneras leí que era mucho mas complejo que ello ya que dentro de la ALU se encuentra el COP o Circuito Operacional quien se encarga de todas las operaciones con los datos que llegan del RE donde se almacenan los datos procedentes.
-
Esto es de primero de carrera, con verlo un par de veces se coge enseguida.
Buena guía cobito.
Con razón no me enterado practicamente de nada, es lo que tiene el bachiller de ciencias sociales :D. Pinta muy bien la guía, felicidades
-
Tio me has amargado, estos son los apuntes de FC (fundamentos de la computacion), xDDDDDDD. Na no me eches cuenta k estoy medio loko celebrando k se acabaron los examenes. Buen aporte.
-
¡Esta publicación está eliminada!