3 Video Lecciones - 2 Arquitectura de La CPU
3 Video Lecciones - 2 Arquitectura de La CPU
3 Video Lecciones - 2 Arquitectura de La CPU
Ficha 5
Cuando se habla de arquitecturas de una computadora existe una clasificación más o menos oficial que
se llama “Taxonomía de Flynn”. Las cuatro clasificaciones definidas por Flynn se basan en el número de
instrucciones concurrentes (control) y en los flujos de datos disponibles en la arquitectura:
Si yo quiero desde la CPU ver el contenido de una dirección de memoria por ejemplo “dir1” tengo que
volcar el contenido de la CPU través del “bus de direcciones”, es decir, le voy a decir a la memoria
principal qué dirección queremos para que nos dé el dato contenido en esa dirección por el “bus de
datos”.
En la ficha tenemos por ejemplo un esquema “SISD (simple instrucción single data)” de una
computadora básica con una sola CPU y que se corresponde con la “arquitectura Von Neumann”
En una arquitectura Von Neumann clásica de una sola CPU, encontramos lo siguiente:
En la parte derecha de la ficha tenemos la memoria y dentro de esta encontramos un conjunto de celdas
con indicadores únicos (direcciones) que contienen instrucciones a datos separadas entre sí, cuando se
cargan los programas las instrucciones y los datos están en sitios distintos. Así por ejemplo cuando
hablamos de segmentación tenemos un segmento donde están las instrucciones y otro donde están los
datos totalmente separados. Instrucciones = que hacer y datos = con que lo hacemos.
Vamos a fijarnos en la parte de las instrucciones, para ejecutar un programa. Para esto tiene que haber
algo que nos vaya diciendo que instrucción se va a ejecutar en primer lugar y cuál es la siguiente. Ese
registro se llama “CP (counter program)” o “Contador de Programas”. En el CP hay “direcciones”.
Con el “bus de control” le decimos a la memoria que operación queremos (read, write, execute, etc.).
Si yo quiero desde la CPU el contenido de una dirección de memoria ejemplo del grafico “Dir_1” tengo
que volcar el contenido del CP a través del “bus de direcciones” a la memoria, es decir le voy a decir a la
Página 1|6
B2 T1 – INFORMATICA BASICA
Video de las lecciones: 2 Arquitectura de la CPU (1:54:09)
memoria principal (RAM) qué dirección queremos para que nos dé el dato de esa dirección. Para esto
vamos que volcar el contenido del “CP” sobre el “bus de direcciones” y cuando le pedimos a la memoria
RAM que nos devuelva al contenido de esa dirección de memoria, esta nos la da a través del “bus de
datos”
El “bus de direcciones” es para indicarle a la memoria en qué dirección de memoria está el dato que
quiero y la memoria me devuelve el contenido de esa dirección a través del “bus de datos”.
El “bus de datos” está conectado a un registro que se llama “RIM (registro intermedio)”. Este registro
intermedio que es como una especie de “buffer” que le pasa la información al “RI (Registro de
Instrucciones)”. El contenido del RI se vuelca sobre otro registro de la CPU que se llama “decodificador”
que nos va a servir para identificar la instrucción que tiene que ejecutar una de las piezas más
importantes que tiene la CPU que es el “secuenciador”.
El secuenciador es el autómata que tiene la inteligencia para poder activar los componentes
electrónicos y poder cumplir con lo que dice esa instrucción. El secuenciador es el autómata, es el que
tiene la implementación para poder realmente cumplir con lo que tiene que hacer esa instrucción, por
ejemplo, para una instrucción de suma tenemos que acceder a un dato en la memoria y traerlo a un
registro y activar la ALU (que es el componente electrónico que sirve para hacer las operaciones
aritmético lógicas) es decir si hay que activar los registros de la ALU, etc. Todo eso lo hace el
secuenciador que es el director de orquesta.
La utilidad de la RIM es que mientras tú estás ejecutando o decodificando una instrucción esta puede
estar recogiendo otra de la memoria principal y no tener que esperar a que termine. Es como un
“buffer” intermedio que sirve para tener disponible la siguiente instrucción de manera más inmediata.
Como resumen general cuando estamos hablando de ejecutar en una CPU un programa, sus
instrucciones pasan por dos momentos: el 1º seria la búsqueda de las instrucciones y el 2º es la fase de
ejecución, son dos momentos totalmente diferentes.
Una vez que lo tenemos cargado en el “RI (registro de instrucciones)” pasamos a la fase de ejecución de
la instrucción.
Esta es la parte más básica contando solo con el procesador y la memoria. Cuando hablamos de
arquitecturas actuales entran en juegos muchas más cosas.
Ficha 6
Filosóficamente hablando la CPU se debe encargar de lo estrictamente necesario, si le interrumpiríamos
todo el tiempo con tareas que no aportan mucho a nivel de ejecución el ordenador iría muy lento. La
CPU debe estar dedicada en ejecutar y manejar la parte más rápida de un ordenador.
En una arquitectura de computadoras modernas existen otras CPUs, otros circuitos que colaboran con
estos llamados “chipset” que son una parte de la circuitería especializada en otras cosas para así poder
descargar a la CPU de muchas de las tareas que, si no tendría que hacer ella, como por ejemplo todo lo
que tiene que ver con dispositivos rápidos, que están conectados al “chipset Norte” y los lentos que
están conectados al “Sur”. Las cosas de alta velocidad que se conectan directamente al Chipset Norte
Página 2|6
B2 T1 – INFORMATICA BASICA
Video de las lecciones: 2 Arquitectura de la CPU (1:54:09)
son la memoria principal, el bus AGP, el PCIe. El Chipset Sur se encarga de resto de dispositivos por
ejemplo de E/I (entrada y salida), es decir dispositivos más lentos, como discos duros, ethernet, audio,
serie, el paralelo, el PS/2, PCI. El chipset Sur se comunica con la CPU a través del chipset Norte.
Una CPU puede trabajar por ejemplo a 3,4 GHz. qué es la velocidad de su reloj interno. La relación entre
la CPU y la memoria principal (RAM) se lleva a cabo a través Chipset Norte con un bus que se llama “FSB
(front side bus)” que es un bus de alta velocidad (por ejemplo, a 100 MHz). El procesador trabaja con
múltiplos del FSB y ese múltiplo se le llama “multiplicador”. Ejemplo, si tenemos un FSB de 100 MHz y la
CPU trabaja a 3.4 GHz el multiplicador será 34 x
A día de hoy, tanto INTEL como AMD han propuesto una tecnología que sustituye al FSB y que conecta
directamente la CPU con para memoria principal. Se llaman respectivamente “QPI (Quick Path
Interconnect)” e “Hyper-transport”.
De cara al examen debemos tener en cuenta ambas tecnologías, es decir tanto en la configuración
clásica del FSB cómo el QPI de Intel y el Hyper-transport de AMD ya que ambos conviven actualmente.
Otros ejemplos de esta convivencia de cosas nuevas con viejas podemos encontrarla también en la
BIOS/UEFI, MBR/GPT, etc. (vistos en otros temas)
Por otro lado, tenemos el “BSB (Back side bus)” a través del cual se conectan las memorias caché. Las
cachés sirven para mejorar el rendimiento y tener acceso a la información rápidamente. La cache de L1
que se divide en datos e instrucciones la podemos encontrar en la CPU (dentro físicamente de los
CORES) y las L2 y L3 pueden a veces estar dentro o fuera de esta, dependiendo de la arquitectura de la
CPU.
Ficha 7
Existen dos arquitecturas de CPU: arquitecturas “RISK y CISC”. En ambos casos el juego de instrucciones
es diferente, el de RISK es más reducido y éstas son más simples, son instrucciones que siguen el modelo
“local storage” y son poco complejas. En cambio, en CISC estamos en el caso contrario.
RISK son las siglas de: “Reduced Instruction Set Computing” o computación con un conjunto de
instrucciones reducido y CISC son las siglas de “Complex Instruction Set Computing”, estas últimas
internamente hacen muchas cosas y más complejas que las otras. Es por tanto una forma de clasificar
los conjuntos de instrucciones utilizados por los diferentes procesadores.
La traducción de instrucción de más alto nivel en las CISC es más suave en cambio compilar lenguajes de
alto nivel a cosas tan chiquititas como en las RISK es un poco más complicado.
Pero, ¿Que persigue RISC? La necesidad de bajo consumo por ejemplo móviles y tabletas.
La realidad del mercado es que hay procesadores híbridos con lo bueno de una arquitectura y de la otra,
pero cada 1 tiene su tendencia.
Con respecto a la lógica que tiene dentro, encontramos que hay 2 esquemas, la lógica programada (por
tanto, se pude actualizar, por ejemplo, haciendo un “upgrade” a la BIOS) de las CISC y la lógica cableada
de las RISC.
Página 3|6
B2 T1 – INFORMATICA BASICA
Video de las lecciones: 2 Arquitectura de la CPU (1:54:09)
En la cableada hacemos una CPU a base de circuitería (transistores), como las instrucciones son más
simples y reducidas construir la circuitería de los registros es relativamente simple. En cambio, en la
lógica programada (la que vemos en el gráfico) parte todo de una instrucción.
Si partimos de una instrucción de código máquina qué entiende el procesador, encontramos que en
toda instrucción hay un trozo que se llama “OPCODE” que es como una etiqueta, un identificador único
de esa instrucción (como una “Primary Key”). Cuando el decodificador recibe una instrucción con ese
“OPCODE” busca en una memoria ROM de la “Unidad de Control (UC)” dónde está la definición de esa
instrucción.
Lo que existe en esa ROM son bloques de instrucciones con un principio y un final, es básicamente un
catálogo de instrucciones que lo que hace es verificar dónde empiezan y terminan estas y las ejecuta.
Ese bloque de instrucciones (desde donde empieza hasta donde termina) se llama “microinstrucciones”
y son ejecutadas en un orden, es decir son los pasos que hay que dar para, por ejemplo, hacer una “MUL
(multiplicación)” y cada pasito que da la “MUL” serían todas las “microinstrucciones” que hay que
ejecutar (Ej. 18x2 2x8=16 me quedo con el 6 y me llevo 1, 2x1=2 más la que me llevo seria 3 total=36)
En el diagrama clásico el “secuenciador” una vez que recibía la instrucción y reconoce como ejecutarla,
activa las señales eléctricas de toda la circuitería correspondiente (ej. Activa la ALU, la MEM, etc.).
Esto quiere decir que a una instrucción le corresponden “N*x” de microinstrucciones que se encuentran
en la ROM de la UC (Unit Control).
Un procesador de tipo CISC, puede ser "updated" y toda su complejidad de instrucciones, que se trocean
en muchas microinstrucciones más pequeñas pueden ser actualizadas. Dentro de la ROM existe un
programa (A.K.A. Firmware) y no cables, por ejemplo, una BIOS, es decir hay un software con
instrucciones dentro que puede ser actualizado.
Google: apt-get install microcode ==> how to install/update Intel microcode firmware in Linux:
https://cyberciti.biz/faq/install-update-microcode-firmware-linux
En RISC en cambio no hay nada de esto, porque es cableado, son piezas físicamente hablando. Su
arquitectura está orientado a hacer cosas más sencillas no con memoria sino con registros.
Ficha 8
Con respecto a la arquitectura "multicore", es decir, los procesadores con múltiples CORES (2, 4, 8 o los
que sean) lo interesante es que en las primeras versiones de esas CPUs las memorias Caches aparecían
fuera de ella. A día de hoy las tenemos asociadas a cada CORE, están las caches de L1 (level 1) que
manejan a su vez dos caches internamente, una de instrucciones y otro de datos (las instrucciones son
"que hacer" y el dato es "con qué hacerlo") y luego también asociadas a ese CORE las llamadas L2 (level
2) y luego a nivel de la propia CPU independientemente de los Cores existen las L3 (level 3) así como un
Página 4|6
B2 T1 – INFORMATICA BASICA
Video de las lecciones: 2 Arquitectura de la CPU (1:54:09)
controlador de memoria conectado directamente a la memoria a través del “QPI” en el caso de Intel o el
“hyper-transport” en el de AMD.
Con respecto a la virtualización existen dos mecanismos o ramas, a nivel profesional que serían las de
"Tipo 1" y las de nivel doméstico del "tipo 2".
Ahora bien, para poder virtualizar no vale cualquier CPU, esta debe conocer o tener una extensión o
"feature" especial que se conoce como: “VT-x” en Intel y “AMD-V” en AMD. A veces estas "features" se
encuentran en la propia CPU activado directamente de serie y otras sobre todo ordenadores que son un
poco más antiguos había que activarlas en la BIOS.
El software de virtualización nos permite compartir los recursos físicos del hardware.
¡OJO! tenemos que conocer que productos de virtualización existen, si son gratuitos o por el contrario si
son propietarios, etc.
En la línea de virtualización de tipo 2, tenemos el "Hypervisor" que es un software que se ejecuta sobre
un SO para ofrecernos la funcionalidad de virtualización. Alguno de los Hypervisores más utilizados son:
Virtual Vox de Oracle, Workstation de VMware, QEMU, Virtual PC de Microsoft, Hiper-V ahora en
Windows 10, Paralles, etc.
Sin embargo, los de tipo 1 pueden instalarse directamente sobre el hardware ("baremetal"), como por
ejemplo el ESX de VMware que hace las veces del SO + Hypervisor en una sola capa mucho más
optimizada. De esta manera nos ahorramos la primera capa ocupada por el SO y podemos aprovechar
más el uso del hardware. Lo que se persigue es optimizar mucho más los recursos, es decir la gestión del
hardware puede ser explotada de una manera mucho más significativa.
ver: https://jsitech1.gitbooks.io/meet-docker/content/docker-
containers-vms.png
Lo que hacemos es “empaquetar o enjaular”, es decir aislar las aplicaciones y compartir el sistema
operativo y cuando es necesario binarios, librerías, etc.
Una limitación de esta nueva filosofía podría ser que solo se maneja un SO que es el que soporta los
contenedores asi que en caso de caída de este todo caería. En el caso de las VM clásicas por ejemplo
puedes tener diferentes sistemas operativos independientes.
Los contenedores se puedan manejar, es decir, apagar, encender, desplegar, muy rápidamente. La
filosofía de los contenedores es que no contengan datos permanentes, es decir que solo sean
contenedores de servicios así los puedo parar y apagar cuando quiera rapidamente. No obstante, se les
Página 5|6
B2 T1 – INFORMATICA BASICA
Video de las lecciones: 2 Arquitectura de la CPU (1:54:09)
pueden atachar volúmenes de almacenamiento para conservar sus datos y compartirlos. Existe un
fichero donde se define la configuración de las imágenes incluido esto último, se llama “Dockerfile”.
En Linux podemos securizar un proceso. Imagina que a un proceso le da por ejemplo por consumir
memoria, pues existe un comando llamado "ulimit" que limita la cantidad de recursos que se pueden
utilizar. Los límites se establecen por cada usuario, pero se aplica por separado y a cada proceso que
ejecuta. Tenemos otra herramienta: “cgroups” que más o menos sirve para enjaular un proceso.
Kubernetes (y otras herramientas que le están haciendo sombra): Se utiliza para la gestión de
contenedores, es decir cuando ya tienes muchos contenedores y aunque podemos hacer una gestión
básica por línea de comandos si quisiéramos llevar a cabo una gestión de alto nivel, un escalado, una
monitorización y despliegue o similares distribuido tendríamos que usar este tipo de herramientas, es
decir, Kubernetes o en Red Hat OpenShift y OpenStack (echar un vistazo)
LAB: Instalar Docker en UBUNTU (1:35:00 del video). Ojo, tenemos un LAB en GitHub
Para el examen tenemos que conocer el fichero: "Dockerfile" conocer su sintaxis y estructura. Partiendo
de este fichero vamos añadiendo sentencias para construir una “imagen” que es un empaquetado de
una aplicación en disco para Docker. Cuando esa aplicación se pone a correr se llama "contenedor". Es
decir, un "contenedor" es una "imagen" en ejecución.
Google: dockerfile from ==> best practice for writing a docker file
Docker Compose: ¿qué es? ¿Cuál es su filosofía? Docker Compose es una herramienta para definir y
ejecutar aplicaciones Docker de varios contenedores. Con D. Compose, se usa un archivo YAML para
configurar los servicios de una aplicación. Luego, con un solo comando, crea e inicia todos los servicios
desde su configuración
Linux: apt-get Vs wget ==> wget= world wide web GET, es decir, obtener archivos desde www. Son
herramientas distintas
Página 6|6