Guía exhaustiva de la arquitectura IBM i: TIMI, almacenamiento, objetos, procesadores, memoria, compilación, particiones lógicas, alta disponibilidad e IPL.
Este es el concepto más importante para entender la longevidad de la plataforma.
El TIMI es una capa de aproximadamente 430 instrucciones de máquina virtual independiente del hardware real. Cuando compilás un programa RPG o COBOL, el compilador genera un MI Program Template — código intermedio TIMI, no código nativo. Este template se almacena dentro del objeto *PGM.
Cuando el programa se ejecuta por primera vez (o después de un cambio de hardware), el componente Translator del SLIC convierte las instrucciones TIMI en código nativo POWER. Este código nativo se cachea dentro del objeto, pero puede regenerarse en cualquier momento. Por eso IBM pudo migrar de CISC → RISC → POWER sin romper ningún programa.
Flujo de vida de un programa
Fuente RPG/COBOL
código fuente
Compilador ILE
CRTBNDRPG
MI Template
instrucciones TIMI
Translator
SLIC → nativo
Código POWER
ejecución real
Cada programa compilado en IBM i almacena ambas representaciones:
MI Program Template
Instrucciones TIMI portables. Permanentes e inmutables. Es la "fuente" real del ejecutable. Garantiza portabilidad entre generaciones de hardware.
Observable (código nativo)
Código POWER nativo generado por el Translator. Cache descartable. Se regenera automáticamente al migrar hardware o con STROBJCVN.
En x86, tenés una clara separación entre RAM y disco. Los programas deben manejar explícitamente la carga de datos desde disco a memoria. En IBM i, la RAM y el disco se ven como un único espacio de direcciones de 128 bits.
x86 tradicional
IBM i — Single-Level Storage
Cuando un programa referencia un objeto (por ejemplo, abre un archivo), no hay una operación de "carga desde disco". El objeto ya tiene una dirección en el espacio unificado. El hardware y el SLIC se encargan de traerlo a RAM si no está ahí (page fault), exactamente como funciona la memoria virtual en x86, pero extendido a todo el almacenamiento.
IBM i usa internamente punteros de 128 bits (16 bytes), llamados System Pointers. Cada puntero contiene:
Tag bit
1 bit
Identifica como puntero válido
Tipo de objeto
7 bits
*PGM, *FILE, *USRPRF…
Segmento
64 bits
Identifica el objeto
Offset
56 bits
Posición dentro del objeto
A partir de V5R1, IBM i introdujo Teraspace, un modelo de memoria plana de hasta 1 TB por proceso. Esto complementa el modelo original de 16 MB por segmento (Single-Level Storage), permitiendo a programas ILE usar punteros de espacio plano tipo C/C++ más familiares.
En IBM i, absolutamente todo es un objeto tipado encapsulado: programas, archivos, colas de mensajes, perfiles de usuario, bibliotecas, dispositivos, hasta las descripciones de trabajo. Cada objeto tiene:
* — hay más de 100 tipos*PGM puede ser RPGLE, CLLE, CBL)Tipos de objetos comunes:
*PGMPrograma ejecutable
*SRVPGMPrograma de servicio (shared lib)
*MODULEMódulo compilado (no ejecutable solo)
*FILEArchivo/Tabla DB
*LIBBiblioteca
*USRPRFPerfil de usuario
*DTAARAÁrea de datos
*MSGQCola de mensajes
*JOBDDescripción de trabajo
*CMDDefinición de comando
*DTAQCola de datos
*USRSPCEspacio de usuario
*OUTQCola de salida (impresión)
*DEVDDescripción de dispositivo
*SBSDDescripción de subsistema
*BNDDIRDirectorio de binding
Todo objeto en IBM i tiene una estructura interna consistente:
IBM i implementa un mecanismo de seguridad a nivel de hardware llamado tagged storage. Cada byte de memoria tiene un bit de tag adicional que indica si contiene un puntero válido del sistema.
x86 — Sin tags
IBM i — Tagged Storage
Esto significa que un programa no puede acceder a un objeto para el que no tiene un puntero válido otorgado por el sistema. Es una capa de seguridad por hardware que no existe en x86 y que hace a IBM i inherentemente más resistente a ciertas categorías de ataques.
Los servidores IBM i corren exclusivamente en procesadores IBM POWER(Performance Optimization With Enhanced RISC). La generación actual es POWER10, fabricado en 7nm.
IBM i divide la memoria disponible en pools (piletas). Cada pool es una porción de RAM reservada para un propósito. Esto evita que un proceso o subsistema acapare toda la memoria.
Memoria total del sistema (ej. 64 GB)
*MACHINE8 GB
Pool de máquina — SLIC y kernel
*BASE32 GB
Pool base — trabajos sin pool específico
*INTERACT16 GB
Pool interactivo — sesiones 5250
*SPOOL8 GB
Pool de spool — trabajos de impresión
Además se pueden crear pools privados (pool 1-64) para subsistemas específicos.
El indicador clave de performance en IBM i es fault rate — cuántas veces por segundo el sistema necesita traer páginas desde disco porque no estaban en RAM. Se monitorea con:
WRKSYSSTS Ver estado del sistema, pools y fault rates WRKSHRPOOL Trabajar con shared pools CHGSHRPOOL Cambiar tamaño/actividad de un pool WRKDSKSTS Ver estado de los discos (I/O wait)
El almacenamiento en IBM i se organiza en ASPs — agrupaciones lógicas de discos. Es el equivalente a LVM (Logical Volume Manager) en Linux, pero integrado en el SO.
System ASP
Siempre existe. Contiene el SO, todas las bibliotecas del sistema, y los objetos del usuario que no estén explícitamente en otro ASP. Equivalente al volumen raíz en Linux.
User ASPs (básicos)
ASPs opcionales para separar datos de usuario del sistema. Si un user ASP se llena o falla, no afecta al System ASP. Se acceden mediante la library list.
IASPs (Independent ASPs)
Pools independientes que pueden desconectarse y reconectarse en otro sistema. Son la base de la alta disponibilidad (switchover/failover). Contienen su propio namespace de bibliotecas y pueden replicarse geográficamente.
El modelo ILE (Integrated Language Environment) define un proceso de compilación en dos fases que permite combinar módulos escritos en diferentes lenguajes.
Pipeline de compilación ILE
Fase 1 — Compilación a módulo
Fuente RPG
→ CRTRPGMOD →
*MODULE RPG
Fuente CL
→ CRTCLMOD →
*MODULE CL
Fuente C
→ CRTCMOD →
*MODULE C
Fase 2 — Binding (enlazado)
CRTPGM
Combina módulos → *PGM
Ejecutable directo con CALL
CRTSRVPGM
Combina módulos → *SRVPGM
Biblioteca compartida (≈ .so / .dll)
También existen comandos "one-step" que combinan ambas fases:
CRTBNDRPGCompila RPG + bind en un paso → *PGM
CRTBNDCLCompila CL + bind en un paso → *PGM
CRTBNDCCompila C + bind en un paso → *PGM
Un *BNDDIR es una lista de módulos y service programs que el binder puede resolver automáticamente. Es el equivalente al -L / -l de gcc o al LD_LIBRARY_PATH.
LPAR (Logical PARtition) permite dividir un único servidor físico IBM Power en múltiples "servidores virtuales" independientes. Cada LPAR tiene su propio SO, memoria, procesadores, almacenamiento y red. Las LPARs están completamente aisladas entre sí.
Servidor físico IBM Power (ej: S1024)
LPAR 1
IBM i 7.5
Producción
LPAR 2
IBM i 7.5
Desarrollo
LPAR 3
AIX 7.3 / Linux
VIOS
PowerVM Hypervisor (en firmware — no es software instalable)
DLPAR permite agregar o quitar CPU, memoria y adaptadores de I/O a una LPAR en caliente, sin detener el SO. Esto se hace desde la HMC y los cambios son inmediatos.
PowerVM permite asignar fracciones de procesador tan pequeñas como 1/100 de un core (0.01 CPU). Esto se llama Shared Processor Pool.
Dedicated processors
Cores físicos asignados exclusivamente a la LPAR. Predecible. Ideal para producción con carga constante.
Shared processors
Virtual processors despachados por el hypervisor desde un pool compartido. Configurables como capped (límite fijo) o uncapped(puede tomar CPU libre del pool).
El VIOS es una LPAR especial que corre AIX y actúa como intermediario para virtualizar recursos de I/O (discos y red). Permite que LPARs que no tienen adaptadores físicos propios accedan a almacenamiento y red.
LPAR Producción
Discos virtuales (vSCSI)
Red virtual (vNIC)
LPAR Desarrollo
Discos virtuales (vSCSI)
Red virtual (vNIC)
LPAR Test
Discos virtuales (vSCSI)
Red virtual (vNIC)
VIOS (Virtual I/O Server)
AIX — Adaptadores físicos de disco (SAS/FC) y red (Ethernet)
SAN / Storage
Red física
La HMC es una máquina (o VM) separada que corre Linux y se conecta al servidor Power para administrar particiones. Desde la HMC podés:
Las HMC modernas también ofrecen una REST API para automatización, y existe la opción de HMC Virtual Appliance (vHMC) que corre como VM en lugar de requerir hardware dedicado.
En IBM i, el proceso de arranque se llama IPL (Initial Program Load). No se dice "reboot" sino "hacer un IPL". Es un proceso significativamente más complejo que un boot de Linux porque el sistema reconstruye estructuras internas.
IPL Normal
PWRDWNSYS RESTART(*YES)Apagado controlado + arranque. Equivalente a shutdown -r. Toma 5-30 minutos según el sistema.
IPL Anormal
Power button / crashArranque después de un apagado no controlado. El sistema ejecuta recovery automático (journaling replay). Puede tomar más tiempo.
IPL tipo A
DST/IPL de servicioArranca desde copia alternativa del SLIC. Usado por soporte IBM para diagnosticar problemas de SO.
IPL tipo B
NormalArranca desde la copia primaria del SLIC. Es el modo normal de operación.
Secuencia de arranque
El journaling de IBM i es equivalente al Write-Ahead Log (WAL) de PostgreSQL o al redo log de Oracle. Cada cambio a un archivo/tabla se registra primero en un journal receiver antes de aplicarse.
Flujo de journaling
Aplicación
INSERT/UPDATE
Journal
*JRN objeto
Receiver
*JRNRCV
Tabla
*FILE / PF
El journaling sirve para múltiples propósitos:
IBM i soporta transacciones ACID completas a nivel de SO (no solo de la base de datos). Un commit point puede abarcar múltiples archivos, data areas, y hasta colas de datos.
IBM PowerHA (ISHA)
Clustering nativo de IBM. Switchover de IASPs entre nodos. Puede ser automático o manual.
MIMIX (Precisely)
Replicación basada en journals en tiempo real. El más popular para HA en IBM i.
iCluster (Assure)
Replicación journal-based de Precisely (antes Syncsort/HelpSystems). Replicación de objetos y datos.
Quick-EDD (Assure)
Replicación HA/DR completa: datos, objetos, IFS, config. Rápida instalación y bajo impacto.
Los System Values son los parámetros de configuración global del sistema. En x86 serían equivalentes a una combinación de sysctl, /etc/security y Group Policy. Hay más de 200.
QSECURITYNivel de seguridad del sistema40 (recomendado)QCCSIDCoded Character Set ID (encoding)65535 o 37 (EBCDIC)QMAXSIGNIntentos de login antes de desactivar5QPWDEXPITVDías para expiración de contraseña90QMAXSGNACNAcción al superar intentos de login3 (deshabilitar perfil)QATNPGMPrograma de atención (Ctrl+Attn)*ASSISTQINACTITVTimeout de inactividad (minutos)60QDATFMTFormato de fecha*DMYQTIMSEPSeparador de hora:QAUDCTLControl de auditoría*AUDLVL *OBJAUDDSPSYSVAL QSECURITY Ver el valor actual de QSECURITY
WRKSYSVAL *ALL Listar todos los system values
CHGSYSVAL QSECURITY VALUE('40') Cambiar nivel de seguridad
DSPSYSVAL *SEC Ver todos los de categoría seguridadEl modelo de licenciamiento de IBM i es único. Se basa en la capacidad del procesador, no en el número de usuarios o cores.
CPW es un benchmark propietario de IBM que mide la capacidad de procesamiento comercial (transacciones tipo ERP/negocio). Cada modelo de servidor tiene un CPW rating publicado.
IBM agrupa los servidores en P-Groups según su rango de CPW. El costo de licencia del SO y de productos IBM depende del P-Group del servidor.