История развития программного обеспечения

Средства обеспечения горизонтальной мобильности прикладных и инструментальных систем

В СССР и других странах СЭВ разработан и выпускается широкий спектр микроЭВМ на основе микропроцессоров семейства К1810ВМ86. Важнейшим фактором их эффективного использования, при соблюдении прочих условий, является мобильность прикладного и инструментального программного обеспечения (ПО), которое разрабатывается для указанных микроЭВМ в среде семи различных операционных систем. Под горизонтальной мобильностью мы понимаем возможность переноса ПО без (или с минимальной) адаптации из одной ОС в другую в рамках одной ЭВМ или семейства совместимых ЭВМ. В статье рассматривается решение проблемы горизонтальной мобильности, предложенное для микроЭВМ СМ 1810 семейства М16-1 СМ ЭВМ, которое может быть использовано как в персональных компьютерах ЕС ЭВМ, так и в других микро-ЭВМ этого класса.

Методы достижения мобильности ПО

Назовем систему, откуда производится перенос ПО, – инструментальной (независимо от того, разрабатывались ли в ней мобильные программы или нет), а систему, куда переносится ПО, – объектной. Вертикальная мобильность ПО в нашей терминологии – это перенос программ на ЭВМ с другой (несовместимой) системой команд.

Существуют три основных метода достижения мобильности ПО:

1) перенос текстов программ, написанных на языках программирования высокого уровня (ЯВУ), а также применение макропроцессоров [1, 2];

2) постановка мобильных операционных систем, например, систем типа UNIX;

3) применение Универсальных программных интерфейсов (УПИ) [3-6].

В первом методе мобильность достигается за счет переноса исходных текстов ПО с инструментальной ЭВМ на объектную, на которой производится их перетрансляция и дальнейшая обработка объектных модулей (создание библиотек, компоновка и т. д.). Метод требует наличия компилятора с используемого ЯВУ как на инструментальной, так и на объектной ЭВМ, причем реализации ЯВУ на обеих ЭВМ должны быть достаточно близки. С ростом объема ПО сложность проблем, связанных с применением данного метода, растет.

Постановка мобильных ОС решает многие вопросы по переносу ПО, но, во-первых, не всегда возможна, так как требует определенной поддержки со стороны аппаратного обеспечения, а во-вторых, заставляет пользователя работать в жестко заданной программной среде, не всегда адекватной его проблемной области.

Третий метод получил распространение в последние годы и был использован нами при создании мобильной системы программирования (МСП) для микроЭВМ семейства СМ 1810.

Универсальный программный интерфейс

Так как наибольшие усилия затрачиваются на разработку инструментальных средств (трансляторов с языков программирования, систем текстообработки, интегрированных пакетов, систем ведения проектов, анализаторов, символических отладчиков, пакетов программ поддержки и т. д.), то очевидна необходимость мобильности таких систем в первую очередь. Мобильность прикладного ПО вторична по отношению к мобильности инструментального ПО.

Принципиальным решением при создании систем с гарантированной горизонтальной мобильностью является создание и использование абстракции ОС, которая затем отображается на реальную операционную систему, при этом различие между инструментальной и объектной ОС стирается.

Одной из наиболее удачных абстракций ОС является УПИ.

Программа взаимодействует с ОС только через предоставляемый пользователю набор системных вызовов (программный интерфейс с ней). УПИ представляет в своей основе унифицированный набор системных вызовов, описывающих некоторую абстрактную ОС (которая в частности может быть и реальной). Работая с абстракциями вызовов ОС, программист освобождается от знания вызовов реальных ОС, что увеличивает надежность программ и облегчает их разработку.

УПИ реализуется либо в самой ОС, либо над ней (то есть как расширение ОС). Если в программе используются только вызовы, входящие в УПИ, то она без адаптации может быть перенесена из одной ОС в другую. Необходимым условием этого является реализация УПИ в обеих ОС. Например, перенос пакета подготовки документации из БОС 1810 в МДОС 1810 занял менее часа.

При горизонтальном переносе программ, реализованных с использованием УПИ возникают три основные технические проблемы:

  • необходимость разработки программы переписи из одной ОС в другую;
  • наличие независимого от ОС формата объектных и загрузочных модулей;
  • необходимость разработки библиотек УПИ в конкретной ОС.

Наиболее простым путем переписи из одной ОС в другую является передача файлов по последовательному каналу между двумя ЭВМ. В этом случае не надо знать одновременно форматы дисков и их оглавлений для двух систем, а ввод/вывод дисковых файлов осуществляется на уровне системных вызовов либо конкретной ОС, либо программы на УПИ (то есть на логическом уровне). Перепись через гибкие диски более сложна в реализации, но проще и эффективней в эксплуатации.

Единый формат объектных модулей требует, чтобы при реализации УПИ был реализован также загрузчик для работы с этим форматом. Такой загрузчик сам может быть написан с использованием только вызовов УПИ и является таким образом мобильным, хотя его применение в конкретной ОС может потребовать дополнительной доработки из-за таких ее свойств, как динамическое распределение памяти, наличие виртуальной памяти и т. д.

Проведенный авторами анализ системных вызовов ОС ДЕМОС 16.1 показал возможность реализации УПИ в этой системе. Реализация мобильной системы программирования в мобильной операционной системе показывает принципиальные разлитая этих двух подходов к мобильности:

  • мобильность систем типа UNIX построена на переносе всей операционной среды и изменение этой среды требует больших усилий от программиста (например, разработка надстройки над ОС, работающей в реальном времени) и оптимальна для вертикальной мобильности;
  • мобильность на основе УПИ позволяет легко менять операционную среду, но вертикальную мобильность поддерживает только на уровне семейства микропроцессоров со сходной системой команд.

Инструментальная среда, предоставляемая мобильной системой программирования на СМ 1810, включает в себя трансляторы с языков Макроассемблер-86, ПЛ/М-86, Фортран-86, Паскаль-86 и Си-86, экранный редактор текстов, пакет программ обслуживания объектных модулей, пакет программ поддержки арифметического сопроцессора, пакет программ для документирования, а также отдельные инструментальные средства.

Этот набор средств достаточен для ведения разработки. Однако, для того чтобы разрабатывать большие программные системы на современном уровне предполагается расширить состав мобильной системы средствами сопровождения проекта, единым символическим отладчиком для языков высокого уровня, пакетом инструментальных средств.

УПИ в операционных системах ДОС 1810, МИКРОС-86 и МДОС 1810 реализован как надстройка над ОС и реализуется программами RUN, в которых содержится специфика реализации УПИ в конкретной ОС.

Для операционной системы МИКРОС-86 разработка программы RUN потребовала 5 чел.-мес. Сложность реализации УПИ зависит от развитости ОС объектной ЭВМ. Если набор системных вызовов шире набора вызовов УПИ, то реализация значительно упрощается.

Важным следствием МСП является наличие единого комплекта документации на трансляторы и их окружение. Это позволяет обеспечить не только высокое качество документации ОС, но и ее более эффективное сопровождение. Пользователи не растрачивают силы и время на изучение специфических свойств по существу одного и того же компилятора в разных ОС.

Набор вызовов УПИ приведен в таблице.

Код вызова Имя вызова Назначение
0 DQ$ALLOCATE Запрашивает сегмент памяти заданного размера
1 DQ$FREE Возвращает сегмент памяти системе
2 DQ$GET$SIZE Возвращает размер выделенного сегмента
3 DQ$TRAP$CC Захватывает управление при вводе с клавиатуры символа УС-C (CTRL-C)
4 DQ$TRAP$EXCEPTION Определяет подпрограмму пользователя для обработки особых ситуаций
5 DQ$GET$EXCEPTIONS-HANDLER Возвращает адрес текущей подпрограммы обработки особых ситуаций
6 DQ$DECODE$EXCEPTION Преобразует цифровой код особой ситуации в полное сообщение о ней
7 DQ$GET$SYSTEM$ID Возвращает сообщение, идентифицирующее имя операционной системы, в которой выполняется программа
8 DQ$GET$TIME Возвращает текущие дату и время
9 DQ$DELETE Удаляет существующий файл
10 DQ$RENAME Изменяет полное имя файла на заданное
11 DQ$ATTACH Создает присоединение к заданному файлу
12 DQ$CREATE Создает новый файл
13 DQ$OPEN Открывает файл для операций ввода/вывода
14 DQ$CLOSE Закрывает файл для операций ввода/вывода
15 DQ$DETACH Удаляет присоединение (но не файл), установленное вызовами DQ$ATTACH или DQ$CREATE
16 DQ$READ Производит буферизованное чтение из файла
17 DQ$WRITE Производит буферизованную запись в файл
18 DQ$SEEK Изменяет положения маркера записи/чтения в файле
19 DQ$TRUNCATE Отсекает оставшуюся часть файла
20 DQ$GET$CONNECTION$- STATUS Возвращает информацию о присоединении файла
21 DQ$CHANGE$EXTENSION Изменяет расширение имени файла
22 DQ$OVERLAY Загружает оверлейный модуль
23 DQ$SPECIAL Определяет возможность редактирования информации, вводимой оператором с консоли
24 DQ$GET$ARGUMENT Получает следующий аргумент из командной строки вызова программы
25 DQ$SWITCH$BUFFER Подставляет новую командную строку вместо существующей
26 DQ$EXIT Передает управление и код завершения из программы операционной системе
27 DQ$FILE$INFO Возвращает информацию об указанном файле
28 DQ$RESERVE$IO$MEMORY Резервирует память для операций ввода/вывода
29 DQ$DECODE$TIME Возвращает системное время и дату в двоичном и символьном представлениях
30 DQ$CHANGE$ACCESS Изменяет права доступа к указанному файлу

 

Структура вызовов УПИ

Вызов УПИ имеет следующую структуру:

  • код вызова передается в регистре АХ, параметры передаются через стек, для обращения используется программное прерывание 195 (0C3H). Последним параметром каждого вызова является ссылка на двухбайтовое поле статуса, в которое при успешном выполнении вызова возвращается код 0, при неудачном – код ошибки;
  • в вызываемую программу параметры передаются только через стек.

Порядок следования параметров в стеке:

Символьная строка в первом байте содержит число, указывающее ее длину. Возвращаемые значения передаются в регистрах AL (байт), АХ (слова) или ES:ВХ (указатель).

Мобильная система программирования

В состав средств МСП для разработки программного обеспечения входят трансляторы с языков программирования Фортран-86, ПЛ/М-86, Паскаль-86, Си-86 и Макроассемблер-86. Каждая ОС может также поддерживать свой собственный набор трансляторов, которые образуют резидентную систему программирования данной ОС. Например, в МДОС 1810 резидентная система состоит из Ассемблера-86 и Бейсика-86.

Фортран-86 является подмножеством языка Фортран-77, а Паскаль-86 – надмножеством стандартного языка Паскаль. Оба этих языка расширены средствами работы в среде микропроцессоров семейства К1810ВМ86 и совместимых с ними, а также их сопроцессоров. ПЛ/М-86, Си-86 и Макроассемблер-86 являются языками системного программирования, позволяющими наиболее полно использовать аппаратные возможности МП-систем. По существу все они являются машинно-ориентированными языками высокого уровня, позволяющими обрабатывать прерывания, осуществлять ввод/вывод через порты и работать с физическими адресами памяти.

Следует отметить дополнительные возможности языка Макроассемблер-86 по поддержке работы с арифметическим сопроцессором и достаточно большие возможности макропроцессирования. Используя макроопределения, программист может создать собственный проблемно-ориентированный язык.

Все трансляторы с языков, входящих в МСП, создают объектные модули в едином формате и с едиными правилами передачи параметров в процедуры, функции и подпрограммы. Эти модули могут компоноваться друг с другом с помощью программы LINK86, а также заноситься в единые библиотеки объектных модулей (с помощью программы обслуживания библиотек LIB86). Это позволяет наиболее адекватным образом использовать преимущества каждого конкретного языка программирования (например, вызывать из программы на языке ПЛ/М-86 подпрограммы на языке Фортран).

Языки МСП предназначены для создания больших, надежных и мобильных программных продуктов. Для простых программ, разрабатываемых непрофессионалами, больше подходит программирование на языках Бейсик и Турбо-Паскаль. (Отметим негативное влияние термина ''компьютерная грамотность" на непрофессионалов, тогда как реальное значение этого термина – "компьютерный ликбез"). Известно, что метод модульного программирования является основным при разработке больших и сверхбольших программ. Он позволяет расчленить программу на отдельные части и тем самым снизить уровень ее сложности до осознаваемого отдельным разработчиком. Языки МСП поддерживают модульное и структурное программирование, а также программирование мультимикропроцессорных систем с разделением функций.

Для ряда ОС имеется возможность перевода программ из формата объектного модуля МСП в форматы объектного модуля резидентной системы программирования, что позволяет иногда использовать некоторые возможности конкретной ОС.

Этой же цели служит набор интерфейсных библиотек, позволяющий из программ, разработанных в МСП, обращаться к системным вызовам конкретной ОС, однако при этом, как правило, теряется мобильность.

В МСП существует большой набор стандартных библиотек, называемых библиотеками поддержки времени исполнения, которые содержат процедуры и функции, использующиеся во время исполнения программы. Эти библиотеки можно разделить на два класса:

  • библиотеки, поддерживающие работу с арифметическим сопроцессором или его программную эмуляцию (если сопроцессор не установлен в ЭВМ) и математические вычисления, то есть поддерживающие операторы присваивания и вычисление выражений;
  • библиотеки, поддерживающие остальные исполняемые операторы языка программирования, в том числе операторы ввода/вывода.

Использование МСП дает существенный выигрыш в производительности труда, так как, обеспечивая горизонтальную мобильность ПО, она полностью исключает дублирование работ по программированию, снимает необходимость адаптации программ (и программистов) при переходе в другую ОС, поддерживает эффективное внедрение и сопровождение программ, ускоряет обучение пользователей и сохраняет им комфорт освоенной программной среды, удлиняя тем самым время жизни программ и расширяя область их распространения.

В целом, появление МСП является значительным достижением в технологии программирования, которое соответствует насущным потребностям практики.

Заключение

Учитывая важность обеспечения мобильности ПО и тенденцию к стандартизации системных вызовов ОС, авторы предлагают рассмотреть набор вызовов УПИ (см табл. 1) в качестве проекта стандарта СЭВ на системные вызовы ОС для микроЭВМ семейства М16-1.

Литература

  1. Мобильность программного обеспечения. / Под ред. П. Брауна. – М.: Мир, 1980. – 336 с.
  2. П. Браун. Макропроцессоры и мобильность программного обеспечения. – М.: Мир, 1977. – 253 с.
  3. Access operator's Guide. Genesis Corp., USA, 1983.
  4. RMX-86 Universal Development Interface Reference MANUAL. Intel Corp., USA, 1984.
  5. Intellec Series III Microcomputer Development System Programmer's Reference Manual. Intel Corp., USA, 1983.
  6. IBM Personal System/2: Focus on technology. IBM Corp., USA, 1987. – 103 p.

Статья опубликована в сборнике "Методические материалы и документация по пакетам прикладных программ", выпуск 53, Москва, МЦНТИ, 1987 г., стр. 63.
Перепечатывается с разрешения автора.