Главная страница
Навигация по странице:

  • Интерпретаторы

  • Важное примечание

  • Компоновщик

  • Лекция 1 Введение в системное программное обеспечение


    Скачать 0.9 Mb.
    НазваниеЛекция 1 Введение в системное программное обеспечение
    Дата14.05.2022
    Размер0.9 Mb.
    Формат файлаdoc
    Имя файлаf66a995.doc
    ТипЛекция
    #528406
    страница7 из 10
    1   2   3   4   5   6   7   8   9   10

    Транслятор


    Трансля́торпрограмма, которая принимает на вход программу на одном языке (он в этом случае называется исходный язык, а программа — исходный код), и преобразует её в программу, написанную на другом языке (соответственно, целевой язык и объектный код).

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

    Наиболее часто встречаются две разновидности трансляторов:

    • Компиляторы — выдают результат в виде исполняемого файла (в данном случае считаем, что компоновка входит в компиляцию). Этот файл:

      • транслируется один раз — может быть запущен самостоятельно

      • не требует для работы наличия на машине создавшего его транслятора

    • Интерпретаторы — исполняют программу после разбора (в этом случае в роли объектного кода выступает внутреннее представление программы интерпретатором). Исполняется она построчно. В данном случае программа

      • транслируется (интерпретируется) при каждом запуске (если объектный код кешируется, возможны варианты)

      • требует для исполнения наличия на машине интерпретатора и исходного кода

    Помимо «чисто» трансляторов и интерпретаторов, существует множество промежуточных вариантов. Так, большинство современных интерпретаторов перед исполнением переводят программу в байт-код (так как его покомандно выполнять гораздо проще, а значит, быстрее) или даже прямо в машинный код (в последнем варианте от интерпретатора остался только автоматический запуск, поэтому такой «интерпретатор» называется JIT-компилятором).

    Важное примечание: продукты, использующие промежуточные варианты между парадигмами транслятора в машинный код и интерпретатора, выделились сравнительно недавно — когда машины стали достаточно мощными, чтобы компилировать код «на лету». До этого времени трансляция была сложной и времязатратной задачей, и выполнялась только отдельно (и даже на других машинах). В связи с этим, в старой литературе термины «транслятор» и «интерпретатор» противопоставляются друг другу как диаметрально противоположные подходы! Также, раньше компиляторы назывались «трансляторами», поскольку компоновка как отдельная стадия выделилась позже, а трансляторы не в машинный код были мало распространены. (См. также Компилятор#Трансляция и компоновка)

    См. также


    • Интерпретатор

    • Компилятор

    • Ассемблер

    Литература


    • Касьянов В. Н., Поттосин И. В. Методы построения трансляторов. — Новосибирск: Наука, 1986. C. 344.



    Компоновщик


    Компоновщик (также реда́ктор свя́зей, англ. linker, link editor) — программа, которая производит компоновку — принимает на вход один или несколько объектных модулей и собирает по ним исполняемый модуль.

    Для связывания модулей, компоновщик использует таблицы имён, созданные компилятором в каждом из объектных модулей. Такие имена могут быть двух типов:

    • Определённые или экспортируемые имена — функции и переменные, определённые в данном модуле и предоставляемые для использования другим модулям

    • Неопределённые или импортируемые имена — функции и переменные, на которые ссылается модуль, но не определяет их внутри себя

    Работа компоновщика заключается в том, чтобы в каждом модуле разрешить ссылки на неопределённые имена. Для каждого импортируемого имени находится его определение в других модулях, упоминание имени заменяется на его адрес.

    Загрузчик программ


    Загру́зчик (англ. loader) — в информатике, программа, отвечающая за загрузку исполняемых файлов и запуск соответствующих новых процессов. Обычно является частью операционной системы, но может быть и самостоятельной программой — к примеру, позволяющей операционной системе запускать программы, скомпилированные для других операционных систем (см. также: эмуляторы, WINE).

    При запуске новой программы загрузчик должен:

    • Считать информацию из запускаемого файла.

    • Если необходимо — загрузить в память недостающие динамические библиотеки.

    • Заменить в коде новой программы неизвестные адреса на точные, с учётом текущего размещения памяти. Это называется «релокацией» (от англ. relocation) или «перемещением».

    • Создать в памяти образ нового процесса и запланировать его к исполнению.

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

    См. также


    • Системное программное обеспечение

    • ELF (формат исполняемого файла)

    • PE (формат исполняемого файла)



    1   2   3   4   5   6   7   8   9   10


    написать администратору сайта