Архитектура IBM AS/400
Сегодня я хотел бы сказать несколько слов о такой малоизвестной у нас системе (компьютере и ОС) как IBM AS/400.
🕛 01.04.2009, 12:58
Архитектура AS/400 интересна в первую очередь своей оригинальностью - по сути, она не имеет ничего общего с другими разработками IBM - System/3xx, PC и т.д. Начало AS/400 было положено в конце 70-х годов, когда появилась System/38 (System/36). В чем же основная идея архитектуры AS/400?В первую очередь это отказ от ориентации на конкретную аппаратную платформу, что роднит эту систему с Java, хотя это сходство поверхностно. В отличие от Java, где основой являлась виртуальная машина - интерпретатор байткода, в AS/400 изначально был принят более эффективный подход - между железкой и программами находится прослойка, представляющая собой транслятор который перед выполнением программы переводит ее из промежуточного представления (SLIC - System Licensed Internal Code) в native код физического процессора (в современных моделях AS/400 это PowerPC, в старых - CISC процессоры). Мне могут возразить, что любая Java VM в наше время содержит JIT компилятор который на лету занимается примерно тем же, что и транслятор в AS/400. На это можно ответить вот что:
При создании Java VM набор инструкций разрабатывался исходя из расчета на интерпретацию. JIT компиляторы появились позднее, когда стало ясно что производительность интерпретатора не удовлетворяет запросам, что понятно - в шитом коде дополнительно на каждую инструкцию VM приходится как минимум ее выборка (эти проблемы можно легко наблюдать на примере языка Forth), не говоря уже о необходимости осуществлять на лету все проверки типа чтения/записи за границами переменных. Кроме того, часть функций которые принято считать высокоуровневыми (некоторые элементы обработки данных) в AS/400 реализованы на уровне SLIC (реализация SLIC по утверждению IBM - 3 млн строк кода, что говорит о его сложности). В Java VM же, виртуальные инструкции носят "элементарный" характер.
Сравнительно недавно IBM заявила о реализации Java на AS/400, подчеркивая эффективность этой реализации. Легко понять почему это так - по-видимому, JIT компилятор Java байткода в этом случае преобразует инструкции Java не в SLIC AS/400, а на прямую в код физического процессора. Таким образом (в теории) производительность Java приложений запускаемых на AS/400 не должна сильно отличаться от производительности "родных" приложений.
Другой интересной стороной архитектуры AS/400 является одноуровневая память (все устройства хранения адресуются одинаково, разницы между диском и ОЗУ нет). При этом адрес определяется 16-ю байтами.
Разумеется, как у всякой идеи, здесь есть свои недостатки. Производительность AS/400 на чисто вычислительных задачах (к которым сейчас относятся очень и очень многое) проигрывает чисто аппаратным решениям. В частности, я ни разу не видел сколько-нибудь внятных оценок производительности AS/400 по сравнению с другими системами. В то же время, архитектура позволяет организовывать многопроцессорные системы - как SMP так и MPP/кластеры. Применение AS/400 по большей части ограничено приложениями связанными с хранением и обработкой данных а также "коммерческими" расчетами.
Часть того о чем я сказал - результат анализа весьма отрывочных сведений по архитектуре AS/400. Фирма IBM открыто не распространяет никаких данных ни по устройству системы на низком уровне, ни по SLIC. В этой связи, мне интересны любые сведения и документация по этому вопросу.
В 1998 году в России вышла книга - Фрэнк Дж. Солтис "Основы AS/400", которая является переводом книги "Inside the AS/400", 2nd edition. Книга интересна, хотя и представляет собой жуткую смесь с резкими переходами от описания битов в заголовках объектов к пространным рассуждениям о работе подразделения IBM в Рочестере и архитектуре PowerPC. При этом некоторые интересные и значимые особенности архитектуры самой AS/400 тщательно обходятся стороной. Впрочем, это единственная книга которую я встречал по этой тематике в бумажном виде.