Система выполнения
Выполнение программы |
---|
Общие понятия |
Типы кода |
Стратегии составления |
Известное время выполнения |
|
Известные компиляторы и наборы инструментов |
|
В компьютерном программировании система времени выполнения или среда выполнения — это подсистема, которая существует как на компьютере, на котором создается программа, так и на компьютерах, на которых программа предназначена для запуска. Название происходит от времени компиляции и времени выполнения разделения компилируемых языков , которое аналогичным образом различает компьютерные процессы, участвующие в создании программы (компиляции) и ее выполнении на целевой машине (среде выполнения). [1]
Большинство языков программирования имеют ту или иную форму системы времени выполнения, которая обеспечивает среду, в которой выполняются программы. Эта среда может решить ряд проблем, включая управление приложения памятью , способ доступа программы к переменным , механизмы передачи параметров между процедурами , взаимодействие с операционной системой (ОС) и другие. Компилятор . делает предположения в зависимости от конкретной системы выполнения для создания правильного кода Обычно система времени выполнения несет некоторую ответственность за настройку и управление стеком и кучей и может включать в себя такие функции, как сбор мусора , потоки или другие динамические функции, встроенные в язык. [1]
Обзор
[ редактировать ]Каждый язык программирования определяет модель выполнения , и многие реализуют по крайней мере часть этой модели в системе времени выполнения. Одним из возможных определений поведения системы времени выполнения, среди прочего, является «любое поведение, не связанное напрямую с самой программой». Это определение включает помещение параметров в стек перед вызовами функций, параллельное выполнение связанных действий и дисковый ввод-вывод .
Согласно этому определению, практически каждый язык имеет систему времени выполнения, включая компилируемые языки , интерпретируемые языки и встроенные предметно-ориентированные языки . Даже автономные модели выполнения, вызываемые API , такие как Pthreads ( POSIX потоки ), имеют систему времени выполнения, которая реализует поведение модели выполнения.
Большинство научных статей по системам времени выполнения сосредоточено на деталях реализации параллельных систем времени выполнения. Ярким примером системы параллельного выполнения является Cilk , популярная модель параллельного программирования. [2] Набор инструментов proto-runtime был создан для упрощения создания параллельных систем времени выполнения. [3]
Помимо поведения модели выполнения, система времени выполнения может также выполнять вспомогательные услуги, такие как проверка типов , отладка или кода генерация и оптимизация . [4]
Тип | Описание | Примеры |
---|---|---|
Среда выполнения | Программная платформа , предоставляющая среду для выполнения кода. | Node.js , .NET Framework |
Двигатель | Компонент среды выполнения, который выполняет код путем его компиляции или интерпретации. | Движок JavaScript в веб-браузерах, виртуальная машина Java |
Устный переводчик | Тип движка, который читает и выполняет код построчно, без предварительной компиляции всей программы. | Интерпретатор CPython , Ruby MRI , JavaScript (в некоторых случаях) |
JIT-интерпретатор | Тип интерпретатора, который динамически компилирует код в машинные инструкции во время выполнения, оптимизируя код для более быстрого выполнения. | V8 , PyPy интерпретатор |
Связь со средами выполнения
[ редактировать ]Система выполнения также является шлюзом, через который работающая программа взаимодействует со средой выполнения . Среда выполнения включает в себя не только доступные значения состояния, но и активные сущности, с которыми программа может взаимодействовать во время выполнения. Например, переменные среды являются функциями многих операционных систем и являются частью среды выполнения; работающая программа может получить к ним доступ через систему времени выполнения. Аналогичным образом, аппаратные устройства, такие как диски или приводы DVD, являются активными объектами, с которыми программа может взаимодействовать через систему времени выполнения.
Одним из уникальных применений среды выполнения является ее использование в операционной системе, которая позволяет только ей работать. Другими словами, от загрузки до выключения вся ОС предназначена только для приложений, работающих в этой среде выполнения. Любой другой код, который попытается запустить, или любые сбои в приложениях приведут к нарушению среды выполнения. Нарушение среды выполнения, в свою очередь, приводит к выходу из строя ОС, останавливая всю обработку и требуя перезагрузки. Если загрузка осуществляется из постоянной памяти, создается чрезвычайно безопасная, простая система с одной задачей.
Примеры таких непосредственно связанных систем выполнения включают в себя:
- В период с 1983 по 1984 год компания Digital Research предлагала несколько своих деловых и образовательных приложений для IBM PC на загрузочных дискетах в комплекте со SpeedStart CP/M-86 , сокращенной версией CP/M-86, в качестве среды выполнения. [5] [6] [7] [8] [9]
- Некоторые автономные версии Ventura Publisher (1986–1993), [10] Артлайн (1988–1991), [10] Издательство Timeworks (1988–1991) и ViewMAX (1990–1992) [11] [12] [13] от Digital Research содержали специальные версии GEM в качестве среды выполнения. [10]
- В конце 1990-х годов от JP Software процессор командной строки 4DOS был опционально доступен в специальной версии времени выполнения, которая могла быть связана с BATCOMP предварительно скомпилированными и зашифрованными пакетными заданиями , чтобы создавать немодифицируемые исполняемые файлы из пакетных сценариев и запускать их в системах без установленной 4DOS. . [14]
Примеры
[ редактировать ]Система времени выполнения языка C представляет собой особый набор инструкций, вставляемых компилятором в исполняемый образ. Помимо прочего, эти инструкции управляют стеком процесса, создают место для локальных переменных и копируют параметры вызова функции на вершину стека.
Часто не существует четких критериев для определения того, какое языковое поведение является частью самой системы выполнения, а какое может определяться какой-либо конкретной исходной программой. Например, в C настройка стека является частью системы времени выполнения. Оно не определяется семантикой отдельной программы, поскольку поведение глобально инвариантно: оно сохраняется при всех выполнениях. Такое систематическое поведение реализует модель выполнения языка, а не реализацию семантики конкретной программы (в которой текст напрямую преобразуется в код, вычисляющий результаты).
Это разделение между семантикой конкретной программы и средой выполнения отражается в различных способах компиляции программы: компиляция исходного кода в объектный файл , содержащий все функции, и компиляция всей программы в исполняемый двоичный файл. Объектный файл будет содержать только ассемблерный код, соответствующий включенным функциям, а исполняемый двоичный файл будет содержать дополнительный код, реализующий среду выполнения. С одной стороны, в объектном файле может отсутствовать информация из среды выполнения, что будет решено путем связывания . С другой стороны, код объектного файла по-прежнему зависит от предположений системы времени выполнения; например, функция может считывать параметры из определенного регистра или места стека, в зависимости от соглашения о вызовах, используемого средой выполнения.
Другим примером является использование интерфейса прикладного программирования (API) для взаимодействия с системой выполнения. Вызовы этого API выглядят так же, как вызовы обычной программной библиотеки , однако в какой-то момент во время вызова модель выполнения меняется. Система времени выполнения реализует модель выполнения, отличную от модели языка, на котором написана библиотека. Человек, читающий код обычной библиотеки, сможет понять поведение библиотеки, просто зная язык, на котором она написана. Однако человек, читающий код API, который вызывает систему времени выполнения, не сможет понять поведение вызова API, просто зная язык, на котором был написан вызов. В какой-то момент, с помощью какого-то механизма, модель выполнения перестает быть моделью языка, на котором написан вызов, и переключается на модель выполнения, реализуемую средой выполнения. система. Например, инструкция ловушки — это один из методов переключения моделей выполнения. Именно это отличие отличает модель выполнения, вызываемую API, например Pthreads, от обычной программной библиотеки. И вызовы Pthreads, и вызовы программной библиотеки вызываются через API, но поведение Pthreads невозможно понять с точки зрения языка вызова. Скорее, вызовы Pthreads приводят в действие внешнюю модель выполнения, которая реализуется системой времени выполнения Pthreads (этой системой времени выполнения часто является ядро ОС).
В качестве крайнего примера сам физический процессор можно рассматривать как реализацию системы времени выполнения определенного языка ассемблера. С этой точки зрения модель выполнения реализуется физическими системами ЦП и памяти. По аналогии, системы времени выполнения для языков более высокого уровня сами реализуются с использованием некоторых других языков. Это создает иерархию систем времени выполнения, в которой сам ЦП — или фактически его логика на уровне микрокода или ниже — выступает в качестве системы времени выполнения самого низкого уровня.
Расширенные функции
[ редактировать ]Некоторые компилируемые или интерпретируемые языки предоставляют интерфейс, который позволяет коду приложения напрямую взаимодействовать с системой времени выполнения. Примером является Thread
класс на языке Java . Класс позволяет коду (анимированному одним потоком) выполнять такие действия, как запуск и остановка других потоков. Обычно основные аспекты поведения языка, такие как планирование задач и управление ресурсами, недоступны таким образом.
Поведения более высокого уровня, реализуемые системой выполнения, могут включать в себя такие задачи, как рисование текста на экране или подключение к Интернету. Часто операционные системы также обеспечивают такое поведение, и, если это возможно, система времени выполнения реализуется как уровень абстракции , который преобразует вызов системы времени выполнения в вызов операционной системы. Это скрывает сложность или различия в услугах, предлагаемых разными операционными системами. Это также означает, что ядро ОС само по себе можно рассматривать как систему времени выполнения, а набор вызовов ОС, вызывающих поведение ОС, можно рассматривать как взаимодействие с системой времени выполнения.
В пределе система времени выполнения может предоставлять такие службы, как машина с P-кодом или виртуальная машина процессора , которые скрывают даже набор команд . Этому подходу следуют многие интерпретируемые языки, такие как AWK , и некоторые языки, такие как Java , которые предназначены для компиляции в некоторый машинно-независимый промежуточный код представления (например, байт-код ). Такое расположение упрощает задачу реализации языка и его адаптации к различным машинам, а также повышает эффективность сложных функций языка, таких как рефлексивное программирование . Это также позволяет выполнять одну и ту же программу на любой машине без явного этапа перекомпиляции — функция, которая стала очень важной с момента распространения Всемирной паутины . Чтобы ускорить выполнение, некоторые системы времени выполнения поддерживают JIT-компиляцию в машинный код.
Современный аспект систем времени выполнения — это поведение параллельного выполнения, такое как поведение, демонстрируемое конструкциями мьютексов в Pthreads и конструкциями параллельных секций в OpenMP . Система времени выполнения с таким поведением параллельного выполнения может быть модульной в соответствии с подходом прото-среды выполнения.
История
[ редактировать ]Яркими ранними примерами систем времени выполнения являются интерпретаторы BASIC и Lisp . Эти среды также включали сборщик мусора . Форт — ранний пример языка, предназначенного для компиляции в код промежуточного представления; его система времени выполнения представляла собой виртуальную машину, интерпретировавшую этот код. Другой популярный, хотя и теоретический, пример — Кнута Дональда компьютер MIX .
В языках C и более поздних версиях, поддерживающих динамическое распределение памяти, система времени выполнения также включала библиотеку, которая управляла пулом памяти программы.
В объектно-ориентированных языках программирования система времени выполнения часто также отвечала за динамическую проверку типов и разрешение ссылок на методы.
См. также
[ редактировать ]- Модель исполнения
- Модель программирования
- Время выполнения (фаза жизненного цикла программы)
- Самозагрузчик
- Статическая сборка
Ссылки
[ редактировать ]- ^ Jump up to: а б Ахо, Альфред В .; Лам, Моника Син-Линг ; Сетхи, Рави ; Уллман, Джеффри Дэвид (2007). Составители: принципы, методы и инструменты (2-е изд.). Бостон, Массачусетс, США: Pearson Education . п. 427 . ISBN 978-0-321-48681-3 .
Компилятор должен взаимодействовать с операционной системой и другим системным программным обеспечением для поддержки этих абстракций на целевой машине.
- ^ Блюмофе, Роберт Дэвид [на немецком языке] ; Йорг, Кристофер Ф.; Кушмаул, Брэдли С.; Лейзерсон, Чарльз Э.; Рэндалл, Кейт Х.; Чжоу, Юли (август 1995 г.). «Cilk: эффективная многопоточная система выполнения». Материалы пятого симпозиума ACM SIGPLAN «Принципы и практика параллельного программирования» . Ассоциация вычислительной техники (ACM). стр. 207–216. дои : 10.1145/209936.209958 . ISBN 9780897917001 . S2CID 221936412 .
- ^ Институт исследований открытого исходного кода (2011). «Добро пожаловать на домашнюю страницу набора инструментов Proto-Runtime Toolkit» . Набор инструментов Proto-Runtime Toolkit (PRT) . Архивировано из оригинала 11 февраля 2020 г. Проверено 11 января 2020 г.
- ^ Аппель, Эндрю Уилсон (май 1989 г.). «Система выполнения» (PDF) . Принстонский университет . Архивировано из оригинала (PDF) 30 декабря 2013 г. Проверено 30 декабря 2013 г.
- ^ «Посмотрите, что нового в библиотеке приложений 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 и современная многозадачная система. CP/M Параллельная операционная система . […]
- ^ «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] - ^ Digital Research Inc. (февраль 1984 г.). «Представляем программное обеспечение для IBM PC с бонусом в 350 долларов!» . БАЙТ (Реклама). Том. 9, нет. 2. С. 216–217 . Проверено 22 октября 2013 г. [2] [3]
- ^ Digital Research Inc. (7 февраля 1984 г.). «Представляем программное обеспечение для IBM PC с бонусом в 350 долларов!» . Журнал ПК (реклама). Том. 3, нет. 2. PC Communications Corp., стр. 50–51. ISSN 0745-2500 . Архивировано из оригинала 11 февраля 2020 г. Проверено 11 февраля 2020 г.
- ^ 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 будущего — замечательной многозадачной системы. Параллельный CP/M . […]
- ^ Jump up to: а б с Крауттер, Томас; Барнс, Крис Дж. (14 июня 2006 г.) [29 декабря 1999 г.]. «ГЕМ/4» . Разработка ГЕМ . Архивировано из оригинала 16 марта 2013 г. Проверено 12 января 2020 г.
[…] Операционная система Artline 2 называлась GEM/4 […] все изменения в GEM/4 были внесены в сотрудничестве с Ли Лоренценом и Доном Хейскеллом, чтобы сохранить совместимость с VenturaPublisher . […]
- ^ Эллиотт, Джон К. (9 мая 1999 г.). «Сравнение GEM и ViewMAX» . Seasip.info . Архивировано из оригинала 07.11.2016 . Проверено 7 ноября 2016 г.
- ^ Пол, Матиас Р. (13 апреля 1997 г.) [1993]. DRDOS6UN.TXT - Краткое изложение документированных и недокументированных возможностей DR DOS 6.0 (на немецком языке) (60-е изд.). Архивировано из оригинала 07.11.2016 . Проверено 7 ноября 2016 г.
{{cite book}}
:|work=
игнорируется ( помогите ) - ^ Пол, Маттиас Р. (07.06.1997) [1994]. NWDOS7UN.TXT - Краткое изложение документированных и недокументированных возможностей Novell DOS 7 (на немецком языке) (85-е изд.). Архивировано из оригинала 07.11.2016 . Проверено 7 ноября 2016 г.
{{cite book}}
:|work=
игнорируется ( помогите ) - ^ Георгиев, Лучезар И. (2 ноября 2008 г.). «Рабочая версия 4DOS, BATCOMP и пакетное шифрование файлов» . Архив группы новостей Narkive . Группа новостей : comp.os.msdos.4dos . Архивировано из оригинала 11 января 2020 г. Проверено 11 января 2020 г.
Дальнейшее чтение
[ редактировать ]- «ИМЯ ENTX — управление системой выполнения Microsoft MS-DOS Computer Pascal» . 1.00. Корпорация Майкрософт . 1981. Архивировано из оригинала 23 сентября 2018 г. Проверено 23 сентября 2018 г.
Внешние ссылки
[ редактировать ]- Словарное определение времени выполнения в Викисловаре