Лекция 1 Введение в системное программное обеспечение
![]()
|
ТрансляторТрансля́тор — программа, которая принимает на вход программу на одном языке (он в этом случае называется исходный язык, а программа — исходный код), и преобразует её в программу, написанную на другом языке (соответственно, целевой язык и объектный код). В качестве целевого языка наиболее часто выступают машинный код, Ассемблер и байт-код, так как они наиболее удобны (с точки зрения производительности) для последующего исполнения. Наиболее часто встречаются две разновидности трансляторов: Компиляторы — выдают результат в виде исполняемого файла (в данном случае считаем, что компоновка входит в компиляцию). Этот файл: транслируется один раз — может быть запущен самостоятельно не требует для работы наличия на машине создавшего его транслятора Интерпретаторы — исполняют программу после разбора (в этом случае в роли объектного кода выступает внутреннее представление программы интерпретатором). Исполняется она построчно. В данном случае программа транслируется (интерпретируется) при каждом запуске (если объектный код кешируется, возможны варианты) требует для исполнения наличия на машине интерпретатора и исходного кода Помимо «чисто» трансляторов и интерпретаторов, существует множество промежуточных вариантов. Так, большинство современных интерпретаторов перед исполнением переводят программу в байт-код (так как его покомандно выполнять гораздо проще, а значит, быстрее) или даже прямо в машинный код (в последнем варианте от интерпретатора остался только автоматический запуск, поэтому такой «интерпретатор» называется JIT-компилятором). Важное примечание: продукты, использующие промежуточные варианты между парадигмами транслятора в машинный код и интерпретатора, выделились сравнительно недавно — когда машины стали достаточно мощными, чтобы компилировать код «на лету». До этого времени трансляция была сложной и времязатратной задачей, и выполнялась только отдельно (и даже на других машинах). В связи с этим, в старой литературе термины «транслятор» и «интерпретатор» противопоставляются друг другу как диаметрально противоположные подходы! Также, раньше компиляторы назывались «трансляторами», поскольку компоновка как отдельная стадия выделилась позже, а трансляторы не в машинный код были мало распространены. (См. также Компилятор#Трансляция и компоновка) См. такжеИнтерпретатор Компилятор Ассемблер ЛитератураКасьянов В. Н., Поттосин И. В. Методы построения трансляторов. — Новосибирск: Наука, 1986. C. 344. КомпоновщикКомпоновщик (также реда́ктор свя́зей, англ. linker, link editor) — программа, которая производит компоновку — принимает на вход один или несколько объектных модулей и собирает по ним исполняемый модуль. Для связывания модулей, компоновщик использует таблицы имён, созданные компилятором в каждом из объектных модулей. Такие имена могут быть двух типов: Определённые или экспортируемые имена — функции и переменные, определённые в данном модуле и предоставляемые для использования другим модулям Неопределённые или импортируемые имена — функции и переменные, на которые ссылается модуль, но не определяет их внутри себя Работа компоновщика заключается в том, чтобы в каждом модуле разрешить ссылки на неопределённые имена. Для каждого импортируемого имени находится его определение в других модулях, упоминание имени заменяется на его адрес. Загрузчик программЗагру́зчик (англ. loader) — в информатике, программа, отвечающая за загрузку исполняемых файлов и запуск соответствующих новых процессов. Обычно является частью операционной системы, но может быть и самостоятельной программой — к примеру, позволяющей операционной системе запускать программы, скомпилированные для других операционных систем (см. также: эмуляторы, WINE). При запуске новой программы загрузчик должен: Считать информацию из запускаемого файла. Если необходимо — загрузить в память недостающие динамические библиотеки. Заменить в коде новой программы неизвестные адреса на точные, с учётом текущего размещения памяти. Это называется «релокацией» (от англ. relocation) или «перемещением». Создать в памяти образ нового процесса и запланировать его к исполнению. Загрузчик операционной системы действует по схожему принципу, но обычно является отдельной программой, поскольку решает специфическую задачу — запуск самой операционной системы. См. такжеСистемное программное обеспечение ELF (формат исполняемого файла) PE (формат исполняемого файла) |