Runtime system что это

Обновлено: 02.07.2024

Нигде не нашел чёткого опрделения этми двумя понятиям.

Я понимаю фреймворк, как платформу, которая необходима для работы каких-либо приложений. Например, набор динамически линкуемых библиотек для нескольких приложений - уже фреймворк. Также под это определение подохдит и Java Runtime Environment (в том числе и JVM). Однако что такое рантайм? С одной стороны это всего лишь фаза выполнения программы. С другой стороны есть куча терминов, как runtime libraries, runtime system. Что вкладывает майкрософт в это понятие тоже неясно. Объясните, пожалуйста!

183 1 1 золотой знак 1 1 серебряный знак 4 4 бронзовых знака

Между библиотекой и фреймворком разница небольшая, но принципиальна. Если Ваш код просто использует функции модуля, то этот модуль скорее всего библиотека. А вот если модуль заставляет Вас писать код так как он хочет и сам его вызывает, то это уже фреймворк. А вот собственно модуль - это набор файлов-исходников (иногда уже скомпилированных).

runtime - это часть кода, существует в выполнимом файле (либо в отдельных so/dll) и обеспечивает всякие "удобства". Например, узнать тип объекта или сделать те же виртуальные вызовы. Добавляется обычно компилятором и обычный пользователь может даже не знать о нем. Также словом runtime называют то время, когда программа выполняется. Что конкретно имеется ввиду - нужно сдедить за контекстом.

runtime libraries - это библиотеки, которые используются во время работы программы. Иногда библиотеки поставляются в двух видах - для разработки и для обычной работы (вторые часто оптимизированы и с них выброшено лишнее). Хороший пример - bpl файлы делфи. Для одного и того же компонента могут быть библиотеки, которые содержат всякие инструметы для IDE, а есть которые только для работоспособности кода.

JRE - это не фреймворк, это runtime библиотека. Хотя с другой стороны это фреймворк для байткода. Но так как на байткоде пищут только особые извращенцы, то обычному программисту это не фреймфорк. А вот вся java - это один сплошной фреймворк:)

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

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

СОДЕРЖАНИЕ

Обзор

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

Согласно этому определению, практически каждый язык имеет систему времени выполнения, включая скомпилированные языки , интерпретируемые языки и встроенные предметно-ориентированные языки . Даже вызываемые 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 и более поздних версиях, поддерживающих динамическое выделение памяти, система времени выполнения также включала библиотеку, которая управляла пулом памяти программы.

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


Что такое служба NET Runtime Optimization

Служба оптимизации времени выполнения, известная как Mscorsvw.exe, используется для быстрого запуска приложений. Как правило, этот процесс не потребляет слишком много памяти. Но, если процесс оптимизации занимает много времени, это может привести к высокой загрузке ЦП.

Оптимизация NET Runtime Service

Чтобы ускорить процесс, нам нужно выполнить следующие команды:

Примечание. Буква C обозначает диск, на котором установлена операционная система. Если она установлена на другом диске, замените её.

Оптимизация NET Runtime Service через командную строку

В случае, если это не сработает, вы можете перейти к следующему решению.

Просканируйте систему на наличие инфекций

Чтобы решить эту проблему, рекомендуется использовать антивирусное программное обеспечение. Запустите глубокое сканирование и дождитесь результатов.

Запустите официальный скрипт Microsoft

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

Чтобы запустить его, выполните следующие действия:

  1. Посетите GitHub для получения официального скрипта или щелкните здесь
  2. Щелкните правой кнопкой мыши кнопку Raw → выберите Сохранить ссылку как

Загрузка скрипта Microsoft для решения проблемы с перегрузкой процессора

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

Если это не помогает, перейдём к следующему шагу.

Перезапустите службу NET Runtime Optimization

Высокая загрузка процессора, вызванная mscorsvw.exe, может быть устранена перезапуском службы.

Чтобы сделать это, выполните следующие действия:

  1. Нажмите Win + R
  2. Введите services.msc и нажмите OK .
  3. Перейдите к NVIDIA Telemetry Container → щелкните правой кнопкой мыши → Свойства.
  4. Щелкните стрелку вниз рядом с полем «Тип запуска» и выберите «Автоматически» → «Применить» → «ОК».

Теперь перейдите в диспетчер задач, вы больше не должны видеть высокую загрузку ЦП службой NET Runtime.

Однако, если и это не помогло, попробуем выполнить чистую загрузку.

Выполните чистую загрузку Windows

Чтобы выполнить эту задачу, выполните следующие действия:

  1. Нажмите Win + R
  2. Введите msconfig → ОК .
  3. Перейдите на вкладку Службы → установите флажок Не отображать службы Microsoft → затем нажмите Отключить все → ОК .

Подготовка к чистой загрузке системы Windows

Это должно помочь решить проблему.

Мы не рекомендуем отключать сервис. Однако, если вы столкнулись с высокой загрузкой ЦП из-за этого, вы можете оптимизировать её с помощью команды или можете просканировать систему на предмет заражения, используя антивирус для Windows.

Что представляет собой служба NET Runtime Optimization и mscorsvw.exe?

Mscorsvw.exe – это компонент Windows, используемый для оптимизации компьютеров и более быстрого запуска приложений.

После эпического срача в теме про Redox задался вопросом, а правильно ли я понимаю что такое рантайм в самом общем случае?

Как я думаю, собственно среда выполнения программы — это набор библиотек,

который транслирует вызовы процедур из библиотек некоторого ЯВУ в вызовы API-функций конкретной ОС.

В этой связи у меня другой вопрос, что такое модель выполнения?

Почему Вики говорит, что среда выполнения реализует исполнительную модель в терминах отличных от тех,

в которых реализована сама библиотека ЯВУ.

The runtime system implements an execution model different from that of the language the library is written in terms of.

Там дальше, конечно, идет пояснение, но его сути я так и не уловил.

sudo cast tailgunner , i-rinat , beastie ,


stevejobs


Почему Вики говорит, что среда выполнения реализует исполнительную модель в терминах отличных от тех, в которых реализована сама библиотека ЯВУ.

А они ошибаются. Это не обязательно. Интерпретатор языка может быть написан и на самом этом языке.

это скомпилированный набор библиотек, который транслирует вызовы процедур из библиотек некоторого ЯВУ

то есть, транслирует не скомпилированный набор библиотек, а некоторая машина, которая принимает на вход 2 строки: скомпилированный набор библиотек, и конечную программу.


В полном офигении подумал, что i_rinat забанили.


,Почему Вики говорит, что среда выполнения реализует исполнительную модель в терминах отличных от тех,

в которых реализована сама библиотека ЯВУ.

Парсер вошел в бесконечную рекурсию и сегфолтнулся.


Там есть оригинальный текст, может я кривой толмач)))


Ага, довыпендривался он.

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


Процитируй часть оригинального текста, которая вызвала вопрос.


Главное - не победа, а участие.


The runtime system implements an execution model different from that of the language the library is written in terms of.


Как практикующий программист :-)

Да тут скорее не для дискуссии, а для точного определения понятий, с претензией на универсальность.


Когда операция, обеспечиваемая языком, отсутствует в execution environment, она реализуется в runtime system. Для Си, например, умножение там, где его нет, или сдвиг на не-константное значение, хотя Си плохой пример - у него runtime system минимальная. Ну вот у Си++ исключения - часть runtime system, у Ады - управление задачами и рандеву.


В статье по ссылке справа есть блок, в котором runtime system и runtime library — отдельные пункты. В этом смысле у собранных программ на C и Rust runtime system нет. У Go и Objective-C есть: в частности, сборка мусора. У Java на JVM, понятное дело, есть JVM.

А чтобы всё не было так радужно, можно копнуть глубже, и обнаружить, что в glibc есть aio, который эмулируется на нитях. То есть некая неведомая штуковина запускает нити, хотя явно её никто не просил. Вполне себе runtime system.

Ох, там ещё и crt0. Вот тут я понимание потерял.

i-rinat ★★★★★ ( 05.04.16 19:53:53 )
Последнее исправление: i-rinat 05.04.16 19:55:32 (всего исправлений: 1)


В статье по ссылке справа есть блок, в котором runtime system и runtime library — отдельные пункты


Просто по структуре самого предложения я посчитал,

что execution model != execution environment


Execution model определяется языком, execution environment - обычно ОС, но может и голым железом.



Т.е. по-сути runtime-библиотека обеспечивает реализацию тех абстракций языка,

которые не реализованы в конкретной ОС?


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

tailgunner ★★★★★ ( 05.04.16 20:26:11 )
Последнее исправление: tailgunner 05.04.16 20:27:10 (всего исправлений: 1)


Т.е. определение из ОП имеет право на жизнь?


Я не очень понимаю, почему я там в списке

Извиняюсь =) Это я тебя порекомендовал ;-)


Т.е. определение из ОП имеет право на жизнь?

Метаданные Windows Runtime

image

Тем не менее, метаданные, которые описывают этот тип позволяют CLR получить экземпляр реализации при вызове конструктора класса.
При просмотре Windows Runtime метаданных можно также заметить, что определения типов и сборок используют новое ключевое слово WindowsRuntime.

image

Это ключевое слово является контекстно-зависимым и по разному интерпретируется в зависимости от того, где оно применяется. Например, если ключевым словом помечено определение типа (TypeDef), то этот тип подчиняется правилам системы типов Windows Runtime и вызов этого типа следует рассматривать как вызов WinRT API.

Взаимодействие CLR с компонентами WinRT

CRL поддерживает взаимодействие с COM-компонентами через обертки Runtime Callable Wrapper (RCW) и COM Callable Wrapper (CCW). Таким образом в CLR ссылка на WinRT объект представляет собой ссылку на RCW, которая в свою очередь содержит ссылку на WinRT объект. Соответственно управляемый код взаимодействует с RCW, который по сути является интерфейсом между вашим кодом и WinRT объектом.

image

Аналогичным образом в Windows Runtime ссылка на объект CLR представляет собой ссылку на CCW, которая в свою очередь содержит ссылку на CLR объект. Windows Runtime при этом взаимодействует с CCW для доступа к функциональности управляемого объекта.

WinRT типы и управляемый код

image

Проецирование типов
Базовый тип
Структуры

Структуры WinRT, в отличие от значимых типов CLR, могут содержать только открытые поля одного из базовых типов или же являться другой структурой WinRT. Таким образом, следующий код выдаст ошибку на этапе компиляции:


К тому же, структуры WinRT не могут определять конструкторы или содержать вспомогательные методы. Однако, некоторые структуры CLR, для удобства, проецирует на свои собственные, тем самым предоставляя разработчикам вспомогательные методы и конструкторы. К таким относятся, например, структура Windows.Foundation.Point, Windows.Foundation.Size и Windows.Foundation.Rect.

Строки
Null-совместимые типы

В WinRT API для определения null-совместимого значимого типа используется интерфейс Windows.Foundation.IReference<T>, который CLR проецирует на свой собственный System.Nullable<T>. Например, если метод в файле WinMD имеет следующую сигнатуру:


то в управляемом коде этот метод будет выглядеть следующим образом:

Делегаты

В качестве типа параметра или возвращаемого значения делегата WinRT могут использовать только WinRT-совместимые типы. Так же делегаты с глобальной (public) областью видимости не могут быть объявлены как вложенные (на самом деле это общие правила для среды выполнения Windows в целом). Когда вы передаете объект делегата компоненту Windows Runtime, этот объект упаковывается в обертку CCW, которая не уничтожается сборщиком мусора до тех пор, пока она не будет освобождена компонентом, который ее использует. Интересен так же тот факт, что делегаты WinRT не имеют методов BeginInvoke и EndInvoke.

События


то при компиляции этой строки кода, компилятор превращает ее в следующие инструкции:


Для того, чтобы вызывать событие, следует воспользоваться свойством InvocationList, возвращающее делегат, список вызовов которого включает в себя все делегаты, добавленные в качестве обработчиков события.

Время и дата

В WinRT время и дата представляются в формате UTC структурой Windows.Foundation.DateTime. CLR проецирует данный тип на структуру System.DateTimeOffset, а не на System.DateTime. Стоит заметить, что DateTime не содержит информацию о часовом поясе. Поэтому дата и время, возвращаемые функциями WinRT в формате UTC, CLR преобразует в локальное время. И наоборот, при передаче структуры DateTimeOffset в WinRT функцию, дата и время преобразуются в UTC формат.

Массивы

WinRT API поддерживает только одномерные массивы. Соответственно следующий код вызовет ошибку времени компиляции:

Коллекции

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

Читайте также: