Опубликован: 31.08.2009 | Уровень: специалист | Доступ: платный
Курс обсуждает несколько тем, связанных с прикладным программированием – параллельное программирование на разделяемой памяти (многопоточные программы), технические и технологические основы объектно-ориентированного программирования, общие вопросы оформления и написания текста программ, использование структур данных в параллельном окружении, безопасность программного обеспечения и применение криптографии, системы виртуализации.
Курс представляет собой завершающую часть полного фундаментального цикла по информатике, занимающего в МФТИ 4 семестра. Он ориентирован на студентов технических ВУЗов, специализирующихся на информатике, и соединяет в себе теоретическую и практическую информацию. Он не является «систематическим изложением базовых основ программирования», представляя собой дополнение к обычным курсам программирования. В него вошли несколько тем, знание которых, как представляется автору, необходимо современному программисту.
Цель: Предоставить возможность слушателю ознакомиться с "техническими" компонентами, связанными с созданием современных программ. Делается акцент на понятиях, которыми пользуются профессиональные программисты, и причинах их появления. В результате слушатель должен научиться принимать технические решения на базе своего понимания устройства различных систем и компонент, с которым ему приходится иметь дело.
Необходимые знания: Предполагается знакомство с программированием на языке С, с устройством операционных систем, общая информация об архитектуре Intel x86. Слушатели курса должны обладать базовыми знаниями в области программирования и некоторым опытом написания программ на стандартных алгоритмических языках.

План занятий

ЗанятиеЗаголовок <<Дата изучения
-
Лекция 1
Обзор задач
Дается обзор курса, рассматриваемые проблемы, возникающие при программировании и их решения. Также рассматриваются требования к заданиям и к курсовой работе, которые необходимо сделать в процессе работы над курсом. Детально рассказываются некоторые задачи, которые можно использовать как курсовые проекты (индивидуальные или коллективные) – например, задачи о триангуляции.
-
Лекция 2
История создания программ
Продолжается обзор задач, которые можно использовать в качестве курсовых проектов. Написание программ, комментарии, сопровождение, жизненный цикл программ. Краткий экскурс в историю создания программ. Оформление текста программ, требования к нему и откуда они берутся.
-
Лекция 3
Оформление текста программ и основные структуры
Оформление текста программ – написание комментариев, их типы и разновидности, содержание. Несколько слов о правах на программу, копирайтах, откуда берутся права, отличия в законодательстве России и США. Хорошая и плохая практика написания текста программ – выбор имен для переменных, использование препроцессора и тд. Структуры данных, и их выбор для задач. Типовые элементы структур данных и связанных с ними алгоритмов, итераторы. Проблемы использования структур данных в параллельном окружении на примере односвязного списка.
-
Тест 1
36 минут
-
Лекция 4
Структуры данных
Что такое "структуры данных" в общем, типовые элементы и понятия, итераторы. Односвязный список и его использование в куче (heap) рантайма (библиотеке периода исполнения) языка С, в функциях malloc/free. Проблемы создания программ, использующих односвязные списки, в том числе в параллельном окружении. Двусвязные списки и очереди на их основе. Стек, его использование в программах на языке С, поддержка рекурсии на его основе. Расположение данных в памяти. Использование структур памяти в параллельном окружении, операции синхронизации. Графы, деревья, использование их для компрессии данных.
-
Лекция 5
-
Тест 2
36 минут
-
Лекция 6
Техника кодирования и основы криптографии
Безопасность ПО. Написание программ без "дырок". Техника кодирования защищенных программ и типичные ошибки. Переполнение буфера, определение уровня доступа, работа с минимально возможными привилегиями, криптография и ее корректное применение, предохранение секретных данных, работа с входными данными, проблемы разных путей доступа к одним и тем же данным, запросов к базам данных и веб-страницам, а также проблемы поддержки интернационального ПО. Основные понятия криптографии, история. Симметричная и ассиметричная криптография, использование ее для безопасной почты. Безопасные и небезопасные алгоритмы (является ли секретный алгоритм безопасным?), генераторы случайных чисел. Устройство цифровой подписи. Как правильно применять криптографию для обеспечения безопасности. Способы взлома программ.
-
Лекция 7
Моделирование угроз. Эволюция аппаратного обеспечения
Моделирование угроз. Классификация опасностеий STRIDE – Spoofing (подмена данных), Tampering (подделка и изменение содержания данных), Repudiation (незаконныий отказ от проведенноий операции), Information disclosure (разглашение информации), Denial of service (отказ в обслуживании), Elevation of privilege (незаконное поднятие привилегиий). Методика оценки риска DREAD - Damage potential (что может быть сломано), Reproducibility (повторяемость), Exploitability (пригодность угрозы для использования), Affected users (на каких пользователеий повлияет), Discoverability (возможно ли детектировать факт использования). Эволюция современного аппаратного обеспечения и ее влияние на программное обеспечение. Гипертредовые (многопоточные) и многоядерные процессоры, универсальные графические (GPU) процессоры и новые возможности по их использованию.
-
Тест 3
36 минут
-
Лекция 8
Параллельное программирование
Параллельное программирование. Параллельные программы – от работы с разделяемоий памятью, использования массивнопараллельных компьютеров и до распределенных расчетов на многих физических компьютерах. Декомпозиция задач на параллельные куски. Закон Амдала. Геометрическая декомпозиция. Параллелизм данных, параллелизм кода. Паттерны параллельного программирования: параллелизм на уровне задач – декомпозиция задачи, "разделяий и властвуй" - декомпозиция задач и данных, геометрическая декомпозиция – декомпозиция данных, конвеиерное исполнение – декомпозиция потока данных, "фронт волны" - декомпозиция данных c "многомерными" зависимостями. Пример типового шаблона программирования – пул нитей.
-
Лекция 9
Технические аспекты написания параллельных программ
Технические аспекты написания параллельных программ на разделяемой памяти. Многопоточные программы. Работа с разделяемоий памятью. Атомарность операций. Синхронизационные примитивы (низкоуровневые атомарные команды, критические секции, взаимоисключающая блокировка - mutex, рекурсивная блокировка - lock, блокировка чтения-записи – read/write lock, многопроцессорная блокировка - spin-lock, семафоры, барьеры). Принятие во внимание особенностей аппаратной платформы, например, последовательности операций записи в память и т.д. Тупики и взаимные блокировки. Неблокирующая синхронизация. Реализация одних примитивов через другие, относительная "мощность" примитивов. Задача о консенсусе как способ оценки примитивов.
-
Тест 4
36 минут
-
Лекция 10
Объектно ориентированное программирование
Объектно ориентированное программирование с понятийной точки зрения. Экскурс в историю появления, возникновение понятий. Объекты как способ моделирования "параллельного внешнего мира" и формализации понятий. Объект как совокупность методов и данных, классы объектов, мета объекты. Объектная модель. Жизненный цикл объектов. Статические и динамические объекты. Раннее и позднее связывание, постоянно существующие объекты. Инкапсуляция и полиморфизм как базовые понятия ООП. Наследование и агрегирование как способы создания новых, более сложных, объектов, их достоинства и недостатки (на примере С++ и COM). Технические способы создания объектов в языках типа С++, представление их в компьютере.
-
Лекция 11
Техническая реализация ООП в языке программирования С++
Техническая реализация ООП в языке программирования С++ - конструкторы и деструкторы, представление методов через функции, расположение данных в памяти. Реализация понятия полиморфизма через таблицы виртуальных функций. НАследование и его реализация, связь с виртуальными функциями, абстрактные типы данных. Исключения, их техническая реализация и особенности применения в языке и ОС Windows.
-
Лекция 12
Поддержка ООП в различных системах и средах. Технологии виртуализации
Поддержка ООП в языке и системе программирования ObjectiveC, категории, сообщения и методы. Поддержка ООП в ОС Windows, отличия от поддержки ООП в языке программирования. Реализация основных понятий ООП в этих системах. Использование подходов ООП в разных условиях. Технологии виртуализации. Почему они стали в последнее время столь широко распространены, их типы – виртуализация ОС и виртуализация оборудования. Преимущества и недостатки разных виртуализационных подходов с точки зрения потребителя. Технические основы виртуализации уровня ОС, контейнеры, уровни изоляции.
-
Тест 5
36 минут
-
Лекция 13
Технология аппаратной виртуализации и виртуальные машины
Технология аппаратной виртуализации. Особенности работы кода прикладных программ внутри виртуальных машин. Новые возможности, предоставляемые виртуальными машинами и контейнерами – миграция, универсальность конфигурации, быстрота развертывания и обновления, удобства управления. Технические принципы организации виртуальных машин. Монитор виртуальных машин, аппаратная поддержка виртуализации, бинарная трансляция и другие подходы. Накладные расходы в реализации поддержки системы виртуальных машин. Паравиртуализация. Какие типы виртуализации следует применять в разных условиях.
-
Тест 6
36 минут
-
5 часов
-
Хоан Нгуен
Хоан Нгуен
Россия
Вероника Воронина
Вероника Воронина
Россия