robot de la enciclopedia para niños

MIPS (procesador) para niños

Enciclopedia para niños
Archivo:Toshiba TC86R4400MC-200 9636YJA top
Un microprocesador MIPS R4400 fabricado por Toshiba.

MIPS es el nombre de una familia de microprocesadores. Un microprocesador es como el "cerebro" de un ordenador o de otros aparatos electrónicos. Los microprocesadores MIPS fueron creados por una empresa llamada MIPS Technologies. Son especiales porque usan una arquitectura llamada RISC, que significa que usan instrucciones más sencillas para trabajar más rápido.

Los diseños de MIPS se usan en muchos lugares. Por ejemplo, los encontrabas en las computadoras de SGI, en muchos sistemas electrónicos pequeños (como los que controlan electrodomésticos), en algunos dispositivos con Windows CE, en routers de Cisco y en videoconsolas muy populares como la Nintendo 64 y las Sony PlayStation, PlayStation 2 y PlayStation Portable. Incluso la NASA usó un procesador MIPS en la sonda espacial New Horizons para explorar el espacio.

Al principio, los procesadores MIPS trabajaban con 32 bits, lo que significa que podían manejar información en bloques de 32 "ceros" y "unos". Más tarde, se hicieron versiones de 64 bits, que son aún más potentes. Hay varias versiones de las instrucciones que MIPS puede entender, como MIPS I, MIPS II, MIPS III, MIPS IV y MIPS 32/64. También tienen "extensiones" que les permiten hacer tareas específicas, como gráficos 3D o manejar varias tareas al mismo tiempo.

Los procesadores MIPS son tan claros en su diseño que muchas universidades los usan para enseñar cómo funcionan los ordenadores. Su diseño también influyó en otros procesadores importantes, como los DEC Alpha.

Historia de los Procesadores MIPS

¿Cómo Empezó MIPS?

En 1981, un equipo de la Universidad de Stanford, liderado por John Hennessy, empezó a trabajar en el primer procesador MIPS. Su idea principal era hacer que los procesadores fueran mucho más rápidos usando una técnica llamada segmentación (o pipelining). Imagina que estás montando un coche: en lugar de esperar a que una persona termine de montar todo el coche, varias personas trabajan en diferentes partes al mismo tiempo. Así, el coche se monta más rápido.

En los procesadores, la segmentación divide el trabajo de una instrucción en varias etapas. Una etapa empieza antes de que la anterior haya terminado. Esto es diferente de los diseños antiguos, que esperaban a que una instrucción se completara del todo antes de empezar la siguiente. Con la segmentación, el procesador puede trabajar sin parar, lo que lo hace mucho más eficiente.

Un gran desafío de la segmentación era evitar que el procesador se "bloqueara" si una instrucción necesitaba esperar a otra. Los diseñadores de MIPS lograron que casi todas las etapas de las instrucciones se completaran en un solo ciclo de reloj. Esto eliminó la necesidad de bloqueos y permitió que los chips funcionaran a velocidades mucho más altas. Aunque esto significó que algunas operaciones complejas (como multiplicar o dividir) necesitaran varias instrucciones sencillas, el rendimiento general del sistema mejoró muchísimo.

De la Universidad a la Empresa

En 1984, John Hennessy vio el gran potencial de su diseño y dejó la universidad para fundar la empresa MIPS Computer Systems. En 1985, lanzaron su primer procesador, el R2000. Luego, en 1988, llegó el R3000. Estos procesadores de 32 bits fueron muy importantes en los años 80 y se usaron en estaciones de trabajo de SGI.

En 1991, MIPS lanzó su primer procesador de 64 bits, el R4000. Sin embargo, la empresa tuvo problemas económicos. Como el diseño era tan importante para SGI, que era uno de sus clientes principales, SGI compró MIPS Computer Systems en 1992. La empresa pasó a llamarse MIPS Technologies.

El Éxito de las Licencias

A principios de los años 90, MIPS empezó a permitir que otras empresas usaran sus diseños a cambio de una licencia. Esto fue un gran éxito porque los diseños de MIPS eran sencillos y eficientes. Muchas empresas los usaron en productos que antes usaban procesadores más complejos y menos potentes. A finales de los 90, los procesadores MIPS eran muy populares en los procesadores integrados (los que van dentro de otros aparatos). En 1997, se entregó el procesador MIPS número 48 millones, lo que demostró su gran éxito. Gracias a esto, SGI volvió a hacer de MIPS Technologies una empresa independiente en 1998. Hoy en día, gran parte de los ingresos de MIPS provienen de estas licencias.

En 1999, MIPS simplificó su sistema de licencias con dos diseños principales: el MIPS32 (de 32 bits) y el MIPS64 (de 64 bits). Empresas como NEC, Toshiba y Broadcom obtuvieron licencias. Los núcleos MIPS son muy usados en dispositivos como computadoras de mano, decodificadores de TV y sintonizadores. Incluso Freescale (una empresa de Motorola) usa procesadores MIPS en algunos de sus aparatos.

Familia de Procesadores MIPS

Archivo:MIPS Architecture (Pipelined)
Esquema de la segmentación del MIPS.

El primer procesador MIPS comercial, el R2000, salió en 1985. Podía hacer multiplicaciones y divisiones en una parte separada del procesador. Tenía 32 registros (pequeños espacios de memoria para guardar datos) de 32 bits. También podía trabajar con diferentes formas de organizar los datos (big-endian o little-endian).

El R3000 llegó en 1988, mejorando al R2000. Añadió una memoria caché (una memoria muy rápida para guardar datos que se usan a menudo) de 32 KB, que luego se amplió a 64 KB. También podía trabajar con varios procesadores al mismo tiempo. El R3000 fue el primer diseño MIPS que tuvo mucho éxito en el mercado, vendiendo más de un millón de unidades. Una versión más rápida, el R3000A, se usó en la famosa Sony PlayStation.

En 1991, el R4000 extendió las instrucciones de MIPS para trabajar con 64 bits y puso la unidad de punto flotante (para cálculos con números decimales) en el mismo chip. Funcionaba a una velocidad mucho mayor (100 MHz). Después del R4000, salieron muchas versiones mejoradas, como el R4400 en 1993, con cachés más grandes.

MIPS también diseñó versiones más económicas, como el R4200 y el R4300. La Nintendo 64 usa un procesador NEC VR4300, que se basa en el diseño de bajo costo R4300i de MIPS.

Otras empresas también crearon procesadores MIPS. Por ejemplo, Quantum Effect Devices (QED) diseñó el R4600 y el R5000, que eran conocidos por sus cachés grandes y eficientes. Estos se usaron en estaciones de trabajo SGI Indy y en routers Cisco. El R4650 se usó en los primeros aparatos de WebTV.

El R8000 (1994) fue el primer diseño MIPS que podía ejecutar varias operaciones al mismo tiempo (superescalar). Era muy potente para cálculos científicos, pero también muy caro.

En 1995, se lanzó el R10000. Este procesador era un solo chip, más rápido que el R8000 y con cachés más grandes. Su gran novedad fue que podía ejecutar instrucciones "fuera de orden", lo que significa que no tenía que seguir el orden exacto de las instrucciones si podía hacerlas más rápido de otra manera. Esto lo hizo muy popular.

Los diseños más recientes se basan en el R10000, como el R12000, R14000 y R16000. Estos tienen velocidades de reloj más altas, cachés más grandes y son más pequeños.

Especificaciones de algunos procesadores MIPS
Modelo Frecuencia [MHz] Año Proceso [µm] Transistores [millones] Tamaño del chip [mm²] Pines E/S Potencia [W] Voltaje Caché de datos [k] Caché de instrucciones [k] Caché secundaria [k]
R2000 8-16,7 1985 2 0,11 -- -- -- -- 32 64 ninguna
R3000 12-40 1988 1,2 0,11 66,12 145 4 -- 64 64 ninguna
R4000 100 1991 0,8 1,35 213 179 15 5 8 8 1024
R4400 100-250 1992 0,6 2,3 186 179 15 5 16 16 1024
R4600 100-133 1994 0,64 2,2 77 179 4,6 5 16 16 512
R5000 150-200 1996 0,35 3,7 84 223 10 3,3 32 32 1024
R8000 75-90 1994 0,5 2,6 299 591 30 3,3 16 16 1024
R10000 150-250 1995 0,35 6,8 299 599 30 3,3 32 32 512
R12000 270-400 1998 0,18–0,25 6,9 204 600 20 4 32 32 1024
R14000 500-600 2001 0,13 7,2 204 527 17 -- 32 32 2048
R16000 700-800 2002 0,11 -- -- -- 20 -- 64 64 4096

Nota: Estas especificaciones son de las configuraciones más comunes. Hay otras variaciones.

¿Dónde se Usan los Procesadores MIPS?

Uso en Estaciones de Trabajo

Al principio, los procesadores MIPS se usaban en estaciones de trabajo (computadoras potentes para profesionales) de empresas como SGI, MIPS Computer Systems, Inc., Olivetti y NEC. Varios sistemas operativos (como el cerebro principal de la computadora) funcionaban con MIPS, incluyendo SGI IRIX, Microsoft Windows NT (aunque ya no lo soporta), Windows CE, Linux y UNIX.

Sin embargo, el uso de MIPS en estaciones de trabajo ha disminuido. SGI, por ejemplo, decidió usar procesadores de Intel en sus computadoras más nuevas.

Uso en Sistemas Integrados

A pesar de esto, los microprocesadores MIPS siguen siendo muy importantes en los sistemas integrados. Estos son sistemas electrónicos pequeños que realizan tareas específicas, como los que se encuentran en routers, impresoras o decodificadores de TV. Los procesadores MIPS son ideales para esto porque consumen poca energía y son fáciles de usar para los desarrolladores.

Otros Modelos y el Futuro de MIPS

Otro miembro de la familia MIPS fue el R6000, que introdujo un nuevo conjunto de instrucciones (MIPS II). Sin embargo, no tuvo el éxito esperado. El PMC-Sierra RM7000 fue una versión del R5000 con una caché de nivel 2 integrada, diseñada para sistemas integrados y soluciones de red de Cisco.

SGI intentó en un momento cambiar de MIPS a los procesadores Intel Itanium, pero debido a retrasos, los procesadores MIPS siguieron siendo importantes. Por eso, se lanzaron versiones mejoradas como el R14000 y el R16000. Aunque SGI consideró hacer procesadores MIPS de doble núcleo, problemas financieros y el uso de otras tecnologías hicieron que el desarrollo de hardware IRIX/MIPS se detuviera.

Loongson

Loongson es una familia de microprocesadores diseñada en China por la Academia China de Ciencias. Aunque su diseño interno es propio, al principio les faltaban algunas instrucciones patentadas por MIPS Technologies. Sin embargo, en 2009, obtuvieron licencias de MIPS32 y MIPS64 directamente de MIPS Technologies.

Desde 2006, varias empresas han usado los procesadores Loongson en productos como computadoras de escritorio pequeñas y laptops de bajo consumo.

Núcleos MIPS

Hoy en día, gran parte de la tecnología MIPS se ofrece como "IP-cores" (bloques de construcción) para sistemas integrados. Esto significa que otras empresas pueden comprar la licencia para usar los diseños básicos de MIPS (conocidos como 4K para 32 bits y 5K para 64 bits) y combinarlos con otras unidades, como las que manejan cálculos decimales o entrada/salida.

Los núcleos MIPS son muy exitosos en la industria y en productos de consumo. Se encuentran en muchos routers modernos de Cisco, TP-Link y Linksys, en módems de cable y ADSL, tarjetas inteligentes, controladoras de impresoras láser, decodificadores de TV, robots, computadoras de mano, y en las consolas Sony PlayStation 2 y Sony PlayStation Portable.

Sin embargo, en el mundo de los teléfonos móviles y las PDAs, los núcleos MIPS no lograron superar a su competidor, la arquitectura ARM.

Programación y Emulación de MIPS

Para aprender a programar con MIPS, existen varios simuladores que permiten a los estudiantes practicar sin necesidad de tener un procesador MIPS real.

  • SPIM es un simulador gratuito de MIPS R2000/R3000. Es muy útil para aprender a programar en lenguaje ensamblador MIPS y entender cómo funcionan los procesadores RISC. Puedes encontrarlo en [1].
  • MARS (MIPS Assembler and Runtime Simulator) es otro simulador popular. Es un entorno de desarrollo fácil de usar, escrito en Java, que ayuda a programar MIPS en lenguaje ensamblador.
  • GXemul (antes conocido como Proyecto mips64emul) es un emulador más completo. No solo simula diferentes versiones de procesadores MIPS (desde el R4000 hasta el R10000), sino también sistemas completos que usan esos procesadores. Por ejemplo, puede simular una DECstation o una SGI O2.
  • El software QEMU también puede emular la arquitectura MIPS, permitiendo ejecutar sistemas operativos como GNU/Linux en una máquina simulada.
  • Los simuladores CREATOR y WepSIM son herramientas educativas que se pueden usar para aprender a programar en MIPS y entender cómo funciona una CPU. WepSIM incluso se puede usar desde un navegador web.

Resumen de Llamadas al Sistema

Una "llamada al sistema" es cuando un programa le pide un servicio al sistema operativo. Por ejemplo, para mostrar algo en la pantalla o leer lo que escribes en el teclado.

Antes de pedir el servicio, el programa debe indicar qué servicio quiere usando un código especial en un "registro" (un espacio de memoria temporal en el procesador) llamado $v0. También debe poner la información necesaria en otros registros.

Aquí tienes algunos ejemplos de servicios comunes que se usan en simuladores como SPIM, MARS, CREATOR o WepSIM:

Ejemplos de llamadas al sistema usadas en SPIM
Servicio Código Entrada Salida Notas
print_int $v0=1 $a0= número entero a imprimir Imprime el número en la pantalla
print_float $v0=2 $f12= número decimal a imprimir Imprime el número decimal en la pantalla
print_double $v0=3 $f12= número decimal grande a imprimir Imprime el número decimal grande en la pantalla
print_string $v0=4 $a0= dirección del primer carácter Imprime un texto en la pantalla
read_int $v0=5 Lee un número entero del teclado y lo guarda en $v0
read_float $v0=6 Lee un número decimal del teclado y lo guarda en $v0
read_double $v0=7 Lee un número decimal grande del teclado y lo guarda en $v0
read_string $v0=8 $a0 = dirección del espacio, $a1= tamaño del espacio Lee un texto del teclado y lo guarda en un espacio de memoria
sbrk $v0=9 $a0= cantidad de bytes necesarios Deja en $v0 la dirección de memoria reservada Reserva espacio en la memoria
exit $v0=10 Termina el programa

Resumen de las Instrucciones del R3000

Las instrucciones en MIPS se dividen en tres tipos: R, I y J. Todas las instrucciones comienzan con un "código de operación" de 6 bits, que le dice al procesador qué tipo de acción debe realizar.

  • Las instrucciones tipo R (Registro) se usan para operaciones entre registros.
  • Las instrucciones tipo I (Inmediato) se usan para operaciones que incluyen un valor constante.
  • Las instrucciones tipo J (Salto) se usan para cambiar el flujo del programa, saltando a una nueva parte del código.

Registros del R3000

Los registros son como pequeñas cajas de almacenamiento dentro del procesador donde se guardan los datos que se están usando en ese momento. Cada registro tiene un nombre y un número. Algunos registros se "preservan" (su valor no cambia) cuando se llama a una subrutina (una parte del código que hace una tarea específica), y otros no.

Registros
Nombre Número Uso ¿Se guarda en subrutina llamada?
$zero $0 Siempre es 0
$at $1 Temporal para el ensamblador no
$v0–$v1 $2–$3 Valores que devuelven las funciones no
$a0–$a3 $4–$7 Argumentos que se pasan a las subrutinas no
$t0–$t7 $8–$15 Temporales (no se guardan) no
$s0–$s7 $16–$23 Temporales (se guardan)
$t8–$t9 $24–$25 Temporales no
$k0–$k1 $26–$27 Reservados para el sistema operativo no
$gp $28 Puntero global
$sp $29 Puntero de pila (para organizar la memoria)
$fp $30 Puntero de marco de pila
$ra $31 Dirección de retorno (a dónde volver después de una función) no

Instrucciones Básicas

Aquí hay algunos ejemplos de instrucciones que el procesador MIPS puede ejecutar directamente:

Categoría Nombre Ejemplo de Uso Qué Hace
Aritméticas Suma add $1,$2,$3 $1 = $2 + $3 (suma dos registros)
Resta sub $1,$2,$3 $1 = $2 - $3 (resta dos registros)
Suma inmediata addi $1,$2,CONST $1 = $2 + CONST (suma un número constante)
Multiplicación mult $1,$2 Multiplica dos registros y guarda el resultado en registros especiales (HI y LO).
División div $1, $2 Divide dos registros y guarda el resultado entero en LO y el resto en HI.
Transferencia de datos Carga de dirección la $1, Etiqueta $1 = Dirección de memoria de una etiqueta.
Carga de palabra lw $1,CONST($2) $1 = Carga un bloque de 4 bytes de la memoria.
Carga de byte lb $1,CONST($2) $1 = Carga 1 byte de la memoria.
Almacenamiento de palabra sw $1,CONST($2) Guarda un bloque de 4 bytes en la memoria.
Almacenamiento de byte sb $1,CONST($2) Guarda 1 byte en la memoria.
Carga del inmediato superior lui $1,CONST Carga un número constante en la parte superior de un registro.
Mover desde "low" mflo $1 Mueve el valor del registro LO (resultado de división/multiplicación) a un registro normal.
Lógicas And and $1,$2,$3 $1 = $2 Y $3 (operación lógica bit a bit)
Or or $1,$2,$3 $1 = $2 O $3 (operación lógica bit a bit)
Or exclusivo xor $1,$2,$3 $1 = $2 XOR $3 (operación lógica bit a bit)
Nor nor $1,$2,$3 $1 = NO ($2 O $3) (operación lógica bit a bit)
Inicializar si menor que slt $1,$2,$3 $1 = 1 si $2 es menor que $3, si no 0.
Inicializar si menor que con inmediato slti $1,$2,CONST $1 = 1 si $2 es menor que CONST, si no 0.
Desplazamiento de bits Desplazamiento lógico a la izquierda sll $1,$2,CONST $1 = $2 movido CONST bits a la izquierda (multiplica por potencias de 2).
Desplazamiento lógico a la derecha srl $1,$2,CONST $1 = $2 movido CONST bits a la derecha (divide por potencias de 2, rellenando con ceros).
Desplazamiento aritmético a la derecha sra $1,$2,CONST $1 = $2 movido CONST bits a la derecha (divide por potencias de 2, manteniendo el signo).
Saltos condicionales Salto si igual beq $1,$2,CONST Si $1 es igual a $2, salta a la dirección indicada.
Salto si no igual bne $1,$2,CONST Si $1 no es igual a $2, salta a la dirección indicada.
Salto incondicional Salto j CONST Salta siempre a la dirección indicada.
Salto a registro jr $1 Salta a la dirección guardada en el registro $1.
Salto y enlace jal CONST Guarda la dirección de retorno en $31 y salta a la dirección indicada (para llamar a funciones).

NOTA: En las instrucciones de saltos, CONST puede ser una "etiqueta" (un nombre para una parte del código).

Las "pseudoinstrucciones" son instrucciones que parecen una sola, pero el ensamblador (el programa que convierte el código en lenguaje de máquina) las traduce a varias instrucciones básicas antes de que el procesador las ejecute.

Nombre Ejemplo de Uso Qué Hace
Saltar si mayor que bgt $rs,$rt,Label Si el valor de $rs es mayor que el de $rt, salta a la "Label".
Saltar si menor que blt $rs,$rt,Label Si el valor de $rs es menor que el de $rt, salta a la "Label".
Saltar si mayor o igual que bge $rs,$rt,Label Si el valor de $rs es mayor o igual que el de $rt, salta a la "Label".
Saltar si menor o igual que ble $rs,$rt,Label Si el valor de $rs es menor o igual que el de $rt, salta a la "Label".
Saltar si igual a cero beqz $rs,Label Si el valor de $rs es cero, salta a la "Label".

Galería de imágenes

kids search engine
MIPS (procesador) para Niños. Enciclopedia Kiddle.