
- •Модуль № 2.
- •1. Методы лексического, семантического и синтаксического анализа. Регулярные языки.
- •2. Методы лексического, семантического и синтаксического анализа. Контекстно-свободные языки.
- •3. Методы лексического, семантического и синтаксического анализа. Классы кс-языков и грамматик.
- •4. Компиляторы. Этапы трансляции. Общая схема работы транслятора.
- •5. Компиляторы. Понятие прохода. Многопроходные и однопроходные компиляторы.
- •6. Интерпретаторы. Особенности построения интерпретаторов.
- •7. Трансляторы с языка ассемблера («ассемблеры»).
- •8. Лексические анализаторы (сканеры). Принципы построения сканеров. Назначение лексического анализатора.
- •Принципы построения лексических анализаторов
- •Этапы семантического анализа
- •10. Генератор кода. Распределение памяти. Принципы распределения памяти. Дисплей памяти процедуры (функции).
- •Общие принципы генерации кода
- •12. Системы программирования. Понятие и структура системы программирования.
- •13. Системы программирования. Принципы функционирования систем программирования.
- •14. Системы программирования. Функции текстовых редакторов в системах программирования.
- •15. Системы программирования. Компоновщик. Назначение и функции компоновщика.
- •16. Системы программирования. Загрузчики. Функции загрузчика.
- •17. Системы программирования . Библиотеки подпрограмм как составная часть систем программирования.
- •18. Системы программирования. Разработка программ в архитектуре «клиент—сервер»
16. Системы программирования. Загрузчики. Функции загрузчика.
Объектные модули строятся на основе так называемых относительных адресов.
Компилятор, порождающий объектные файлы, а затем и компоновщик, объединяющий их в единое целое, не могут знать точно, в какой физической области памяти компьютера будет располагаться программа в момент ее выполнения. Поэтому они работают не с реальными адресами ячеек ОЗУ, а с некоторыми относительными адресами.
Конечно, ни одна программа не может быть исполнена в этих относительных адресах. Поэтому требуется модуль, который бы выполнял преобразование относительных адресов в реальные (абсолютные) адреса непосредственно в момент запуска программы на выполнение. Этот процесс называется трансляцией адресов, и выполняет его специальный модуль, называемый загрузчиком.
Однако загрузчик не всегда является составной частью системы программирования, поскольку выполняемые им функции зависят непосредственно от архитектуры целевой вычислительной системы, в которой выполняется результирующая программа, созданная системой программирования.
Загрузчик, который выполняет трансляцию адресов в момент запуска программы, называется настраивающим загрузчиком. В современных вычислительных системах такой загрузчик входит в состав ОС, а компоновщик, входящий в состав системы программирования, готовит для настраивающего загрузчика таблицу трансляции адресов, входящую в состав исполняемого файла.
За обеспечение работы с динамически загружаемыми библиотеками и модулями отвечает динамический загрузчик.
Динамический загрузчик всегда входит в состав ОС. В его задачи входит следить за обращениями к динамически загружаемым библиотекам и модулям, загружать в оперативную память используемые библиотеки, следить за количеством обращений к каждой библиотеке, освобождать память, занимаемую неиспользуемыми библиотеками.
17. Системы программирования . Библиотеки подпрограмм как составная часть систем программирования.
Библиотеки подпрограмм составляют существенную часть систем программирования. Наряду с дружественностью пользовательского интерфейса, состав доступных библиотек подпрограмм во многом определяет возможности системы программирования и ее позиции на рынке средств разработки программного обеспечения. Библиотеки подпрограмм входили в состав средств разработки начиная с самых
ранних этапов их развития.
С точки зрения системы программирования библиотеки подпрограмм состоят из двух основных компонентов. Это собственно файл (или множество файлов) библиотеки, содержащий объектный код, и набор файлов описаний функций, подпрограмм, констант и переменных, составляющих библиотеку. Описания оформляются на соответствующем входном языке (например, для языка С или C++ это будет набор заголовочных файлов).
Динамические (динамически загружаемые) библиотеки подключаются к результирующей программе в момент ее выполнения. В этом основное отличие динамических библиотек от обычных, статических библиотек.
18. Системы программирования. Разработка программ в архитектуре «клиент—сервер»
Приложение, построенное на основе архитектуры «клиент-сервер», в общем виде состоит из двух основных частей: клиентской части и сервера данных. При этом первая (серверная) часть приложения обеспечивает реализацию всех процедур, связанных с хранением данных, доступом к данным, резервным копированием и защитой данных. Вторая (клиентская) часть приложения, получая данные от сервера данных, обеспечивает их обработку и отображение в интерфейсе пользователя. По командам клиентской части сервер данных выполняет также их добавление, обновление и удаление.
Как правило, разработчики, создающие программное обеспечение в архитектуре «клиент-сервер», разрабатывают именно клиентскую часть. В качестве сервера данных чаще всего выбирается сервер одного из известных производителей.
На начальном этапе развития архитектуры «клиент-сервер» доступ к данным сервера осуществлялся на уровне файлов, а разделение доступа к файлам обеспечивалось средствами ОС. Сервер данных выполнял только примитивные процедуры хранения, копирования и защиты файлов от несанкционированного
доступа. Такие приложения иногда называют приложениями, построенными по принципу «файл-сервер».
Приложения типа «файл-сервер» можно только весьма условно отнести к приложениям, построенным в архитектуре «клиент-сервер».