Понедельник, 25.11.2024, 18:00
Приветствую Вас Гость | RSS | PDA

Всё для студента информата

Полезная информация

Материалы для студента

Всё для студента IT » Материалы для студента » Теория языков программирования

Программно-аппаратный компьютер. Трансляторы и виртуальная архитектура.

Программно-аппаратный компьютер

Машинный язык – это обычно язык низкого уровня. Но в действительности машинный язык не должен быть непременно языком низкого уровня.
Можно выбрать любой язык и точно определить набор структур данных и алгоритмов, которые задают правила выполнения любой программы, написанной на этом языке.
Всегда можно сконструировать аппаратное устройство, машинный язык которого будет в точности тем же самым выбранным языком программирования.(для языка С++, или любого другого). Это утверждение основывается на важном и основополагающем принципе компьютерного конструирования: любой точно определенный алгоритм или структура данных могут быть реализованы в аппаратуре. Поскольку компьютер – это просто набор алгоритмов и структур данных, то можно предположить, что его аппаратная реализация возможна независимо от сложности компьютера или используемого машинного языка.
На практике в качестве машинных языков обычно используются языки низкого уровня из тех соображений, что в противном случае (если взять, например, в качестве  машинного языка С или Ada) компьютер был бы гораздо сложнее и дороже. И к тому гибкость настройки компьютера с машинным языком низкого уровня на любые приложения значительно выше в виду наличия универсального набора команд, простой неструктурированной памяти и набора быстрых регистров.
Обычный альтернативой строго аппаратной реализации компьютера является программно - аппаратный компьютер, который моделируется микропрограммой, выполняемой на специальном микропрограммируемом компьютере. Машинный язык этого компьютера состоит из набора микрокоманд очень низкого уровня, которые обычно реализуют простые передачи данных между оперативной памятью и быстрыми регистрами, непосредственно между регистрами и другие операции по суммированию и умножению.
Микропрограммируемое моделирование компьютера иногда называют эмуляцией. Получившийся в результате компьютер называется виртуальным компьютером.

Трансляторы и виртуальная архитектура

Теоретически возможно создать аппаратный или программно-аппаратный компьютер, на котором непосредственно выполнялись бы программы, написанные на любом избранном языке программирования. Таким образом получился бы компьютер с соответствующим машинным языком, например С, Prolog, LISP и т.д. Но создание такого компьютера было бы экономически невыгодно и поэтому следует идти по пути создания компьютеров с машинными языками достаточно низкого уровня.
Программы же мы пишем на языке высокого уровня. Поэтому возникает вопрос: как организовать выполнение программ на конкретном компьютере программиста и независимо от машинного кода.
Для этой задачи существует два метода:

  1. Трансляция (компиляция)

Примеры трансляторов: ассемблер, компилятор, загрузчик, препроцессор.
Транслятор переводит программы языка высокого уровня в эквивалентные программы на машинном языке используемого компьютера. Затем аппаратная часть компьютера (интерпретатор и простейшие операции) непосредственно выполняют оттранслированную в машинный код программу. Термин транслятор обозначает языковый процессор, который получает на вход программу на исходном языке (этот исходный может быть как языком высокого, так и низкого уровня) и выдает на выходе эквивалентную по функциональности программу на так называемом объектом языке (он также может быть произвольным языком). Разновидности трансляторов:

    • ассемблер – транслятор, для которого исходный язык есть «язык ассемблер» или «символьное представление объектного машинного кода», а объектный язык  есть разновидность машинного языка реального компьютера. В большинстве случаев каждая инструкция на исходном языке переводится в одну команду на объектном языке.
    • компилятор – это транслятор, для которого исходный язык есть язык высокого уровня, а объектный язык близок к машинному языку реального компьютера. Объектный язык – это либо язык ассемблера, либо вариант машинного языка. Например, программа на языке C компилируется в программы на языке ассемблера, которые затем транслируются ассемблером в машинный язык.
    • загрузчик или редактор связей – это транслятор, объектный язык которого состоит из готовых машинных команд, а исходный язык почти идентичен объектному языку. Объектный язык состоит из программ на машинном языке в перемещаемой форме ( то есть имеющих механизмы загрузки и привязки к назначаемым  адресам памяти). Кроме этого в объектный язык добавляется таблица загрузочных адресов для согласованной привязки объектных модулей к точкам памяти.
    • препроцессор или макропроцессор – это транслятор, который в качестве исходного языка имеет некоторую расширенную форму языка высокого уровня (например, Java и C++), а объектный язык – стандартная версия этого языка. Объектная программа, созданная препроцессорм, готова к трансляции и выполнению   
  1. Программная имитация (программная интерпретация). Вместо того чтобы транслировать программы на языке высокого уровня в эквивалентные программы на машинном языке, можно смоделировать с помощью программ, выполняемых на хост-машине, другой компьютер, для которого машинным языком будет данный язык высокого уровня. Для этого нужно сконструировать набор программ на машинном языке хост-компьютера, которые моделируют алгоритмы и структуры данных, необходимые для выполнения программ на языке высокого уровня. Подобный метод называется программной имитацией (программной интерпретацией) компьютера с машинным языком высокого уровня на хост-машине. Для моделируемой машины входными данными являются программы на языке высокого уровня. Основная моделирующая программа, используя алгоритм интерпретации, аналогичный представленному на рис.2.2, декодирует и выполняет каждый оператор заданной программы в соответствующей последовательности и производит определяемый интерпретируемой программой вывод результирующих данных. Таким образом, можно сказать, хост-компьютер создает виртуальный компьютер, моделирующий язык высокого уровня. Когда хост-компьютер выполняет программу на языке высокого уровня, сложно сказать, выполняется ли программа непосредственно аппаратной частью компьютера или сначала она преобразуется в программу на машинном языке низкого уровня, а затем уже выполняется.

Отметим разницу между трансляцией и программной интерпретацией. Сначала об общем: в том и другом случае входными данными являются программы на языке высокого уровня. Но результаты разные: после трансляции получается программа на объектном языке, которая затем должна выполняться аппаратным интерпретатором для этого объектного языка, а программный интерпретатор непосредственно выполняет введенную программу.
Дополнительный разностный аспект – транслятор обрабатывает операторы, входящие в программу, в порядке их фактического ввода, а интерпретатор следует логике управления выполняемой программы.
Чистая трансляция  используется редко и тогда, когда исходный язык достаточно близок к машинному языку, как в случае с ассемблером.
Чистая интерпретация также редка и применяется для интерактивных языков и языков управления операционными системами.
Комбинированный подход: чистая трансляция  плюс чистая интерпретация, схема которого представлена на рис.2.3. Сначала программа транслируется из своей исходной формы в форму, более удобную для выполнения, и мы получаем подпрограммы или процедуры. Затем на этапе загрузки они объединяются с набором программ поддержки выполнения (run-time support routines), реализующих программно-моделируемые операции, что в совокупности приводит к созданию выполняемой формы программы. Операторы этой формы программы декодируются и выполняются посредством их интерпретации.
Соотношение трансляции  и интерпретации при реализации ЯП строится из преимуществ этих процессов для различных конструкций алгоритмов обработки. Эффективнее, например, транслировать операторы цикла или неоднократный вызов подпрограммы, которые в случае интерпретирующего процесса  будут декодироваться столь раз, сколько заложено в самом алгоритме обработки. За счет этого значительно снижается скорость интерпретации в сравнении с трансляцией.
Основной недостаток трансляции заключается в том, что при получении машинной структуры объектной программы, привязанной к адресам памяти процессора, значительно усложняется поиск возможных ошибок в операторах исходной программы. Кроме того объем памяти для объектной формы резко возрастает в сравнении с режимом интерпретации.

. Структура процесса реализации языка программирования

Ключевой вопрос реализации языка программирования заключается в том, какое представление имеет программ во время ее выполнения на реальном компьютере. Иначе говоря, является этот язык машинным языком данного компьютера или нет? В зависимости от ответа на этот вопрос языки (вернее их реализации) делятся на компилируемые и интерпретируемые.

  1. Компилируемые языки. Языки С, С++, FORTRAN, Pascal и Ada принято считать компилируемыми. Программы на этих языках транслируются в машинный код компьютера перед началом выполнения. Программная интерпретация в этом случае ограничивается только интерпретацией набора программ поддержки выполнения, которые моделируют элементарные операции исходного языка, на имеющие близкого аналога в машинном коде
  2. Интерпретируемые языки. Языки LISP, ML, Perl, Postscript, Prolog и Smalltalkчасто реализуются с использование программного интерпретатора. При такой реализации транслятор выдает не машинный код используемого компьютера, а некую промежуточную форму программы. Эта форма легче для выполнения, чем исходная программа, но она не есть машинный код. Процесс интерпретации для выполнения полученной программы должен быть реализован программным образом, поскольку  аппаратный интерпретатор в данном случае непосредственно применить невозможно. Трансляторы интерпретируемых языков – довольно простые программы, основная сложность реализуется в программном обеспечении процесса интерпретации.

Язык Java похож скорее на Pascal и C++, чем на LISP, но чаще реализуется как интерпретируемый язык. Компилятор  Java вырабатывает промежуточный набор байт-кодов для виртуальной машины Java. Основной причиной неэффективности web-приложений является потеря времени при передаче по сети затребованных пользователем страниц, а не выполнение программ на хост-компьютере. Передача байт-кодов на ловальный клмрьютер выгоднее в отношении временных затрат, чем передача результатов выполнения программы на web-сервере. Однако web-сервер не в состоянии предугадать архитектуру хост-компьютера. Поэтому браузер (локального компьютера) создает виртуальную машину Java, которая и выполняет стандартный набор байт-кодов Java.

Что такое средства проектирования информационных систем? Это вопрос для отдельной статьи.

Похожие статьи:

Не нашли то, что Вам нужно?.. Найдите ответ на форуме!
Категория: Теория языков программирования | Добавил: admin (11.04.2011)
Просмотров: 1289 | Теги: Тяп, лекция
Сообщество
Помощь
Форма входа
Поиск

Студенческий помощник по информатике © 2024
При цитировании материалов данного сайта, обязательна ссылка на источник: ITstudents.ru



>