Итак, после того, как к большинству компьютерных систем были добавлены уровни
абстракции, их архитектура стала многоуровневой. Главные уровни AS/400 — это
архитектура независимого от технологии машинного интерфейса MI (Technology
Определение архитектуры
Правда, есть и опирающиеся на аппаратуру архитектурыдолгожители. Например,
Intel успешно довела свой процессор x86 с начала 80х до сего дня. Начав с Intel 8086,
эта компания продолжает наращивать его функциональные возможности, по мере
того как технология позволяет упаковать все больше транзисторов в один кристалл.
Семейство процессоров 186, 286, 386, 486, Pentium, Pentium II и
Для поддержания
Определение архитектуры MI не привязано к аппаратуре. Это не физический, а логический интерфейс системы. Как уже говорилось в лекции 1, архитектура MI предлагает полный набор API для OS/400 и всех приложений. Этот набор полон по определению; то есть ни система, ни приложения в принципе не могут выйти за пределы MI. Единственный способ связи с аппаратурой и некоторым системным ПО ниже MI — через сам MI. Это свойство отличает архитектуру MI от APIцентрической архитектуры, где приложения могут обходить API и, следовательно, становиться зависимыми от нижележащих аппаратуры и ПО.
Когда создавалась архитектура MI, термин API еще не был четко определен, так что разработчики называли эти модификации просто командами. Чтобы показать, что интерфейс архитектуры поддерживает как прикладное, так и системное ПО, они выбрали название машинный интерфейс. Так что можно считать, что "I" в аббревиатуре "API" — то же, что и в "MI". API — не что иное, как команды MI.
Вы поражены прозорливостью разработчиков первоначальной архитектуры MI, раз и навсегда определивших набор API, используемый OS/400 и всеми приложениями? Не стоит: они не сделали этого, да и не могли сделать. По мере появления новых приложений в архитектуру MI добавлялись поддерживающие их новые API. Дело в том, что архитектура MI безразмерна, и новые API для поддержки новых приложений или функций операционной системы к ней можно добавлять в любое время. А раз эта архитектура постоянно изменяется, приобретая новые функции, то значит, она никогда не устареет. Так как все предыдущие API остаются при этом нетронутыми, для всех ранее написанных приложений сохраняется защита в границах MI.
Архитектура MI состоит из двух компонентов: набора команд и операндов, над которыми эти команды выполняются. Часть операндов — из битов и байтов — не отличается от тех, что используются в обычных компьютерных архитектурах. Другие представляют собой объекты. Объект — это сложная структура данных, единственная, поддерживаемая в рамках MI.
Компьютер обычно представляет свои информационные ресурсы — каталоги, файлы баз данных и описания физических устройств — в виде структур данных или хранящихся в памяти блоков с заранее определенными полями. Приложения и системное ПО, обладая непосредственным доступом к этим структурам данных, манипулируют их полями. А следовательно, они должны "знать", как это делать.
Объект в границах MI — это контейнер, содержащий структуру данных, соответствующую информационному ресурсу. Определенный уровень независимости достигается следующим образом: прикладные и системные программы вместо того, чтобы работать непосредственно со структурой данных через инструкции на уровне битов и байтов, имеют дело лишь с инструкциями, рассматривающими объекты в целом.
Благодаря использованию объектов, прикладному и системному ПО больше не требуется информация о структуре или формате данных. Эта информация хранится в контейнере и невидима за пределами объекта. Поэтому любые изменения в структуре данных не влияют на прикладные или системные программы, и они остаются независимыми от структур нижнего уровня. Такое свойство сокрытия внутренних деталей называется инкапсуляцией. Мы обсудим инкапсуляцию, а также внутреннюю структуру объекта и команды для работы с ними в лекции 5, а теперь сосредоточимся на наборе команд архитектуры MI.
Давайте обсудим несколько примеров команд, выполняемых над обычными данными и команд, оперирующих объектами. Поговорим и о том, как компиляторы используют MI для генерации кода, выполняемого аппаратурой, познакомимся с характеристиками MI и программами MI. И наконец, рассмотрим структуру команд MI.
Команды MI не исполняются аппаратурой непосредственно. Они либо предварительно
(до исполнения программы) транслируются в аппаратный набор команд, либо специальный
компонент
Набор инструкций MI нельзя считать
Структура современного оптимизирующего компилятора показана на рис. 4.1. Обычно, компилятор состоит из двух и более проходов или фаз. Проход — это одна фаза, за которую компилятор считывает и модифицирует всю программу. Термины фаза и проход часто используются как синонимы.
В процессе выполнения каждого прохода компилятор преобразуя программу, понижает уровень ее представления (от более абстрактного к менее). В конечном итоге получается набор команд аппаратуры. Такая структура оптимизирующего компилятора была впервые предложена в 60х годах для упрощения сложных преобразований, имевших целью получение оптимизированного кода.
Возможности однопроходного компилятора по оптимизации ограничены. Проще говоря, он не может просмотреть код программы вперед и учесть то, что произойдет дальше. "Заглянуть вперед" может многопроходный компилятор. Назначение регистров переменным в зависимости от их связей с другими переменными, запись в память ненужного более содержимого кэша, предварительная выборка операндов — вот лишь некоторые примеры оптимизации, выполняемой многопроходным компилятором.
Оптимизации, произведенные компилятором, могут значительно ускорить выполнение программы, особенно если она работает на процессоре, способном выполнять несколько команд параллельно. RISC-процессор — именно такого типа и ему необходим оптимизирующий компилятор для достижения высокой производительности. Применение нескольких проходов также облегчает процесс написания самого компилятора.
Первый проход компилятора, показанного на рис. 4.1,
часто называют препроцессором (front end) компилятора.
Его задача — преобразование текста на
(рис 4.1) Структура оптимизирующего компилятораПостпроцессор (back end) компилятора состоит из фаз оптимизации и фазы генерации
кода. Препроцессоры зависят от
Набор команд MI аналогичен общей промежуточной форме, применяемой в компиляторах.
Компилятор
Общая промежуточная форма для некоторых языков может как транслироваться, так и интерпретироваться. В лекции 11 мы рассмотрим язык Java, использующий как раз такую форму. Промежуточная форма Java, известная как байткод, также включена в MI.
Набор инструкций MI заменяет общую промежуточную форму не во всех компиляторах AS/400 — некоторые языки имеют собственную промежуточную форму. Ниже приводится описание внутренней структуры компиляторов языков для AS/400, и место MI в этой структуре.

Ранние компиляторы (например,
Модель программы для этих языков, включая форму программы ниже уровня MI,
называется исходной моделью программ или OPM (Original
Сначала рассмотрим компилятор ОРМ. Он принимает на входе операторы
ОРМ — пример классического компилятора, генерирующего ассемблерную форму
программы (
По мере реализации на AS/400 новых языков, таких как С/400 и Pascal, потребовалось
добавить расширения. Этапы компиляции для ЕРМ (расширенной версии
ОРМ) также показаны на рис. 4.2. В компиляторах
таких языков препроцессор и постпроцессор разделены. Общая промежуточная форма в них называется U-код. Для
AS/400 был создан новый постпроцессор компиляторов
(рис 4.2) Компиляторы ОРМ и ЕРМДля повышения производительности
Кроме поддержки вызовов с поздней компоновкой ОРМ, в ILE есть возможность компоновки во время компиляции. Преимущество такой ранней компоновки состоит в сокращении накладных расходов, связанных с внешними динамическими вызовами. Заранее скомпонованные или статические вызовы выполняются быстрее.
Прежде чем идти дальше, требуется четко оговорить, что мы понимаем под некоторыми терминами.
Деление на программы и служебные программы связано с необходимостью поддержки
двух типов статических вызовов: связь через копию (bound by copy) и связь
через ссылку (bound by reference). Первые позволяют копировать в программу одновременно
несколько модулей. Как мы только что говорили, сама программа вызывается
динамически, но после этого вызовы процедур из всех модулей происходят статически.
Так как имена процедур преобразуются в адреса во время компиляции,
данный тип статического вызова внутри программы выполняется быстрее, чем динамический
вызов. Недостаток связи через копирование в том, что в памяти может
одновременно находиться несколько копий модуля, если он связан с несколькими
программами. За все нужно платить, и здесь за быстродействие мы расплачиваемся
В случае связи через ссылку, модули находятся в служебной программе, а в программе сохраняются именные ссылки на них. При этом существует только одна копия служебной программы. При активизации программы эти ссылки разрешаются на адрес таблицы, находящейся в служебной программе и содержащей адреса вызываемых процедур. Запуск программы связан с некоторыми дополнительными накладными расходами, например, с проверкой авторизации (рассматривается в лекции 7). Тем не менее, производительность собственно исполнения программы примерно соответствует связи через копию.
В обоих методах ранней компоновки используется новая команда вызов связанной процедуры CALLB (call bound procedure). Другая новая команда, вызов программы или CALLPGM (call program) поддерживает позднее связывание и заменяет команду вызова внешней процедуры ОРМ.
Структура компиляторов
(рис 4.3) Компилятор программной модели ILEПрепроцессор компилятора ILE генерирует общую промежуточную форму — W-код.
Постпроцессор таких компиляторов называется
Другие системы IBM, в частности RS/6000, используют те же технологии. Постпроцессор
компилятора ILE генерирует непосредственно шаблон программы ILE,
устраняя
Модель ILE — единственная
Перенос программы ОРМ/ЕРМ на систему RISC вызывает ее внутреннее преобразование
в
(рис 4.4) Компиляторы ОРМ и ЕРМ на V4 RISCСравнивая MI с обычным машинным интерфейсом, мы отмечаем, что MI — интерфейс
высокого уровня. Дело в том, что многие команды MI выполняют очень сложные
функции. Например, не многие обычные машинные интерфейсы содержат функции
вызова, поддерживающие как раннюю, так и позднюю компоновку, для них
более характерны обычные
Чтобы лучше понять разницу, разберем команду обычного машинного интерфейса
(см. рисунок 4.5). Она состоит из
(рис 4.5) Обычный машинный интерфейсОбычные машинные интерфейсы работают с содержимым регистров, памяти или непосредственно с данными, записанными в самой команде. Иначе говоря, они "не подозревают" о данных приложения или операционной системы. Возьмем стандартную команду "регистровое сложение". Она задает два регистра процессора и выполняет операцию, извлекая биты из одного регистра, складывая их с битами из другого регистра и помещая результат в определенное место. Смысла этих битов команда "не понимает" —о нем "заботится" программа. Для машины это просто набор битов, к которому применяется алгоритм сложения. То, что в регистрах находятся, например, имена двух сотрудников и поэтому рассматривать их в качестве арифметических операндов нет смысла, никого не волнует. Операции этого уровня просто механически обрабатывают содержимое регистров или памяти.
Мы уже говорили о недостатке такой структуры — ее существенной зависимости
от аппаратной технологии. Так как команды работают в адресном пространстве, с
областями ввода/вывода и регистрами, они привязаны к этим
Машинный интерфейс AS/400 (см. рисунок 4.6) устроен совсем иначе. У него, как
и у обычных, есть набор команд с
(рис 4.6) Машинный интерфейс AS/400Самое важное отличие не в самих командах или операциях, а в используемых ими операндах. В обычном интерфейсе есть регистры, память и непосредственные данные. На AS/400 мы попрежнему имеем непосредственные данные, но нет ни регистров, ни памяти. Их заменяют объекты.
В MI определены объекты нескольких типов. Большинство из них — сложные
структуры данных, нужные для представления информационных ресурсов. Один из
самых важных типов объектов в системе — пространство (просто набор байтов, не
связанный с физическим оборудованием). Многие с трудом представляют себе массу
подвешенных неизвестно где байтов, им хочется обязательно связать их с аппаратурой.
Но в MI понятие пространства не имеет отношения к физической памяти, он
абсолютно независим от того, что находится
Когда программе MI требуется память, она использует пространство. На этом уровне нет понятий регистров, физической памяти и адресов памяти в традиционном смысле. Например, компилятор AS/400 должен кудато деть созданный шаблон программы — в пространство!
Кроме пространств, существуют и другие типы объектов, которые мы обсудим далее. До сих пор мы обсуждали только системные объекты MI. Но объекты поддерживает и OS/400.
Несколько команд MI работают с программами. Так как программа представляет собой объект, эти команды рассматривают программу целиком. Все команды выполняют над программой только операции, имеющие смысл. Есть команда создания программы, но нет команды перемножения программ, так как первая имеет смысл, а вторая — нет. Короче, команды специфичны для объектов того типа, с которым они манипулируют. Команды применяются к объекту целиком, а не к некоторым частям данных внутри объекта. Объект нельзя использовать не по назначению, так что еще одно крупное преимущество объектной ориентации — целостность. Программы в MI играют только присущую им роль. Давайте рассмотрим, как программа создается, уничтожается и материализуется.
Программа создается на основе шаблона — заранее описанной структуры со всеми характеристиками определенного системного объекта MI. Шаблон формируется частью компилятора AS/400, отвечающей за генерацию кода. Все системные объекты MI образуются по шаблонам, хранящимся в пространствах MI. Так как объектам разного типа присущи разные характеристики, единого общего шаблона нет — у каждого объекта свой уникальный шаблон.
Команда создания программы "Create Program" указывает на шаблон программы. Пока мы остановимся на двух типах указателей: системном и пространственном (позже мы увидим, что есть указатели и других типов). Первый направлен на системный объект MI, второй — на байт в пространстве. Длина каждого из этих указателей 16 байт. Через указатели в MI осуществляется адресация, так что указатель в MI можно представлять себе просто как адрес.
Команда создания программы исполняется с помощью кода, лежащего ниже MI.
Сначала через пространственный
Любой объект на уровне MI, который можно создать, можно и уничтожить. Соответственно на каждую команду создания объектов MI приходится команда уничтожения. Пользователь на уровне MI устанавливает системный указатель на программу или другой объект MI и дает команду: "Уничтожить". Конечно, сделать это просто так нельзя: у пользователя должны быть соответствующие права на доступ к разным объектам.
Тему прав пользователей по отношению к объектам мы подробно обсудим в лекции 7, а сейчас только упомянем, что пользователь может иметь разные уровни прав доступа к разным объектам. Чтобы уничтожать объекты, нужен самый высокий уровень. Как правило, объект может уничтожить только его владелец; но бывают ситуации, когда такие права имеют несколько пользователей. Каждому пользователю в системе соответствует специальный объект — профиль пользователя. Вместе с другими объектами профиль пользователя определяет права данного пользователя по отношению к тем или иным объектам. Когда пользователь прибегает к команде уничтожения, система сначала обращается к его профилю и выясняет, есть ли у него такое право, и лишь в случае утвердительного ответа выполняет операцию.
Наблюдать характеристики программы поверх MI можно лишь через шаблон программы.
Шаблон — результат работы компиляторов
Внутри объекта находится последовательность команд
Однако, если прикладному или системному ПО необходим доступ к характеристикам программы, команда MI, позволяет эту программу материализовать. Команда материализации указывает на инкапсулированный программный объект, по которому воссоздается шаблон программы. Материализация — операция, противоположная инкапсуляции.
Технологию материализации не всем просто понять. Честно говоря, обратная компиляция (восстановление исходного текста программы при наличии ее только в откомпилированном виде) не слишком хорошо разработана и многолетние исследования в этой области идут пока без особого успеха.
Как же решает эту задачу AS/400? Да просто жульничает: она не выполняет декомпиляции
последовательности команд
Хранение шаблона программы в качестве системного объекта MI и придает System/38 и AS/400 возможности, отсутствующие в других системах. Это позволяет изменять набор команд, не влияя на приложения заказчиков. Изменения вносятся в новую версию транслятора, а затем все программы ретранслируются из своих шаблонов. Наконец, новые последовательности команд снова инкапсулируются в объекты. Все это происходит ниже MI и без участия пользователя.
Чтобы Вы смогли лучше "почувствовать разницу", обратимся к классическому примеру внедрения System/38 Model 7. System/38 появилась как абсолютно новая система с абсолютно новым набором команд, новыми приложениями и новой ОС. Но как использовать эти команды, никто точно не знал. Как правило, для того, чтобы достичь максимальной производительности системы, оптимизируют аппаратную реализацию наиболее часто встречающихся последовательностей команд с целью достичь их как можно более быстрого выполнения.
Первоначально набор команд
Вполне естественно стремление сохранить набор операций небольшим, а следовательно,
контролируемым и не избыточным. Но не менее законно желание упростить
сложные задачи. Как увязать эти противоречия? Хорошо, если б существовал
научный метод создания наборов команд, но, увы! Это скорее искусство, чем наука.
Через пару лет мы пришли, как нам казалось, к оптимальному набору команд
К тому времени мы уже знали, как работать с существующими командами
При модернизации оборудования системы устанавливалась и новая версия транслятора.
У каждой программы в системе был свой заголовок объекта, который, кроме
всего прочего, показывал, какой уровень транслятора использовался для создания
программы. При первом исполнении программы система проверяла заголовок и при
обнаружении старой версии обрабатывала связанный с объектом шаблон программы
новым транслятором, сохраняя новый код
Тот же метод скрытой ретрансляции программ применялся при переходе на RISC-процессоры. Разница была лишь в том, что заказчиков заранее предупреждали, что приложения будут работать, только если не удалена адаптируемость. Что же изменилось со времен System/38?
AS/400 должна была привлечь и пользователей System/36, и System/38. Между тем вторые привыкли к большим объемам памяти и жестких дисков, так же как и пользователи System/36 — обходиться малым. Поэтому размеры новых программ последних пугали, и казались им чересчур большими.
Программы для AS/400 действительно впечатляли — ведь каждая хранилась в двух
копиях: в инкапсулированной форме и в форме шаблона. Для экономии пространства
на диске заказчики могли удалить шаблоны. Это называлось удалением адаптируемости
программы (Delete Program
В результате те, кто удалил адаптируемость некоторых или всех своих программ,
должны были вернуться к исходным текстам на

Чтобы выяснить, что там происходит, возьмем в качестве примера шаблон программы ОРМ, хотя он и не поддерживается на RISC-системах. Я выбрал ОРМ по двум причинам. Во-первых, это дает возможность рассмотреть еще несколько интересных концепций, лежащих в основе оригинального набора команд MI. Во-вторых, некоторые детали шаблона программы ILE не опубликованы. И поэтому прежде чем заняться шаблоном программы ОРМ, рассмотрим те изменения, которые были внесены в программную модель ILE.
При создании компиляторов для
Наилучший целевой компьютер для компиляторов ILE — стековая машина, поэтому
MI был расширен для поддержки стеков. Стек — набор данных, хранящихся последовательно.
Первый помещенный в стек элемент называется его дном, последний
— вершиной. Для работы со стеком используются команды без явного указания операндов,
которые определяются путем извлечения из стека двух верхних элементов.
В противоположность этому, команды ОРМ имеют два операнда, заданных непосредственно
в команде. Для стековой машины операция задается после операндов. Такая
форма записи называется постфиксной или обратной польской
в честь математика Лукашевича (J. Lukasiewicz), исследовавшего ее
Интересно, что архитектура, разработанная в 1972 году, имела аналогичную поддержку
стека. В то время многие полагали, что блочноструктурированные языки,
такие как PL/1, станут очень популярными. Но они так и не вытеснили
Шаблон программы состоит из нескольких частей. Шаблон программы ОРМ
содержит заголовок, последовательность команд MI, пользовательские данные и
структуру под названием таблица определения объектов ODT (object definition table).
Команды и ODT представлены на рисунке 4.7. Последовательность команд на
рисунке содержит пример команды MI. Использована классическая команда OPM с тремя
операндами —арифметическое сложение. Она состоит из
(рис 4.7) Команды и ODTODT состоит из двух компонентов. Первая — ODV (ODT Direction Vector) — содержит по одному элементу для каждого операнда программы. Все элементы имеют одинаковую длину, так что значение из последовательности команд может использоваться как индекс в ODV. Элементы ODV описывают операнды. В нашем примере, операнды 6 и 3 — это двоичные числа длиной 2 байта, а операнд 2 — константа. Константы и другие типы операндов могут иметь переменную длину, что задает необходимость второго компонента ODT. OES (ODT Entry String) содержит операнды переменной длины, не умещающиеся в ODV. Содержимое поля ODV указывает на начало цепочки в OES. В нашем примере операнд 2 представляет собой константу 1253.
Пример иллюстрирует несколько характеристик команд MI модели ОРМ. Во-первых — это команда арифметического сложения. Это не команда двоичного или десятичного сложения, или сложения с плавающей запятой; она универсальна. Формат операндов команды определяется в ODT. В нашем примере используются двоичные целые операнды, но они могли бы иметь любой числовой формат. За генерацию необходимых преобразований отвечает транслятор.
Во-вторых, из примера видно, что ОРМ MI — неисполняемый интерфейс. Обратите внимание, что ни с операндом 3, ни с операндом 6 не связаны значения. Элемент ODV эквивалентен объявлению переменной. Память для переменной не выделена, так что транслятор обязан завершить компиляцию и назначить переменным регистры или области памяти.
И, наконец, в примере показана обычная вычислительная команда. Команда, работающая с объектом, имела бы аналогичный формат, но в ODT было бы указано, как найти объект (детали адресации объектов будут рассмотрены в лекции 5).

На рисунке 4.8 показан формат команд ОРМ MI в
(рис 4.8) Формат команд MIЭкономия памяти не была слишком важна для шаблона программы. Например, команда
арифметического сложения заняла бы 2 байта для

На рисунке 4.9 показано назначение битов
Бит 6 вычислительного формата указывает, должно ли производиться округление. Обычно, округление характерно для арифметики с плавающей запятой, однако, проектировщики MI имели в виду не это. AS/400 — это машина для коммерческих расчетов, и округление, используемое в MI — это десятичное округление. Десятичные данные рассматриваются как данные с плавающей десятичной запятой.
Бит 7 указывает на сокращенную форму команды, что также имеет смысл только
для вычислительных команд. В нашем примере арифметического сложения участвуют
три операнда. Два из них складываются, и результат помещается в третий, то есть
два первых операнда не изменяются.
Наконец, в вычислительном формате имеются два бита, описывающих расширение
(рис 4.9) Назначение битов кода операции

Расширение
В случае использования опции перехода расширение
Рассмотрим первое 4разрядное
Если условие перехода, заданное первым 4разрядным полем выполнено, то цель перехода может быть найдена за последним операндом команды. Если условие перехода не выполнено, то будет исполняться следующая команда по порядку. Такие возможности команд приводят к увеличению их длины.
Так как каждое из четырех 4разрядных полей расширения используется для задания условия перехода, то каждая вычислительная команда может содержать до четырех условий и до четырех целей перехода. Если нужно менее четырех условий, то значение 0 задает отсутствие перехода.
Возможность MI выполнять переход в четыре точки после каждой вычислительной команды обеспечивает набору команд большую мощность за счет их удлинения. В примере с арифметическим сложением — до четырех целей перехода, что увеличивает длину команды еще на 12 байтов. Команда может занимать в памяти до 25 байтов. Это не создает проблем во время выполнения, так как команды MI не исполняются непосредственно. Однако размер программы увеличивается.
Опция индикатора работает аналогично опции перехода. Расширение содержит те же четыре 4разрядных поля с теми же возможными значениями. Отличие в том, что вместо перехода при выполнении условия устанавливается индикатор. Индикатор представляет собой переменную в памяти, содержащую десятичные значения 1 или 0. Если в процессе выполнения вычислительной команды условие, заданное 4 разрядным полем, выполнено, то индикатор устанавливается в значение 1, в против ном случае — в значение 0. Как и в случае перехода, в команде может быть задано до четырех индикаторов, которые указываются следом за операндами.
Многие читатели узнали в этом описании индикаторы

На рисунках 4.10а, 4.10б и 4.10в показаны форматы трех команд ОРМ MI. Команда арифметического
сложения ADDN имеет

(рис 4.10б) Команда арифметического сложения (ADDN)(рис 4.10а) Команда перехода (B)
(рис 4.10в) Копирование байтов с выравниванием влево и заполнителем (CPYBLAP)В таблице 4.1 приведены 11 других форм ADDN. Различные варианты команды
получаются путем комбинации опций
| ADDNS | 1143 | Короткая |
| ADDNR | 1243 | С округлением |
| ADDNSR | 1243 | Короткая с округлением |
| ADDNI | 1843 | Индикаторная |
| ADDNIS | 1943 | Индикаторная короткая |
| ADDNIR | 1A43 | Индикаторная с округлением |
| ADDNISR | 1B43 | Идикаторная короткая с округлением |
| ADDNB | 1C43 | С переходом |
| ADDNBS | 1D43 | Короткая с переходом |
| ADDNBR | 1E43 | Короткая с округлением и с переходом |
Третья команда (рисунок 4.10в) имеет чудесное, хоть и немного длинное, имя
"CPYBLAP" ("Copy Bytes LeftAdjusted with Pad"). Она позволяет скопировать строку
байтов из одного поля в другое. Байты выравниваются по левому краю принимающего
поля, и если исходное поле короче принимающего, то оставшиеся байты будут
заполнены заданным значением. Понятно, что это лишь одна из многих команд
копирования в MI. В большинстве коммерческих приложений копирование используется
очень интенсивно. Возможно, читатель узнал в "CPYBLAP" аналог оператору
"Move" в языке Cobol или "MOVEL" с P в колонке полувыравнивания из
Мы рассмотрели лишь три команды MI (а есть еще сотни и сотни других) и только
команды MI (вычислительные и перехода) модели OPM. Как уже упоминалось, существуют
также вычислительные команды и
Независимость от технологии, обеспечиваемая MI, чрезвычайно важна, так как позволяет избегать изменений в пользовательских приложениях и в OS/400. Все возможности нового оборудования могут быть задействованы сразу же после его установки.
Но это не единственное преимущество MI! Вычислительная среда со временем меняется: наглядные примеры — приложения клиент/сервер и концепция сетевых вычислений. Если бы AS/400, первоначально предназначенная для интерактивной работы, не смогла приспособиться к роли сервера, она бы уже давно устарела.
MI — мощнейший интерфейс не только в силу своей независимости от технологии, но и благодаря возможностям расширения. Новые инструкции и функции присутствуют почти в каждой версии системы. Интерфейс MI ориентирован на приложения, так как поддерживает необходимые для этого API, и по мере появления новых приложений добавить новые API не составит проблемы. Расширяемость архитектуры MI делает этот интерфейс чрезвычайно долговечным.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.