Автор работы: Пользователь скрыл имя, 07 Января 2013 в 16:27, реферат
Неотъемлемая часть современных ЭВМ – системы программного обеспечения, являющиеся логическим продолжением логических средств ЭВМ, расширяющим возможности аппаратуры и сферу их использования. Система программного обеспечения, являясь посредником между человеком и техническими устройствами машины, автоматизирует выполнение тех или иных функций в зависимости от профиля специалистов и режимов их взаимодействия с ЭВМ.
ВВЕДЕНИЕ 2
СИСТЕМЫ ПРОГРАММИРОВАНИЯ 3
СРЕДСТВА СОЗДАНИЯ ПРОГРАММ 3
ИНТЕГРИРОВАННЫЕ СИСТЕМЫ ПРОГРАММИРОВАНИЯ 4
СРЕДЫ БЫСТРОГО ПРОЕКТИРОВАНИЯ 5
АРХИТЕКТУРА ПРОГРАММНЫХ СИСТЕМ 6
ОСНОВНЫЕ СИСТЕМЫ ПРОГРАММИРОВАНИЯ 9
КОМПИЛЯТОРЫ И ИНТЕРПРИТАТОРЫ 10
ТРАНСЛЯЦИЯ И КОМПОНОВКА 12
Трансляция 12
Компоновка 16
ИСХОДНЫЙ И ОБЪЕКТНЫЙ МОДУЛИ 17
Объектный модуль 19
Исполняемая программа 22
ЗАКЛЮЧЕНИЕ 25
СПИСОК ЛИТЕРАТУРЫ 27
Компиляторы полностью обрабатывают весь текст программы (он иногда называется исходный код). Они просматривают его в поисках синтаксических ошибок (иногда несколько раз), выполняют определенный смысловой анализ и затем автоматически переводят (транслируют) на машинный язык — генерируют машинный код. Нередко при этом выполняется оптимизация с помощью набора методов, позволяющих повысить быстродействие программы (например, с помощью инструкций, ориентированных на конкретный процессор, путем исключения ненужных команд, промежуточных вычислений и т. д.). В результате законченная программа получается компактной и эффективной, работает в сотни раз быстрее программы, выполняемой с помощью интерпретатора, и может быть перенесена на другие компьютеры с процессором, поддерживающим соответствующий машинный код.
Основной недостаток компиляторов — трудоемкость трансляции языков программирования, ориентированных на обработку данных сложной структуры, часто заранее неизвестной или динамически меняющейся во время работы программы. Тогда в машинный код приходится вставлять множество дополнительных проверок, анализировать наличие ресурсов операционной системы, динамически их захватывать и освобождать, формировать и обрабатывать в памяти компьютера сложные объекты, что на уровне жестко заданных машинных инструкций осуществить довольно трудно, а для ряда задач практически невозможно.
С помощью интерпретатора, наоборот, допустимо в любой момент остановить работу программы, исследовать содержимое памяти, организовать диалог с пользователем, выполнить сколь угодно сложные преобразования данных и при этом постоянно контролировать состояние окружающей программно-аппаратной среды, благодаря чему достигается высокая надежность работы. Интерпретатор при выполнении каждого оператора проверяет множество характеристик операционной системы и при необходимости максимально подробно информирует разработчика о возникающих проблемах. Кроме того, интерпретатор очень удобен для использования в качестве инструмента изучения программирования, так как позволяет понять принципы работы любого отдельного оператора языка.
В реальных системах программирования перемешаны технологии и компиляции, и интерпретации. В процессе отладки программа может выполняться по шагам, а результирующий код не обязательно будет машинным — он даже может быть исходным кодом, написанным на другом языке программирования (это существенно упрощает процесс трансляции, но требует компилятора для конечного языка), или промежуточным машиннонезависимым кодом абстрактного процессора, который в различных компьютерных архитектурах станет выполняться с помощью интерпретатора или компилироваться в соответствующий машинный код.
При трансляции выполняется перевод программы, понятной человеку, на язык, понятный компьютеру. Если цель трансляции – преобразование всего исходного текста на внутренний язык компьютера (т.е. получение некоторого нового кода) и только, то такая трансляция называется также компиляцией. Исходный текст называется также исходной программой или исходным модулем, а результат компиляции – объектным кодом или объектным модулем. Если же трансляции подвергаются отдельные операторы исходных текстов и при этом полученные коды сразу выполняются, такая трансляция называется интерпретацией. Поскольку трансляция выполняется специальными программными средствами, последние носят название компилятора или интерпретатора, соответственно.
В процессе компиляции последовательно выполняются лексический, синтаксический, семантический анализ, генерация промежуточного кода, оптимизация промежуточного кода, генерация внутреннего представления.
Рисунок 1
В то же время структура "правильного" оператора ввода определяется схемой:
Рисунок 2
Поскольку представленные структуры идентичны, оператор read (NABOR,CHISLO); при синтаксическом анализе определяется как правильный.
Именно на этом шаге выявляются ошибки в написании названий операторов: они ведут к некорректной структуре всего оператора. Так, примеру с "неправильным" оператором ввода соответствует структура, показанная на рисунке:
Рисунок 3
Поскольку структура этого рисунка не соответствует структуре рисунка 1, оператор rread (NABOR,CHISLO); расценивается как синтаксически некорректный: компилятор не найдет в анализируемом фрагменте требуемого действия, которое задается названием оператора, и сообщит об этом программисту.
Следует отметить, что при интерпретации анализу подвергается не вся программа, а отдельные операторы. При этом из названных шагов выполняются лишь первые четыре.
Компоновка
Компоновка программы создает готовую для работы программу, которая называется также исполняемой программой или загрузочным модулем. При этом решаются две основные задачи:
Например, пусть для выполнения программы из таблицы раздела Трансляция отводится область основной памяти, начиная с абсолютного адреса 40. Тогда, с учетом сегментированной схемы адресации указанные в таблице адреса ( с учетом абсолютного адреса 40) преобразуются в свои сегментированные эквиваленты:
Исходные адреса |
Сегментированные адреса |
1 |
0002:0008 |
3 |
0002:000А |
5 |
0002:000С |
8 |
0002:000F |
9 |
0003:0000 |
В полученных сегментированных адресах номера сегментов хранятся в специальных регистрах процессора и в коды команд не включаются, а включаются лишь смещения. Тогда объектный код из таблицы преобразуется в следующий вид:
Адрес размещения команды |
Содержимое адреса | |
Абсолютный (десятичная система счисления) |
Сегментированный (шестнадцатеричная система счисления) | |
40 |
0002:0008 |
- |
42 |
0002:000А |
126 1 |
44 |
0002:000С |
127 0008 |
47 |
0002:000F |
124 |
Исходный модуль - это текстовый файл части программы, написанный на каком-либо языке программирования. Исходный модуль обычно оформляется специальным образом для того, чтобы он мог быть оттранслирован (в объектный модуль).
Прежде чем дать определение
понятия «модуль», требуется немного
разобраться в том, что же является
исходным материалом модуляризации.
К такому материалу, безусловно, следует
отнести тексты программ на алгоритмических
языках. Более того, рассмотрение проблем
модуляризации можно было бы даже ограничить
только текстами программ, поскольку именно
здесь разыгрываются основные события
и проявляются практически все наиболее
интересные особенности вычленения модулей.
Однако точнее все же будет распространить
модуляризацию на все первичные, т. е. непосредственно
вводимые разработчиком материалы программного
фонда. Помимо исходных текстов программ
к первичным материалам относятся также:
тексты исходных данных, тексты указаний
об атрибутах выделенных частей программных
материалов (автор, решаемая задача, используемый
численный метод, ...), тексты процедур,
применяемых к программным материалам
(например, указание «транслировать и
результат трансляции поместить в указанную
библиотеку объектных модулей», или «собрать
программу указанной конкретной конфигурации»,
или «если были внесены изменения, оттранслировать
и собрать, а затем выполнить с указанными
исходными данными», и т. д.
Первичным материалом является и сопроводительная документация. Для сопроводительной документации не менее актуальны разбиение на отдельные модули и формирование из них тех или иных конфигураций выходных документов. Если программа развивается (а большинство реально используемых программ так или иначе развиваются), то возникает проблема постоянного поддержания соответствия между изменяющейся программой и документацией к ней. Наиболее убедительные решения этой проблемы основываются на взаимном проникновении текстов алгоритмов и документации. Например, можно определенным образом извлечь из программы и включить в документацию тексты выдаваемых диагностических сообщений, и обратно, тексты сопроводительных документов использовать в качестве комментариев — неформальных спецификаций отдельных алгоритмов. В результате граница между программой и документацией стирается. Подобные рассуждения можно, вообще говоря, провести и по отношению к остальным видам первичных материалов. Мы не будем здесь этого делать, полагая очевидным, что все первичные материалы тесно связаны между собой. Отсюда вытекает, что задача модуляризации должна ставиться не изолированно для программ, документации и т. п., а охватывать одновременно всю совокупность первичных материалов. Теперь, очертив границы исходного материала модуляризации, можно перейти к понятию модуля. Для наших целей подойдет следующее весьма свободное его определение.
О п р е д е л е н и е. Модуль — выделенная по тем или иным мотивам часть первичного материала программного фонда.
Наибольший интерес с точки
зрения расширяемости программы представляют
мотивы выделения модулей и различные
формы модулей. Именно о них в основном
будет идти речь в данной главе.
Однако в уточнении нуждается и неявно
проведенная в нашем определении граница
между составляющими программный фонд
первичными и вторичными материалами. Вторичные материалы,
или, точнее, вторичные объекты порождаются
из первичных посредством типовых процедур
обработки и, согласно нашему определению,
в модуляризации непосредственно не участвуют.
Тем не менее, поскольку вторичный характер
некоторых объектов не всегда очевиден,
а связи между первичными и вторичными
объектами оказываются весьма многогранными,
вторичным объектам программного фонда
посвящается самостоятельный раздел.
Объектный модуль программы получается в результате трансляции исходного текста модуля. В состав объектного модуля программы помещается оттранслированный код модуля, информация для редактора связей, позволяющая объединять модули в единую программу, и отладочная информация (переменные, константы, метки и их адреса). Для объектного модуля по умолчанию используется имя файла, совпадающее с именем файла исходного модуля и с расширением obj.