IBM i ( i означает интегрированный ) [6] — операционная система, разработанная IBM для IBM Power Systems . [7] Первоначально она была выпущена в 1988 году как OS/400 , как единственная операционная система линейки систем IBM AS/400 . Она была переименована в i5/OS в 2004 году, прежде чем была переименована во второй раз в IBM i в 2008 году. [8] [9] Это эволюция операционной системы System/38 CPF , [5] с уровнями совместимости для приложений System/36 SSP и AIX . [5] Она унаследовала ряд отличительных особенностей платформы System/38, включая машинный интерфейс , который обеспечивает аппаратную независимость, реализацию объектно-ориентированной адресации поверх одноуровневого хранилища и тесную интеграцию реляционной базы данных в операционную систему. [1]
OS/400 разрабатывалась параллельно с аппаратной платформой AS/400, начиная с декабря 1985 года. [5] Разработка началась после провала проекта Fort Knox , который оставил IBM без конкурентоспособной системы среднего уровня. [10] [11] Во время проекта Fort Knox в Рочестере инженерами был начат проект skunkworks , который преуспел в разработке кода, который позволил приложениям System/36 работать поверх System/38, [12] и когда Fort Knox был отменен, этот проект превратился в официальный проект по замене как System/36, так и System/38 единой новой аппаратной и программной платформой. [5] Проект стал известен как Silverlake (названный в честь озера Silver Lake в Рочестере, штат Миннесота ). [13] [12] [14]
Операционная система для Silverlake имела кодовое название XPF (Extended CPF ) и изначально создавалась как порт CPF для оборудования Fort Knox. [5] Помимо добавления поддержки приложений System/36, некоторые функции пользовательского интерфейса и удобства использования из System/36 были перенесены в новую операционную систему. [1]
Silverlake был доступен для полевых испытаний в июне 1988 года и был официально анонсирован в августе того же года. К тому моменту он был переименован в Application System/400 , а операционная система получила название Operating System/400 . [12]
Портирование на PowerPC потребовало переписывания большей части кода ниже TIMI. Ранние версии OS/400 унаследовали горизонтальный и вертикальный слои микрокода System/38, хотя они были переименованы в горизонтальный лицензированный внутренний код (HLIC) и вертикальный лицензированный внутренний код (VLIC) соответственно. [15] Портирование на новое оборудование привело к замене набора инструкций IMPI и реализующего его горизонтального микрокода набором инструкций PowerPC AS и его реализацией в процессорах PowerAS. Это потребовало переписать VLIC для ориентации на PowerPC вместо IMPI, а также для функциональности операционной системы, ранее реализованной в HLIC, которая была повторно реализована в другом месте. [1] Это привело к замене HLIC и VLIC одним слоем, названным системным лицензированным внутренним кодом (SLIC). SLIC был реализован в объектно-ориентированном стиле с более чем 2 миллионами строк кода C++ , заменив часть кода HLIC и большую часть кода VLIC. [16] [17] Из-за объема работы, необходимой для внедрения SLIC, IBM Rochester наняла несколько сотен программистов C++ для проекта, которые работали над SLIC параллельно с новыми версиями VLIC для систем CISC AS/400. [1] Первой версией OS/400 для поддержки оборудования на базе PowerPC была V3R6. [18] [19]
Линейка продуктов AS/400 была переименована несколько раз в 1990-х и 2000-х годах. [15] В рамках ребрендинга 2004 года на eServer i5 , OS/400 была переименована в i5/OS ; 5 обозначала использование процессоров POWER5 . [20] Первый выпуск i5/OS, V5R3, был описан IBM как «другое название для той же операционной системы». [21]
В 2006 году IBM в последний раз переименовала линейку AS/400 в System i . [22] В апреле 2008 года IBM объединила System i с платформой System p , чтобы создать IBM Power Systems . [23] В то же время i5/OS была переименована в IBM i , чтобы устранить связь с процессорами POWER5. [24] Две последние версии операционной системы на тот момент, выпущенные как i5/OS V5R4 и V6R1, [25] [26] были переименованы в IBM i 5.4 и 6.1. [27] [28] [29] [30]
Наряду с ребрендингом на IBM i, IBM изменила номенклатуру версий для операционной системы. Предыдущие выпуски использовали схему Версия, Выпуск, Модификация , например V2R1M1. Она была заменена схемой Версия.Выпуск , например 6.1. [31] Начиная с IBM i 7.1, IBM заменила выпуски Модификации на Обновления Технологии . [29] Обновления Технологии поставляются как дополнительные PTF для определенных выпусков операционной системы, которые добавляют новую функциональность или поддержку оборудования в операционную систему. [32]
Когда IBM i впервые была выпущена как OS/400, она была разделена на два уровня: аппаратно-зависимый System Licensed Internal Code (SLIC) [15] [1] и аппаратно-независимый Extended Control Program Facility (XPF). [16] [8] [33] [34] Они разделены аппаратно-независимым уровнем абстракции , называемым Technology Independent Machine Interface (TIMI). Более поздние версии операционной системы получили дополнительные уровни, включая уровень совместимости с AIX , называемый Portable Application Solutions Environment (первоначально известный как Private Address Space Environment ), [5] [35] и среду Advanced 36 Machine , которая запускала приложения System/36 SSP в эмуляции. [1]
IBM часто использует разные названия для TIMI, SLIC и XPF в документации и маркетинговых материалах, [36] например, в документации IBM i 7.4 они называются IBM i Machine Interface , IBM i Licensed Internal Code и IBM i Operating System соответственно. [37]
TIMI изолирует пользователей и приложения от базового оборудования. Эта изоляция более тщательная, чем абстракции оборудования других операционных систем, и включает абстрагирование архитектуры набора инструкций процессора, размера адресного пространства и особенностей ввода-вывода и сохранения. [15] Это достигается посредством двух взаимосвязанных механизмов: [1]
Аппаратная изоляция, обеспечиваемая TIMI, позволила IBM заменить 48-битную архитектуру IMPI AS/400 на 64-битную архитектуру RS64 в 1995 году. Приложения, скомпилированные в системах, использующих набор инструкций IMPI, могли работать поверх новых систем RS64 без каких-либо изменений кода, перекомпиляции или эмуляции, а также позволяли этим приложениям использовать 64-битную адресацию. [8]
Существует два различных формата инструкций TIMI, известных как форматы оригинального машинного интерфейса (OMI) и нового машинного интерфейса (NMI). [38] Инструкции OMI по сути такие же, как инструкции машинного интерфейса System/38 , тогда как инструкции NMI являются более низкоуровневыми, напоминающими формат промежуточного представления W-кода , используемый компиляторами IBM. [1] IBM частично документирует инструкции OMI, [39] тогда как инструкции NMI официально не документированы. Инструкции OMI используются оригинальными компиляторами AS/400, тогда как инструкции NMI используются компиляторами Integrated Language Environment . [1] Во время порта PowerPC собственная поддержка формата OMI была удалена и заменена транслятором, который преобразовывал инструкции OMI в инструкции NMI.
Хранение инструкций TIMI вместе с инструкциями собственного машинного кода известно как наблюдаемость . В 2008 году выпуск i5/OS V6R1 (позже известной как IBM i 6.1) внес ряд изменений в уровень TIMI, что вызвало проблемы для стороннего программного обеспечения, которое удалило наблюдаемость из объектов приложений, поставляемых клиентам. [40]
SLIC состоит из кода, который реализует TIMI поверх архитектуры IBM Power. Помимо того, что он содержит большую часть функциональности, обычно связанной с ядром операционной системы , он отвечает за перевод инструкций TIMI в машинный код, а также реализует некоторую высокоуровневую функциональность, которая предоставляется через TIMI, например, интегрированную реляционную базу данных IBM i. [1] SLIC реализует объектно-ориентированную модель хранения IBM i поверх одноуровневой схемы адресации хранилища, которая не различает первичное и вторичное хранилище, а вместо этого управляет всеми типами хранения в одном виртуальном адресном пространстве . [41] SLIC в первую очередь реализован на C++ и заменил слои HLIC и VLIC, используемые в версиях OS/400 до V3R6. [16]
XPF состоит из кода, который реализует аппаратно-независимые компоненты операционной системы, которые компилируются в инструкции TIMI. [16] Компоненты XPF включают пользовательский интерфейс, язык управления , утилиты управления данными и запросами, инструменты разработки и утилиты управления системой. XPF также содержит среду System/36 и среду System/38 , которые предоставляют API и утилиты обратной совместимости для приложений и данных, перенесенных из систем SSP и CPF. [42] XPF — это внутреннее название IBM для этого слоя, и, как следует из названия, он начинался как эволюция System/38 Control Program Facility . [1] XPF в основном реализован на PL/MI , хотя используются и другие языки. [43]
PASE (Portable Applications Solutions Environment) обеспечивает двоичную совместимость для исполняемых файлов AIX пользовательского режима , которые не взаимодействуют напрямую с ядром AIX, и поддерживает 32- и 64-разрядные двоичные интерфейсы приложений AIX . [44] PASE впервые был включен в ограниченной и недокументированной форме в выпуск V4R3 OS/400 для поддержки порта Smalltalk . [5] Впервые он был анонсирован клиентам во время выпуска V4R5, к тому времени он приобрел значительную дополнительную функциональность.
PASE состоит из пользовательского пространства AIX, работающего поверх интерфейса системных вызовов, реализованного SLIC. [45] Интерфейсы системных вызовов обеспечивают взаимодействие между PASE и собственными приложениями IBM i, например, приложения PASE могут получать доступ к интегрированной базе данных или вызывать собственные приложения IBM i, и наоборот. [46] Во время создания PASE в операционную систему был добавлен новый тип одноуровневого объекта хранения, называемый Teraspace , который позволяет каждому процессу PASE иметь частное пространство размером 1 ТиБ, адресуемое с помощью 64-битных указателей. [47] Это было необходимо, поскольку все задания IBM i (т. е. процессы) обычно используют одно и то же адресное пространство. [5] Приложения PASE не используют аппаратно-независимые инструкции TIMI, а вместо этого компилируются непосредственно в машинный код Power.
Порты программного обеспечения с открытым исходным кодом для IBM i обычно нацелены на PASE вместо собственных API IBM i, чтобы упростить портирование. [48] Программное обеспечение с открытым исходным кодом для IBM i обычно упаковывается с использованием формата пакетов RPM и устанавливается с помощью менеджера пакетов YUM . [49] [50]
PASE отличается от среды Qshell , которая представляет собой реализацию оболочки Unix и связанных с ней утилит, созданных поверх собственных POSIX-совместимых API IBM i. [51]
Представленная в 1994 году платформа Advanced/36 запускала немодифицированные приложения System/36 и операционную систему SSP в эмуляции поверх OS/400 SLIC с использованием оборудования, которое было в основном идентично современным системам AS/400. [1] Эта функциональность была включена в саму OS/400 с V3R6 по V4R4, что позволяло запускать до четырех «виртуальных машин» System/36 (используя термин IBM) с использованием так называемой функции операционной системы Advanced 36 Machine . [52] Поддержка была прекращена в выпуске V4R5, что совпало с прекращением IBM линейки продуктов Advanced/36 в целом. [53] Функция Advanced 36 Machine отличается от среды System/36, представленной в первоначальном выпуске OS/400, и все еще поддерживается в текущих версиях IBM i.
До Advanced/36 линейка System/36 использовала два разных процессора в каждой системе — главный процессор хранения (MSP), который запускал большую часть операционной системы SSP, а также пользовательский код, и управляющий процессор хранения (CSP), который запускал так называемый «микрокод», который реализовывал основные функциональные возможности операционной системы, а также ввод-вывод. Микрокод CSP вызывался из MSP с помощью инструкции Supervisor Call (SVC). В Advanced/36 микрокод CSP был повторно реализован внутри SLIC. Эмулятор MSP также был встроен в SLIC, иногда называемый Technology Independent Emulation Interface . Даже с учетом накладных расходов на эмуляцию системы Advanced/36 были значительно быстрее оригинальных систем System/36, которые они заменили, благодаря производительности своих процессоров PowerPC AS. [1]
IBM i имеет интегрированную реляционную базу данных , в настоящее время известную как IBM Db2 для IBM i . [37] База данных произошла от нереляционной базы данных System/38, получив поддержку реляционной модели и SQL . [1] Изначально база данных не имела названия, вместо этого она описывалась просто как «поддержка базы данных». [54] В 1994 году ей было присвоено название DB2/400 , чтобы указать на сопоставимую функциональность с другими коммерческими базами данных IBM. [1] Несмотря на брендинг Db2, Db2 для IBM i является полностью отдельной кодовой базой по сравнению с Db2 на других платформах и тесно интегрирована в слой SLIC IBM i, а не является дополнительным продуктом. [55] [56]
IBM i предоставляет два механизма доступа к интегрированной базе данных — так называемый собственный интерфейс , который основан на модели доступа к базе данных System/38, и SQL . [1] Собственный интерфейс состоит из языка спецификаций описания данных (DDS), который используется для определения схем и API OPNQRYF
команд или QQQQRY
запросов. [57] Некоторые функции Db2 for i, такие как управление объектно-реляционной базой данных, требуют SQL и не могут быть доступны через собственный интерфейс. [58] IBM i имеет два отдельных оптимизатора запросов, известных как Classic Query Engine (CQE) и SQL Query Engine (SQE). [59] Они реализованы внутри SLIC вместе с диспетчером запросов , который выбирает соответствующий оптимизатор в зависимости от типа запроса. Удаленный доступ через собственный интерфейс и SQL предоставляется распределенной архитектурой управления данными (DDM) и распределенной архитектурой реляционной базы данных соответственно. [60]
Механизм хранения для MySQL и MariaDB , названный так, IBMDB2I
позволяет приложениям, разработанным для этих баз данных, использовать Db2 для i в качестве резервного хранилища. [61] [62] Другие базы данных с открытым исходным кодом были перенесены на IBM i, включая PostgreSQL , MongoDB и Redis . [63] Эти базы данных работают в среде PASE и не зависят от интегрированных функций базы данных операционной системы. [64]
IBM i поддерживает сетевые технологии TCP/IP в дополнение к фирменной архитектуре IBM Systems Network Architecture . [65]
Системы IBM i исторически были доступны и управлялись через терминалы IBM 5250 , подключенные к системе с помощью твинаксиального кабеля. С упадком выделенного терминального оборудования, современные системы IBM i обычно доступны через эмуляторы терминалов 5250. IBM предоставляет два продукта эмуляторов терминалов для IBM i: [66]
Кроме того, IBM предоставляет веб-консоль управления и продукт для анализа производительности под названием IBM Navigator for i. [67]
Языки программирования, доступные от IBM для IBM i, включают RPG , Control Language , C , C++ , Java , EGL , COBOL и REXX . Ранее компиляторы были доступны для Pascal , BASIC , PL/I и Smalltalk , но с тех пор их поддержка прекращена. Интегрированная языковая среда (ILE) позволяет программам из языков, совместимых с ILE (C, C++, COBOL, RPG и CL), связываться в один и тот же исполняемый файл и вызывать процедуры, написанные на любом другом языке ILE.
Когда был представлен PASE, было необходимо компилировать код для PASE на системе AIX. Это требование было снято в OS/400 V5R2, когда стало возможным компилировать код с использованием набора компиляторов IBM XL внутри самого PASE. [68] С тех пор другие компиляторы были портированы на PASE, включая gcc . [69]
Некоторые инструменты разработки для IBM i работают поверх самой операционной системы, такие как текстовый редактор Source Edit Utility (SEU) и Programming Development Manager . IBM также предоставляет интегрированную среду разработки (IDE) на основе Eclipse для IBM i под названием IBM Rational Developer for i, которая работает на рабочих станциях разработчиков вместо IBM i. [70] До IDE на основе Eclipse IBM предоставляла IDE на основе WorkFrame/2, которая работала на OS/2 под названием CODE/400 , и IDE на основе VisualAge , которая работала на системах Microsoft Windows . [71] [72]
IBM i использует EBCDIC в качестве кодировки символов по умолчанию , но также обеспечивает поддержку ASCII , UCS-2 и UTF-16 . [1] [73]
В IBM i дисковые накопители могут быть сгруппированы в вспомогательный пул хранения (ASP) для организации данных с целью ограничения влияния отказов устройств хранения и сокращения времени восстановления. [74] Если происходит отказ диска, необходимо восстановить только данные в пуле, содержащем отказавший блок. ASP также могут использоваться для повышения производительности путем изоляции объектов со схожими характеристиками производительности, например, приемников журналов, в их собственном пуле.
По умолчанию все дисковые накопители назначаются пулу 1. Концепция пулов IBM i похожа на концепцию групп томов Unix / Linux ; однако для IBM i типично, что все дисковые накопители назначаются одному ASP.
Безопасность в IBM i определяется в терминах полномочий , которые представляют собой разрешение на выполнение определенного действия над определенным объектом. [75] Полномочия могут быть предоставлены отдельным пользователям (известные как профили пользователей ), группам (известные как профили групп ) или всем пользователям ( публичные полномочия). Связанные объекты могут быть сгруппированы вместе в списке полномочий , что позволяет предоставлять полномочия на все объекты в списке путем предоставления полномочий в списке полномочий. [76]
Профили пользователей имеют связанный класс пользователя , который определяет набор полномочий по умолчанию, доступных для этого профиля пользователя. Существует пять стандартных классов пользователей, которые, в порядке возрастания привилегий, таковы: Workstation User , System Operator , System Programmer , Security Administrator и Security Officer . [5] IBM i поставляется с профилем пользователя по умолчанию для каждого класса пользователей, а профиль пользователя Security Officer по умолчанию, названный QSECOFR
, является ближайшим эквивалентом пользователя root операционной системы типа Unix. [77]
IBM i можно настроить на использование одного из пяти уровней безопасности, которые контролируют степень применения функций безопасности операционной системы: [78]
Первые три уровня соответствуют уровням безопасности, доступным в CPF и начальных выпусках OS/400. Уровень безопасности 40 был добавлен в OS/400 V1R3 и стал уровнем безопасности по умолчанию для операционной системы. Добавление уровня 40 потребовало удаления модели адресации возможностей System/38, которая также присутствовала в более ранних выпусках OS/400. [5] Уровень безопасности 50 был добавлен в V2R3, когда OS/400 была сертифицирована по безопасности TCSEC C2 .