Pull to refresh

Comments 8

Расскажите, а откуда в принципе IBM i, почему эта система, и что на ней делаете?

Не понял Вашего вопроса "откуда в принципе IBM i". Из США, оттуда же, где фирма IBM )))

Почему у нас именно эта система сказать не могу. Она у нас с 90-х годов. На этой системе у нас работает ядро банка, мы разрабатываем и поддерживаем банковский софт, его back end.

Банк, понятно :-)

IBM i - платформа для коммерческих middleware серверов (на процессорах PowerS, не знаю, может и на других бывает). Достаочно распосранена на западе в банках, страховых компаниях etc.

Характерна тем, что там поставляется "все сразу в одной коробке" - все средства администрирования, интегрированная в систему база данныз DB2 с поддержкой как SQL, так и прямого доступа к данным, встроенные в систему компиляторы языков RPG, COBOL, C/C++, CL (командный язык системы, но на нем и программы писать можно).

Оринтирована на многопроцессный режим работы (одновременная работа множества заданий - jobs, интерактивных - терминальные сессии или фоновых - batch). Внутри система построена таким образом, что накладные расходы на переключение контекста задания сведены практически к нулю. Возможно, одним из способов для того является использование одноуровневой памяти не требующей перезагрузки сегментных регистров (размерость указаьеля в системе составляет 128 бит и кроме собственно указателя содержить еще некоторую служебную информацию). Как следствеие - очень высокая производительность именно в таком режиме - многопроцессном.

Принципы построения системы не похожи ни на что другое. Она "объектная" - там "все есть объект", который характризуется именем, типом (одним из множества предопределенных) и дополнительный атрибутами внутри типа. Для каждого объекта допустим только тот набор действий, который определен для данного типа (так, например, нельзя что-то изменить для объекта типа *PGM - программа - для этого типа не предусмотрена опреция изменения).

В целом, система специфична, но имеент очень много достаточно интересных свойств с точки зрения разработчика. Например, концепция ILE - интегрированная языковая среда. В двух словах это значит что можно написать несколько модулей на разных языках (из моддерживаемых системой) и собрать их в одну программу. Т.е. те функции, которые удобнее писать на RPG, пишем на RPG. То, что удобнее на С/С++ - пишем на С/С++. А потом собираем в одну программу и вызываем сишные функции из рпгшных и наоборот.

В РФ не сильком популярна, возможно по причине дороговизны, да и разработчиков под нее не так много. Но знаю что несоклько банков на ней работают, возможно еще какие-нибудь крупные конторы.

В целом - быстро, стабильно, надежно. Но требует достаточно глубокого вникания.

Спасибо за расказ.

Сегментные регистры — это что-то из мира x86. В большинстве других архитектур их нет. Есть таблицы трансляции их их кэши в MMU. Основная проблема возникает при сбрасывании этих кэшей. Если там аппаратные ASID (address space identifiers), это удобно. Сейчас это проникает и на другие платформы, спасибо IBM (видимо) за идею. На ARMv7(-A, -R) есть восьмибитное поле для ASID.

128-битные указатели реализованы программно или аппаратно?

В линковке модулей, скомпилированных из текстов на разных языках, ничего особо удивительногого сейчас нет. Хотя, если это сделано удобно, это хорошо. А CL тоже компилируется (и может линковаться с кодом на C)?

Сборка, я так понимаю, идет только на самой IBM i? Есть ли возможность кросс-компиляции кода? Есть ли ассемлер (POWER-овский или какой-то еще?)?

Сегментные регистры — это что-то из мира x86. В большинстве других архитектур их нет. Есть таблицы трансляции их их кэши в MMU. Основная проблема возникает при сбрасывании этих кэшей. Если там аппаратные ASID (address space identifiers), это удобно. Сейчас это проникает и на другие платформы, спасибо IBM (видимо) за идею. На ARMv7(-A, -R) есть восьмибитное поле для ASID.

128-битные указатели реализованы программно или аппаратно?

Скажу чесно, в такие глубины я не погружался. Наверное, стоит посмотреть в книге Ф.Солтис "Основы AS/400" (AS/400 изначальное название IBM i) - https://royallib.com/read/soltis_frenk/osnovi_AS400.html#0 Про память там в главе 8 написано подробно.

В линковке модулей, скомпилированных из текстов на разных языках, ничего особо удивительногого сейчас нет. Хотя, если это сделано удобно, это хорошо. А CL тоже компилируется (и может линковаться с кодом на C)?

"Удобно" это как? Здесь, елси программа из одного модуля (исходника), то можно сразу скомпилировать одной командой CRTBNDRPG (для RPG программы) или CRTBNDCL для CL программы.
Если модулей (исходников) несоклько, то сначала компилируем модули (некоторый аналог .obj или .o файла) потом из них собираем программу (типа линковки). Так вот модуи могут быть на любом из поддерживаемых ILE языков.

Для вызова функции главное - правильно прописать прототип.

Скажем, есть сишная функция:

extern "C" char CheckBadChars(char *pBuffer, int nBuffLen, 
                              char *pBadCahrs, int nBadCharsCount)

В RPG ее прототип буде выглядеть так:

dcl-pr CheckBadChars ind extproc(*CWIDEN : 'CheckBadChars');
  pBuffer          char(65535) const options(*varsize);  // строка
  nBuffLen         int(10) value;  // длина строки
  pBadCahrs        char(65535) const options(*varsize);  // список "ненужных" символов
  nBadCharsCount   int(10) value;  // количество ненужных символов в списке
end-pr;

Более того, можно из RPG таким образом использлвать любые функции из сишной библиотеки (типа memcpy, memcmp и т.п.) - просто описав их прототипы правильным образом - оно само их найдет при сборке.

И да. CL тоже компилируемый язык и тоже может линокваться с другими модулями.

В целом ILE достаточно обширная тема - https://www.ibm.com/docs/en/i/7.3?topic=languages-ile-concepts

Референс по командам CL - где-то 2300 страниц в pdf. Плюс можно для любой своей программы создать новую команду CL.

Многие команды можно использовать как в интерактивных сессиях для "общения" с системой, так и в программах.

Сборка, я так понимаю, идет только на самой IBM i? Есть ли возможность кросс-компиляции кода?

Кросс-компиляторов не видел ни разу. Собираем только на сервере. Т.е. сначала закинули туда все, потом запускаем сборку уже там.

Есть ли ассемлер (POWER-овский или какой-то еще?)?

Нет. Т.е. он наверняка есть, но только для разработчиков самой системы. Там есть такой System Licensed Internal Code (SLIC) - этот уровень разработчикам недоступен. Только то, что выше него. А выше него или ЯВУ, или т.н. "машинные инструкции" (MI) - некий промежуточный уровень между ассемблером и ЯВУ.

Еще один плюс IBM i - в программном объекте кроме исполняемого кода содержится еще TIMI код (Technology Independant Machine Instructions) с меткой для какого именно процессора был сгенерировани исполняемый код. Пофит в том, что, к примеру (как это было у нас) собрали программу под процессор Power8, потом купилиновые сервера Power9 и перенесли туда все прогрммы. Так вот при первом запуске на Power9 система увиит что оно было собрано под Power8 и автоматически перегенерирует исполняемый код под Power9 из TIMI кода. Со всеми оптимизациями под конкретный процессор.

Интересно, спасибо за ответы. Компилируемый CL — это сильно.

128-битные указатели реализованы программно или аппаратно?

Если верить википедии, то вот так:

разрядность указателей 128 бит (в настоящее время реализуется микрокодом на 64-разрядной архитектуре)

Sign up to leave a comment.

Articles