Каждая программа работает в среде выполнения?
Я знаю, что некоторые программы, такие как Java или.NET, используют для выполнения обширную систему времени выполнения. Но я прочитал кое-что в книге об ОС (которая там не объясняется более подробно), которая звучит как ЛЮБАЯ программа, написанная пользователем, запускаемая в среде выполнения, а не непосредственно в операционной системе.
Приведенный пример: когда вы читаете файл, вы не вызываете функцию операционной системы для каждого прочитанного вами бита, вместо этого вы читаете биты или байты в буфер, управляемый системой времени выполнения, а когда он пуст, вы снова вызываете системную функцию.,
Значит ли это, что, строго говоря, любая программа запускается в среде выполнения какого-либо типа (кроме, может быть, программ, написанных на ассемблере...)?
2 ответа
По определению да.
Для работы программного обеспечения требуется определенная среда, в противном случае это просто набор битов, хранящихся на каком-либо устройстве хранения. Существует несколько категорий среды выполнения, и иногда различия между различными типами среды размыты.
На одном уровне находится среда, предоставляемая аппаратным обеспечением, которая включает в себя архитектуру набора команд, службы, предоставляемые устройствами, BIOS и т. Д.
Затем существует среда, предоставляемая операционной системой. Операционные системы работают на разных уровнях сложности, но, как правило, являются посредниками между запущенными программами и оборудованием хоста. Некоторые операционные системы довольно тонкие, в том смысле, что программы могут делать что-то без посредничества операционной системы. Другие не позволяют программному обеспечению напрямую взаимодействовать с оборудованием, поэтому программы должны сделать запрос (например, через средство или службу операционной системы), и операционная система затем напрямую взаимодействует с оборудованием.
На другом уровне указана среда, связанная с языком программирования. Семантика многочисленных языков программирования представлена в терминах исполнения на некоторой абстрактной машине. Примеры включают в себя C и C++, где каждое выражение, каждое объявление и каждое выражение имеют набор определенных эффектов на абстрактной машине. Количество случаев неопределенного поведения (как указано в стандартах) составляет случаи, когда операторы языка могут выходить за пределы того, что приемлемо для этой абстрактной машины.
Тесно связаны с предыдущим типом среды, есть языки, которые связаны с библиотекой некоторой формы. Эта стандартная библиотека предоставляет средства, облегчающие работу программиста. Почти все языки среднего уровня связаны с библиотекой - C, C++, Java, Ada и т. Д. И т. Д. Некоторые из этих функций могут быть реализованы на самом языке, но другие требуют помощи хост-системы (например, операционной системы, аппаратного обеспечения и т. д.) могут быть реализованы на другом языке (например, на ассемблере).
Следующий уровень - среды выполнения (такие как виртуальная машина Java), в которых выполняются программы (некоторого формата). Программы (обычно) взаимодействуют только с той средой выполнения, которая, в свою очередь, запрашивает действия у системы, в которой она размещена. Иногда программы могут напрямую взаимодействовать с хост-системой (через механизмы, известные как thunking, собственные интерфейсы и т. Д.).
Кроме того, существуют программы, которые интерпретируют код "на лету" (например, языковые переводчики), поэтому, по сути, сам исходный код является программой, а интерпретатор запрашивает услуги из среды, в которой он размещен.
Даже программы, написанные на ассемблере, работают в какой-то среде. Сборка переводится в машинно-ориентированные инструкции, специфичные для некоторой хост-среды (состоящей из аппаратного обеспечения, возможно, операционной системы, возможно, некоторой другой программы, размещенной в операционной системе).
Существуют также специальные типы операционных систем (например, гипервизоры), которые могут размещать другие операционные системы и часто позволяют одновременно выполнять несколько операционных систем на одной аппаратной платформе. Когда операционная система пытается получить доступ к оборудованию, вызов перехватывается и опосредуется гипервизором, который, в свою очередь, выполняет запросы к оборудованию хоста.
Дело в том, что все эти вещи связаны с тем, что программное обеспечение делает некоторые предположения о среде, в которой оно выполняется. Даже программное обеспечение, написанное на ассемблере, которое напрямую взаимодействует с оборудованием, предполагает набор аппаратного обеспечения и средства связи с этим оборудованием. Прошивка - это тип программного обеспечения, предполагающий, что оно работает на каком-либо устройстве (например, на материнской плате, контроллере памяти, контроллере жесткого диска и т. Д.).
Правильная идея, все под операционной системой работает во время выполнения операционной системы.
Аудиофайл, конечно, он нуждается во времени выполнения ОС, чтобы добраться до аудио драйверов ОС и создавать какой-то сумасшедший шум.
Нативные программы, конечно, работают поверх операционной системы.
Но DotNet и Java, они своего рода особые, они создают еще один абстрактный слой во время выполнения ОС, чтобы стандартизировать его до нужной формы и формы, унифицировать время выполнения, а затем запускать свои байт-коды / сборки для него, переводя необходимые детали в обоих направлениях.
Но, конечно же, большая часть кода работает в какой-то среде выполнения. Вы можете абстрагировать это понятие до самого ядра операционной системы, оно работает в какой-то среде ЦП, возможно, вы можете назвать это нативной средой выполнения:).
Но даже это было бы не совсем правильно. Возможно, вы знаете, что современные процессоры x86 выглядят извне как архитектура CISC, но в процессе работы процессор фактически разбирает эти большие сложные инструкции CISC на последовательности команд RISC, которые затем выполняются и переупорядочиваются по мере необходимости. Это также своего рода среда выполнения.
Странно, но если посмотреть на сам процессор, то законы физики можно рассматривать как очередную абстракцию времени выполнения:).
Это экстрим? В самом деле? Хорошо, тогда подумайте о теоретических идеях физики / космологии, что мы могли бы жить на самом деле в голографической вселенной, симуляции, и не заметили бы:).
Как это идея для времени выполнения?:).