![]() |
|
сделать стартовой | добавить в избранное |
![]() |
Компьютеры, Программирование
Программное обеспечение
Разработка системной поддержки вызова программ,реализованных на языке Fortran, из среды Java |
С.С. Гайсарян, К.Н. Долгова, Труды Института системного программирования РАН Статья посвящена исследованию возможности вызова программ, реализованных на языке For ra 95, из среды Java. Для того, чтобы среды могли обмениваться данными, должно быть отображение данных одной среды на данные другой. В статье представлено описание отображения данных языка For ra на данные языка Java и обратно. Также описан способ эффективной передачи данных из среды Java в среду For ra и обратно. Он заключается в том, что память, выделенная средой For ra для размещения общих блоков и массивов, отождествляется с прямыми буферами среды Java. То есть прямые буферы среды Java размещаются по тем же адресам памяти, по которым размещены общие блоки и массивы языка For ra . Помимо этого, в статье описан метод организации вызова подпрограмм, реализованных на языке For ra из окружения Java, заключающийся в передаче параметров через прямые буферы окружения Java. Введение Имеется достаточно большое количество программ, реализованных на языке For ra и не потерявших ценность. В настоящее время широкую популярность получила среда программирования Java, обеспечивающая переносимость программ. Следовательно, возникает потребность иметь возможность вызывать подпрограммы, реализованные на языках For ra , из Java-программ. Для вызова подпрограмм, реализованных на языке С из Java программ есть J I, который доступен, начиная с версии JDK 1.2. Аналогичного интерфейса для вызова For ra -подпрограмм нет. Предложенная работа повещена разработке методики вызова For ra -подпрограмм из Java-среды. В настоящей работе рассмотрены основные отличия языков С и For ra , препятствующие использованию методики, аналогичной J I для вызова For ra -подпрограмм из Java-программ. Построено отображение данных языка For ra на данные Java и обратно. Предложена методика реализации общей области памяти для Java- и For ra -сред через прямые буферы пакета java. io. В последнем разделе описана прототипная реализация, выполненная с использованием J I, которая показала эффективность предложенной методики. 1. Отличия языков C и For ra У языков программирования C и For ra существует ряд различий, из-за которых нельзя перенести организацию J I для языка С на организацию подобного интерфейса для языка For ra . В стандарте языка С напрямую не указан размер примитивных типов . Выбор наилучшего для данной архитектуры размера типов оставлен на рассмотрение разработчиков компилятора. В стандарте языка For ra для каждого примитивного типа данных строго задан их размер. Это позволяет установить взаимно однозначное соответствие между типами языка Java и типами языка For ra , не используя промежуточных типов, как это реализовано в J I. Среда For ra размещает данные в статической области памяти программы. К данным есть доступ только по ссылке, и нет возможности получить адрес памяти, где они расположены. Среда For ra не поддерживает динамически создаваемых объектов данных. Среда C, во-первых, располагает данные программы в стеке, в куче и в статической области памяти программы, во-вторых, определена операция взятия адреса, позволяющие получить доступ не только к значениям данных, но и к адресам памяти, где они расположены.
Соответственно, для передачи данных из Java среды в C среду J I достаточно указать адрес области памяти, где данные хранятся. Передачу данных из Java среды в For ra среду нельзя выполнить аналогично тому, как это сделано в J I. Все параметры в языке For ra передаются только по ссылке, потому что в нем не определено понятие адреса переменной. В языке С параметры передаются только по значению, однако есть возможность передавать в качестве параметра функции указатели на ту область памяти, где хранится переменная. Соответственно, передачу данных из среды Java в среду For ra и обратно нельзя выполнить аналогично тому, как это сделано в J I. В многомерных массивах языка С данные располагаются по строкам, тогда как в многомерных массивах языка For ra данные располагаются по столбцам. В языке For ra есть возможность непосредственно работать с частями массива - вырезками и сечениями. В языке С такой возможности нет. Следовательно, методика передачи массивов, реализованная в J I, не может быть применена для среды For ra . В языке For ra есть общие блоки COMMO . Эти блоки можно размечать по-разному в каждой подпрограмме. Так, например, в одной подпрограмме может быть объявлен массив типа complex размера 100, расположенный в общем блоке /A/, а в другой подпрограмме на этой же памяти, то есть в том же общем блоке /A/, может быть объявлен массив типа real размера 200. Оба массива будут размещаться в памяти, начиная с одного и того же виртуального адреса, данные, которые в нем расположены - одни и те же, однако тип данных разный. В языке С аналогичная возможность может быть реализована посредством использования объявления u io . Однако передача данных, расположенных в COMMO блоках, с целью повышения эффективности должна выполняться по схеме, отличной от той, которая реализована в J I. Однако передача данных, расположенных в COMMO блоках с целью эффективности должна выполняться по схеме, отличной той, которая реализована в J I для передачи данных, объявленных в u io . Учитывая то, что в реализации связывания подпрограмм, написанных на языке For ra , с Java окружением должна быть сделана эффективная передача данных между For ra -подпрограммами и основным Java-модулем, а так же принимая во внимание отличия языков С и For ra , можно сделать вывод о том, что организация связывания между виртуальной машиной Java и подпрограммами, реализованными на языке For ra , должна осуществляться по несколько иной схеме, нежели связывание C-методов и виртуальной машины Java. 2. Размещение данных в среде For ra Программа, написанная на языке For ra , допускает использование следующих видов программных единиц: стандартных функций, подпрограмм FU C IO , подпрограмм SUBROU I E, операторов - функций, подпрограмм, написанных на других языках программирования, и подпрограмм BLOCK DA A . Формальные параметры языка For ra передаются обычно по ссылке, за исключением тех случаев, когда параметр не модифицируется в подпрограмме . В языке For ra имеются средства, позволяющие использовать одну и ту же область памяти для хранения данных, общих для двух или более программных модулей выполняемой программы.
Таким средством является общий блок . Значения объектов из общего блока доступны всем программным единицам, в которых этот блок описан . Каждый общий блок обязательно занимает в памяти непрерывный участок. Если некоторый программный модуль содержит несколько объявлений COMMO с одним и тем же именем, то все они рассматриваются как одно объявление и располагаются в памяти непрерывно и последовательно. Для объявления массивов в языке For ra существуют специальные предложения спецификации: объявление размерности DIME SIO . Так же массивы могут быть расположены в общих блоках. Массивы, полученные объявлением DIME SIO , представляют собой локальные данные той подпрограммы, внутри которой они описаны. При вызове подпрограмм, реализованных на языке For ra , из Java окружения необходимо передавать данные из среды Java в среду For ra . Также может возникнуть необходимость передавать данные из среды For ra в среду Java, если вызываемая программная единица из среды For ra - FU C IO - возвращает значение. Все параметры Java-среда передает только по значению, в среде Java нет методов работы с указателями, а все данные Java-программы расположены в куче. Любая подпрограмма, реализованная на языке For ra , может получать данные извне либо как параметры, либо через общие блоки, которые в ней описаны. Если For ra -подпрограмма получает данные для обработки через общие блоки, то вызывающая Java-программа должна иметь доступ на запись и чтение к той памяти, в которой эти общие блоки расположены. Такой доступ Java-программе возможно обеспечить, если на памяти, где располагается общий блок, разместить Java-объект. В качестве такого Java-объекта может быть взят прямой буфер класса Buffer, методы работы с которым доступный через пакет java. io. Для того чтобы получить такой буфер, нужно из For ra среды передать адрес начала общего блока и его размер. Дальше достаточно создать прямой буфер байтов, адрес начала которого будет совпадать с адресом начала общего блока, а размер будет такой же, как у соответствующего общего блока. Если For ra -подпрограмма получает данные для обработки через формальные параметры, то для передачи таких параметров из Java окружения необходимо выделить прямой буфер в Java-окружении, на который передаваемые параметры будут помещены. После того, как передаваемые параметры будут расположены на буфере, For ra -подпрограмме нужно передавать только адрес этого буфера и смещение в нем, по которому расположен соответствующий параметр. Возврат данных из функций языка For ra осуществляется по значению. Для передачи возвращаемого значения функцией языка For ra в Java-окружении, нужно это значение располагать в той области памяти, которая доступна и Java-окружению, и среде For ra . Такой областью памяти с точки зрения среды Java может выступать прямой буфер. На нем необходимо выделить место для значения, возвращаемого функцией среды For ra , и передать смещение в буфере For ra -функции как параметр. А For ra -функция запишет по полученному адресу возвращаемое значение. 3. Отображение типов данных языка Java в типы данных языка For ra Основные типы языка Java и соответствующие им типы языка For ra представлены в таблице 1.
Эта схема дает логическое представление о ядре, хотя в действительности в структуре ядра имеются отклонения от модели, поскольку отдельные модули испытывают внутреннее воздействие со стороны других модулей. Схема на Рисунке 2.1 имеет три уровня: уровень пользователя, уровень ядра и уровень аппаратуры. Обращения к операционной системе и библиотеки составляют границу между пользовательскими программами и ядром, проведенную на Рисунке 1.1. Обращения к операционной системе выглядят так же, как обычные вызовы функций в программах на языке Си, и библиотеки устанавливают соответствие между этими вызовами функций и элементарными системными операциями, о чем более подробно см. в главе 6. При этом программы на ассемблере могут обращаться к операционной системе непосредственно, без использования библиотеки системных вызовов. Программы часто обращаются к другим библиотекам, таким как библиотека стандартных подпрограмм ввода-вывода, достигая тем самым более полного использования системных услуг. Для этого во время компиляции библиотеки связываются с программами и частично включаются в программу пользователя
1. Разработка программы на языке LISP для построения кривых Серпинского i-го порядка
2. Разработка компьютерной программы на языке Паскаль для проведения простого теплофизического расчета
3. Разработка системного программного обеспечения
4. Синтаксический распознаватель арифметического оператора условного перехода языка FORTRAN
5. Программа курса «Язык рекламы»
9. Разработка форматов хранения данных программы. Структурирование
10. Создание программы на языке Delphi 7.0
11. Разработка транслятора в среде Java и С+
13. Разработка программы генерации тестов из базы данных на языке РНР
14. Разработка программы при помощи языка низкого уровня ассемблер
16. Разработка рекламной программы для страховой компании
20. Разработка программы на Ассемблере
21. Разработка лабораторного практикума "Создание тестирующей программы"
26. Деловой язык и культура речи юриста - тема "Разработка стратегии общения"
27. Прогнозирование банкротства и разработка антикризисной программы предприятия
28. Разработка программ стимулирования труда
30. Разработка программы туристского путешествия в Великом Новгороде
31. Программа вступительных экзаменов по русскому языку в 2004г. (МГУ)
32. Разработка маркетинговой программы
33. Разработка программ стимулирования труда
35. Особенности разработки образовательных программ для руководителей высшего звена
36. Разработка программы совершенствования организации международных перевозок
37. Разработка демонстрационных программ для применения в процессе преподавания физики
41. Программа курса Латинский язык
43. Разработка и применение пакетов прикладных программ
44. Разработка контрольно-проверочной программы модуля ввода-вывода МФПУ-1
48. Программа Microsoft Excel. Ее применение для разработки электронных таблиц
49. Разработка программы для построения кривых Серпинского i-го порядка
50. Алгоритм разработки и реализации федеральных целевых программ по развитию проблемных регионов России
52. Алгоритмический язык Pascal. Программа "Телефонный справочник"
57. Разработка анимационно-обучающей программы механической системы
59. Разработка обучающей программы, поддерживающей изучение темы "Структуры данных"
60. Разработка программ в среде программирования Turbo Pascal 7.0
61. Разработка программ с использованием динамической памяти
62. Разработка программного продукта на языке высокого уровня
64. Разработка программы автоматизации процесса подбора запчастей для ремонта автомобилей
65. Разработка программы для решения систем линейных уравнений
66. Разработка программы игры "Собери картинку"
67. Разработка программы на Delphi
68. Разработка программы представления табличных данных в виде диаграммы прямоугольников
69. Разработка программы решения системы линейных уравнений
73. Создание программы-переводчика текстов с английского на русский язык
74. Среда разработки и платформа для выполнения программ LabVIEW
75. Язык гипертекстовой разметки HTML в разработке информационных систем
77. Разработка программы определительных испытаний
78. Разработка маркетинговой программы продвижения на рынок нового вида бытовых услуг
79. Разработка программы маркетингового исследования для ОАО МЖК "Краснодарский"
80. Разработка программы продвижения новой продукции
82. Разработка антикризисной программы на предприятии
83. Разработка инновационных программ лояльности клиентов
84. Разработка программы финансового оздоровления предприятия
89. Этапы разработки экскурсионной программы
90. Программы государственной поддержки малого предпринимательства
91. Расчёт экономической эффективности разработки и создания программы
92. Разработка программы "Атамекен". Направление "Шапар"
93. Разработка основных разделов проекта производства работ
94. Разработка алгоритмов контроля и диагностики системы управления ориентацией космического аппарата
95. О роли эксперимента в разработке научных гипотез происхождения жизни
96. Схема вызова всех служб города Кургана
97. Разработка Мыковского карьера лабрадоритов
98. Разработка анализатора газов на базе газового сенсора RS 286-620