Система выполнения

редактировать
Эта статья посвящена инфраструктуре, необходимой для запуска программ. Для фазы выполнения программных приложений см. Время выполнения (фаза жизненного цикла программы).

Выполнение программы
Общие понятия
Типы кода
Стратегии компиляции
Заметное время выполнения
Известные компиляторы и инструментальные средства

В компьютерном программировании система времени выполнения, также называемая средой выполнения, в первую очередь реализует части модели выполнения. Это не следует путать с выполнения фазы жизненного цикла программы, в течение которого система выполнения находится в эксплуатации. При рассмотрении системы выполнения в отличие от среды выполнения (RTE) первая может быть определена как конкретная часть прикладного программного обеспечения (IDE), используемого для программирования, часть программного обеспечения, которая предоставляет программисту более удобную среду для запуска программ. во время их производства ( тестирования и т.п.), в то время как второй (RTE) будет самим экземпляром модели выполнения, применяемой к разработанной программе, которая сама затем запускается в вышеупомянутой системе времени выполнения.

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

СОДЕРЖАНИЕ

  • 1 Обзор
    • 1.1 Отношение к среде выполнения
  • 2 Примеры
  • 3 Расширенные функции
  • 4 История
  • 5 См. Также
  • 6 Ссылки
  • 7 Дальнейшее чтение

Обзор

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

Согласно этому определению, практически каждый язык имеет систему времени выполнения, включая скомпилированные языки, интерпретируемые языки и встроенные предметно-ориентированные языки. Даже вызываемые API автономные модели выполнения, такие как Pthreads ( потоки POSIX ), имеют систему времени выполнения, которая реализует поведение модели выполнения.

Большинство научных работ по системам времени выполнения сосредоточено на деталях реализации параллельных систем времени выполнения. Ярким примером системы параллельного выполнения является популярная модель параллельного программирования Cilk. Инструментарий прото-среды выполнения был создан для упрощения создания систем параллельного выполнения.

В дополнение к поведению модели выполнения система времени выполнения может также выполнять вспомогательные услуги, такие как проверка типов, отладка или генерация и оптимизация кода.

Отношение к среде выполнения

Система выполнения также является шлюзом, через который выполняющаяся программа взаимодействует со средой выполнения. Среда выполнения включает не только доступные значения состояния, но и активные сущности, с которыми программа может взаимодействовать во время выполнения. Например, переменные среды являются особенностями многих операционных систем и являются частью среды выполнения; работающая программа может получить к ним доступ через систему времени выполнения. Точно так же аппаратные устройства, такие как диски или DVD-приводы, являются активными объектами, с которыми программа может взаимодействовать через систему времени выполнения.

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

Примеры таких непосредственно связанных систем времени выполнения включают:

  • В период с 1983 по 1984 год Digital Research предложила несколько своих бизнес-приложений и образовательных приложений для IBM PC на загрузочных дискетах в комплекте с SpeedStart CP / M-86, сокращенной версией CP / M-86 в качестве среды выполнения.
  • Некоторые автономные версии Ventura Publisher (1986–1993), Artline (1988–1991), Timeworks Publisher (1988–1991) и ViewMAX (1990–1992) содержали специальные исполняемые версии GEM от Digital Research в качестве среды исполнения.
  • В конце 1990 - х годов, JP Software Процессор командной строки «сек 4DOS был опционально доступен в специальной версии среды выполнения, чтобы быть связаны с BATCOMP предварительно скомпилированных и зашифрованы пакетных заданий для создания unmodifyable исполняемых файлов из пакетных скриптов и запустить их на системах без установленного 4DOS.

Примеры

Система времени выполнения языка C - это особый набор инструкций, вставленных компилятором в исполняемый образ. Среди прочего, эти инструкции управляют стеком процессов, создают пространство для локальных переменных и копируют параметры вызова функций в верхнюю часть стека.

Часто нет четких критериев для определения того, какое поведение языка является частью самой системы времени выполнения, а какое может быть определено любой конкретной исходной программой. Например, в C установка стека является частью системы времени выполнения. Это не определяется семантикой отдельной программы, потому что поведение глобально инвариантно: оно сохраняется для всех выполнений. Это систематическое поведение реализует модель выполнения языка, в отличие от реализации семантики конкретной программы (в которой текст напрямую транслируется в код, который вычисляет результаты).

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

Другой пример - это случай использования интерфейса прикладного программирования (API) для взаимодействия с системой времени выполнения. Вызовы этого API выглядят так же, как вызовы обычной программной библиотеки, однако в какой-то момент во время вызова модель выполнения изменяется. Система времени выполнения реализует модель выполнения, отличную от той, на которой написана библиотека. Человек, читающий код обычной библиотеки, сможет понять поведение библиотеки, просто зная язык, на котором написана библиотека. Однако человек, читающий код API, который вызывает систему времени выполнения, не сможет понять поведение вызова API, просто зная язык, на котором был написан вызов. В какой-то момент через какой-то механизм модель выполнения перестает соответствовать языку, на котором написан вызов, и переключается на модель выполнения, реализованную средой выполнения система. Например, инструкция trap - это один из методов переключения моделей выполнения. Это различие отличает вызываемую API модель выполнения, такую ​​как Pthreads, от обычной программной библиотеки. И вызовы Pthreads, и вызовы программных библиотек вызываются через API, но поведение Pthreads нельзя понять с точки зрения языка вызова. Скорее, вызовы Pthreads задействуют внешнюю модель выполнения, которая реализуется системой времени выполнения Pthreads (эта система времени выполнения часто является ядром ОС).

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

Расширенные возможности

Некоторые компилируемые или интерпретируемые языки предоставляют интерфейс, который позволяет коду приложения напрямую взаимодействовать с системой времени выполнения. Примером может служить Threadкласс на языке Java. Класс позволяет коду (который анимирован одним потоком) выполнять такие действия, как запуск и остановка других потоков. Обычно таким образом недоступны основные аспекты поведения языка, такие как планирование задач и управление ресурсами.

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

В пределе исполняющая система может предоставлять такие услуги, как машина с P-кодом или виртуальная машина, которые скрывают даже набор команд процессора. Это подход, которого придерживаются многие интерпретируемые языки, такие как AWK, и некоторые языки, такие как Java, которые предназначены для компиляции в некоторый машинно-независимый код промежуточного представления (например, байт-код ). Такое расположение упрощает задачу реализации языка и его адаптации к различным машинам, а также повышает эффективность сложных языковых функций, таких как отражение. Он также позволяет выполнять одну и ту же программу на любом компьютере без явного шага перекомпиляции, что стало очень важной функцией с момента распространения Всемирной паутины. Чтобы ускорить выполнение, в некоторых системах времени выполнения предусмотрена возможность своевременной компиляции в машинный код.

Современный аспект систем времени выполнения - это поведение параллельного выполнения, такое как поведение, демонстрируемое конструкциями мьютексов в потоках Pthread и конструкциями параллельных секций в OpenMP. Система времени выполнения с таким режимом параллельного выполнения может быть модульной в соответствии с подходом протоко-времени выполнения.

История

Известными ранними примерами систем времени выполнения являются интерпретаторы BASIC и Lisp. Эти среды также включают сборщик мусора. Forth - это ранний пример языка, предназначенного для компиляции в код промежуточного представления; его исполняющая система представляла собой виртуальную машину, которая интерпретировала этот код. Другой популярный, если теоретический, пример Дональда Кнута «s MIX компьютер.

В языках C и более поздних версиях, поддерживающих динамическое выделение памяти, система времени выполнения также включала библиотеку, которая управляла пулом памяти программы.

В объектно-ориентированных языках программирования исполняющая система часто также отвечала за динамическую проверку типов и разрешение ссылок на методы.

Смотрите также

использованная литература

дальнейшее чтение

Последняя правка сделана 2023-03-21 07:24:51
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте