
- •Язык программирования. Общие принципы построения и использования языков программирования.
- •Стандарты языков программирования.
- •Лямбда-исчисление. Аппликация, абстракция, редукция, преобразование.
- •Списки и функциональные выражения в функциональных языках программирования.
- •Механизмы и средства взаимодействия программы с операционной системой.
- •Функциональное программирование. Основные положения. Основные отличия от других типов языков программирования.
- •Классификация языков программирования. Близость языков программирования к естественному языку.
- •Унификация и хорновский клоз в логических языках программирования.
- •Модель вычислений функциональных языков программирования.
- •Языки программирования низкого уровня.
- •Средства разработки графического интерфейса пользователя. Эргономические свойства человеко-машинного интерфейса.
- •Процедурные языки программирования. Основные отличия от других типов языков.
- •Обоснование выбора языка программирования.
- •Перегрузка в языках программирования.
- •Логические языки программирования. Основные положения и понятия. Основные отличия от других типов языков программирования.
- •Объектно-ориентированные языки программирования (ооп). Основные отличия от других концепций языков программирования.
- •Полиморфизм в ооп. Виртуальные функции. Таблицы виртуальных функций.
- •Структура языка программирования. Синтаксис и семантика языка программирования. Расширенная форма Бэкуса-Наура.
- •Наследование в ооп. Множественное наследование. Проблемы множественного наследования.
- •Инкапсуляция в ооп. Контроль доступа.
- •Понятие класса и объекта в ооп. Атрибуты, методы, конструктор и деструктор, статические члены класса.
- •Диаграммы классов uml. Основные элементы и обозначения.
- •Данные. Средства описания данных. Типизация языка.
- •Преобразования типов. Контроль соответствия типов данных.
- •Ооп. Основные концепции ооп.
- •Современные интегрированные схемы разработки программ. Основные компоненты среды программирования.
- •Декомпозиция программ.
- •Трансляторы. Интерпретация и компиляция.
- •Макропроцессоры и макрогенераторы.
- •Потоки и процессы. Сходства и различия.
- •Мониторы и защищаемые переменные в параллельном программировании.
- •Семафоры в параллельном программировании. Типы семафоров.
- •Отладчики. Генераторы кода и приложений.
- •Параллельная обработка данных и параллелизм. Параллельное и распределенное программирование.
- •Основные проблемы параллельного и распределенного программирования.
- •Оценка максимально возможного параллелизма.
- •Основные модели параллельного программирования.
- •Оптимизатор. Основные функции оптимизатора.
- •Обработка исключительных ситуаций. Иерархия и виды исключительных ситуаций.
- •Операторы обработки исключительных ситуаций в различных языках программирования.
- •Элементарные типы данных.
- •Перегрузка данных, операторов, методов.
- •Составные типы данных.
- •Механизмы логического вывода. Прямая и обратная цепочки рассуждений.
- •Пространство имен, область видимости, время жизни переменных.
- •Ошибки при работе с вещественными числами. Смешанная арифметика.
- •Операторы выбора и условные операторы.
- •Вещественные числа. Способы представления. Операции над вещественными числами.
- •Оператор присваивания. Операторы цикла.
- •Распределение памяти при выполнении программы.
- •Динамические структуры данных. Реализация динамических структур данных с помощью указателей.
- •Библиотеки программ и классов. Статические и динамические библиотеки. Критерии проектирования библиотек.
- •Подпрограммы. Формальные и фактические параметры подпрограмм.
- •Передача параметров подпрограмме.
- •Программный стек и его изменение.
- •Рекурсивный и итерационный методы решения задач. Виды рекурсий.
- •Общая характеристика языков ассемблера: назначение, принципы построения и использования; структура языка.
- •Сериализация и десериализация. Методы сериализации объектов в базу данных.
-
Основные проблемы параллельного и распределенного программирования.
Параллельное программирование является более сложным по сравнению с последовательным как в написании кода, так и в его отладки. Для облегчения процесса параллельного программирования существуют специализированные инструменты, например, отладчик TotalView, статический анализатор кода VivaMP.
-
Оценка максимально возможного параллелизма.
Процесс проектирования распределенных и параллельных систем состоит из этапов
-
Декомпозиция – процесс разбиения задачи на части и её решение.
-
Связывание – связь частей между собой.
-
Синхронизация – координация функционирования компонентов единой системы, порядка работы, определения критерия, когда цель достигнута.
Проблемы параллельного и распределенного программирования
-
Гонка данных – если несколько задач одновременно попытаются изменить некоторую общую область данных, а конечное значение данных при этом будет зависеть от того, какая задача обратится к этой области первой.
-
Бесконечная отсрочка – ситуация, когда задача должна ожидаться до тех пор, пока не произойдет событие или не создадутся определенные условия для их запуска. Если ожидаемое событие не состоится, то задачи могут никогда не выполниться.
-
Взаимоблокировка – возникает, когда две и более задачи постоянно блокируют друг друга в ситуации, когда у каждой задачи заблокирован ресурс, который пытается заблокировать другие задачи.
-
Трудности организации связи
-
Выбор оптимального количества процессоров – при увеличении степени параллельности она становится не эффективной.
-
Основные модели параллельного программирования.
Модели параллельного программирования.
-
Параллельная машина с произвольным доступом. Упрощенная теоретическая модель с N процессорами, которая использует общую глобальную память.
Все процессоры имеют доступ на чтение и запись к общей глобальной памяти. В такой системе возможен одновременный доступ. Обладает как параллельными (доступ к одной и той же области данных без порчи самих данных), так и исключающими алгоритмами (если нужна гарантия, что никакие 2 процесса не будут считывать данные из одной и той же области памяти одновременно) чтения и записи данных.
-
Модель клиент-сервер. 1 сервер – несколько клиентов.
-
Мультиагентные распределенные системы. Модель сети с равноправными узлами, в которой все компоненты имеют одинаковые права и при это у каждого компонента есть, что предложить другому.
-
Оптимизатор. Основные функции оптимизатора.
Оптимизатор – специалист, осуществляющий продвижение сайта, то есть, предпринимающий определённые действия с тем, чтобы сайт стал известен максимальному числу пользователей всемирной паутины, в особенности, целевой аудитории.
ОПТИМИЗАТОР пытается улучшить код, убрать лишние операции, заменить медленные инструкции на более быстрые и т.д.
В результате оптимизации получается объектный код, который не соответствует исходному, из-за чего затрудняется процесс отладки.
Виды оптимизации:
1. Оптимизация промежуточного представления #(4+x)(8-y)-(8-y)(3434x-2)=(8-y)(2+3435x)
2. Машинно-ориентированная оптимизация #регистры вместо оперативной памяти
3. Локальная оптимизация #замена нескольких команд одной, более эффективной