stringtranslate.com

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

В компьютерном программировании система выполнения или среда выполнения — это подсистема, которая существует как на компьютере, на котором создается программа, так и на компьютерах, на которых программа предназначена для запуска. Название происходит от разделения времени компиляции и времени выполнения компилируемых языков , которое аналогичным образом различает компьютерные процессы, участвующие в создании программы (компиляции) и ее выполнении на целевой машине (среде выполнения). [1]

Большинство языков программирования имеют ту или иную форму системы времени выполнения, которая обеспечивает среду, в которой выполняются программы. Эта среда может решать ряд проблем, включая управление памятью приложения , способ доступа программы к переменным , механизмы передачи параметров между процедурами , взаимодействие с операционной системой (ОС) и другие. Компилятор делает предположения в зависимости от конкретной системы выполнения для создания правильного кода. Обычно система времени выполнения несет некоторую ответственность за настройку и управление стеком и кучей и может включать в себя такие функции, как сбор мусора , потоки или другие динамические функции, встроенные в язык. [1]

Обзор

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

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

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

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

Связь со средами выполнения

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

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

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

Примеры

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

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

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

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

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

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

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

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

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

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

История

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

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

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

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

Рекомендации

  1. ^ аб Ахо, Альфред В .; Лам, Моника Син-Линг ; Сетхи, Рави ; Уллман, Джеффри Дэвид (2007). Составители: принципы, методы и инструменты (2-е изд.). Бостон, Массачусетс, США: Pearson Education . п. 427. ИСБН 978-0-321-48681-3. Компилятор должен взаимодействовать с операционной системой и другим системным программным обеспечением для поддержки этих абстракций на целевой машине.
  2. ^ Блюмофе, Роберт Дэвид [на немецком языке] ; Йорг, Кристофер Ф.; Кушмаул, Брэдли С.; Лейзерсон, Чарльз Э.; Рэндалл, Кейт Х.; Чжоу, Юли (август 1995 г.). «Cilk: эффективная многопоточная система выполнения». Материалы пятого симпозиума ACM SIGPLAN «Принципы и практика параллельного программирования» . Ассоциация вычислительной техники (ACM). стр. 207–216. дои : 10.1145/209936.209958 . ISBN 9780897917001. S2CID  221936412.
  3. ^ Институт исследований открытого исходного кода (2011). «Добро пожаловать на домашнюю страницу набора инструментов Proto-Runtime». Набор инструментов Proto-Runtime Toolkit (PRT) . Архивировано из оригинала 11 февраля 2020 г. Проверено 11 января 2020 г.
  4. ^ Аппель, Эндрю Уилсон (май 1989 г.). «Система выполнения» (PDF) . Университет Принстон . Архивировано из оригинала (PDF) 30 декабря 2013 г. Проверено 30 декабря 2013 г.
  5. ^ «Посмотрите, что нового в библиотеке приложений CP/M для IBM PC — предложение по экономии времени — получите Concurrent CP/M бесплатно» (PDF) (флаер о продукте). Пасифик Гроув, Калифорния, США: Digital Research, Inc., 1983. Архивировано (PDF) из оригинала 11 февраля 2020 г. Проверено 11 февраля 2020 г. […] SpeedStart упрощает использование нашего программного обеспечения. Все программное обеспечение в библиотеке приложений CP/M содержит новую версию операционной системы CP/M SpeedStart , встроенную прямо на диск с программой. Все, что вам нужно сделать, чтобы использовать эти приложения, — это вставить диск в ваш IBM PC , включить систему, и все готово к работе. Это избавляет от необходимости загружать отдельную операционную систему, менять диски и загружать прикладные программы. Программное обеспечение SpeedStart из библиотеки приложений CP/M также: […] Предоставляет вам бесплатную рабочую версию CP/M […] Устраняет необходимость установки каждой новой прикладной программы […] Обеспечивает совместимость с программами Digital Research мощная 16-битная операционная система CP/M-86 и современная многозадачная операционная система Concurrent CP/M . […]
  6. ^ «DRI поставляет 128-тысячную версию логотипа Dr. Logo» (PDF) . Micro Notes — Техническая информация о продуктах Digital Research . Том. 2, нет. 2. Пасифик Гроув, Калифорния, США: Digital Research, Inc., май 1984 г., с. 4. СЗВ-106-002. Архивировано (PDF) из оригинала 11 февраля 2020 г. Проверено 11 февраля 2020 г. […] Dr. Logo впервые появился на розничном рынке осенью 1983 года для IBM PC и поднялся на вершину Hot List Softsel . Розничная версия включала SpeedStart CP/M , сокращенную версию CP/M , которая загружается автоматически при включении системы. […][1]
  7. ^ Digital Research Inc. (февраль 1984 г.). «Представляем программное обеспечение для IBM PC с бонусом в 350 долларов!». БАЙТ (Реклама). Том. 9, нет. 2. С. 216–217 . Проверено 22 октября 2013 г.[2][3]
  8. ^ Digital Research Inc. (1984-02-07). «Представляем программное обеспечение для IBM PC с бонусом в 350 долларов!». Журнал ПК (реклама). Том. 3, нет. 2. PC Communications Corp., стр. 50–51. ISSN  0745-2500. Архивировано из оригинала 11 февраля 2020 г. Проверено 11 февраля 2020 г.
  9. ^ Digital Research Inc. (декабрь 1983 г.). «Представляем программное обеспечение для IBM PC с бонусом в 350 долларов!». Журнал ПК (реклама). Том. 2, нет. 7. PC Communications Corp., стр. 306–307. ISSN  0745-2500. Архивировано из оригинала 11 февраля 2020 г. […] Представляем SpeedStart — эксклюзивную программную систему для загрузки и запуска. Библиотека приложений CP/M предлагает больше, чем просто лучшее в отрасли программное обеспечение IBM PC . Каждое из наших приложений обеспечивает непревзойденное удобство нашей эксклюзивной однодисковой системы SpeedStart. SpeedStart — это специальная версия мощной операционной системы CP/M-86 , встроенная в каждый из наших дисков с программным обеспечением. Когда вы будете готовы к работе, просто загрузите диск, включите IBM PC и вперед! SpeedStart устраняет трудоемкую задачу загрузки отдельного рабочего диска и последующей «установки» программного обеспечения. Фактически, система SpeedStart позволяет вам работать быстрее и проще, чем любое другое программное обеспечение, доступное сегодня. И самое главное, он ваш без каких-либо дополнительных затрат. Более того, SpeedStart можно обойти и запускать программное обеспечение под операционной системой IBM PC будущего — замечательной многозадачной системой Concurrent CP/M . […]
  10. ^ abc Крауттер, Томас; Барнс, Крис Дж. (14 июня 2006 г.) [29 декабря 1999 г.]. «ГЕМ/4». Разработка ГЕМ . Архивировано из оригинала 16 марта 2013 г. Проверено 12 января 2020 г. […] Операционная система Artline 2 называлась GEM/4 […] все изменения в GEM/4 были внесены в сотрудничестве с Ли Лоренценом и Доном Хейскеллом, чтобы сохранить совместимость с VenturaPublisher . […]
  11. ^ Эллиотт, Джон К. (9 мая 1999 г.). «Сравнение GEM и ViewMAX». Seasip.info . Архивировано из оригинала 07.11.2016 . Проверено 7 ноября 2016 г.
  12. ^ Пол, Матиас Р. (13 апреля 1997 г.) [1993]. DRDOS6UN.TXT — Zusammenfassung der dokumentierten und undokumentierten Fähigkeiten von DR DOS 6.0 (на немецком языке) (60-е изд.). Архивировано из оригинала 07.11.2016 . Проверено 7 ноября 2016 г. {{cite book}}: |work=игнорируется ( помощь )
  13. ^ Пол, Матиас Р. (1997-06-07) [1994]. NWDOS7UN.TXT — Zusammenfassung der dokumentierten und undokumentierten Fähigkeiten von Novell DOS 7 (на немецком языке) (85-е изд.). Архивировано из оригинала 07.11.2016 . Проверено 7 ноября 2016 г. {{cite book}}: |work=игнорируется ( помощь )
  14. ^ Георгиев, Лучезар И. (2 ноября 2008 г.). «Рабочая версия 4DOS, BATCOMP и пакетное шифрование файлов». Архив группы новостей Narkive . Группа новостей : comp.os.msdos.4dos. Архивировано из оригинала 11 января 2020 г. Проверено 11 января 2020 г.

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

Внешние ссылки