# GIO

GIO es un estándar de bus de computadora desarrollado por SGI y utilizado en una variedad de sus productos en la década de 1990 como su principal sistema de expansión. El concepto de GIO era similar al de los estándares de la competencia, como NuBus o (más adelante) PCI, pero tuvo poco uso fuera de SGI, y, como resultado, limitó severamente los dispositivos disponibles en su plataforma. La mayoría de los dispositivos que utilizan GIO eran tarjetas gráficas propias de SGI, aunque una serie de tarjetas que admitían acceso a datos de alta velocidad, como Fibre Channel y FDDI, estaban disponibles a través de terceros. Las máquinas SGI posteriores utilizan el bus XIO, que se presenta como una red informática en lugar de un bus.

## Descripción

Como la mayoría de los buses de la época, GIO era un bus multiplexado de datos y direcciones de 32 bits que normalmente tenía una frecuencia de 25 o 33 MHz. Esto significa que el bus utiliza la misma ruta para direccionamiento y datos, por lo que normalmente requiere tres ciclos para transferir un solo valor de 32 bits; un ciclo para enviar la dirección, el siguiente para enviar los datos y luego otro para leerlos o escribirlos. Esto limitó el bus a un rendimiento máximo de aproximadamente 16 MB/s a 33 MHz para este tipo de pequeñas transferencias. Sin embargo, el sistema también incluía un modo de lectura/escritura de ráfaga larga que permitía transferencias continuas de hasta 4 kB de datos (el tamaño de página fundamental en máquinas SGI basadas en R3000); El uso de este modo aumentó drásticamente el rendimiento a 132 MB/s (32 bits por ciclo*33 MHz). GIO también incluyó una interrupción "en tiempo real" que permite a los dispositivos interrumpir estas transferencias largas si es necesario. El arbitraje de bus fue controlado por el Controlador de interfaz del procesador (PIC) en los sistemas originales SGI Indigo basados en R3000.
Físicamente, GIO usó un conector de 96 pines y tarjetas bastante pequeñas (alrededor de 16.3 cm de largo por 8.5 cm de ancho). En la serie Indigo, las tarjetas se alinean verticalmente una sobre otra dentro de la carcasa, en oposición a la disposición más común donde las tarjetas se encuentran en ángulo recto con la placa base. Esto condujo a un diseño de caja "alto y delgado". Dado que las tarjetas estaban "encima" una de la otra en línea, fue posible construir una tarjeta que se conectara a ambos conectores en la placa base de la computadora, ofreciendo así más espacio.

## GIO64

Más tarde, GIO se expandió a una forma de 64 bits, GIO64, cambiando retroactivamente el nombre de la versión anterior GIO32. El direccionamiento permaneció en 32 bits, pero ahora permitía tanto el direccionamiento big-endian como el little-endian como lo indica un nuevo pin de control, mientras que GIO32 solo era compatible con las direcciones big-endian de estilo SGI. Los datos ahora se pueden transferir a 64 bits a la vez, duplicando así la velocidad. GIO64 también podría ejecutarse más rápido que GIO32, hasta 40 MHz, que proporciona un rendimiento de transmisión máximo de 320 MB/s. Los tamaños de página también se ajustaron para permitir el cambio de las CPU, comenzando en 4 kB para máquinas basadas en R3000 y hasta 16 MB para las basadas en R4400.
Físicamente, el bus GIO64 usó tarjetas mucho más grandes que generalmente eran similares en tamaño y diseño a las tarjetas EISA, una elección deliberada que facilitó el desarrollo y permitió que SGI coloque ranuras EISA en las mismas máquinas. Específicamente, el conector externo (la brida metálica) era idéntico a EISA, pero la forma de la placa en sí era ligeramente diferente.
Se especificaron dos versiones de GIO64. El sistema "no canalizado" funcionaba de manera similar a GIO32, y las transferencias se configuraban directamente en el bus. El nuevo sistema "canalizado" era el que usaban las tarjetas reales, y como su nombre lo indica, el sistema configuró transferencias en una operación de varios pasos que fue decodificada en el canal interno del controlador. Internamente, el bus no canalizado transfiere datos entre las diversas partes de la computadora, incluidas las tarjetas GIO, los dispositivos EISA, SCSI, etc. Las tarjetas GIO utilizaron el controlador canalizado para arbitrar y controlar el reloj, y los datos alimentaron la memoria principal a través del lado interno no canalizado.

## GIO32-bis

Un tercer estándar, GIO32-bis, utilizaba las señales y la sincronización de GIO64, pero con los conectores de 32 bits de GIO32. Las tarjetas GIO32-bis diseñadas correctamente se podrían usar en las ranuras GIO64, GIO32 o GIO32-bis, diferenciando las dos últimas al mirar un pin atado a tierra en el GIO32 original y atado "alto" en GIO32-bis. Para las tarjetas de bajo rendimiento, GIO32-bis permitía utilizar un solo dispositivo en cualquier máquina compatible con GIO, sin importar la generación.