Программа кафедры ФТИ 2009-2010

advertisement
ОГЛАВЛЕНИЕ
Программа спецкурсов кафедры ФТИ. Бакалавриат ...................................... 6
Программа спецкурсов кафедры ФТИ. Магистратура ................................... 7
Архитектура и эволюция ЭВМ (2-й курс, 3-й сем., 36 ч., экзамен)................ 8
Программа курса лекций (36 ч.) ................................................................... 8
Литература ................................................................................................... 10
Обьектно-ориентированное программирование (2-й курс, 3-й сем., 72 ч.,
диф. зачёт) ......................................................................................................... 12
Программа курса лекций (36 ч.) ................................................................. 12
Программа практических занятий (36 ч.).................................................. 16
Курсовые работы ......................................................................................... 17
Литература ................................................................................................... 24
Обьектно-ориентированное программирование (2-й курс, 4-й сем., 64 ч.,
диф. зачёт) ......................................................................................................... 25
Программа курса лекций (32 ч.) ................................................................. 25
Программа практических занятий (32 ч.).................................................. 30
Курсовые работы ......................................................................................... 32
Литература ................................................................................................... 37
Операционные системы (2-й курс, 4-й сем., 32 ч., экзамен) ........................ 38
Программа курса лекций (32 ч.) ................................................................. 38
Литература ................................................................................................... 39
Операционные системы Unix (3-й курс, 5-й сем., 108 ч., диф. зачёт) ......... 41
Программа курса лекций (36 ч.) ................................................................. 41
Программа практических занятий (72 ч.).................................................. 42
Задания практикума .................................................................................... 43
Литература ................................................................................................... 55
ЭВМ в планировании и обработке физического эксперимента (3-й курс,
5-й сем., 72 ч., диф. зачёт) ................................................................................ 56
Программа курса лекций (36 ч.) ................................................................. 56
Программа практических занятий (36 ч.).................................................. 57
Литература ................................................................................................... 58
Введение в системы автоматического проектирования радиоэлектронных
устройств (3-й курс, 5-й сем., 72 ч., диф. зачет) ............................................. 60
Программа практических занятий (72 ч.).................................................. 60
Аналоговая электроника (3-й курс, 5-й сем., 36 ч., экзамен) ........................ 62
Программа курса лекций (36 ч.) ................................................................. 62
Литература ................................................................................................... 63
Цифровые интегральные схемы (3-й курс, 5-й сем., 36 ч., экзамен) ............ 64
Программа курса лекций (36 ч.) ................................................................. 64
Литература ................................................................................................... 66
Объектно–ориентированный анализ и дизайн (3-й курс, 6-й сем., 64 ч.,
диф. зачет) ..........................................................................................................67
Программа курса лекций (32 ч.) .................................................................67
Примерная тематика курсовых проектов ..................................................69
Литература....................................................................................................70
Введение в СУБД (3-й курс, 6-й сем., 96 ч., зачет, экзамен) ........................ 71
Программа курса лекций (32 ч.) .................................................................71
Программа практических занятий (64 ч.) ..................................................73
Примеры тем курсовых работ.....................................................................74
Литература....................................................................................................75
Архитектура и проектирование микроконтроллеров (3-й курс, 6-й сем.,
64 ч., диф. зачет) ................................................................................................ 76
Программа практических занятий (64 ч.) ..................................................76
Задания .........................................................................................................77
Электроника детекторных систем (3-й курс, 6-й сем., 32 ч., экзамен) .........78
Программа курса лекций (32 ч.) .................................................................78
Литература....................................................................................................80
Микропроцессоры и микропроцессорные системы (3-й курс, 6-й сем., 32 ч.,
экзамен) ..............................................................................................................81
Программа курса лекций (32 ч.) .................................................................81
Литература....................................................................................................84
Информационные сети и системы (4-й курс, 7-й сем., 108 ч., диф. зачет)...85
Программа курса лекций (36 ч.) .................................................................85
Программа практических занятий (72 ч.) ..................................................86
Литература....................................................................................................87
Машинная графика (4-й курс, 7-й сем., 72 ч., диф. зачет) ............................. 88
Программа курса лекций (36 ч.) .................................................................88
Программа практических занятий (36 ч.) ..................................................91
Литература....................................................................................................92
Динамическая 3D-графика (4-й курс, 8-й сем., 64 ч., диф. зачет) ................94
Программа курса лекций (32 ч.) .................................................................94
Программа практических занятий (32 ч.) ..................................................96
Литература....................................................................................................98
Методы анализа экспериментальных данных (4-й курс, 8-й семестр, 64 ч.,
экзамен) ..............................................................................................................99
Программа курса лекций (32 ч.) .................................................................99
Программа практических занятий (32 ч.) ................................................100
Литература..................................................................................................101
Программируемые логические устройства (1-й курс магистратуры, 9-й сем.,
36 ч., экзамен) ..................................................................................................102
Программа практических занятий (36 ч.) ................................................102
4
Практические и контрольные задания ..................................................... 104
Варианты курсового проекта ................................................................... 105
Литература ................................................................................................. 106
Новые информационные технологии (1-й курс магистратуры, 10-й сем.,
64 ч., экзамен) .................................................................................................. 107
Программа курса лекций (64 ч.) ............................................................... 107
Литература ................................................................................................. 108
Проблемы безопасности в информационных
технологиях (1-й курс
магистратуры, 10-й сем., 64 ч., экзамен) ....................................................... 109
Программа курса лекций (64 ч.) ............................................................... 109
Литература ................................................................................................. 111
Менеджмент программных продуктов (1-й курс магистратуры, 10-й сем.,
32 ч., экзамен) .................................................................................................. 113
Программа курса лекций (32 ч.) ............................................................... 113
Практические задания ............................................................................... 114
Разработка распределенных систем (2-й курс магистратуры, 11-й сем.,
72 ч., диф. зачет).............................................................................................. 116
Программа курса лекций (36 ч.) ............................................................... 116
Программа практических занятий (36 ч.)................................................ 117
5
ПРОГРАММА СПЕЦКУРСОВ КАФЕДРЫ ФТИ.
БАКАЛАВРИАТ
2-й курс
Осенний семестр
Весенний семестр
Архитектура и эволюция ЭВМ
(36 ч., экзамен) (с. 8)
Операционные системы
(32 ч., экзамен) (с. 38)
Объектно-ориентированное
программирование
(72 ч., диф. зачёт) (с. 12)
Объектно-ориентированное
программирование
(64 ч., диф. зачёт) (с. 25)
3-й курс
Операционные системы. UNIX.
(108 ч., диф. зачёт) (с. 41)
Объектно-ориентированный анализ
и дизайн
(64 ч., диф. зачёт) (с. 67)
ЭВМ в планировании и обработке
физических экспериментов
(72 ч., диф. зачёт) (с. 56)
Введение в СУБД
(96 ч., зачёт, экзамен) (с. 71)
Введение в САПР РЭУ
(72 ч., диф. зачёт) (с. 60)
Архитектура и проектирование
микроконтроллеров
(64 ч., диф. зачёт) (с. 76)
Аналоговая электроника в
экспериментальной физике
(36 ч., экзамен) (с. 62)
Электроника детекторных систем
(32 ч., экзамен) (с. 78)
Цифровые интегральные схемы
(36 ч., экзамен) (с. 64)
Микропроцессоры и МП-системы
(32 ч., экзамен) (с. 81)
4-й курс
Машинная графика
(72 ч., диф. зачет) (с. 88)
Динамическая 3D-графика
(64 ч., диф. зачет) (с. 94)
Информационные сети и системы
(108 ч., диф. зачет) (с. 85)
Методы анализа
экспериментальных данных
(64 ч., экзамен) (с. 99)
6
ПРОГРАММА СПЕЦКУРСОВ КАФЕДРЫ ФТИ.
МАГИСТРАТУРА
1-й курс магистратуры
Осенний семестр
Весенний семестр
Проектирование программных
систем
(36 ч., экзамен) (каф. АФТИ)
Новые информационные технологии
(64 ч., экзамен) (с. 107)
Программируемые логические
устройства
(36 ч., экзамен) (с. 102)
Сигнальные процессоры
(64 ч., диф. зачёт) (каф. РФ)
Проблемы безопасности в
информационных технологиях
(64 ч., экзамен) (с. 109)
Менеджмент программных
продуктов
(32 ч., экзамен) (с. 113)
2-й курс магистратуры
Разработка распределенных систем
(72 ч., диф. зачёт) (с. 116)
Современные языки и технологии
программирования
(72 ч., диф. зачёт)
АРХИТЕКТУРА И ЭВОЛЮЦИЯ ЭВМ
(2-й курс, 3-й сем., 36 ч., экзамен)
Программа курса лекций (36 ч.)
Старший преподаватель Сергей Валерьевич Дубров
1. Булева алгебра. Основные аксиомы и теоремы. Диаграммы Вейча. Карты Карно. Применение при проектировании и анализе работы ЭВМ.
2. Основные понятия об ЭВМ. Архитектура фон-Неймана, Гарвардская
архитектура. Центральный процессор, память, внешние устройства. Понятие шины. Методы адресации памяти (прямая, непосредственная, регистровая, индексная, косвенная и т.д.).
3. Логическая организация памяти. Порядок младших/старших байт в
многобайтовых словах (little endian, big endian). Страничная, сегментная
адресация. Кэш-память, варианты кэш памяти (сквозная запись, кэш с
обратной записью, inclusive, exclusive кэш). Расслоение физической памяти. Иерархия памяти в архитектуре машины (от регистров до лент).
4. Методы ввода-вывода данных. Программный канал, ввод-вывод по
прерываниям, прямой доступ в память.
5. Однокристальные микроЭВМ семейства Intel 8048. Архитектура процессора, организация памяти данных и команд, регистры. Доступ к
внешним устройствам. Ограничения. Поколение микроЭВМ улучшенной архитектуры – Intel 8051. Расширение возможностей 8051 (объем
памяти, битовая обработка, прерывания, скорость выполнения).
6. Семейство PDP-11 (LSI-11). История и роль для всей отрасли компьютерной индустрии. Основные особенности PDP-11 – регистры общего
назначения, «ортогональная» система команд, стек в ОЗУ. Слово состояния процессора. Асинхронная шина (Unibus и Q-bus). Достоинства и
недостатки по сравнению с синхронной шиной, циклы чтения/записи,
циклы прерывания, прямого доступа в память. Методы преодоления
ограниченного адресного пространства – архитектура диспетчера памяти старших моделей PDP-11 и LSI-11. Предельный объем физической
памяти, максимально возможный объем программы. Арифметические
команды для чисел формата с плавающей запятой.
7. Семейство VAX. Супер-миниЭВМ. Виртуальная память – основа построения мощных многопрограммных систем. Надёжные вычисления.
Классический пример машины со сложным (CISC) набором команд. Ор-
ганизация физической, виртуальной памяти, прерываний, ввода-вывода.
Поддержка
арифметики
с
плавающей
запятой.
Единица
производительности – VUP.
8. Основные операционные системы семейств PDP-11 и LSI-11 (RT-11,
RSX-11, TSX-11). Возможности, определяемые архитектурой ЭВМ
(размер задач, количество пользователей, количество подключаемых
периферийных устройств). Подкачка/выгрузка программ с диска/на
диск в ОЗУ/из ОЗУ (swapping, paging). Поддержка виртуальной памяти
в RSX-11 – системе-предшественнике VAX/VMS.
9. Архитектура микроЭВМ на базе процессоров 8080/85/Z80. Строительные "кубики" фирмы Intel. Ограничения микроЭВМ на базе архитектуры 8080. Система команд, методы адресации. Методы адресации процессора 8080, дополнительные возможности процессора Z80.
10. Архитектура процессора i8086 и ЭВМ на его основе (IBM PC). Регистры, ориентация на экономию памяти. Методы адресации. Шина IBM
PC, прерывания, прямой доступ к памяти. Подключение внешних
устройств. Диски, флоппи-диски, порт RS232, параллельный порт. Карта памяти. Системный BIOS, BIOS-ы периферийных устройств – назначение и организация. Арифметический сопроцессор i8087, сопряжение с
центральным процессором. Очередь команд.
11. Дальнейшее развитие архитектуры 8086 – процессор 80286. Персональный компьютер на основе 80286 – IBM PC AT. Попытка прорваться через одномегабайтный барьер ОЗУ. Два режима работы – реальный и защищенный. Карта памяти для каждого из них. Неудачные решения, заложенные в архитектуру процессора – барьер для построения надежно
работающих операционных систем. Полезная ошибка при работе с сегментом с максимальным адресом. Развитие сегментного доступа к памяти – дескрипторные таблицы. Ограничения на объем сегментов.
12. Процессоры архитектуры 80386 и 80486. Три режима работы – реальный, защищенный, виртуальный 8086. Преодоление 16-разрядного барьера в размере сегментов, комбинация страничных и сегментных способов адресации. Кэш. Бремя совместимости со старыми моделями процессоров. Архитектурные преимущества при работе в системе MS DOS
по сравнению с моделями 8086 и 80286. Использование преимуществ
32-разрядной памяти. Плоская (flat) модель памяти. Многошинная
структура современных PC. SCSI-интерфейс для подключения внешних
устройств.
9
13. Многопроцессорные системы интеловской архитектуры. Повышение
производительности благодаря увеличению количества исполнительных
устройств, а не повышению тактовой частоты. Многоуровневый кэш.
Архитектура машин на базе процессоров Intel Core i7, i5, i3 и AMD Phenom.
14. Последовательные шины (на примере PC) – стратегическое направление эволюции архитектур современных машин. Шины для подключения
внешних устройств: USB, FireWire (IEEE-1394), eSATA. Внутренние
шины: PCI-E, SATA, SAS.
15. Основные операционные системы для машин с архитектурой PC –
Linux, Windows, OS/2 (eComstation), Unix-подобные системы (*BSD).
Сетевая ОС Netware.
16. Архитектура суперЭВМ. Классификация суперЭВМ (векторные, параллельные, SIMD, MIMD). CRAY, Cyber-205 CDC, роль и влияние на сектор высокопроизводительных машин. Система команд, методы адресации. Использование преимуществ параллельных архитектур, параллельные языки программирования.
17. Архитектура виртуальных машин. Виртуализация процессора,
устройств ввода-вывода. Программная и аппаратная виртуализация. Гипервизор. Большая тройка – VMWare ESX, Citrix XEN, Microsoft HyperV.
18. Архитектура современных сверхпроизводительных суперЭВМ, проект
GRID. «Народный» суперкомпьютер на базе GPU, проект CUDA от
Nvidia.
Литература
1. Принципы работы системы IBM/370. / Под ред. Л. Д. Райкова. М.: Мир,
1975.
2. Компьютеры: Справочное руководство: В 3 т. / Под ред. Г. Хелмса. М.:
Мир, 1986. Т.1.
3. Супер-ЭВМ. Аппаратная и программная реализация. / Под ред.
С. Фернбаха. М.: Радио и связь, 1991.
4. Р. Хокни, К. Джессхоуп. Параллельные ЭВМ. Архитектура, программирование и алгоритмы. М.: Радио и связь, 1986.
10
5. Э. Клингман. Проектирование микропроцессорных систем. М.: Мир,
1983.
6. Э. Клингман. Проектирование специализированных микропроцессорных систем. М.: Мир, 1985.
7. В. В. Сташин, А. В. Урусов, О. Ф. Молокогонцева. Проектирование
цифровых устройств на однокристальных микроконтроллерах. М.:
Энергоатомиздат, 1990.
8. Б. Л. Толстых и др. Мини- и микро-ЭВМ семейства "Электроника":
Производственное издание. М.: Радио и связь, 1987.
9. М. Сингер. Мини-ЭВМ PDP-11: программирование на языке ассемблера
и организация машины. Серия "Математическое обеспечение ЭВМ". М.:
Мир, 1984.
10. Центральный процессор М2. ТО и инструкция по эксплуатации. ЦНИИ
"Электроника", 1982.
11. Ю-Чжень Лю, Г. Гибсон. Микропроцессоры семейства 8086/8088. М.:
Радио и связь, 1987.
12. С. П. Морс, Д. Д. Алберт. Архитектура микропроцессора 80286. М.:
Радио и связь, 1990.
13. В. Л. Григорьев. Архитектура
М.: ГРАНАЛ, 1993.
микропроцессора
80486:
в
4
т.
14. П. М. Коуги. Архитектура конвейерных ЭВМ. М.: Радио и связь, 1985.
15. Ч. Кэпс, Р. Стаффорд. VAX: программирование на языке ассемблера и
архитектура. М.: Радио и связь, 1991.
16. Г. Майерс. Архитектура современных ЭВМ: в 2 т. М.: Мир, 1985.
17. Э. Таненбаум. Многоуровневая организация ЭВМ. М.: Мир, 1979.
18. Э. Таненбаум. Архитектура компьютера. 4-е изд. СПб.: Питер, 2002.
19. К. Хамахер, З. Вранешич, С. Заки. Организация ЭВМ. 5-е изд. СПб.:
Питер, 2003.
11
ОБЬЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
(2-й курс, 3-й сем., 72 ч., диф. зачёт)
Программа курса лекций (36 ч.)
Старший преподаватель Всеволод Юрьевич Рылов
Объектно-ориентированная модель
1. Основные принципы объектно-ориентированного программирования (4
часа).
1.1. Эволюция методологий программирования.
1.1.1. Начало начал, или первое поколение языков программирования.
1.1.2. Развитие алгоритмических абстракций, или второе поколение языков программирования.
1.1.3. Модуль как единица построения программных систем, третье
поколение языков программирования.
1.1.4. Зарождение объектной модели, четвертое поколение языков
программирования.
1.1.5. Объектные языки программирования, объектноориентированные языки программирования, объектноориентированный анализ, дизайн и проектирование.
1.1.6. Парадигмы программирования.
1.2. Составные части объектного подход.
1.2.1. Абстрагирование.
1.2.2. Инкапсуляция.
1.2.3. Модульность.
1.2.4. Иерархия.
1.2.5. Типизация.
1.2.6. Параллелизм.
1.2.7. Сохраняемость.
2. Объектно-ориентированная модель (2 часа).
2.1. Понятие объекта.
2.1.1. Свойства, присущие объектам.
2.1.2. Состояние.
2.1.3. Поведение.
2.1.4. Идентичность.
2.2. Отношения между объектами.
2.2.1. Типы отношений.
2.2.2. Связь (ассоциация).
2.2.3. Агрегация.
3. Классы (2 часа).
3.1. Природа классов.
3.2. UML – унифицированный язык моделирования. Четырехуровневая метамодель MOF.
3.3. Отношения между классами.
3.3.1. Типы отношений.
3.3.2. Ассоциация.
3.3.3. Агрегация, композиция.
3.3.4. Использование.
3.3.5. Наследование.
3.3.6. Инстанцирование.
3.4. Отношения между классами и объектами.
Инструментальные средства ООП языка программирования C++
4. Основные алгоритмические отличия C++ от C (2 часа).
4.1. Использование ссылок. Передача аргументов функции по ссылке.
4.2. Использование констант.
4.3. Логические тип и перечисления.
4.4. Операторы управления динамической памятью, инициализация
массивов.
4.5. Структура программы, раздельная компиляция и особенности использования статической памяти.
4.6. Функциональный полиморфизм.
4.7. Пространства имен и исключения (краткий обзор).
4.8. Библиотека ввода вывода (краткий обзор iostream).
13
5. Средства объектного программирования языка C++ (6 часов).
5.1. Представление объектов и классов.
5.1.1. Реализация поведения объектов на примере добавления
функций-членов в структуры. Структура как вырожденный
класс.
5.1.2. Структура объявления класса.
5.1.3. Доступ к членам класса.
5.1.4. Поля данных класса как механизм реализации состояния
объекта.
5.1.5. Функции члены класса как механизм реализации поведения
объекта.
5.1.6. Спецификаторы доступа для обеспечения инкапсуляции.
5.1.7. Средства управления жизнью объекта. Конструирование и
уничтожение объектов и массивов объектов.
5.1.8. Особенности использования конструктора копии, конструктора по умолчанию, оператора присваивания.
5.1.9. Описание селекторов и модификаторов.
5.1.10. Перегрузка операторов C++ как реализация поведения с
предопределенным смыслом.
5.1.11. Дружественность как механизм нарушения инкапсуляции.
Достоинства и недостатки механизма дружественности.
5.1.12. Статические поля и методы классов. Инициализация статических полей.
5.2. Реализация отношений между объектами и классами.
5.2.1. Ассоциация и агрегация объектов и классов. Зависимость по
времени жизни.
5.2.2. Использование и зависимость от интерфейсов.
5.2.3. Объекты при передаче параметров и возврате из методов.
5.2.4. Варианты реализации отношения клиент-сервер.
5.2.5. Внутренние классы.
6. Средства объектно-ориентированного программирования С++ (7 часов).
6.1. Наследование как средство организации иерархий классов. Принцип замещения Лисковой.
6.2. Одиночное наследование.
6.2.1. Понятие производного класса.
6.2.2. Управление доступом в производных классах.
6.2.3. Конструкторы и деструкторы, совмещение имен методов при
наследовании, иерархии.
6.2.4. Абстрактные классы и виртуальные функции.
6.2.5. Виртуальный полиморфизм.
6.2.6. Информация о типе на этапе выполнения. RTTI.
6.3. Множественное наследование.
6.3.1. Проблема множественного наследования. Виртуальное
наследование как средство разрешения коллизий.
6.3.2. Порядок вызовов конструкторов и деструкторов при множественном наследовании.
6.3.3. Чистые виртуальные классы, понятие интерфейса.
6.3.4. Принципы дизайна иерархий классов. OCP, DIP, ISP.
6.4. Пространства имен.
6.4.1. Пространства имен как средство реализации модульности.
6.4.2. Поиск имен и разрешение конфликтов.
6.4.3. Объединение пространств имен.
6.4.4. Принципы дизайна пакетов.
6.5. Обработка исключений.
6.5.1. Обработка ошибок.
6.5.2. Группировка и перехват исключений.
6.5.3. Управление ресурсами.
6.5.4. Исключения и эффективность.
6.5.5. Альтернативные методы обработки ошибок.
6.5.6. Стандартные исключения.
7. Обобщенное программирование (3 часа).
7.1. Шаблоны классов.
7.1.1. Определение шаблона.
7.1.2. Инстанцирование.
7.1.3. Параметры шаблонов и проверка типов.
7.2. Шаблоны функций.
7.3. Специализация.
7.4. Наследование и шаблоны.
8. Стандартная библиотека С++ (6 часов).
15
8.1. Библиотека стандартных шаблонов.
8.1.1. Общие сведения (понятия контейнеров, итераторов и объектов-функций).
8.1.2. Контейнеры (виды контейнеров, последовательные и ассоциативные контейнеры, адаптеры).
8.1.3. Итераторы (итератор как обобщение указателя, классы итераторов).
8.1.4. Алгоритмы (примеры алгоритмов с использованием итераторов: алгоритмы сортировки, алгоритмы, не изменяющие содержание контейнера, алгоритмы, изменяющие содержание
контейнера).
8.2. Библиотека ввода-вывода.
8.2.1. Потоки вывода. Вывод типов определяемых пользователем.
8.2.2. Потоки ввода. Ввод типов определяемых пользователем.
8.2.3. Форматирование в потоках ввода-вывода.
8.2.4. Буферизация.
Программа практических занятий (36 ч.)
Ассистент Антон Валентинович Адаманский
1. Повторение С.
 Средства поддержки модульного программирования С: раздельная
компиляция, директивы препроцессора (include, ifdef, ifndef), библиотеки.
 Контейнеры: списки, динамический массив, ассоциативный массив
2. Отличие программ С++ от С.
 Ссылки
3. Классы. Инкапсуляция.
 Конструкторы и деструкторы
 Модификаторы доступа
4. Классы. Инкапсуляция (продолжение).
 Вложенные классы
 Переопределение операций
16
5. Классы. Расширения.
 delete[]
 Статические члены
 Код, генерирующийся по умолчанию: конструктор по умолчанию,
конструктор копирования и оператор присваивания
 Операторы преобразования
 Операторы >> и <<
 Explicit конструкторы
6. Наследование и полиморфизм.
7. Исключения.
8. Потоки ввода/вывода.
9. Шаблоны.
10. Стандартная библиотека шаблонов (STL).
Курсовые работы
Задание № 1. Понятия класса и объекта. Механизм переопределения операций на примере классов Vector и Matrix
1) Определить класс Vector, представляющий собой вектор в трехмерном пространстве, с началом в точке (0,0,0) и концом в точке (x,y,z). Использовать float переменные для представления координат вектора. Vector
должен хранить указатель на массив float. Массив создается динамически в
конструкторе через оператор new. В массиве хранятся координаты конца
вектора.
Определить в классе Vector следующие операции (функции):
 конструктор копирования
 оператор присваивания
 деструктор
 +, -, =, +=, -=, * (друг с другом)
 *, /, *=, /= (со скалярным аргументам)
 [] (взятие координаты вектора, например: v[0], v[1])
 конструктор копирования
 операторы >> и << для ввода/вывода вектора через cin/cout
 invert() // поворот вектора на 180 градусов
17
Определить операцию умножения на скаляр, указанного в качестве первого аргумента (например v1=3*v2) как внешнюю функцию (не функциючлен класса Vector).
Написать тестовую глобальную функцию, показывающую работу каждого оператора.
Защитить состояние объекта от некорректного доступа. Везде, где возможно, использовать в качестве аргументов константные ссылки, возвращать ссылки и использовать модификатор const для функций/операторов.
Например:
Vector operator+(const Vector& v1, const Vector& v2);
Vector& operator+=(const Vector& v);
float operator[](int pos) const;
float& operator[](int pos);
void print() const;
2) Используя класс Vector, написать класс Matrix, представляющий матрицу 3*3 как массив из 3 объектов типа Vector. Массив создается динамически с использованием оператора new внутри конструктора (как и в случае
с Vector).
Определить стандартные операции с матрицами. По крайней мере,
необходимо реализовать следующие операции:
 конструктор копирования
 оператор присваивания
 деструктор

[]
 *, *=, /, /= (со скаляром)
 * (c Vector)
 операторы >> и << для ввода/вывода матрицы через cin/cout
 transposition() // транспонирование матрицы (вокруг главной диагонали)
 det() //подсчет детерминанта матрицы.
Написать тестовую глобальную функцию, показывающую работу каждого оператора. Защитить состояние объекта от некорректного доступа.
Везде, где возможно, использовать в качестве аргументов константные
18
ссылки, возвращать ссылки и использовать модификатор const для функций/операторов.
3) Используя созданные классы Vector и Matrix, реализовать утилитный
класс для решения уравнений методом Гаусса. Класс должен содержать
публичную статическую функцию:
Vector gauss(const Matrix& variables, const Vector&
values)
которая решает уравнение вида:
a1x+b1y+c1z=v1
a2x+b2y+c2z=v2
a3x+b3y+c3z=v3
методом исключения Гаусса.
Этот класс должен содержать два специальных статических поля типа
Vector с публичным доступом. Первое поле должно быть проинициализировано объектом Vector(FLT_MAX, FLT_MAX, FLT_MAX) (надо подключить <float.h>). Второе поле надо проинициализировать объектом
Vector(FLT_MIN, FLT_MIN, FLT_MIN).
Если решение уравнения найти невозможно, то возвращать первый объект. Если решение не единственное, то возвращать второй объект. Таким
образом, тот код, который вызывает метод решения уравнения, может
сравнить возвращаемое значение с известным статическим полем и понять,
что решения нет или их бесконечно много. Псевдокод:
Vector v = … // вызов функции решения уравнения
if (v == …) { // сравниваем с первым статическим полем
cout << “No Solution”;
} else if (v == …) { // сравниваем со вторым
статическим полем
cout << “Infinity Set of Solutions”;
} else {
cout << “Solution: \n“ << v.print();
}
4) Создать тестовую глобальную функцию, которая предоставляет консольный интерфейс для ввода параметров: a1-a3, b1-b3, c1-c3, v1-v3 и выдачи
результата (используя утилитный класс).
19
Задание № 2. Наследование и полиморфизм. Простой командный
процессор
Реализовать программу, выполняющую ограниченный набор команд.
Команды и аргументы к ним записываются в текстовом файле. Имя файла
передается в аргументах командной строки. Каждая команда имеет свой
набор аргументов. Если процессор не распознает какую либо команду, то
он выводит сообщение об ошибке и продолжает работать со следующей
командой. Необходимо реализовать следующие команды:
Название Аргументы Описание
Примеры
Print
<строка>
Распечатать на экране строку,
print Hello World
заданную в аргументе
Eval
<expression> Вычислить простую арифметиче- eval 8 / 2
скую операцию (+ , - , * , /). Результат вывести на экран. В случае некорректных аргументов
вызывать исключение
std::invalid_argument
createfile
<file>
Exec
<command>
Создать файл c именем <file>.
createfile test.txt
Если файл уже существует, то
пересоздать. Запросить ввод
данных от пользователя (одна
строка), записать введенные
данные в файл.
Запустить командную строку, что exec notepad.exe test.txt
записана в <command>. Исполь- copy test.txt test2.txt
зуйте функцию system() из библиотеки "linesystem.h".
increment <file>
<file value>
Прочитать содержимое файла
increment test.txt
<file> и проинтерпретировать его increment test.txt 1
как int. Если в int не конвертируется вызывать исключение
std::invalid_argument. Иначе увеличить полученное число на
заданное значение и перезаписать
в файл. Если число не задано,
увеличить на 1.
viewfile
Вывести содержимое файла c
viewfile test.txt
именем <file> на экран. Если
файл не существует, вызывать
исключение std::invalid_argument
<file>
20
Пример исходного файла для командного процессора:
print Hello
print I know 2+2=
eval 2+2
print Please input your age:
createfile age.txt
increment age.txt
print It is your age in next year:
viewfile age.txt
print You could check it
exec notepad.exe age.txt
Каждая команда представляется в виде класса, отнаследованного от абстрактного класса Command:
class Command {
private:
string args;
public:
Command(const string& s = "") : args(s){};
void setArgs(const string& s) {
args = s;
};
const string& getArgs() const {
return args;
};
friend istream& operator>>(istream& in, Command& c){
return in >> c.args;
};
friend ostream& operator<<(ostream& out,
const Command& c) {
return out << c.getName() << " " << c.args << endl;
};
virtual const string& getName() const = 0;
virtual void execute() const throw std::invalid_argument)
= 0;
};
Для инициализации и выполнения списка команд необходимо реализовать класс CommandList, который должен содержать следующие методы и
операторы:
21
friend ostream& operator<<(ostream& out,
const CommandList& c) {
// Вывести на экран все команды
// Обход списка с помощью класса std:iterator
return out;
};
friend istream& operator>>(istream& in, CommandList& c)
{
// Считать из потока.
// В случае консольного ввода
// выполнение прекращается если строка равна ^D
return in;
};
void init(const string& file) {
// Считать из файла, используя оператор >>
}
void execute() const throw (std::invalid_argument) {
// Выполнить все команды.
// Обход списка с помощью класса std:iterator
}
Особенности реализации класса CommandList:
1. Файл считывается построчно с помощью класса для работы с потоками std::ifstream.
2. Команды хранятся в защищенном поле класса типа std::list.
3. Обход элементов списка осуществляется с помощью итератора
std::iterator.
Пример использования класса CommandList:
CommandList cl = CommandList();
// Чтение из файла:
cl.init("commands.txt");
cl.execute();
// Чтение с консоли:
cin >> cl;
cout << cl;
cl.execute();
22
Задание № 3. Шаблоны
Переделайте классы Vector и Matrix из задания № 2 так, чтобы можно
было создавать векторы и матрицы любых размеров и любых типов (тесты
переделайте соответственно). Используйте шаблоны для описания таких
векторов. Пример использования:
Vector<int, 5> v1(1,1,1,1,1);
v1[3] = 100;
std:cout<<v1;
Vector<Complex, 3> v2(0,0,0);
Переделайте функцию gauss(), чтобы она так же работала для разных
размерностей и типов:
Matrix<double, 5> matrix = … // your initialization
Vector<double, 5> vector = … // your initialization
Vector<double, 5> answer = gauss<double, 5>(matrix,
vector);
Вместо статических полей Vector(FLT_MIN, FLT_MIN, FLT_MIN) и
Vector(FLT_MAX, FLT_MAX, FLT_MAX) используйте исключения.
Переделайте тестовую глобальную функцию, которая предоставляет
консольный интерфейс для решения уравнения Гаусса. Пусть она запрашивает размерность (от 2 до 5) и решает уравнение для типа double.
23
Литература
1. В. В. Мухортов, В. Ю. Рылов. Объектно-ориентированное программирование, анализ и дизайн: Учебное пособие. Новосибирск: ИМ СО РАН,
2002.
2. Г. Буч. Объектно ориентированный анализ и проектирование с примерами приложений на С++, 2-е изд./ Пер. с англ. СПб.; М.: «Невский
Диалект» – «Издательство БИНОМ», 1999.
3. Антон Элиенс. Принципы объектно-ориентированной разработки программ. 2-е изд. / Пер с англ. М.: Издательский дом «Вильямс», 2002.
4. Г. Буч, Д. Рамбо, А. Джекобсон. Язык UML: Руководство пользователя.
/ Пер. с англ. М.: ДМК, 2000.
5. Б. Страуструп. Язык программирования C++, 3-е изд. / Пер. с англ.
СПб.; М.: «Невский Диалект» – «Издательство БИНОМ», 1999.
6. Б. Страуструп. Дизайн и эволюция языка С++. / Пер. с англ. М.: ДМК,
2000.
7. А. Голуб. Правила программирования C & C++. / Под редакцией Костенко В. М.: Восточная книжная компания, 1996.
8. С. Мейерс. Эффективное использование С++. 50 рекомендаций по
улучшению ваших программ и проектов. / Пер. с англ. М.: ДМК, 2000.
9. С. Мейерс. Наиболее эффективное использование С++. 35 новых рекомендаций по улучшению ваших программ и проектов. / Пер. с англ. М.:
ДМК, 2000.
10. Брюс Эйкель. Философия Java. СПб.: Питер, 2001.
11. П. Ноутон, Г. Шилдт. Java 2. Наиболее полное руководство. СПб.: BHV,
2001.
24
ОБЬЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ
(2-й курс, 4-й сем., 64 ч., диф. зачёт)
Программа курса лекций (32 ч.)
Старший преподаватель Всеволод Юрьевич Рылов
Инструментальные средства ООП языка программирования Java
1. Виртуальная машина Java (2 часа).
1.1. История и предпосылки появления Java.
1.2. Понятие виртуальной машины. Среда исполнения и байт-код.
Взаимодействие виртуальной машины с операционной системой.
1.3. Пространства классов. Структура приложений на Java. Загрузка
классов и инициализация объектов.
1.4. Сферы применения Java в современном информационном мире.
1.5. Версии Java машины и их эволюция.
1.6. Средства ООП, непосредственно поддерживаемые в Java.
1.7. Простейшие приложение на Java.
2. Алгоритмические средства языка Java (1 час).
2.1. Строгая типизация Java.
2.2. Базовые типы языка. Строки и литералы.
2.3. Преобразования типов в выражениях.
2.4. Особенности инициализации массивов. Операторы управления
памятью.
2.5. Краткий обзор операторов. Использование break.
3. Средства объектного программирования языка Java (3 часа).
3.1. Представление объектов и классов.
3.1.1. Структура объявления класса.
3.1.2. Доступ к членам класса.
3.1.3. Спецификаторы доступа для обеспечения инкапсуляции.
3.1.4. Спецификатор доступа final.
3.1.5. Средства управления жизнью объекта. Конструкторы и метод finalize().
3.1.6. Принципы работы сборщика мусора.
3.1.7. Работа с массивами объектов.
3.1.8. Статические поля и методы классов. Классы – утилиты.
3.1.9. Блок статической инициализации.
3.1.10. Принцип работы ClassLoader.
3.2. Реализация отношений между объектами и классами.
3.2.1. Ассоциация и агрегация объектов и классов.
3.2.2. Использование и зависимость от интерфейсов.
3.2.3. Объекты при передаче параметров и возврате из методов.
3.2.4. Реализация отношения Клиент – Сервер.
3.2.5. Внутренние классы.
4. Средства объектно-ориентированного программирования Java (6 часов).
4.1. Наследование в Java.
4.1.1. Производные классы.
4.1.2. Класс Object. Метод toString().
4.1.3. Управление доступом в производных классах.
4.1.4. Абстрактные классы и интерфейсы.
4.1.5. Реализация интерфейсов как альтернатива множественному
наследованию.
4.1.6. Информация о типе на этапе исполнения. Оператор
instanceof. Приведение типов.
4.1.7. Использование класса Class.
4.2. Пакеты.
4.2.1. Определение пакета.
4.2.2. Ограничение доступа.
4.2.3. Импортирование пакетов. Разрешение конфликтов имен.
4.3. Обработка исключений.
4.3.1. Основные принципы и типы исключительных ситуаций.
4.3.2. Перехват исключительных ситуаций. Операторы try, throw,
throws, catch, finally.
4.3.3. Использование нескольких блоков catch и вложенный оператор try.
4.3.4. Не перехваченные исключительные ситуации.
26
4.3.5. Встроенные исключительные исключения Java. Классы
Throwble и Exception.
4.3.6. Принципы создания и использования исключительных ситуаций.
4.4. Многопоточное программирование на Java. Параллелизм.
4.4.1. Модель потока в Java. Зависимость от реализации потока в
операционной системе.
4.4.2. Свойства потока. Синхронизация. Передача сообщений.
4.4.3. Класс Thread и интерфейс Runnable.
4.4.4. Главный поток и способы создания потоков.
4.4.5. Управление потоками и приоритеты потоков.
4.4.6. Группы потоков.
4.4.7. Особенности написания многопоточных программ.
4.4.8. Использование синхронизирующих блоков и мониторов объектов. Синхронизированные методы объектов.
4.4.9. Взаимная блокировка.
4.4.10. Использование пула потоков.
5. Стандартная библиотека Java (8 часов).
5.1. Организация пакетов стандартной библиотеки Java. Пакеты java и
javax.
5.2. Обработка строк.
5.2.1. Использование и методы класса String
5.2.2. Использование StringBuffer.
5.3. Пакет java.lang.
5.3.1. Структура и назначение.
5.3.2. Использование класса System. Управление средой исполнения.
5.3.3. Использование классов Number, Double, Integer, Character и
др.
5.3.4. Класс Math.
5.3.5. Класс Compiler и класс ClassLoader.
5.4. Пакет java.util.
5.4.1. Общие принципы организации контейнеров и коллекций в
Java.
5.4.2. Использование множеств и списков.
27
5.4.3. Использование отображений и ассоциативных контейнеров.
5.4.4. Итераторы и исключительные ситуации при работе с классами утилит.
5.4.5. Класс Properties.
5.4.6. Классы Date и Calendar.
5.5. Подсистема ввода вывода java.io.
5.5.1. Общие концепции организации ввода – вывода в библиотеке
Java.
5.5.2. Проблема платформенной независимости и локализации.
5.5.3. Основные классы потоков ввода-вывода в Java и методы работы с ними.
5.5.4. Использование потоков ввода вывода при работе с файлами.
Эффективность.
5.5.5. Концепция Reader и Writer. Управление локализацией.
5.5.6. Использование Tokenizer.
5.6. Пакет java.net.
5.6.1. Основы работы с сетью в Internet. Адресация.
5.6.2. Сокеты. Жизненный цикл сокета.
5.6.3. Работа с протоколом HTTP и класс URL.
6. Графическая подсистема Java. JFC (4 часа).
6.1. Классы AWT.
6.1.1. Основы работы с окнами. Component, Container, Panel, Window, Frame, Canvas.
6.1.2. Доставка и обработка событий в графической подсистеме.
Механизм Listeners.
6.1.3. Создание программы с оконным интерфейсом. Рисование
графических примитивов.
6.1.4. Использование управляющих элементов, диспетчеров компоновки и меню.
6.1.5. Связь классов AWT с оконным интерфейсом операционной
системы.
6.2. Классы Swing.
6.2.1. Основные принципы графической системы Swing. Платформенная независимость, понятие Look&Feel.
28
6.2.2. Написание графического интерфейса с использованием
Swing компонентов.
6.2.3. Работа с таблицами, текстом, диалогами и HTML.
6.3. Апплеты.
6.3.1. Основы работы с апплетом.
6.3.2. Жизненный цикл апплета.
6.3.3. Дескриптор APPLET.
6.3.4. Передача параметров и загрузка апплета.
7. Модель безопасности Java (2 часа).
7.1. Принципы организации и эволюция модели безопасности в Java.
7.2. SecurityManager. Инициализация и функции.
7.3. Права доступа. Управление и проверка прав доступа.
7.4. Исключительные ситуации.
7.5. Java Cryptography Extension
7.6. Алгоритмы шифрования. Ключи и цифровые подписи.
8. Программирование распределенных приложений (6 часов).
8.1. Принципы построения распределенных приложений.
8.2. Проблемы передачи объектов и синхронизации в распределенных
приложениях.
8.3. Реализация сохраняемости.
8.4. Three-tier технология.
8.4.1. Уровень интерфейса.
8.4.2. Уровень бизнес логики.
8.4.3. Уровень сохранения.
8.5. Remote Method Invocation.
8.5.1. Основные принципы и протокол взаимодействия.
8.5.2. Интерфейс Remote и класс UnicastRemoteObject.
8.5.3. Класс Naming и rmiregistry сервис.
8.5.4. RMI сервер.
8.5.5. RMI клиент.
8.5.6. Модель безопасности, синхронизация и сборка мусора в распределенных RMI приложениях.
8.5.7. Механизм Activation.
29
9. Основы архитектурного анализа и проектирования объектноориентированных систем.
9.1. Правила дизайна классов и пакетов.
9.2. Паттерны проектирования.
9.3. Цикл разработки объектно-ориентированного приложения. RUP.
Программа практических занятий (32 ч.)
Ассистент Антон Валентинович Адаманский
1. Введение.
 Console IO
 java.lang.String (split, concat, endsWith)
 Primitive types & wrapper types (parseInt)
 Массивы
2. Наследование.
 Наследование и объектная модель Java
3. Исключения.
 Исключения
 IO
4. Графика.
 Вложенные (inner) классы
 AWT
 Swing
 Applet
5. Коллекции.
 Generic
 List, Map, Set
 Методы класса java.lang.Object (equals, hashcode)
 Коллекции, Итератор, Collections
6. Многопоточность.




Thread
wait/notify
synchronized
Timer
30
7. Reflection.
 Классы Class и Method
 ClassLoader
 Ресурсы, java.uril.Properties
8. Расширения языка в JSDK 1.5, JavaDoc.
 Enum
 Annotations
 import static
 Inboxing/outboxing
 Использование JavaDoc
9. Архитектура программ с UI.
 MVC
 Beans & controllers
10. Сетевые технологии, XML.
 Пакет java.net
 XML JAXP
11. Утилитные классы.
 java.lang.System, вызов внешней программы
 Random, Math
 StringTokenizer, StringBuffer
 MessageFormat, DateFormat, NumberFormat
 Date, Calendar, TimeZone
 java.util.concurrent.locks.Lock
 java.util.concurrent.ThreadPoolExecutor
12. Java Security.
 Проверка permissions через SecurityManager & AccessController
 Policy file
13. RMI.
Дополнительные темы:
 Basic and Troubleshooting Tools
 Monitoring and Management Tools, JMX
 JNDI
 Logging (standard & Log4j)
 JDBC
31
 Reference Objects
 NIO
 Cryptography
Курсовые работы
Задание № 1: Игра «Сапер»
Постановка задачи
Написать аналог игры «Сапер» (“Minesweeper”) из состава стандартных
программ для Windows OS.
Архитектура программы должна быть основана на паттерне MVC
(Mode-View-Controller) или EBC (Entity-Boundary-Controller).
Программа должна иметь два интерфейса – текстовый и графический,
причем оба интерфейса должны использовать одну и ту же игровую модель. Т.е. классы данных и логики должны быть одинаковые для текстового
и графического интерфейсов.
Структура программы
/ru/nsu/ccfit/ФАМИЛИЯ/minesweeper – основные классы программы.
/ru/nsu/ccfit/ФАМИЛИЯ/minesweeper/text – классы текстового интерфейса пользователя.
/ru/nsu/ccfit/ФАМИЛИЯ/minesweeper/gui – классы графического интерфейса.
/ru/nsu/ccfit/ФАМИЛИЯ/minesweeper/resources – картинки и другие ресурсы.
Требования к программе
1. Размер поля и количество мин можно изменить. По умолчанию поле размером 9x9 и количество мин 10.
2. Игра должна поддерживать таблицу рекордов.
3. Пользователю должны быть доступны команды: Exit, About, New,
High Scores.
4. Отчет времени должен быть реализован отдельным потоком. Можно использовать стандартный таймер java.util.Timer.
Реализация текстового UI
1. Команды пользователя вводятся с консоли, ячейки нумеруются от
ноля.
32
2.
После каждого хода игрока все игровое поле распечатывается на
экран целиком.
Реализация графического UI
1. Использовать библиотеку SWING (пакеты javax.swing.*) из комплекта разработчика JSDK.
2. Мины и флажки отображать с помощью картинок.
3. Для определения типа нажатой клавиши мыши использовать методы класса javax.swing.SwingUtilities.
4. При формировании окна игры использовать класс LayoutManager.
Для расположения элементов на игровой панели рекомендуется использовать класс GridBagLayout. Для расположения ячеек поля
рекомендуется использовать класс GridLayout.
5. Для отображения диалоговых окон рекомендуется использовать
класс JOptionPane.
Пример
Пример приложения с паттерном EBC:
http://ccfit.nsu.ru/~den/NotebookExample.zip
Это приложение разбито на 4 класса:
1. NotebookRecord.java — простой класс для транспортировки данных.
Обратите внимание, что в нем нет ничего лишнего. Только set/get
методы. Но этот класс очень важен, т.к. определяет структуру данных, которая используется для представления записи в записной
книжке.
2. NotebookManager.java — класс, инкапсулирующий логику работы с
записной книжкой. Обратите внимание, что он не зависит от пользовательского интерфейса. Это позволяет его использовать отдельно, например в каком-нибудь приложении «Календарь» для отображения заметок, привязанных к определенному дню.
3. NotebookGUI.java — класс, управляющим GUI для работы с записной книжкой.
4. NotebookConsoleUI.java — пример класса, который использует не
графический пользовательский интерфейс. Т.к. у нас логика
(NotebookManager) выделена в отдельный класс, то очень легко
привязать сколько угодно интерфейсов для работы с записной
книжкой.
33
Задание № 2. Чат
Напишите программу для общения через Internet. Программа должна состоять из двух частей: сервер и клиент. Сервер стартует в качестве отдельного приложения на определенном порту (задано в конфигурации). Клиент
в виде приложения на Swing подсоединяется к серверу по имени сервера и
номеру порта.
Минимальные возможности чата:
 Каждый участник чата имеет собственный ник, который указывается при присоединению к серверу.
 Можно посмотреть список участников чата.
 Можно послать сообщение в чат (всем участникам).
 Клиент показывает все сообщения, которые отправили в чат с момента подключения; список сообщений обновляется в онлайне.
 Клиент отображает такие события как: подключение нового человека в чат и уход человека из чата. Сервер должен корректно понимать ситуацию отключения клиента от чата (по таймауту).
 Сервер должен логгировать все события, которые происходят на его
стороне (включается/отключается в конфигурационном файле).
 Чат работает через TCP/IP протокол.
Необходимо создать 2 версии клиента/сервера. Первый вариант использует
XML сообщения. Второй вариант использует сериализацию / десериализацию Java-объектов для посылки/приема сообщений.
Клиент и сервер должны поддерживать стандартный протокол для XML
варианта. Это необходимо для возможности общение между клиентами,
созданными разными учениками. Протокол описан ниже. Расширения протокола приветствуются, например можно добавить, чтобы пользователь
мог выбрать цвет сообщений.
Вначале XML сообщения идут 4 байта (Java int) с его длиной. То есть сначала читаются первые 4 байта и узнается длина оставшегося сообщения (в
байтах). Затем считывается само сообщение и далее обрабатывается как
XML документ.
Рекомендуется использовать следующие техники:
 Сервер слушает порт с помощью класса java.net.ServerSocket.
 Клиент подсоединяется к серверу с помощью класса java.net.Socket.
34


XML сообщение читать с помощью DOM parser:
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse().
Сериализация/десериализация объекта выполняется через классы
ObjectInputStream и ObjectOutputStream.
Минимальный протокол взаимодействия для XML сообщений (расширения
приветствуются):
1. Регистрация.
a. Client message
<command name=”login”>
<name>USER_NAME</name>
<type>CHAT_CLIENT_NAME</type>
</command>
b. Server error answer
<error>
<message>REASON</message>
</error>
c. Server success answer
<success>
<session>UNIQUE_SESSION_ID</session>
</success>
2. Запрос списка пользователей чата.
a. Client message
<command name=”list”>
<session>UNIQUE_SESSION_ID</session>
</command>
b. Server error answer
<error>
<message>REASON</message>
</error>
c. Server success answer
<success>
<listusers>
<user>
<name>USER_1</name>
<type>CHAT_CLIENT_1</type>
</user>
…
<user>
<name>USER_N</name>
<type>CHAT_CLIENT_N</type>
35
3.
4.
5.
6.
7.
</user>
</listusers>
</success>
Сообщение от клиента серверу.
a. Client message
<command name=”message”>
<message>MESSAGE</message>
<session>UNIQUE_SESSION_ID</session>
</command>
b. Server error answer
<error>
<message>REASON</message>
</error>
c. Server success answer
<success>
</success>
Сообщение от сервера клиенту.
a. Server message
<event name="message">
<message>MESSAGE</message>
<name>CHAT_NAME_FROM</name>
</event>
Отключение.
a. Client message
<command name=”logout”>
<session>UNIQUE_SESSION_ID</session>
</command>
b. Server error answer
<error>
<message>REASON</message>
</error>
c. Server success answer
<success>
</success>
Новый клиент.
a. Server message
<event name=”userlogin”>
<name>USER_NAME</name>
</event >
Клиент отключился.
a. Server message
36
<event name=”userlogout”>
<name>USER_NAME</name>
</event >
Литература
1. В. В. Мухортов, В. Ю. Рылов. Объектно-ориентированное программирование, анализ и дизайн: Учебное пособие. Новосибирск: ИМ СО РАН,
2002.
2. Г. Буч. Объектно ориентированный анализ и проектирование с примерами приложений на С++, 2-е изд./ Пер. с англ. СПб.; М.: «Невский
Диалект» – «Издательство БИНОМ», 1999.
3. Антон Элиенс. Принципы объектно-ориентированной разработки программ. 2-е изд. / Пер с англ. М.: Издательский дом «Вильямс», 2002.
4. Г. Буч, Д. Рамбо, А. Джекобсон. Язык UML: Руководство пользователя.
/ Пер. с англ. М.: ДМК, 2000.
5. Б. Страуструп. Язык программирования C++, 3-е изд. / Пер. с англ.
СПб.; М.: «Невский Диалект» – «Издательство БИНОМ», 1999.
6. Б. Страуструп. Дизайн и эволюция языка С++. / Пер. с англ. М.: ДМК,
2000.
7. А. Голуб. Правила программирования C & C++. / Под редакцией Костенко В. М.: Восточная книжная компания, 1996.
8. С. Мейерс. Эффективное использование С++. 50 рекомендаций по
улучшению ваших программ и проектов. / Пер. с англ. М.: ДМК, 2000.
9. С. Мейерс. Наиболее эффективное использование С++. 35 новых рекомендаций по улучшению ваших программ и проектов. / Пер. с англ. М.:
ДМК, 2000.
10. Брюс Эйкель. Философия Java. СПб.: Питер, 2001.
11. П. Ноутон, Г. Шилдт. Java 2. Наиболее полное руководство. СПб.: BHV,
2001.
37
ОПЕРАЦИОННЫЕ СИСТЕМЫ
(2-й курс, 4-й сем., 32 ч., экзамен)
Программа курса лекций (32 ч.)
Доцент Дмитрий Валентинович Иртегов
1. Классификация операционных систем. Понятие приложения реального
времени.
2. Обзор архитектуры фон-неймановского процессора (на примере x86,
SPARC). Режимы адресации: регистровый, литеральный, базовая, индексная и базово-индексная адресация, относительная адресация. Позиционно-независимый код. Ассемблер. Одно-, двух- и многопроходное ассемблирование. Таблица символов.
3. Загрузка программ. Абсолютный загрузчик. Относительный загрузчик.
Сборка программ. Редактор связей. Архивные библиотеки. Разделяемые библиотеки. Позиционно-независимые разделяемые библиотеки
ELF. Загрузка операционной системы. Первичный, вторичный и последующие загрузчики. Процесс загрузки Windows NT. Процесс
загрузки SunSoft Solaris.
4. Управление памятью (открытая память). Статическое, динамическое и
стековое распределение памяти. Внешняя и внутренняя фрагментация.
Стратегии выделения памяти: первый подходящий, наиболее подходящий, наименее подходящий. Алгоритм парных меток. Алгоритм
близнецов. Алгоритм GNU Malloc
5. Виртуальная память. Базовая адресация. Сегментная и страничная
виртуальная память. Уровни привилегий. Виртуальная память VAX.
Виртуальная память x86. Виртуальная память SPARC v9. Страничный
обмен. Поиск жертвы. Алгоритм LRU. Clock-алгоритм. Приближения
к clock-алгоритму. Стратегия управления памятью в VAX/VMS и Windows NT.
6. Внешние события. Опрос. Прерывания. Обзор многопроцессорных
архитектур. Канальные процессоры. Симметричные многопроцессорные системы. NUMA-архитектуры.
7. Параллелизм с точки зрения программиста. Постановка задачи. Понятие критической секции. Реентерабельные процедуры. Взаимоисключение.
Примитивы взаимоисключения.
Спинлоки.
Семафоры
Дейкстры. Мертвая и живая блокировки. Обзор стратегий избегания
блокировок. Понятие транзакции. Мониторные процессы. Гармонически взаимодействующие процессы.
8. Реализация параллелизма на однопроцессорном компьютере. Кооперативная многозадачность (сопрограммы). Вытесняющая многозадачность. Контекст процесса. Планировщик с приоритетами. Кооперативная и вытесняющая многозадачность внутри ядра (монолитное ядро
и микроядро). Управляемая событиями архитектура.
9. Подсистема ввода-вывода. Драйверы внешних устройств. Архитектура
драйвера. Многоуровневые драйверы. Синхронный и асинхронный
ввод/вывод. Опережающее чтение и отложенная запись. Дисковый
кэш. Дисковая подсистема. RAID.
10. Файловые системы. Понятия файла и каталога. Операции над файлами.
Простые файловые системы (tar, RT-11). Сложные файловые системы
(UFS, NTFS, HPFS). Жесткие и символические связи. Устойчивость
файловой системы к сбоям. Восстановление файловых систем. Журнальные файловые системы.
11. Вопросы безопасности. Аутентификация и авторизация. Аутентификация паролем. Обзор биометрических методов аутентификации. Криптографическая аутентификация. Полномочия. Setuid и другие механизмы смены идентичности. Списки управления доступом. Вырожденные списки управления доступом (кольца защиты). Троянские программы и защита от них.
Литература
1. Д. Баррон. Ассемблеры и загрузчики. М.: Мир, 1974.
2. Э. Дейкстра. Дисциплина программирования. М.: Мир, 1978.
3. Г. Дейтел. Введение в операционные системы. М.: Мир, 1987.
4. С. Кейслер. Проектирование операционных систем для малых ЭВМ. М.:
Мир, 1986.
5. Д. Иртегов. Введение в операционные системы, 2-e изд. Спб: БХВ, 2008.
6. Д. Э. Кнут. Искусство программирования. Издательский дом Вильямс,
2000.
39
7. С. Краковяк. Основы организации и функционирования ОС ЭВМ. М.:
Мир, 1988.
8. А. Танненбаум. Современные операционные системы. М: Вильямс,
2001.
9. Ч. Хоар. Взаимодействующие последовательные процессы. М.: "Мир",
1989.
40
ОПЕРАЦИОННЫЕ СИСТЕМЫ UNIX
(3-й курс, 5-й сем., 108 ч., диф. зачёт)
Программа курса лекций (36 ч.)
Доцент Дмитрий Валентинович Иртегов
Раздел 1
1. Обзор среды программирования Unix. Использование компилятора gcc.
Использование man. Другие источники информации.
2. Среда исполнения программ. Адресное пространство процесса, пользовательская область. Доступ к параметрам процесса. Механизм Setuid.
3. Управление памятью.
4. Работа с файлами. Открытие и создание файла. Чтение и запись. Перемещение указателя чтения-записи.
Отображение файлов в
оперативную память. Другие операции.
5. Блокировка участков файлов. Блокировка на чтение и на запись. Рекомендательная и обязательная блокировка. Библиотечные функции для
работы с блокировками.
6. Создание процессов и исполнение программ. Создание процессов системным вызовом fork. Системные вызовы семейства exec. Завершение
процесса.
7. Управление процессами. Связь родитель-потомок. Код возврата процесса. Зомби. Системные вызовы семейства wait.
8. Терминальный ввод-вывод. Параметры терминального интерфейса.
Канонический и неканонический режим ввода. Управление заданиями.
9. Управление файлами. Проверка доступа к файлу. Получение информации о файле. Жесткие и символические связи.
10. Управление каталогами. Создание и уничтожение каталогов. Перемещение по дереву каталогов. Просмотр каталога.
Раздел 2
11. Сигналы. Понятие сигнала, типы сигналов. Реакция на сигнал по
умолчанию. Обработка сигнала. Отправка сигнала процессам и группам процессов. Взаимодействие сигналов и операций ввода-вывода.
12. Трубы (программные каналы). Неименованные трубы. Создание труб.
Взаимодействие процессов через неименованную трубу. Именованные
трубы. Создание именованной трубы. Открытие именованной трубы.
13. System V IPC. Создание и уничтожение средств IPC.
средствами IPC.
Управление
14. IPC: очереди сообщений. Установка сообщения в очередь. Выбор сообщений из очереди. Ограничения при работе с очередями.
15. IPC: семафоры. Инициализация набора семафоров.
набором семафоров. Группы операций.
Операции над
16. IPC: разделяемая память. Подключение сегмента разделяемой памяти.
Отключение сегмента разделяемой памяти. Использование семафоров
для синхронизации доступа к разделяемой памяти.
Программа практических занятий (72 ч.)
Доцент Дмитрий Валентинович Иртегов
Оценка на дифференцированном зачете выставляется по итогам практикума.
 Для получения оценки «отлично» на дифференцированном зачете
следует сдать 23 задания практикума «Системное программирование»
(не менее 10 заданий должно быть из раздела 2). Можно также
получить оценку «отлично», сдав все задания, помеченные как «задания
по shell».
 Для получения оценки «хорошо» на дифференцированном зачете
следует сдать 11 заданий.
 Для
получения
оценки
«удовлетворительно»
на
дифференцированном зачете следует сдать 6 заданий. Студент, не
сдавший
ни
одного
задания,
может
получить
оценку
«удовлетворительно» по итогам устного собеседования по теме
практикума.
42
 При сдаче всех заданий необходимо предоставить исходные тексты
программы и продемонстрировать ее работу в операционной системе
Solaris 8. Преподаватель обязан убедиться, что студент понимает
принцип работы программы и способен контролировать последствия
вносимых в программу изменений. Для этого преподаватель имеет
право предъявить к сдаваемой программе дополнительные требования.
Задания практикума
Раздел 1
1. Вывод различных атрибутов процесса в соответствии с указанными
опциями
Напишите программу, которая будет обрабатывать опции, приведенные
ниже. Опции должны быть обработаны в соответствии с порядком своего
появления справа налево. Одной и той же опции разрешено появляться
несколько раз. Используйте getopt(3C) для определения имеющихся опций.
Сначала пусть ваша программа обрабатывает только некоторые опции.
Затем добавьте еще, до тех пор, пока все требуемые опции не будут обрабатываться. Вы можете скопировать воспользоваться программой
getopt_ex.c и изменить ее.
-i Печатает реальные и эффективные идентификаторы
пользователя и группы.
-s Процесс становится лидером группы. Подсказка:
смотриии setpgid(2).
-p Печатает иидентификаторы процесса, процесса-родителя
и группы процессов.
-u Печатает значение ulimit
-Unew_ulimit Изменяет значение ulimit. Подсказка:
смотри atol(3C) на странице руководства strtol(3C)
-c Печатает размер в байтах core-файла, который может
быть создан.
-Csize Изменяет размер core-файла
-d Печатает текущую рабочую директорию
-v Распечатывает переменные среды и их значения
-Vname=value Вносит новую переменную в среду или
изменяет значение существующей переменной.
Проверьте вашу программу на различных списках аргументов, в том числе:
43
 Нет аргументов
 Недопустимую опцию.
 Опции, разделенные знаком минус.
 Неудачное значение для U.
2. Время в Калифорнии
Измените программу ex_time.c, чтобы она выводила дату и время в Калифорнии (Pacific Standard Time, PST). Подсказка: если время UTC 20 часов,
то в Калифорнии 12 часов.
3. Установка идентификатора пользователя для доступа к файлу
Создайте файл данных, который может писать и читать только владелец
(это можно сделать командой shell chmod 600 file) и напишите программу,
которая:
1. Печатает реальный и эффективный идентификаторы пользователя.
2. Открывает файл с помощью fopen(3). Если fopen() завершился
успешно, файл должен быть закрыт с помощью fclose(3). Напечатайте сообщение об ошибке, используя perror(3C), если файл не
удалось открыть.
3. Сделайте, чтобы реальный и эффективный идентификаторы пользователя совпадали. Подсказка: setuid(2).
4. Повторите первые два шага.
Проверьте работу вашей программы:
1. Исполните программу и посмотрите вывод.
2. Сделайте программу доступной для запуска членам вашей группы и
пусть ваши одногруппники исполнят программу.
3. Командой chmod u+s prog установите бит установки идентификатора пользователя и пусть ваши одногруппники опять исполнят
эту программу.
4. Список строк
Напишите программу, которая вставляет строки, введенные с клавиатуры, в
список. Память под узлы списка выделяйте динамически с использованием
malloc(3). Ввод завершается, когда в начале строки вводится точка (.). Затем
все
строки
из
списка
выводятся
на
экран.
Подсказка: объявите массив символов размера, достаточного чтобы вместить самую длинную введенную строку. Используйте gets(3), чтобы прочитать строку, и strlen(3), чтобы определить ее длину. Помните, что
44
strlen(3) не считает нулевой символ, завершающий строку. После определения длины строки, выделите блок памяти нужного размера и внесите
новый указатель в список.
5. Таблица поиска строк в текстовом файле
Написать программу, которая анализирует текстовый файл, созданный
bтекстовым редактором, таким как ed(1) или vi(1). После запроса, который
предлагает ввести номер строки, с использованием printf(3) программа
печатает соответствующую строку текста. Ввод нулевого номера завершает
работу программы. Используйте open(2), read(2), lseek(2) и close(2) для
ввода/вывода. Постройте таблицу отступов в файле и длин строк для каждой строки файла. Как только эта таблица построена, позиционируйтесь на
начало заданной строки и прочтите точную длину строки. Предполагайте,
что файл не длиннее сотни строк.
Подсказка: выберите или создайте текстовый файл с короткими строками.
Помните, что первая строка начинается с нулевого отступа в файле. Найдите каждый символ перевода строки, запишите его позицию; в программе
следует использовать вызов lseek(fd,0L,1). Для отладки распечатайте эту
таблицу и сравните с таблицей, полученной вручную. Как только таблицы
начнут совпадать, можно приступать к запросу номера строки.
6. Таблица поиска строк в текстовом файле
Измените программу так, чтобы пользователю отводилось 5 секунд на ввод
номера строки. Если пользователь не успевает, программа должна распечатать все содержимое файла и завершиться. Если же пользователь успел в
течение пяти секунд ввести номер строки, то программа должна работать
как в предыдущей задаче.
7. Таблица поиска строк в текстовом файле (2)
Измените предыдущую программу так, чтобы использовалось отображение
файла в память взамен использования read(2), lseek(2) и write(2).
8. Защищенный текстовый редактор
Напишите программу, которая захватывает весь файл перед вызовом редактора. Это защитит файл с правами доступа группы на изменение. После
того как программа захватит файл, вызовите свой любимый редактор с
помощью библиотечной функции system(3). Попытайтесь в вашей программе использовать допустимое захватывание. Когда ваша программа
захватит файл, попросите одногруппника исполнить вашу программу. Объ45
ясните результат. Потом попытайтесь использовать обязательное захватывание. Объясните результат.
9. Создание двух процессов
Напишите программу, которая создает подпроцесс. Этот подпроцесс должен исполнить cat(1) длинного файла. Родитель должен вызвать printf(3) и
распечатать какой-либо текст. После выполнения первой части задания
модифицируйте программу так, чтобы последняя строка, распечатанная
родителем, выводилась после завершения порожденного процесса. Используйте wait(2), waitid(2) или waitpid(3).
10. Код завершения команды
Напишите программу, которая запускает команду, заданную в качестве
первого аргумента, в виде порожденного процесса. Все остальные аргументы программы передаются этой команде. Затем программа должна дождаться завершения порожденного процесса и распечатать его код завершения.
11. Функция execvpe()
Напишите функцию execvpe(), которая работает как execvp(2), но позволяет изменять среду исполнения, как execve(2).
Совет: используйте внешнюю переменную environ.
12. Командный интерпретатор shell (задание № 1 по shell)
В этом упражнении вы должны разработать упрощенную версию командного интерпретатора системы UNIX – shell. В дальнейшем этот shell будет
улучшен добавлением программных каналов и обработки сигналов. Для вас
заранее написаны некоторые функции этой программы. В файле shell.c
содержится скелет функции main() с комментариями, говорящими, где
следует вставить ваш код. Функция main() вызывает функцию prompline()
из файла promptline.c, которая читает строку из стандартного ввода. Затем
main() вызывает parseline() из файла parseline.c, которая проверяет ввод на
отсутствие синтаксических ошибок. Для каждой команды в строке,
parseline() формирует дескриптор команды типа struct command, определенного в shell.h Существует глобальный массив таких структур, называемый cmds[] и объявленный в shell.c. Дескриптор команды состоит из двух
полей. Первое поле – массив указателей, называемый cmdargs[]. Функция
parseline() инициализирует этот массив указателями на строки-аргументы.
Каждый аргумент завершается нулевым байтом. Во входной строке аргу46
менты разделяются пробелами. Кроме того, parseline() помещает после
последнего аргумента в списке cmdargs[] нулевой указатель. Команды могут разделяться переводом строки, точкой с запятой, амперсандом (&) или
символами <, >, >> или |. Другие глобальные переменные, объявленные в
shell.c определяют, должна ли команда быть запущена в основном
(foreground) или фоновом (background) режиме, а также для перенаправления ввода/вывода из/в файл. Эти переменные (bkgrnd, infile, outfile и
appfile) устанавливаются в функции parseline(). Если bkgrnd ненулевой,
команда должна быть запущена в фоновом режиме, то есть ваш shell не
должен ожидать завершения соответствующего процесса. Если infile ненулевой, он указывает на имя файла, из которого должен быть получен стандартный ввод первой команды в строке, т.е. символ <. Аналогично, если
outfile ненулевой, он указывает на имя файла, куда следует перенаправить
вывод последней команды в строке, т.е. символ >. Наконец, если appfile
ненулевой, это имя файла, к содержимому которого следует добавить вывод последней команды в строке, т.е. символ >>. В следующих упражнениях вы будете модифицировать shell.c. Каждое последующее упражнение
является улучшением предыдущего. Вы должны использовать следующую
версию вызова exec(2): execvp(cmds[i].cmdargs[0], cmds[i].cmdargs).
13. Исполнение команд (задание № 2 по shell)
Модифицируйте shell.c для исполнения каждой команды в массиве cmds[]
как подпроцесса. Во время исполнения этого подпроцесса, ваша программа
должна ждать его завершения. Если программа, заданная во входной строке, не может быть найдена, shell должен распечатать сообщение об ошибке
и продолжить исполнение. Предполагается, что пользователь набирает
только простые команды, т.е. только одна команда на строке, без метасимволов, перенаправления ввода/вывода, конвейеров и символа &.
14. Исполнение в фоновом режиме (задание № 3 по shell)
Измените вашу программу так, чтобы позволить исполнение команд в фоновом режиме, обозначаемое символом & в конце командной строки. Программа должна выводить идентификатор фонового процесса на стандартный вывод.
15. Перенаправление ввода/вывода (задание № 4 по shell)
Измените вашу программу так, чтобы позволить перенаправление ввода/вывода. Заметьте, что перенаправление ввода ("< filename") используется только с первой командой в строке, а вывода ("> filename" или ">>
filename") — только с последней. Совет: используйте dup(2).
47
16. Ответ без ввода новой строки
Напишите программу, которая печатает вопрос и требует односимвольного
ответа. Измените атрибуты вашего терминала так, чтобы пользователю не
нужно было вводить новую строку после ответа.
17. Строчный редактор
Многие программы, принимающие ввод с терминала, позволяют редактировать строку перед использованием. Напишите программу, которая выключает эхо и каноническую обработку, таким образом выключив и обработку символа забоя. Ваша программа должна получать ввод с клавиатуры
и показывать его на терминале в соответствии со следующими правилами:
1) Каждый введенный символ должен немедленно появляться на дисплее.
2) Когда вводится символ ERASE, стирается последний символ в текущей
строке.
3) Когда вводится символ KILL, стираются все символы в текущей строке.
4) Когда вводится CTRL-W, стирается последнее слово в текущей строке,
вместе со всеми следующими за ним пробелами.
5) Программа завершается, когда введен CTRL-D и курсор находится в
начале строки.
6) Все непечатаемые символы, кроме перечисленных выше, должны издавать звуковой сигнал, выводя на терминал символ CTRL-G.
7) Длина строки ограничена 40 символами. Если какое-то слово пересекает
40-й столбец, это слово должно быть помещено в начало следующей
строки.
18. Листинг каталога
Напишите программу — аналог команды ls -ld. Для каждого своего аргумента эта команда должна распечатывать:
1. Биты состояния файла в воспринимаемой человеком форме:
 d если файл является каталогом;
 - если файл является обычным файлом;
 ? во всех остальных случаях.
2. Три группы символов, соответствующие правам доступа для хозяина, группы и всех остальных:
 r если файл доступен для чтения, иначе - ;
 w если файл доступен для записи, иначе - ;
 x если файл доступен для исполнения, иначе - .
48
3. Количество связей файла:
 Имена собственника и группы файла (совет – используйте
getpwuid и getgrgid).
 Если файл является обычным файлом, его размер. Иначе оставьте
это поле пустым.
 Дату модификации файла (используйте ctime).
 Имя файла (если было задано имя с путем, нужно распечатать
только имя).
Желательно, чтобы поля имели постоянную ширину, т.е. чтобы листинг
имел вид таблицы. Совет: используйте printf.
19. Шаблоны имен файлов
Напишите программу, которая приглашает пользователя ввести шаблон
имени файла, аналогичный тому, который используется в shell. Синтаксис
шаблона таков:
* соответствует последовательности любых символов кроме
/, имеющей любую длину; возможно - пустой
последовательности.
? соответствует любому одному символу.
/ не может встречаться.
любой другой символ соответствует самому себе.
Символы * и ? в шаблоне могут встречаться в любом количестве и в любом
порядке.
Затем программа должна найти и распечатать имена всех файлов в текущем
каталоге, соответствующих шаблону. Если таких файлов нет, программа
должна распечатать сам шаблон.
Совет: используйте readdir, чтобы считать все имена файлов в текущем
каталоге, и выберите из них соответствующие шаблону.
20. Шаблоны имен файлов (2)
Измените предыдущую программу так, чтобы в шаблоне могли встречаться
символы /. При этом программа должна распечатывать все файлы, путевые
имена которых соответствуют шаблону. Так, шаблону */* соответствуют
все файлы во всех подкаталогах текущего каталога.
49
Раздел 2
21. Пищалка
Напишите программу, которая входит в бесконечный цикл и издает звуковой сигнал на вашем терминале каждый раз, когда вы нажимаете DELETE.
При получении SIGQUIT, она должна вывести сообщение, говорящее,
сколько раз прозвучал сигнал, и завершиться.
22. Мультиплексирование ввода
Напишите программу, которая читает из нескольких файлов по очереди,
т.е. после чтения строки из одного файла, читается строка из следующего и
т.д. Если в течение TIME_OUT секунд ничего не было прочитано, берется
следующий файл.
Программа получает в качестве аргументов имена одного или нескольких
файлов, из которых она будет читать. Обычно это терминальные файлы
(т.е. /dev/ttynn), но могут быть файлы и других типов. (read(2) с нетерминального устройства может прочитать несколько строк, в зависимости от
количества требуемых байтов и длины этих строк.) Если в одном из файлов
достигнут конец файла, из него больше не читают. Когда конец файла достигнут во всех файлах, программа завершается. Проверьте вашу программу так:
$ multiplex /dev/tty 'tty'
23. Защита от сигналов, посылаемых с терминала (задание № 5 по shell)
Измените исходный текст программы shell так, чтобы она не завершалась,
когда вы генерируете сигнал SIGINT. Вместо этого должен завершаться
процесс первого плана, а ваш shell должен немедленно выдавать приглашение. Кроме того, предохраните команды, исполняемые в фоновом режиме,
от прерывания сигналами SIGINT и SIGQUIT.
Если вы не имеете собственной версии этой программы, вы можете посмотреть исходные тексты заготовки в файлах shell.c, parseline.c,
promptline.c и shell.h. Откомпилировав их, вы получите простой командный
интерпретатор, способный выполнять программы в виде порожденных
процессов, запускать фоновые процессы и перенаправлять ввод/вывод.
50
24. Простое управление заданиями (задание № 6 по shell)
Если вы реализовали защиту от сигналов, модифицируйте ваш интерпретатор shell, так чтобы обеспечить следующие возможности для управления
заданиями: SIGTSTP, посланный с клавиатуры (CTRL-Z по умолчанию),
должен заставить основную программу перейти в фоновый режим и возобновить исполнение. PID переведенного на фон процесса будет выведен на
stderr, и командный интерпретатор выдаст приглашение для следующей
команды.
Совет: сделайте каждый порожденный процесс лидером группы процессов
и явным образом переводите его на первый план. Когда порожденный процесс первого плана завершается или останавливается, переводите на первый план интерпретатор.
25. Связь через программный канал
Напишите программу, которая создает два подпроцесса, взаимодействующих через программный канал. Первый процесс выдает в канал текст, состоящий из символов верхнего и нижнего регистров. Второй процесс переводит все символы в верхний регистр, и выводит полученный текст на терминал. Подсказка: см. toupper(3).
26. Связь с использованием функций стандартной библиотеки
Используйте стандартные библиотечные функции popen(3) и
pclose(3) для выполнения тех же операций, что и в предыдущем упражнении.
27. Подсчет пустых строк в файле
Напишите программу, которая подсчитывает пустые строки в файле, используя команду wc(1).
28. Генератор случайных чисел
Напишите программу, которая генерирует сортированный список из ста
случайных чисел в диапазоне от 0 до 99. Распечатайте числа по десять в
строке. Используйте p2open(3), чтобы запустить sort(1) и rand(3) и
srand(3) для генерации случайных чисел.
51
29. Конвейеры (задание № 7 по shell)
Измените ваш командный интерпретатор так, чтобы он позволял создавать
конвейеры. Если вы добавили управление заданиями в упражнениях Раздела 1, вы можете модифицировать программу так, чтобы все процессы в
конвейере принадлежали к одной группе. Тогда, например, SIGINT мог бы
прервать все процессы в конвейере первого плана.
30. Очеpеди сообщений
Напишите две программы, одна из которых шлет сообщения другой. Получатель распечатывает содержимое сообщения, тип и значение, возвращенное msgrcv(2). Напишите программы так, чтобы они не исполнялись
родственными процессами. Сделайте программы как можно проще. Для
этого упражнения вам не нужна никакая проверка ошибок. Используйте
численную форму вашего идентификатора пользователя в качестве ключа.
Если позволит время, вы можете установить права доступа для очереди так,
чтобы ваши одногруппники, зная ключ очереди, могли читать из нее или
писать в нее. К обоим программам должен быть добавлен цикл, чтобы
иметь дело с многими сообщениями. Если вы будете разделять идентификатор очереди с другими пользователями, вы должны сказать друг другу
ваши идентификаторы пользователя и использовать их как типы сообщений.
Замечание: ipcs -q распечатывает количество сообщений в очереди и их
общий размер.
31. Рассылка одного сообщения нескольким процессам
Напишите две программы: отправитель и получатель. Отправитель принимает текст с клавиатуры и рассылает сообщения нескольким копиям программы-получателя. Получатель сообщения распечатывает свое имя программы (argv[0]) и содержимое сообщения. Отправитель продолжает работу, пока не встретит конец файла. Тогда он рассылает всем получателям
сообщение-ограничитель. Как только получатель заканчивает свою очередь
сообщений, он отправляет сообщение отправителю. После получения такого подтверждения от всех получателей, отправитель удаляет очередь.
32. Несколько процессов, сообщающих состояние процессу-мастеру
Напишите две программы, общающиеся через очередь. Одна из программ –
мастер – будет получать сообщения, генерируемые другими программами –
отправителями. Эти сообщения могут изображать состояние или степень
52
готовности отправителя. При получении, мастер распечатывает сообщение
и какую-либо идентификацию его отправителя. Перед завершением, каждый отправитель посылает сообщение-ограничитель. После получения
таких ограничителей от всех отправителей, мастер удаляет очередь и завершается.
33. Моделирование производственной линии
Вы должны смоделировать производственную линию, производящую Виджеты. Каждый Виджет состоит из Детали С и Модуля 1. Модуль 1 состоит
из Детали A и Детали B. Изготовление Детали A требует 2 секунды, Детали
B – 3 секунды и Детали C – 4 секунды. Подсказка: элементы производственной линии должны быть представлены процессами. Используйте
набор семафоров, по одному для каждой детали и модуля. Как только деталь или модуль произведены, добавляйте единицу к соответствующему
семафору. Когда объект используется в на следующем этапе, вычитайте из
того же семафора 1. Используйте sleep(3) для моделирования частоты, с
которой производятся детали.
34. Производитель и Потребитель
Напишите две программы, Производитель и Потребитель, такие, что Производитель заполняет буфер в разделяемой памяти, а Потребитель читает
его. Производитель должен помещать новые данные в буфер только после
того, как Потребитель прочитает его.
Совет: Для синхронизации можно использовать два семафора (эффективнее
всего – набор из двух семафоров). Один из семафоров нужно ассоциировать с записью новых данных в буфер. Другой должен быть ассоциирован с
чтением данных Потребителем.
35. Кольцевая очередь в разделяемой памяти
Реализуйте кольцевую очередь фиксированной длины в разделяемой памяти. Программа-производитель читает с клавиатуры и помещает прочитанный текст в виде записи в конец очереди. Потребитель берет записи из
начала очереди. При обнаружении некоторого условия окончания, производитель должен перед выходом поместить в очередь запись-ограничитель.
Когда потребитель получит такую запись, он также завершится. Советы:
1. Очередь должна представлять собой массив записей. Таким образом,
размер каждой записи не может превосходить фиксированную
максимальную величину.
53
2. Добавление записи в хвост очереди (псевдокод)
tail <- tail +1р
if tail = QUE_SIZE, tail <- 0
if tail = head, queue full condition
else queue[tail] <- item
3. Получение записи из начала очереди (псевдокод)
if tail = head, queue empty condition
head <- head +1
if head = QUE_SIZE, head <- 0
else item <- queue[head]
36. Один производитель и несколько потребителей буфера
Напишите программу-производитель, которая помещает текст в буфер,
размещенный в сегменте разделяемой памяти. Напишите программупотребитель, которая будет читать из этого буфера. Может существовать
несколько копий потребителя. Производитель может обновлять буфер
только после того, как все потребители считали его содержимое.
Совет: Эта программа похожа на Задание 34. Нужны два семафора, но их
значения будут меняться в диапазоне от 0 до количества потребителей.
37. Несколько читающих процессов и один эксклюзивный процесс
записи в разделяемую память
Предположим, что исполняется n процессов. Часть из них читает, а остальные пишут в разделяемый сегмент памяти. Несколько читающих процессов
могут работать с буфером одновременно. Если один из пишущих процессов выполняет запись, все остальные процессы должны ждать. Кроме того,
если пишущий процесс хочет обновить данные, он должен ждать, пока все
читающие процессы закончатся. Для обеспечения такого взаимного исключения надо использовать семафоры. Замечание: В решении приведена одна
программа, которая иногда читает, а иногда пишет.
Совет: Один из способов решения состоит в использовании набора из трех
семафоров со следующими значениями:
 индекс 0 счетчик процессов, выполняющих чтение;
 индекс 1 двоичный семафор, гарантирующий, что только один
процесс может писать в буфер;
 индекс 2 используется для блокировки чтения на время записи или
ожидания записи.
54
Литература
1. Д. Баррон. Ассемблеры и загрузчики. М.: Мир, 1974.
2. Э. Дейкстра. Дисциплина программирования. М.: Мир, 1978.
3. Г. Дейтел. Введение в операционные системы. М.: Мир, 1987.
4. С. Кейслер. Проектирование операционных систем для малых ЭВМ. М.:
Мир, 1986.
5. Д. Иртегов. Введение в операционные системы, 2-e изд. Спб: БХВ, 2008.
6. Б. Керниган, Р. Пайк. Unix — универсальная среда программирования. М.: Финансы и статистика, 1992.
7. Д. Э. Кнут. Искусство программирования. Издательский дом Вильямс,
2000.
8. С. Краковяк. Основы организации и функционирования ОС ЭВМ. М.:
Мир, 1988.
9. А. Робачевский. Операционная система Unix. СПб.: БХВ, 1999.
10. У. Стивенс, С. Раго. UNIX — профессиональное программирование, 2-е
изд. СПб.: Символ, 2007.
11. А. Танненбаум. Современные операционные системы. М: Вильямс,
2001.
12. К. Хевиленд, Д. Грэй, Б. Салама. Системное программирование в
UNIX. М.: ДМК Пресс, 2000.
13. Ч. Хоар. Взаимодействующие последовательные процессы. М.: Мир,
1989.
ЭВМ В ПЛАНИРОВАНИИ И ОБРАБОТКЕ ФИЗИЧЕСКОГО
ЭКСПЕРИМЕНТА
(3-й курс, 5-й сем., 72 ч., диф. зачёт)
Программа курса лекций (36 ч.)
Канд. физ.-мат. наук Александр Аркадьевич Король
1. Обзор курса. Введение в предмет, связь с другими дисциплинами. Организация, ожидаемые базовые знания, требования к выполнению заданий. Литература.
2. Обзор средств для работы в операционных системах совместимыми с
семейством POSIX. Интерактивная оболочка bash, основные команды
оболочки, POSIX.2 и расширения ОС Linux. Редакторы. Компиляция,
сборка и исполнение простой программы на C++.
3. Аналитические вычисления на ЭВМ. Система Maxima. Простейшие
операции с программой Maxima: подстановки, дифференцирование,
свертки. Краткий обзор других популярных пакетов CAS (Mathematica,
Maple, Axiom).
4. Обзор системы обработки данных ROOT. Интерпретатор CINT, библиотека классов C++, библиотека классов Python. Краткий обзор необходимого для работы подмножества языков C++ и Python.
5. Основные блоки библиотеки ROOT. Математическая библиотека. Гистограммы, графы, деревья, кортежи (n-tuples), файлы. Графическое
отображение информации, стили: цвета, подписи, линии и др. Минимизация. Статистический пакет, получение параметров распределений и
зависимостей.
6. Случайные величины, плотность вероятности и распределение случайной величины. Характеристики распределения: среднее, дисперсия. Некоторые часто встречающиеся распределения и их свойства: биномиальное, равномерное, пуассоновское, нормальное. Датчики случайных
чисел.
7. Метод Монте-Карло. Получение произвольных распределений случайной величины: метод прямой выборки, метод Неймана, существенная
выборка, композиционный метод. Вычисление определенных
интегралов методом Монте-Карло.
8. Моделирование физических процессов и методов наблюдения методом
Монте-Карло. Моделирование в ядерном эксперименте на примере регистрации событий в детекторе. Розыгрыш ливней и каскадов.
9. Численные методы минимизации функций нескольких переменных.
Метод «золотого сечения» для одномерного случая. Эффективность
алгоритма минимизации. Локальные минимумы, проблема глобального
минимума. Критерий нахождения минимума.
10. Определение параметров модели по экспериментальным данным. Метод наименьших квадратов. Задача об усреднении результатов независимых экспериментов. Аппроксимация прямой линией.
11. Метод максимального правдоподобия. Определение параметров и их
ошибок на примере подгонки резонансов. Доверительные интервалы,
нахождение верхних пределов.
12. Проверка гипотез. Распределение Стьюдента и его применения. Критерий
согласия χ2, число степеней свободы. Критерий согласия
Колмогорова.
Программа практических занятий (36 ч.)
Канд. физ.-мат. наук Александр Аркадьевич Король
Практические задания состоят из шести задач. Задания, кроме первых
двух, предполагается решать с использованием библиотеки пакета ROOT
на C++ либо на Python. Программа должна представлять собой файл или
набор файлов достаточно с достаточно внятным исходным кодом, должна
быть отлажена на предмет технических сбоев, должна выдавать правильный ответ. Кроме того, для зачета требуется ответить на теоретические
вопросы, решаемые в данной задаче, и продемонстрировать понимание
своего исходного кода. Задания сдаются в терминальном классе в среде ОС
Linux. Каждому студенту предлагается отдельный вариант.
Темы задач:
1. Вычисление определенного интеграла методом трапеций. Основная
цель задания – получить практическое представление об ОС Linux, редакторе, сборке и др., освежить в памяти программирование на языке
C++ и численные методы.
57
2. Проведение простых аналитических вычислений, связанных с матричной алгеброй и дифференцированием. Применение дифференцирования
для определения моментов функций распределения с помощью производящей функции моментов. В задании используется CAS Maxima.
3. Разработка генератора случайных чисел для заданного распределения
вероятностей. Набор гистограммы, графическое представление, оценка
моментов.
4. Вычисление определенного интеграла от данной функции двух переменных методом Монте-Карло с оценкой точности вычисления.
Интегрирование требуется выполнить двумя методами.
5. Минимизация функции двух переменных своей программой минимизации и пакетом MINUIT, разработанным в CERN.
6. Получение параметров резонанса φ(1020) по экспериментальным данным. Оценка статистической точности параметров и правдоподобности
гипотезы. Графическое представление.
Литература
1. А. Д. Букин, С. И. Эйдельман. ЭВМ в планировании и обработке эксперимента: Учебное пособие. Новосибирск: НГУ, 1995. — 85 с.
2. А. Д. Букин, С. И. Эйдельман. ЭВМ в планировании и обработке эксперимента: Учебное пособие. 2-е изд. Новосибирск: НГУ, 2002. — 114 с.
3. Программа Maxima: руководства.
http://maxima.sourceforge.net/ru/documentation.html
4. Б. Эккель. Философия C++. Введение в стандартный C++. СПб.: Питер,
2004.
5. С. Мэйерс. Эффективное использование C++. ДМК пресс, 2006
6. Марк Лутц, Программирование на Python. Символ-Плюс, 2002.
7. Rosetta: выражение общих операций в различных CAS.
http://axiom-developer.org/axiom-website/rosetta.html
8. ROOT: руководство пользователя,
http://root.cern.ch/root/doc/RootDoc.html
58
.
9. Д. Е. Кнут. Искусство программирования для ЭВМ. Т. 2. Получисленные алгоритмы. М.: Мир, 1977.
10. И. М. Соболь. Численные методы Монте-Карло. М.: Наука, 1973.
11. С. М. Ермаков, Г. А. Михайлов. Курс статистического моделирования.
М.: Наука, 1976.
12. Д. Худсон. Статистика для физиков. М.: Мир, 1970.
13. C. Amsler, Review of Particle Physics, Physics Letters B667, Issues 1-5,
2008, pp.1-6.
14. А. Д. Букин и др. УНИМОД-2 – универсальная программа моделирования для экспериментов на встречных пучках e+e-. Препринт ИЯФ,
1994.
15. Х. Гулд, Я. Тобочник. Компьютерное моделирование в физике. Часть
вторая. М.: Мир, 1990.
16. S. Agostinelli et al., G4—a simulation toolkit, NIM A506, Issue 3. pp.250303.
17. Geant4: руководства,
http://geant4.web.cern.ch/geant4/support/userdocuments.shtml
18. Ф. П. Васильев. Методы оптимизации. Факториал пресс, 2002.
19. J. Nocedal, S. J. Wright. Numerical Optimization. Springer, 2006.
20. Г. Корн и Т. Корн. Справочник по математике для научных работников
и инженеров. М.: Наука, 1973.
59
ВВЕДЕНИЕ В СИСТЕМЫ АВТОМАТИЧЕСКОГО
ПРОЕКТИРОВАНИЯ РАДИОЭЛЕКТРОННЫХ УСТРОЙСТВ
(3-й курс, 5-й сем., 72 ч., диф. зачет)
Программа практических занятий (72 ч.)
Ассистент Олег Юрьевич Курилин
Цель данного практического курса – познакомить студентов с полным циклом разработки радиоэлектронных устройств (РЭУ). В качестве учебной
системы автоматического проектирования (САПР) был выбран продукт
компании Altium семейства Altium Designer.
1. Ведение.
1.1. Этапы создания РЭУ.
1.2. Обзор возможностей и особенностей некоторых САПР.
2. САПР Altium Designer 6.
2.1. Создание принципиальных схем.
2.2. Моделирование аналоговых и цифровых устройств.
2.3. Подготовка списка цепей. Создание печатной платы.
2.4. Ручная и автоматическая разводка печатной платы.
2.5. Вывод в графический файл. Редактирование полученного изображения.
Во время занятий студенты должны пройти полный путь по созданию собственного устройства. Им предлагается выполнить следующие задания:
1. При занесении принципиальной схемы:


Навыки работы в редакторе схем.
Создание нового элемента в библиотеке проекта и его редактирование.
 Изменение нумерации компонентов.
2. При моделировании:



Изменение параметров моделирования компонент схемы.
Изменение установок анализа моделирования.
Одновременное отображение зависимостей из нескольких параметров в одной системе координат, на одном графике.
3. При подготовке к разводке платы:



Генерация списка цепей.
Подшивка существующих и создание новых корпусов.
Выбор стратегии автоматической разводки и редактирование ее
параметров.
4. При разводке печатной платы:


Навыки работы с редактором печатных плат.
Ручная разводка. Установка препятствий для автоматического разводчика, редактирование цепей. Заливка области. Добавление новых компонентов и цепей, удаление существующих. Back Annotate.
 Автоматическая разводка элемента, окна, цепи, всей платы. Автоматическое исправление ошибок.
 Подготовка к выводу в графические файлы Gerber.
5. При работе с GerbTool:



Вывод в файлы Gerber из Layout Plus и загрузка результата в
GerbTool.
Замена, добавление, удаление слоев.
Редактирование слоев.
АНАЛОГОВАЯ ЭЛЕКТРОНИКА
(3-й курс, 5-й сем., 36 ч., экзамен)
Программа курса лекций (36 ч.)
Старший преподаватель Владимир Викторович Жуланов
1. Место электронной аппаратуры в современной экспериментальной физике. Аналоговая электроника, цифровая электроника, цифроаналоговая электроника.
2. Особенности электроники в экспериментальной ядерной физике. Отбор
событий. Многоуровневый триггер. Обработка событий в реальном
времени и пост-обработка.
3. Описание аналоговых сигналов. Импульсные сигналы. Переодические
сигналы. Случайные сигналы. Характеристики аналоговых сигналов.
4. Разложение аналоговых сигналов на составляющие.
5. Сравнение аналоговых сигналов. Корреляционный анализ. Операция
свертки.
6. Спектральный анализ аналоговых сигналов. Ряд Фурье периодических
сигналов. Интеграл Фурье импульсных сигналов.
7. Передача сигналов через линейные передающие системы. Описание и
свойства линейных передающих систем. Передача сигналов по
электрическим каналам.
8. Транзисторные усилительные каскады.
9. Усилительные каскады с отрицательной обратной связью.
10. Частотные характеристики каскадов с отрицательной обратной связью.
Устойчивость усилительных каскадов.
11. Усилительные каскады с отрицательной обратной связью на транзисторах.
12. Зарядочувствительный усилитель.
13. Шумы электронного каскада. Природа возникновения шумов. Математическое описание шумов электронного каскада. Передача шумов через
линейные передающие системы.
14. Приведение шумов ко входу электронного тракта. Эквивалентный
шумовой заряд.
15. Фильтрация шумов. Параметры фильтров. Критерии выбора фильтра в
электронной аппаратуре для ядерной физики.
16. Сравнение фильтров. Оптимальная фильтрация.
Литература
1. В. М. Аульченко. Анализ сигналов. Элементы аналоговой электроники:
Учебное пособие. Новосибирск: НГУ, 2001.
2. И. С. Гоноровский. Радиотехнические цепи и сигналы. М.: Мир, 1986.
3. А. И. Абрамов, Ю. А. Казанский, Е. С. Матусевич. Основы экспериментальных методов ядерной физики. М.: Энергоатомиздат, 1985.
4. В. И. Калашников, М. С. Козодаев. Детекторы элементарных частиц.
М.: Наука, 1966.
5. К. Групен. Детекторы элементарных частиц. Новосибирск: Сибирский
хронограф, 1999.
63
ЦИФРОВЫЕ ИНТЕГРАЛЬНЫЕ СХЕМЫ
(3-й курс, 5-й сем., 36 ч., экзамен)
Программа курса лекций (36 ч.)
Канд. техн. наук, старший преподаватель Юрий Васильевич Коваленко
1. Введение. Цифровые интегральные схемы, аналоговые ИС, гибридные и
пленочные ИС. Технология изготовления ЦИС. Понятие логического
уровня. Биполярные и полевые транзисторы. Напряжение отпирания
биполярного транзистора. Причины фиксации напряжения питания в
ЦИС на биполярных транзисторах. Режим насыщения биполярного
транзистора, ограничение насыщения диодом Шотки. Встроенный и
индуцированный затвор полевого транзистора. Комплементарные пары.
Привязка напряжения смещения подложки к половине напряжения питания. Зависимость логического уровня от напряжения питания ЦИС.
Схемотехника и электрические характеристики базовых логических
элементов в КМОП и ТТЛ технологиях. Типы выходных каскадов. Коэффициент расширения по выходу, его зависимость от частоты для
КМОП ИС. Зависимость тока питания от частоты переключений.
Конструктивное исполнение ЦИС.
2. Классификация цифровых электрических схем. Формальное описание
комбинаторных и последовательностных схем.
3. Реализация комбинаторных схем на программируемой логике. Множественность представлений Булевой функции, каноническая форма. Макстермы, минтермы и Р-термы. Формальный способ аппаратной реализации канонической формы булевой функции на программируемой ЦИС
(на примере ИС ПЛМ 556РТ1). Этапы разработки комбинаторных электрических устройств и набор требуемой документации. Принципиальная схема. Разработка печатной платы. Подготовка документации для
программирование ПЛМ. Формы представления программы: таблица,
принципиальная схема из библиотечных элементов, языки описания аппаратуры (HDL). Набор библиотечных комбинаторных схем: логические элементы, групповые логические элементы, коммутирующие элементы. Приемы минимизации аппаратных затрат. Ограничения формального метода. Учет задержек, температуры, нагрузки.
4. Реализация арифметических операций. Понятие состояния. Связь между состоянием и числом. Способы представления целых чисел. Двоичный, двоично-десятичный код, код Грея. Представления целых чисел со
знаком. Операция арифметического суммирования чисел в дополни-
тельном коде. Условие достоверности результата суммирования. Последовательный сумматор, параллельный сумматор, схема ускоренного
переноса. Набор библиотечных арифметических комбинаторных схем:
сумматор, компаратор, АЛУ, сдвигатели. Реализация простейшего АЛУ
на ПЛМ.
5. Реализация конечных автоматов на программируемой логике. Последовательностные схемы. Связь длительности состояния и тактовой частоты. Однобитный конечный автомат – T,RS,D,JK триггер. Синхронные и
асинхроные сигналы управления. Регистр. Формальное описание последовательностной схемы – автомат Милли, автомат Мура. Формы представления алгоритмов функционирования автомата: набор таблиц, граф,
диаграмма, программа HDL. Структура программируемой ЦИС на примере 22v10. Набор библиотечных последовательностных схем: триггер,
регистр, регистр-защелка, сдвиговый регистр, синхронные счетчики.
6. Запоминающие устройства. Методы доступа: ассоциативный, последовательный, произвольный. Структура ЗУ произвольного доступа. Емкость и разрядность. Ячейка ОЗУ статического и динамического типа.
Диаграммы циклов чтения и записи ОЗУ. Факторы, определяющие
быстродействие ЗУ. Зависимость потребляемой мощности от частоты
обращений. Страничная организация, синхронный режим. Многопортовое ОЗУ. ПЗУ масочного типа, однократно программируемые ПЗУ,
ПЗУ с возможностью перезаписи, ЕППЗУ с групповым программированием (flash).
7. Формальный синтез схемы процессора. Процессор как последовательностная схема с выборкой условий из памяти. Оценка числа состояний у
простейшего процессора. Необходимость разделения на несколько элементов. Формальное описание процессора как операционного устройства (ОУ) и управляющего автомата (УА). Программа. КОП и операнды. Обязательные и дополнительные программно-доступные элементы
процессора. Система команд процессора и набор операций АЛУ. Режим адресации. Одно, двух и трех адресная форма бинарных операций.
Шина данных, шина адреса, шина управляющих сигналов и их связи с
УА и ОУ. Разработка простейшего процессора на программируемой
ЦИС: формирование системы команд, синтез УА, разработка ОУ на основе регистрового файла и АЛУ.
65
Литература
1. П. Хоровиц, У. Хилл. Искусство схемотехники / Пер. с англ. 5-е изд.
перераб. М.: Мир, 1998. — 704 с.
2. В. Б. Стешенко. EDA. Практика автоматизированного проектирования
радиоэлектронных устройств. Издательство Нолидж, 2002. — 768 с.
3. Е. П. Угрюмов. Цифровая схемотехника. СПб.: БХВ, 2000.
4. В. Б. Стешенко. ПЛИС фирмы ALTERA: элементная база, система проектирования и языки описания аппаратуры. Издательство Додэка, 2002.
— 576 с.
5. А. Антонов. Язык описания цифровых устройств AlteraHDL. М.:
РадиоСофт, 2002. — 221 с.
66
ОБЪЕКТНО–ОРИЕНТИРОВАННЫЙ АНАЛИЗ И ДИЗАЙН
(3-й курс, 6-й сем., 64 ч., диф. зачет)
Программа курса лекций (32 ч.)
Ассистент Денис Сергеевич Мигинский
1. Введение.
Цели и задачи курса. Объектно-ориентированный подход. Понятие о
сложности ПО. Основные фазы процесса разработки ПО.
2. Управление требованиями к программному обеспечению.
Необходимость моделирования требований к программному обеспечению. Понятие варианта использования и актера. Диаграммы вариантов
использования. Документирование вариантов использования. Диаграммы деятельностей и состояний. Отношения между вариантами использования и актерами.
3. Введение в язык моделирования UML.
Диаграммы языка UML. Диаграммы классов, классы, отношения между классами, пакеты. Диаграммы деятельностей и состояний. Состояния, действия, переходы между ними. Блоки принятия решений и линейки синхронизации. Изоляторы области действия.
4. Объектно-ориентированный анализ.
Цели и задачи фазы анализа. Процесс перехода от фазы сбора требований к фазе анализа. Аналитическая модель. Аналитические классы и
отношения между ними. Реализации вариантов использования. Коллаборации. Описание коллабораций с помощью диаграмм взаимодействия.
5. Системная архитектура.
Системная архитектура и ее составные части. Роль архитектора.
Архитектурные шаблоны:
 Многоуровневая архитектура.
 Клиент-сервер.
 Одноранговая архитектура.
 Каналы и фильтры.
 Списки контроля доступа.
 Модель-Представление-Контроллер.
6. Бизнес-анализ.
Цели и задачи бизнес-анализа. Пример описания бизнес-процессов.
7. Объектно-ориентированный дизайн.
Цели объектно-ориентированного дизайна. Процесс перехода от фазы
анализа к фазе дизайна.
Принципы дизайна классов:
 Принцип единственности абстракций.
 Закон Деметры.
 Принцип подстановки Лисковой.
 Принцип открытости-закрытости.
 Принцип разделения интерфейсов.
Принципы проектирования зависимостей:
 Принцип минимизации зависимостей.
 Принцип обращения зависимостей.
 Принцип ациклических зависимостей.
Принципы проектирования пакетов:
 Принцип эквивалентности переиспользования и выпуска.
 Общий принцип переиспользования.
 Общий принцип локализации изменений.
 Принцип стабильности зависимостей. Стабильность.
 Принцип стабильных абстракций. Абстрактность. Главная последовательность.
8. Шаблоны проектирования.
Понятие шаблона проектирования (GOF-шаблоны). Классификация
шаблонов проектирования.
Шаблоны:
 Абстрактный сервер.
 Абстрактный клиент.
 Адаптер.
 Одиночка.
 Monostate.
 Мост.
 Стратегия.
 Посредник.
 Посетитель. Ациклический посетитель.
 Абстрактная фабрика.
 Лестница в небо.
68
9. Процессы разработки ПО. Унифицированный процесс разработки IBM
Rational.
Необходимость процесса разработки ПО. Классификация процессов
разработки. Унифицированный процесс разработки IBM Rational. Фазы
процесса: инициирование, уточнение, разработка, завершение. Активности: анализ предметной области, анализ требований, системный анализ и проектирование, реализация, размещение. Артефакты и документы процесса: концепция, спецификация требований, архитектурный
документ. Понятие о легковесных процессах разработки ПО.
Примерная тематика курсовых проектов
Ассистент Владимир Сергеевич Тимонов
1. Создание Интернет-магазина.
2. Модельная система автоматизации торгового предприятия.
3. Модельная система автоматизации учета кадров.
4. Проект «Интернет-библиотека».
5. Проект «Новостная лента».
Основные этапы выполнения курсового проекта и ожидаемые результаты:




Выбор темы курсовой работы. Этап не оценивается.
Анализ требований. Оцениваемыми результатами являются документированная модель вариантов использования на языке UML, а
также разделы «Введение» и «Предметная область проекта» проектного документа.
Разработка аналитической модели. Оцениваемыми результатами
являются аналитическая модель на языке UML, содержащая реализацию всех вариантов использования, а также раздел «Требования
к программному решению» проектного документа.
Разработка дизайн-модели. Оцениваемыми результатами являются
дизайн-модель на языке UML, удовлетворяющая рассматриваемым
на лекционных занятиях принципам дизайна, а также раздел «Обзор архитектуры» проектного документа.
69

Реализация. Оцениваемыми результатами являются программная
реализация разрабатываемой системы, работоспособная и соответствующая дизайн-модели и требованиям, а также полный проектный документ.
Литература
1. Г. Буч. Объектно-ориентированный анализ и проектирование с примерами приложений на C++, 2-е изд. М.: Бином, 2000. – 560 с.
2. Г. Буч, Дж. Рамбо, А. Якобсон. Язык UML. Руководство пользователя.
М.: ДМК, 2000. – 432 с.
3. А. Коберн. Современные методы описания функциональных требований к системам. М.: Лори, 2002. – 263 с.
4. Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес. Приемы объектноориентированного проектирования. Паттерны проектирования. СПб.:
Питер, 2001. – 358 с.
5. Роберт С. Мартин, Быстрая разработка программ: принципы, примеры,
практика. М.: Издательский дом Вильямс, 2004. – 752 с.
6. В. В. Мухортов, В. Ю. Рылов. Объектно-ориентированное программирование, анализ и дизайн. Новосибирск: НГУ, 2001. – 40 с.
70
ВВЕДЕНИЕ В СУБД
(3-й курс, 6-й сем., 96 ч., зачет, экзамен)
Программа курса лекций (32 ч.)
Ассистент Андрей Альбертович Сабитов
1. История развития БД и СУБД. Понятие базы данных. Иерархические,
сетевые, реляционные СУБД. Объектно–ориентированные и объектно–
реляционные СУБД.
2. Введение в реляционную модель.
2.1. Основные понятия и определения реляционной модели. Свойства
отношений.
2.2. Реляционная алгебра. Операции над отношениями. Свойства операций. Приводимые и неприводимые операции.
2.3. Реляционное исчисление. Исчисление кортежей. Исчисление доменов. Соотношение реляционного исчисления и реляционной алгебры.
3. Язык SQL.
3.1. Стандарты SQL-92 и SQL-3. Диалекты SQL. Уровни соответствия
стандартам языка SQL.
3.2. Типы данных и их соотношения в различных диалектах SQL. Таблицы, и их отличия от отношений.
3.3. Подъязык DML. Общий синтаксис команд DML. Вложенные подзапросы. Представления (view). Алгоритмические аспекты оптимизации исполнения DML–предложений. Внешние объединения.
3.4. Подъязык DDL. Объекты словаря базы данных. Модификация
словаря базы данных.
3.5. Прочие команды SQL. Права доступа и роли. Транзакции и
управление транзакциями.
4. Язык PL/SQL.
4.1. Недостатки языка SQL. Цели создания языка PL/SQL. Хранимые
процедуры и функции. Модули. Триггеры.
4.2. Типы данных PL/SQL и их отличие от типов данных в SQL.
4.3. Структура программного блока PL/SQL. Основные операторы.
Синтаксис создания хранимых процедур и функций.
4.4. Курсоры.
4.5. Триггеры. Задачи, решаемые триггерами. Псевдозаписи :new и
:old. Порядок срабатывания триггеров.
4.6. Минусы и плюсы вынесения «бизнес–логики» на сторону сервера
БД.
5. Проектирование БД.
5.1. Особенности проектирования БД.
5.2. Инфологическая модель. ER–диаграммы, нотация ER–диаграмм.
Критерии выбора типов данных. Критерии выбора первичных
ключей. Суррогатные первичные ключи.
5.3. Стратегия индексации таблиц. Типы индексов. Минусы использования индексов.
5.4. Нормализация. Функциональная, транзитивная и многозначная
зависимости в отношениях. Полная декомпозиция таблицы. Определения нормальных форм. Аномалии модификации данных в ненормализованных таблицах.
5.5. Денормализация. Причины проведения денормализации. Типы
денормализации. Механизмы обеспечения целостности данных
после денормализации.
6. Хранилища данных. Требования к хранилищам данных. ETL-процесс.
Киоски данных. Кубы и размерности, операции анализа данных. Особенности проектирования схемы базы данных для ХД. Star-схема.
7. Архитектура СУБД Oracle.
7.1. Экземпляр и база данных.
7.2. Состав экземпляра. SGA и ее структура. Назначение Shared Pool’a,
буфера БД, буфера журнала. Основные фоновые процессы Oracle
и их функции.
7.3. Серверный процесс Oracle. Взаимодействие прикладной программы с СУБД Oracle.
7.4. База данных Oracle. Файлы данных. Блоки данных, экстенты, сегменты, табличные пространства. Структура блока данных. Миграция строк. Файл параметров init.ora. Контрольный файл. Файлы журнала. Сегменты отката.
7.5. Порядок исполнения команд SELECT и UPDATE. “Concurrency
and consistency!”
72
7.6. Механизмы автоматического восстановления Oracle после аварии.
8. Объектно-ориентированные СУБД. Использование ООСУБД на примере db4o.
9. Трехзвенная архитектура, сервера приложений, место СУБД в трехзвенной архитектуре. Примеры реальных enterprise-приложений.
Программа практических занятий (64 ч.)
Ассистент Сергей Анатольевич Пирогов
На семинарских занятиях, проходящих в терминальном классе, студенты
выполняют определенный набор небольших заданий из 80 возможных вариантов. Список конкретных заданий определяется семинаристом каждому
студенту персонально. Целью данных заданий ставится знакомство студентов с декларативным языком SQL и приобретение навыков работы с сервером баз данных. Кроме того, студенты выполняют программный проект в
качестве курсовой работы. Основной целью данного программного проекта
является развитие навыков проектирования баз данных.
Для практических заданий по курсу Базы Данных студенту предоставляется доступ к одной из СУБД MySQL/PostgreSQL/Oracle. Основная группа
заданий по курсу представляют небольшой SQL к БД на выборку данных с
определенными требованиями. В таких запросах затрагиваются следующие
темы:

использование в запросах операторов IN, BETWEEN, LIKE,
GROUP BY, HAVING, агрегатных функций;

форматирование вывода запроса;

объединения и соотнесенный запрос;
 использование в запросах операторов JOIN.
Другая группа заданий объединяет в себе запросы на создание таблиц,
изменение и вставку данных в БД. Несколько заданий посвящено расширению PL/SQL: написание хранимых процедуры и функций, и триггеров.
Курсовая работа представляет собой программу (или веб сервис), взаимодействующую с БД. Программа должна иметь графический пользовательский интерфейс. Перед тем как приступить к выполнению курсовой рабо73
ты, студент должен согласовать тему работы с преподавателем. К сдаче
курсовой допускаются те студенты, которые сдали все задания.
Для того чтобы сдать курсовую работу, студент подготавливает презентацию и краткий реферат по курсовой работе. Все презентации заслушиваются внутри группы, рефераты сдаются преподавателю. Студенты с наиболее
интересными курсовыми работами получают оценку 5 за курс без экзамена.
Примеры тем курсовых работ
1. Электронный магазин
Добавление товара, заказ и продажа товаров. Опции: категории товаров, поиск товаров, регистрация и история покупателей.
2. Форум сообщений
Участники форума могут создавать сообщения и отвечать на них. Опции: регистрация участников, модераторы, поиск по сообщениям/участникам.
3. Склад
Хранение и передвижение товара по складу.
4. Каталог ресурсов
Система хранения и обмена ресурсами. В качестве ресурсов могут выступать фото, аудио, или видео. Хранилище может быть распределенным.
5. Система тестирования
Обычный тест, который включает вопросы. Вопросы могут содержать
несколько ответов. Опции: добавление/удаление теста/вопроса, регистрация участника, категории/группы тестов, статистика.
6. Справочная по городским маршрутам автобусов / троллейбусов /
трамваев / метро / маршрутных такси
Как проехать из пункта А до Б. Можно предлагать все пути (в том числе с пересадками), искать наиболее короткий или более бюджетный
маршрут или наиболее быстрый. Поиск остановок, маршрутов. Расписание автобусов. Возможность просмотра маршрута на карте города.
74
7. Библиотека института
Поиск книг по названиям, авторам, году выпуска, т.п. Объединения нескольких библиотек.
8. Кинотеатры (информация для зрителей)
Система продажи билетов, поиск фильмов (по жанрам, популярности,
названиям), статистика посещения, где можно посмотреть и т.п.
Литература
1. Дж. Ульман. Основы систем баз данных, М.: Финансы и статистика,
1983.
2. К. Дж. Дейт. Введение в системы баз данных, 6-е изд. Москва-СанктПетербург-Киев: Издательский дом Вильямс, 1999.
3. М. Грабер. Введение в SQL. M.: Лори, 1996.
4. Дж. Л. Уэлдон. Администрирование баз данных. М.: Финансы и статистика, 1984.
5. Журналы СУБД № 2 (1995), №№ 1-6 (1996), №№ 1-4 (1997).
6. Г. Буч. Объектно-ориентированное проектирование с примерами применения. / Пер с англ. М.: Конкорд, 1992. – 519 с.
7. А. М. Вендров. CASE-технологии. Современные методы и средства
проектирования информационных систем. М.: Финансы и статистика,
1998. – 176 с.
8. Д. Артемов, Г. Погульский, М. Альперович. Microsoft SQL Server 7.0
для профессионалов: установка, управление, эксплуатация, оптимизация. М.: Издательский отдел “Русская редакция” ТОО “Channel Trading
Ltd.”, 1999.
9. Марк Шпеник, Оррин Слендж и др. Руководство администратора баз
данных Microsoft SQL Server 7.0. М.: Издательский дом Вильямс,1999.
75
АРХИТЕКТУРА И ПРОЕКТИРОВАНИЕ МИКРОКОНТРОЛЛЕРОВ
(3-й курс, 6-й сем., 64 ч., диф. зачет)
Программа практических занятий (64 ч.)
Ассистент Олег Юрьевич Курилин
1. Знакомство с программой курса (учебные пособия, документация, программное обеспечение) – 2 часа.
2. Обзор документации. Изучение структуры документа. Внутренняя
структура микроконтроллера – 2 часа.
3. Среда разработки, органы управления, настройка и возможности.
Самостоятельная работа – 4 часа.
4. Система команд микроконтроллера PIC16F84A. Реализация циклов – 4
часа.
5. Система прерывания, маски и флаги. Источники прерываний – 4 часа.
6. Счетчик-таймер. Работа счетчика-таймера в режиме таймера с использованием прерываний – 4 часа.
7. Самостоятельная работа – 4 часа.
8. Изучение демонстрационной платы, схема, назначение элементов – 4
часа.
9. Порты ввода-вывода, режимы работы, конфигурирование – 4 часа.
10. Динамическая индикация, алгоритмы, выбор временных параметров,
реализация – 4 часа.
11. Самостоятельная работа – 8 часа.
12. Энергонезависимая память – 4 часа.
13. Разработка проекта на основе демонстрационной платы, реализация его
до конечной стадии – 16 часов.
14. Обсуждение разрабатываемых проектов – 4 часа.
Задания
1. Минимальным количеством команд построить цикл с пустым телом,
который выполнится 10 раз.
2. Рассчитать время между прерываниями при частоте кварцевого резонатора 12,5 MHz, проверить результат в среде разработки.
3. Вывести на индикаторы демонстрационной платы статически заданное
число.
4. Считать секундные интервалы времени, выводить результат на индикатор, сохранять результат в случае пропадания питания.
5. Управлять микроконтроллером по интерфейсу RS-232.
6. При помощи динамика, подключенного к порту, воспроизвести какой
либо сигнал.
ЭЛЕКТРОНИКА ДЕТЕКТОРНЫХ СИСТЕМ
(3-й курс, 6-й сем., 32 ч., экзамен)
Программа курса лекций (32 ч.)
Д-р техн. наук, профессор Владимир Михайлович Аульченко
1. Основные функции электронной аппаратуры в ЯФ.
 Структурные схемы каналов регистрации.
 Структурная схема процессора отбора событий.
2. Газовые счетчики.





Классификация.
Режимы работы.
Искровые камеры, способы съема информации.
Плоская ионизационная камера.
Пропорциональные камеры – конструкция, временное и пространственное разрешение.
3. Считывание информации с МПК.
 Дискретное, аналоговое.
 Съем второй координаты.
4. Дрейфовые камеры.
 Требования к газовым смесям.
 Модификации ДК.
 Пространственное и временное разрешение ДК.
5. Электроника ДК.
 Классификация, основные требования к электронике ДК.
 Многоканальная схема кодировки времени дрейфа.
 Гибридная сборка "усилитель-формирователь" К243АГ1.
 Гибридная схема УФ с токовым входом.
 Линейный предусилитель для ДК.
6. Сцинтилляционные счетчики.
 Общие требования к сцинтилляторам.
 ФЭУ, характеристики, форма импульса.
 Черенковские счетчики.
7. Полупроводниковы кристаллические детекторы.
 Конструкция, основные параметры.
78
 P-I-N диод.
8. Калориметры.
 Назначение, типы калориметров.
 Основные требования к калориметрам и их электронике.
 Калориметры детекторов СНД и КЕДР.
 Спектрометрический канал детектора СНД.
 Устройство выборки и хранения.
9. Преобразование АНАЛОГ-ЦИФРА.





Амплитудный дискриминатор как простейший анализатор.
Дифференциальный дискриминатор.
Многоканальные анализаторы прямого и косвенного действия.
Преобразователи Вилкинсоновского типа, структурная схема.
Преобразователь поразрядного уравновешивания, структурная схема.
 Понятие о дифференциальной и интегральной нелинейностях.
 Скользящая шкала.
 Специальные микросхемы.
10. Линейные пропускатели.
 ЛП на основе пороговых усилителей.
 Токовые ЛП.
 ЛП ключевого типа.
11. Временные измерения.
 Основные требования.
 Привязка по переднему фронту.
 ОУ с положительной обратной связью, триггер Шмитта.
 Формирователь со следящим порогом.
 Способ "пересечения нуля".
 Дискриминатор Д14.
12. Метод совпадений и антисовпадений.
 Схемы совпадений Росси, Гарвина.
 СС на сложении токов.
 Дифференциальная СС и схема компенсации геометрии как элементы системы измерения времени пролета.
13. Кодирование интервалов времени.
 Метод прямого счета, информационные платы Т2а, ТАМ.
 Нониусный метод.
79
 Время-амплитудный преобразователь.
 Преобразование Т-А-Т.
 ВЦП комбинированного типа.
 Комбинированный ВЦП с непрерывно работающим генератором.
 Преобразователь хронотронного типа.
14. Системы запуска современных детекторов.
 Основные требования и основные параметры.
 Соотношения для выбора мертвого времени и коэффициента селекции.
 Классификация систем отбора, примеры.
 Аппаратура потенциальных систем отбора.
 Аппаратура импульсных систем отбора.
 Спецпроцессоры.
 Применение схем памяти в устройствах отбора событий.
Литература
1. А. И. Абрамов, Ю. А. Казанский, Е. С. Матусевич. Основы экспериментальных методов ядерной физики. М.: Энергоатомиздат, 1985.
2. В. И. Калашников, М. С. Козодаев. Детекторы элементарных частиц.
М.: Наука, 1966.
3. Ю. В. Заневский. Проволочные детекторы элементарных частиц. М.:
Атомиздат, 1978.
4. А. П. Цитович. Ядерная электроника. М.: Энергоатомиздат, 1984.
5. Н. Н. Дмитриева, А. С. Ковтюх, Б. Х. Кривицкий. Ядерная электроника.
М.: МГУ, 1984.
6. С. Г. Басиладзе. Быстродействующая
Энергоиздат, 1982.
ядерная
электроника.
М.:
7. Х.-У. Шмидт. Измерительная электроника в ядерной физике. М.: Мир,
1989.
8. К. Групен. Детекторы элементарных частиц. Новосибирск: Сибирский
хронограф, 1999.
9. Журнал “Приборы и техника эксперимента”.
80
МИКРОПРОЦЕССОРЫ И МИКРОПРОЦЕССОРНЫЕ СИСТЕМЫ
(3-й курс, 6-й сем., 32 ч., экзамен)
Программа курса лекций (32 ч.)
Канд. техн. наук, старший преподаватель Юрий Васильевич Коваленко
1. Исторический обзор микропроцессоров. Классификация микропроцессоров: разрядно-модульные микропроцессоры, микропроцессоры с
фиксированной системой команд. Универсальные микропроцессоры,
сигнальные процессоры, системы на кристалле.
2. Основные характеристики процессора с фиксированной системой команд и компоненты микро-ЭВМ с шинной архитектурой (на примере
i8080).
2.1. Понятия шины, канала, интерфейса, протокола. Шины адреса,
данных и управления. Диаграммы операций процессора с шиной.
Понятие машинного цикла.
2.2. Понятия адресных пространств процессора и ЭВМ. Сигналы шины процессора, влияющие на адресное пространство.
2.3. Система команд. Классификация. Ограничения на право исполнения некоторых команд, обоснование потребности в режиме суперпользователя. Основные стадии исполнения команд. Программно-доступные элементы процессора. Элементы процессора
не доступные программно. Условия разрыва последовательности
стадий исполнения одной команды другой командой.
2.4. Прерывание. Сравнение метода опроса и прерывания. Понятия
вектора, приоритета, маскирования. Последовательность операций процессора и внешнего устройства во время процедуры прерывания. Функции и структура контроллера прерываний.
2.5. Оценка времени от возникновения запроса на прерывания до
начала его обработки.
2.6. Прямой доступ к памяти. Последовательность операций процессора и внешнего устройства во время процедуры ПДП. Функции
контроллера ПДП. Оценка выигрыша времени при применении
ПДП для одиночной и групповой передачи данных.
81
3. Микроконтроллеры – шаг к системам на кристалле.
3.1. Микроконтроллеры (на примере 8051). Области применения микроконтроллера. Понятие системы на кристалле (SoC) . Основные
элементы микроконтроллера.
3.2. Специфика питания. Управление энергопотреблением. Понижение тактовой частоты и напряжения питания. Режим сна. Режим
пониженного потребления.
3.3. Программируемые выводы корпуса. Реализации двунаправленных
выводов.
3.4. Квази-двунаправленность, подтягивающий резистор, открытый
сток, открытый исток.
3.5. Основной набор периферийных устройств: параллельный порт,
последовательный программируемый интерфейс, таймер/счетчик.
Специализированные устройства с ядром 8051 на примере микроконвертора am uc812.
3.6. Система команд. Классификация системы команд. Структура
слова команды. Основные типы данных. Операции с битами. Понятие Булевого процессора.
3.7. Система прерываний, отличия ее от i8080.
3.8. Средства и методика разработки программного обеспечения для
микроконтроллеров. Кросс средства. Механизмы защиты программного кода от копирования.
4. Специфика микропроцессора общего назначения на примере ядра
ARM7.
4.1. Многозадачность. Организация защиты программ. Устройство
управление памятью (MMU), сегменты и страницы. Режимы пользователя и супервизора, режим обработки исключений.
4.2. Конвейер, RISC и CISC процессоры. Сбои в работе конвейера,
предсказание, условное исполнение команды. Кэш. Системы реального времени, оценка минимального и максимального времени
исполнения команды.
4.3. Типы обрабатываемых данных. Арифметика с плавающей точкой,
представление чисел, стандарт IEEE-754.
4.4. Методы сокращения объема кода программы. Система команд
транспьютера, система команд Thumb процессора ARM.
82
5. Сигнальные процессора (DSP).
5.1. Понятие жесткого реального времени. Выгоды специализация на
одном типе данных. Алгоритм целочисленного преобразования
Фурье. Способы ускорения операции суммирование с накоплением.
6. Средства интеграции микропроцессорных систем.
6.1. Микропроцессорная система — совокупность аппаратуры и программного обеспечения для решения конкретной задачи. Масштаб
системы: печатная плата, прибор, лабораторная, промышленная,
глобальная системы. Выбор средств интеграции.
6.2. Шинная архитектура. Общая шина. Универсальная шина расширения ISA, микропроцессорные системы в стандартах PC104,
микро-PC. Обоснование специализации шин. Понятие чипсета.
Пример чипсета для ЭВМ на базе i8080. Шина памяти. Шина периферии. Примеры: архитектура PC, модульный стандарт VME.
Мезонинные технологии – IndustrialPack. Конструктивы микропроцессорных систем, Евромеханика.
6.3. Канальная архитектура. Предпосылки к широкому применению
последовательных линий связи. Физические характеристики последовательных линий связи. Среды передачи : оптика, медь, радиоканал. Способы кодирования сигналов. Двух и трех уровневое
кодирование. Уравновешенный код. Самосинхронизирующийся
код на примере Манчестер II. Топологии последовательных линий
связи. Механизмы арбитража доступа к линии связи. Гарантированное время передачи информации. Доставка с аппаратным подтверждением. Физическая и протокольная скорость линии связи.
Влияние механизма подтверждения на скорость передачи. Стандарты интеграции систем по канальной технологии: IEEE Std.
1149.1-1990 (JTAG ), SPI, I2C, RS232-RS485, USB, ZigBee,
Ethernet.
Во время курса студент обязан подготовить обзор на тему близкую к курсу.
Тема формулируется студентом, утверждается преподавателем. Обзор
докладывается перед группой и представляется в письменном и электронном виде преподавателю. Электронная форма обзора является необходимым условием допуска к экзамену. Объем обзора 2-3 страницы.
83
Примеры тем обзоров:
 Альтернативные интерфейсы человек-ЭВМ.
 Аппаратная реализация нейросетей.
 Электромеханические ИС.
 Конструктивы РС.
Литература
1. А. В. Боборыкин, Г. П. Янковецкий и др. Однокристальные микро-ЭВМ.
М.:МИКАП, 1994. – 400 с.
2. Д. А. Иванов. Проектирование микропроцессорных устройств: Учебное
пособие для начинающих разработчиков. Вып. 1: Архитектура и
технология программирования микроконтроллеров. СПб.: СПбГТУ,
1997. – 101 с.
3. Дж. Фрир. Построение вычислительных систем на базе перспективных
микропроцессоров. М.: Мир, 1990.
84
ИНФОРМАЦИОННЫЕ СЕТИ И СИСТЕМЫ
(4-й курс, 7-й сем., 108 ч., диф. зачет)
Программа курса лекций (36 ч.)
Ассистент Ренат Искандерович Идрисов
1. Введение в информационные сети.
Причины возникновения сетей ЭВМ. Топологии сетей. Глобальные и
локальные сети. Уровни физического взаимодействия. Физический
уровень. Канальный уровень. Сетевой уровень. Транспортный уровень.
Сеансовый уровень. Представительский уровень. Прикладной уровень.
Понятие стека протоколов.
2. Физический уровень модели OSI.
Стандарты построения сетей на физическом уровне. Ethernet/Fast
Ethernet/Gigabit. Token Ring. FDDI. Различные варианты исполнения
этих сетей на физическом уровне. Беспроводные сети. Оптоволоконные сети.
3. Канальный уровень OSI.
Адресация канального уровня. Логическая топология сети. Широковещательные, групповые и индивидуальные адреса. Доступ к среде.
Способы разделения доступа: маркер, разрешение коллизий, временное мультиплексирование. Ethernet, FDDI, PPP как примеры канальных протоколов. Варианты физической топологии Ethernet как пример
независимости физической и логической топологий. Соединительные
устройства канального уровня: мосты и коммутаторы. ATM. Frame
Relay. ISDN.
4. Сетевой уровень OSI.
Необходимость соединения разнородных сетей канального уровня. Адресация сетевого уровня. IP как пример сетевого протокола. Трансляция сетевых адресов в канальные на примере протокола ARP. Маршрутизация. RIP. OSPF. BGP.
5. Транспортный уровень OSI.
Проблема надежности передачи. Сегментация сообщений. Связь с
установлением соединения и без него. TCP и UDP как примеры протоколов транспортного уровня. Трансляция имен в адреса. Обзор протоколов DNS.
6. Уровень представления OSI.
Представление
данных.
Обзор кодировок текста
на
примере кодировок кириллицы. Другие проблемы представления: порядок байт, разрядность чисел, разделители строк. Понятие метаданных.
Кодовые страницы и Unicode. Протокол MIME. Использование MIME
протоколом HTTP и почтовыми протоколами.
7. Прикладной уровень OSI.
Понятия клиента и сервера. Языки запросов и ответов на примере протокола HTTP. Протоколы SMTP, POP3, IMAP, FTP.
Программа практических занятий (72 ч.)
Ассистент Ренат Искандерович Идрисов
Примеры подготовительных заданий:
1. Программа, которая по заданному IP адресу выводит его MAC-адрес
или выводит причину, по которой определение адреса не состоялось.
2. Программа получения списка доступных узлов в заданном домене. Требуется также выделить почтовые сервера.
3. “Поймать” пароль, передаваемый через Интернет (можно с помощью
Etherial).
4. Программа, отслеживающая количество запущенных копий себя в локальной сети.
5. Программа проверки почты, должна отвечать на вопрос: было ли получено новое сообщение с момента последнего запуска.
Пример индивидуального творческого задания:
Реализация DNS-сервера с кэшем, с возможностью задать зоны и указать главный DNS сервер.
86
Литература
1. В. Г. Олифер, Н. А. Олифер. Компьютерные сети. Принципы, технологии, протоколы. СПб: Питер, 2001.
2. В. Г. Олифер, Н. А. Олифер. Новые технологии и оборудование IPсетей. СПб: БХВ, 2000.
3. М. Кулыгин. Технологии корпоративных сетей. Энциклопедия. СПб:
Питер, 1999.
4. М. Гук. Аппаратные средства локальных сетей. Энциклопедия. СПб:
Питер, 2000.
5. Йон Снейдер. Эффективное программирование TCP/IP. СПб: Питер,
2001.
МАШИННАЯ ГРАФИКА
(4-й курс, 7-й сем., 72 ч., диф. зачет)
Программа курса лекций (36 ч.)
Канд. физ.-мат. наук, старший преподаватель Тагир Фаридович Валеев
1. Цели и задачи курса. Широкое определение компьютерной графики
(КГ), основные разделы: иллюстративная КГ (ИКГ), распознавание образов, обработка изображений. Краткая историческая сводка. Основные
задачи ИКГ: методы графического представления данных, алгоритмы,
языки КГ, графические программные средства. Графический стандарт
ГКС. Сегментированный дисплейный файл, сегмент, примитивы вывода, атрибуты. Примитивы и устройства ввода. Режимы ввода: опрос, запрос, событие. Графические метафайлы.
2. Краткий курс работы в среде Windows Visual C++. Создание графических приложений с интерфейсом Single Document/View с использованием Graphical Device Interface/Microsoft Foundation Classes. Правила сдачи задач по электронной почте. Критерии для выставления оценок за
курс.
3. Пиксельные области (ПО): а) 4-связные и 8-связные; б) внутренне определенные ПО, внутренне заполняющие алгоритмы; в) гранично определенные ПО, гранично заполняющие алгоритмы; г) рекурсивный алгоритм, span-алгоритм; д) заполнение шаблоном; е) аффинные преобразования над ПО. Перевод координат: вещественные ↔ растровые. ВМРфайл.
4. Задача растеризации алгебраических кривых. Алгоритм Брезенхэма для
отрезков. Алгоритм Брезенхэма для растеризации окружностей.
Алгоритм У Сяолиня.
5. Многоугольники, определения. Ориентированные многоугольники.
Характеристическая функция. Растеризация многоугольников (идея).
Простейший алгоритм растеризации треугольника на основе алгоритма
Брезенхэма. Клиппирование многоугольников: алгоритм СазерлендаХоджмана, алгоритм Вейлера-Азертона. Пересечение отрезков на основе параметрической формы. Теоретико-множественные операции
(ТМО) над многоугольниками. Понятие регуляризованных ТМО, схема
алгоритма для регуляризованных объединения, пересечения и разности.
6. Дизеринг. Аппроксимация полутонов: за счет увеличения пространственного разрешения и без увеличения. Матрицы дизеринга. Алгоритм
упорядоченного возмущения, алгоритм и рекуррентное соотношение
для матриц. Алгоритм Флойда-Штейнберга. Другие алгоритмы: Ярвис,
Стуки. Дизеринг цветных изображений. Перевод цветного изображения
в черно-белое. Пересчет на удвоенное разрешение. Области применения
дизеринга.
7. Гамма монитора, гамма-коррекция, яркость, контраст. Пересчет (увеличение до 16 бит при промежуточных вычислениях). Антиалиасинг. Основная идея (в пикселе часть объекта мира). Алиасинг анимаций (по
времени). Регуляризация функций. Сглаживающий фильтр. Запись ядра
(матрицы) бокс-фильтра. Попиксельные операции.
8. Основные задачи обработки изображений: коррекция изображения,
улучшение изображения, структурный анализ. Оператор Робертса,
дифференцирование, алгоритм, порог. Примеры популярных фильтров:
сглаживающий, подчеркивание краев, тиснение, повышение резкости,
акварелизация, медианный фильтр, обрезание значений интенсивности,
обработка цветных изображений. Композиция изображений, альфаканал.
9. Визуализация в научных вычислениях (ViSC). Способы визуального
представления многозначных функций и функций многих переменных:
кодирование, группировка, понижение размерности. Выбор интервала
дискретизации. Задача "Изолинии": алгоритм марширующих кубов. Задача "Векторные поля". "Лица Чернова".
10. Визуализация объемных плотностей (ОП). Общее понятие ОП. Простейшие модели визуализации ОП: функция передачи прозрачностью,
функция передачи цветом. Оптическая модель взаимодействия света с
ОП (скалярным полем). Только поглощение. Только эмиссия. Поглощение + эмиссия. Случай раздельного назначения параметров поглощения
и эмиссии. Случай модели частиц. Формула приближенного
вычисления.
11. Элементы вычислительной геометрии (точка, вектор, расстояние на
плоскости и в 3D). Уравнения отрезка на плоскости и в 3Д: деление
единицы, параметрические. Уравнения луча на плоскости и в 3Д: параметрические, с направляющим вектором. Уравнение прямой на плоскости как линейное уравнение. Нормаль. Расстояние до точки. Функции
угла между векторами, лучами, прямыми. Уравнение плоскости в 3Д
как линейное уравнение. Нормаль. Расстояние до точки. Кривизна и
кручение. Барицентрические координаты (отрезок, треугольник, тетраэдр). Деление единицы. Выпуклая оболочка множества точек.
89
12. Конструирование кривых с локальной модификацией. Метод Эрмита,
метод Безье. Геометрические свойства отрезка кривой Безье. Всплайны. Геометрические свойства В-сплайновой кривой. Сопряжение
участков кривых (Эрмит, Безье). Геометрическая и параметрическая
непрерывности.
13. Параметрические поверхности. Параметрические линии на поверхностях и касательные к ним. Нормаль к поверхности. Уравнение пути фрезы. Конструирование участков поверхностей. Билинейная функция. Линейчатая поверхность, построенная на опорных кривых. Участок поверхности по методу Кунса. Участок поверхности по методу Эрмита.
Участок поверхности по методу Безье. Геометрические свойства.
В-сплайны. Сшивка двух участков поверхности. Суперквадрики.
14. Особые случаи параметризации. Поверхности вращения. Другие моделирующие преобразования: скручивание, экструзия и т.п. Морфинг поверхностей.
15. Преобразования. Понятия модельных, видовых, анимационных преобразований. Векторная алгебра, базисы. Линейные и аффинные преобразования. Сдвиг, масштабирование и поворот на плоскости. Матричные
записи для линейных. Задача поворота относительно точки (невозможно представить одной матрицей из-за сдвига). Примеры языка
PostScript. Однородные координаты и 2Д преобразования. Соглашения о
записи вектора: строка / столбец. Запись и применение преобразований.
Левосторонняя и правосторонняя СК. Положительное вращение вокруг
осей. Однородные координаты и 3Д преобразования. Поворот: углы Эйлера. Преобразование твердого тела. Из чего состоит матрица? Поворот
вокруг произвольной оси. Сферическая интерполяция.
16. Масштабирование изображений: увеличение и уменьшение частоты
дискретизации. Постановка задачи, области применения. Интерполяция
одномерного дискретного сигнала. Переход к двумерному случаю. Виды интерполяции: ближайший сосед, билинейная, бикубическая, синкум-интерполяция, интерполяция Ланцоша. Вывод ядра бикубической
интерполяции из граничных условий, параметр A. Использование интерполяции для преобразований вращения, аффинных, нелинейных
преобразований.
Фрактальное
масштабирование
изображений.
Масштабирование пиксельной графики.
17. Видовое преобразование: перспективное и параллельное проецирование. Пирамида видимости (POV), видимый объем. Матрицы проецирования, вывод. Преобразование видимого объема к полукубу. Алго90
ритм Z-буфера. Конвейер преобразования координат: модельные СК –
мировая СК – СК камеры – полукуб – клиппирование – плоскость изображения – порт вывода. Преобразование координат через базисы.
Программа практических занятий (36 ч.)
Канд. физ.-мат. наук, старший преподаватель Тагир Фаридович Валеев
Задания
1. Task1 (Base/Init). Освоить программирование в среде VisualStudio на
языке C++ графических приложений типа Single Document/View.
Отработка технологии сдачи задач через электронную почту.
Разработка – 6 часов.
2. Fill. Работа с пиксельными областями, программирование алгоритмов
заливки. Разработка – 4 часа.
3. Edit. Создание простейшего пиксельного графического редактора. Алгоритмы Брезенхема, алгоритмы заливки. Разработка – 6 часов.
4. Clip. Программирование алгоритмов клиппирования многоугольников
на плоскости. Алгоритм Сазерленда-Ходжмана или Вейлера-Азертона.
Разработка – 6 часов.
5. Izo. Разработка программы построения изолиний и цветотоновой карты
для функции двух переменных. Разработка – 4 часа.
6. Vector. Разработка программы построения карты векторных полей.
Разработка – 4 часа.
7. Filt. Программирование простейших фильтров для полноцветных изображений. Разработка – 5 часов.
8. Morph. Программирование морфинга параметрически заданных кривых.
Разработка – 3 часа.
9. Resample. Программирование алгоритмов масштабирования изображений. Разработка – 4 часа.
10. CV. Изображение функции двух переменных в виде проволочной модели поверхности. Применения преобразований в однородных координатах (модельные преобразования, преобразования камеры, клиппирова91
ние по полукубу, преобразование в экранные координаты).
Моделирующие преобразования: скручивание, экструзия. Разработка –
4 часа.
Всего в семестре даётся шесть обязательных задач. Выбор задач и условия
меняются от года к году. Чтобы получить пятёрку, необходимо (но недостаточно) сдать как минимум пять задач. Оценка на дифференцированном
зачете по курсу "Компьютерная графика" с учетом:

оценок от 0 до 5 за шесть заданий в течение семестра;

посещаемости лекций;

устного зачёта (ответ на вопросы по теории).
При проверке программ на всех этапах существенными будут следующие
факторы:

Своевременность сдачи программ. Все программы сдаются по
электронной почте по установленным в курсе правилам. Например,
неверная тема письма считается грубейшей ошибкой. Временем
предъявления программы считается время отправки письма. Крайний срок сдачи всегда указан в задании. После сдачи допускается
досдавать задачу в течение одной недели, но максимальная оценка
снижается с 5 до 3.

Полнота, недвусмысленность и краткость описания особенностей
авторской реализации.

Полнота учета требований к программе.

Реализация дополнительных эффектов сверх требований.
Литература
1. А. В. Фролов, Г. В. Фролов. Графический интерфейс GDI в MS
Windows. (Библиотека системного программиста Т. 14). М.: ДИАЛОГМИФИ, 1994.
2. Т. Сидорина. Самоучитель Microsoft Visual Studio C++ и MFC. СПб.:
БХВ, 2009.
3. В. Давыдов. Visual C++. Разработка Windows-приложений с помощью
MFC и API-функций. СПб.: БХВ, 2008.
4. Дж. Фоли, А. ван Дэм. Основы интерактивной машинной графики: В 2х кн. / Пер. с англ. М.: Мир, 1985.
92
5. А. Фокс, М. Пратт. Вычислительная геометрия. Применение в проектировании и на производстве. / Пер. с англ. М.: Мир, 1982.
6. Д. Роджерс. Алгоритмические основы машинной графики. / Пер. с англ.
М.: Мир, 1989. (2-ое издание – 2001 год).
7. А.В. Погорелов. Дифференциальная геометрия. М.: Наука, 1969.
8. N. Max. Optical Models for Direct Volume Rendering. IEEE Trans. on Visualization and Comput. Graphics. 1995, v. 1, No.2, pp. 99-108.
9. Visualization and Computer Animation, 1994, v.5, No.1.
10. У. Пратт. Цифровая обработка изображений. Т. 1, 2. М.: Мир, 1982.
11. И. С. Грузман, В. С. Киричук, В. П. Косых, Г. И. Перетягин, А. А. Спектор. Цифровая обработка изображений в информационных системах.
Новосибирск: НГТУ, 2000.
12. П. Ньюмен, Р. Спрулл. Основы интерактивной машинной графики. М.:
Мир, 1976.
13. В. Гилой. Интерактивная машинная графика. М.: Мир, 1981.
14. Т. Павлидис. Алгоритмы машинной графики и обработки изображений.
М.: Радио и связь, 1986.
15. Keys, R.G. Cubic Convolution Interpolation for Digital Image Processing,
IEEE, 1981, Vol. 29, No.6, pp. 1153-1160.
93
ДИНАМИЧЕСКАЯ 3D-ГРАФИКА
(4-й курс, 8-й сем., 64 ч., диф. зачет)
Программа курса лекций (32 ч.)
Канд. физ.-мат. наук, старший преподаватель Тагир Фаридович Валеев
1. Цели и задачи курса. Реалистическая визуализация. Введение, исторический обзор алгоритмов и аппаратных возможностей. Wireframe. Удаление невидимых линий. Алгоритм подвижного горизонта. Очерки или
линии силуэта.
2. Упрощенная модель зрения (или сведения из психофизиологии – колбочки, палочки, цвет). Полосы Маха. Диапазон различаемых яркостей.
Локальная модель освещенности, рассеянный свет, диффузное отражение, зеркальное отражение. Закраска по Гуро, закраска по Фонгу. Полигональные приближения гладких поверхностей. Модель ТорренсаСпэрроу.
3. Простейшая трассировка лучей. Пространственная сцена. Отраженный
и преломленный лучи. Нахождение пересечений луча с основными элементами сцены: а) сфера; б) бокс; в) плоский многоугольник в пространстве.
4. Алгоритм обратной рекурсивной лучевой трассировки. Основные элементы сцены. Камера. Правила ограничения дерева трассировки. Методы повышения качества изображений (удаление лестничного эффекта) –
рендеринг на субпиксельном уровне, фильтрация.
5. Методы ускорения лучевой трассировки. Пространственные структуры
данных: иерархические ограничивающие объемы (боксы, сферы), сетки,
иерархические сетки, октодеревья, kd-деревья. Достоинства и недостатки этих структур при изображении динамических сцен. Кластеризация
источников света.
6. Триангуляция. Постановка задачи, применение в трёхмерной графике.
Триангуляция Делоне. Диаграммы Вороного.
7. Недостатки рекурсивной лучевой трассировки – отсутствие диффузных
переотражений. Компонент рассеянного света. Метод световых сеток.
Световые сетки прямой и непрямой освещенности.
8. Уравнение визуализации – уравнение баланса освещенности в сцене.
Особенности лучевой трассировки Монте-Карло. Диффузные сцены.
Излучательность (radiosity),
методом конечных элементов.
уравнение
излучательности.
Расчет
9. Введение в MS DirectX. Общие сведения об объектно-ориентированной
системе SmogDX: сцена (основной объект), камера, порт вывода, мировая система координат, фреймы, модельная система координат, геометрические элементы, источники света, материалы, текстуры, анимации,
тени.
10. Иерархия фреймов в SmogDX. Создание геометрии сцены (полигональные сетки). Окрашивание поверхностей сцены, применение полупрозрачных цветов. Динамика – поступательная и вращательная скорости
фрейма. Простейший морфинг – изменение положения вершин в сетках.
Создание сценариев поведения фреймов.
11. Понятие текстуры, текстурные координаты. Виды покрытий. Текстурирование поверхностей (сеток) сцены. Декалы. Размещение изображения
фона на порту вывода.
12. Полигонолизация поверхностей – полигональные сетки. Фактура: текстура, bump mapping. Выборка: Nearest, Linear, MIPMAP. Текстурные
системы координат. Покрытия: flat, cylindrical, spherical, chrome.
Пример неверного задания сетки куба для текстурирования.
13. Ведение в OpenGL. Совпадающие и различающиеся характеристики
OpenGL и SmogDX или OpenGL и DirectX. OpenGL как конечный
автомат.
14. Конвейер обработки OpenGL. Дисплейный список. Повершинные операции
и
сборка
примитивов.
Вычислитель.
Растеризация.
Пофрагментные операции.
15. Виды примитивов в OpenGL, способы их задания, свойства: координаты, нормаль, цвет, материал, текстура. Источники света в OpenGL.
16. Представление координат в OpenGL. Матрицы преобразования. Стек
матриц. Проективное преобразование.
17. Создание приложений на OpenGL в среде Windows.
18. Визуализация пламени в 3Д: анимированные декалы, проблема зацикливания. Пламя как динамическая сетка. Системы частиц: симуляция и
рендеринг. Другие области применения систем частиц: водопад, фонтан, снег, пыль. Построение приложения с использованием систем
частиц на OpenGL.
95
19. Программирование шейдеров. Общее понятие, типы шейдеров, их место
в конвейере визуализации Direct3D. Язык для создания шейдеров.
Встраивание в приложения. Файлы эффектов .fx. Примеры: gooch shading, cartoon shading, parallax mapping, bump mapping, графические фильтры.
Программа практических занятий (32 ч.)
Канд. физ.-мат. наук, старший преподаватель Тагир Фаридович Валеев
Задания
Задание № 1
Лучевая трассировка
Разработать программу в среде VisualStudio на языке C++, реализующую
алгоритм рекурсивной лучевой трассировки для визуализации пространственных сцен. Выполняется в 3 этапа, за каждый выставляется отдельная
оценка:
1. Разработать библиотеку функций, вычисляющих пересечение луча со
сферой, с боксом, с плоским выпуклым многоугольником в пространстве. Разработать функции, вычисляющие: нормальный вектор к примитиву в указанной точке, отраженный вектор, преломленный вектор. Для
тестирования предлагается унифицированный формат файла.
Разработка – 4 часа.
2. Программа выбора ракурса. Создается простая сцена, состоящая из 1-3
примитивов. Минимальный набор примитивов: плоскость, куб, сфера.
Вычисляется габаритный бокс сцены. Пользователь при помощи мыши
осуществляет повороты и перемещения бокса для достижения требуемого ракурса. Разработка – 4 часа.
3. Разработать программу лучевой трассировки на основе программы,
выполненной на этапе 1, и библиотеки функций, выполненной на этапе 2. Характеристики программы: а) возможен выбор ракурса изображения сцены в интерактивном режиме (см. этап 1), разрешение изображения определяется клиентской областью окна приложения; б) чтение
описания сцены из файла (унифицированный формат); в) все действия
выполняются с использованием библиотеки функций, разработанных на
этапе 2; г) регулируется глубина дерева трассировки (от одного до трех
отражений); д) один из объектов сцены должен быть в движении – ими96
тация смазывания изображения; е) включение/ выключение гаммакоррекции. Разработка – 8 часов.
Задание № 2
Динамическое приложение SmogDX
Разработать динамическое приложение, используя систему классов
SmogDX в среде VisualStudio на языке C++. Разработать собственный геометрический класс. Разработать сценарий анимационного приложения.
Запрограммировать геометрические элементы и анимацию элементов сцены. Источники освещения. Применить текстурирование объектов сцены,
применить 2-3 материала, использовать 1-2 тени, использовать указание на
изображение трехмерного объекта. Разработка – 8 часов.
Задание № 3
Динамическое приложение OpenGL
Разработать несложное динамическое приложение, используя библиотеку
OpenGL в среде VisualStudio на языке C++. Программа должна основываться на иерархическом построении объектов, использовать текстуры, дисплейные списки и стеки координатных преобразований. Разработка – 6
часов.
Задание № 4
Пиксельный и вершинный шейдер
Разработать несложный шейдер и встроить его в приложение на DirectX в
среде VisualStudio на языке C++. Разработка – 4 часа.
Оценка на дифференцированном зачете по курсу "Динамическая 3D графика" с учетом:

оценок от 0 до 5 за задания в течение семестра;

посещаемости лекций;

устного зачёта (ответ на вопросы по теории).
При проверке программ на всех этапах существенными будут следующие
факторы:

Своевременность сдачи программ. Все программы сдаются по
электронной почте по установленным в курсе правилам. Например,
неверная тема письма считается грубейшей ошибкой. Временем
предъявления программы считается время отправки письма. Крайний срок сдачи всегда указан в задании. После сдачи допускается
досдавать задачу в течение одной недели, но максимальная оценка
снижается с 5 до 3.
97



Полнота, недвусмысленность и краткость описания особенностей
авторской реализации.
Полнота учета требований к программе.
Реализация дополнительных эффектов сверх требований.
Литература
1. Дж. Фоли, А. ван Дэм. Основы интерактивной машинной графики: В 2х кн. / Пер. с англ. М.: Мир, 1985.
2. А. Фокс, М. Пратт. Вычислительная геометрия. Применение в проектировании и на производстве. / Пер. с англ. М.: Мир, 1982.
3. Е. В. Шикин, А. В. Боресков. Компьютерная графика. Динамика, реалистические изображения. М.: ДИАЛОГ-МИФИ, 1995.
4. В. А. Дебелов, Ю. А. Ткачев. SmogDX – объектно-ориентированная
графика для Windows (DirectX и Visual C++). Новосибирск: Сибирское
университетское изд-во, 2001. – 311 с.
5. В. А. Дебелов, Ю. А. Ткачев. Объектно-ориентированная система машинной графики для Windows (C++ и Microsoft DirectX). Новосибирск:
ИВМиМГ СО РАН, 1999.
6. Д. Роджерс. Алгоритмические основы машинной графики. / Пер. с англ.
М.: Мир, 1989. (2-ое издание – 2001 год).
7. Н. Томпсон. Секреты программирования трехмерной графики для Windows 95. СПб: Питер, 1997. – 352 с.
8. Ю. Тихомиров. Программирование трехмерной графики. СПб.: БХВ,
1999. – 256 с.
9. А. Попов. DirectX 10 – это просто. Программируем графику на C++.
СПб.: БХВ, 2008.
98
МЕТОДЫ АНАЛИЗА ЭКСПЕРИМЕНТАЛЬНЫХ ДАННЫХ
(4-й курс, 8-й семестр, 64 ч., экзамен)
Программа курса лекций (32 ч.)
Канд. физ.-мат. наук, доцент Иван Борисович Логашенко
1. Случайные величины. Дискретные и непрерывные распределения. Параметры распределений: среднее значение, дисперсия, моменты. Ковариационная матрица, коэффициент корреляции. Преобразование распределения при замене переменных. Основные распределения и их параметры: биномиальное, Пуассона, равномерное, нормальное, χ2.
Центральная предельная теорема.
2. Метод Монте-Карло. Интегрирование методом Монте-Карло. Алгоритмы генерации случайных чисел: метод Неймана, метод трансформации,
комбинированный. Алгоритм генерации нормально-распределенной
величины.
3. Оценка параметров распределений по ограниченной выборке. Свойства
оценок: состоятельность, смещение, эффективность, робастность
(устойчивость). Понятие информации Фишера и неравенство РаоКрамера. Способы построения оценок, метод моментов. Способы
построения несмещенной оценки, робастной оценки.
4. Метод максимального правдоподобия. Оценка погрешностей в методе
максимального правдоподобия. Примеры использования метода максимального правдоподобия для аппроксимации гистограммы, определения
времени жизни, оценки дисперсии.
5. Метод наименьших квадратов. Оценка погрешностей в методе
наименьших квадратов. Метод наименьших квадратов в линейном приближении. Пример использования метода наименьших квадратов для
аппроксимации гистограмм.
6. Способы построения критерия качества аппроксимации (критерия согласия). Критерий χ2. Оценка качества аппроксимации в методе максимального правдоподобия. Другие критерии согласия: проверка последовательностей, критерий Колмогорова-Смирнова.
7. Теорема Байеса. Формулировка теоремы Байеса для непрерывных распределений. Применение теоремы Байеса для оценки погрешностей.
Связь теоремы Байеса и метода максимального правдоподобия. Примеры применения теоремы Байеса: определение эффективности, оценка
верхнего предела при близости измеренного значения к границе интервала возможных значений, оценка уровня сигнала при наличии фона.
Понятие Байесовских сетей.
8. Нейронные сети. Однослойный и многослойный перцептрон. Обучение
перцептрона, алгоритм обратного распространения ошибок. Глобальные
методы оптимизации. Радиально-базисные сети. Задача кластеризации и
сеть Кохонена. Применение нейронных сетей для классификации
данных.
9. Задача разделения сигнала и фона (задача проверки гипотез). Критерий
разделения, мощность и значимость критерия. Методы сравнения критериев. Лемма Неймана-Пирсона и наилучший критерий разделения.
Практические методы построения критериев разделения: факторизация
функции правдоподобия; линейный дискриминантный анализ Фишера;
нейронные сети; деревья принятия решений; методы, основанные на
подсчете числа событий. Метод главных компонент.
10. Задача обратной свертки (unfolding). Постановка задачи. Методы получения результатов без обратной свертки. Прямое решение задачи.
Регуляризация. Регуляризация Тихонова. Метод максимальной
энтропии.
11. Восстановление траекторий заряженных частиц. Задачи распознавания
трека и определения параметров трека. Алгоритм гистограммирования
и преобразование Хью (Хафа, Hough). Рекурсивный метод наименьших
квадратов (фильтр Калмана).
12. Задача калибровки измерительной системы. Простой алгоритм калибровки с помощью оценки среднего отклика. Использование многопараметрических методов оптимизации для калибровки системы по большому массиву данных.
Программа практических занятий (32 ч.)
Канд. физ.-мат. наук, доцент Иван Борисович Логашенко
На практических занятиях студенты знакомятся с пакетами программного
обеспечения, широко используемых при анализе результатов экспериментов в области физики элементарных частиц – пакет статистического анализа ROOT и пакет для моделирования взаимодействия элементарных частиц
с веществом детектора GEANT4. Студенты должны решить несколько
индивидуально подобранных задач с использованием указанных пакетов.
100
Задания реализуются на языках C++ или Python и сдаются в терминальном
классе в среде ОС Linux.
Примерные темы задач:
1. Генерация случайной величины по известному распределению. Численная оценка параметров распределения, демонстрация свойств оценки.
2. Моделирование отклика детектора при прохождении через него частицы определенного типа.
3. Параметризация аналитической функцией распределений, полученных с
помощью моделирования. Использование метода максимального правдоподобия для определения количества частиц определенного типа, зарегистрированных детектором.
4. Использование нейронной сети для идентификации частицы, зарегистрированной детектором.
Литература
1. Описание пакета ROOT. http://root.cern.ch/drupal/content/users-guide
2. Описание пакета TMVA.
http://tmva.sourceforge.net/docu/TMVAUsersGuide.pdf
3. Описание пакета Geant4. http://geant4.cern.ch/support/userdocuments.shtml
4. А. Д. Букин, С. И. Эйдельман. ЭВМ в планировании и обработке эксперимента: Учебное пособие. 2-е изд. Новосибирск: НГУ, 2002. — 114 с.
5. В. И. Лотов. Теория вероятностей и математическая статистика.
Новосибирск: НГУ, 2006.
6. Д. Худсон. Статистика для физиков. М.: Мир, 1970.
7. К. Групен. Детекторы элементарных частиц. Новосибирск: Сибирский
хронограф, 1999.
8. Методы анализа данных в физическом эксперименте. / Под ред.
М.Реглера. М.: Мир, 1993.
9. Frederic James. Statistical Methods in Experimental Physics (2nd edition).
World Scientific Publishing Company, 2006.
101
ПРОГРАММИРУЕМЫЕ ЛОГИЧЕСКИЕ УСТРОЙСТВА
(1-й курс магистратуры, 9-й сем., 36 ч., экзамен)
Программа практических занятий (36 ч.)
Ассистент Александр Анатольевич Рубан
1. Введение.
Понятие логического элемента, как усилительного звена и его особенности. Базовые элементы конъюнкции и дизъюнкции. Понятие логического элемента как линии передачи информации. Быстродействие, шум
в амплитуде и времени. Теорема Шеннона. Элементная база и материалы логических элементов. Кремниевая планарная технология. Нормы
проектирования, выход годных и результирующая стоимость микросхем. Интегральные микросхемы как путь снижения стоимости и энергопотребления логического элемента. Цикл разработки интегральной
микросхемы. Особенности СБИС в эпоху лазерной подгонки.
2. Программируемые и реконфигурируемые логические интегральные
схемы. От ПЗУ и ПЛМ к Морю Вентилей и программированию
структуры ИС.
Программирование линий связи на кристалле как водораздел программируемой и реконфигурируемой архитектур. Коммутируемые матричные блоки (CLB). Реконфигурируемые модули памяти (EAB). Реконфигурируемые блоки PLL. Глобальные цепи синхронизации. Аппаратная поддержка арифметических вычислений, высокоскоростных интерфейсов. System-on-chip (SoC). Методы конфигурации – PPA, PPS,
AS, PS, JTAG. Конфигурационные EEPROM. Конфигурирование в системе (ISP).
3. Цикл разработки проекта на ПЛИС с использованием САПР.
Прямой цикл разработки с использованием языков описания и моделирования VHDL и VerilogHDL. Рекурсивный цикл разработки с использованием языков описания AHDL, AbelHDL. Возможности вовлечения
в цикл разработки ПО сторонних производителей. Верификация логики
и реальных данных, попадающих в устройство. Системы сканирования
границ блоков, интерфейс JTAG.
4. Языки описания аппаратуры VHDL и AHDL.
Числа, константы, символы.
Булевы выражения.
Логические операторы.
Арифметические операторы.
102
Реализация условной логики (операторы IF, CASE).
Компараторы (операторы сравнения).
Оператор FOR – GENERATE.
Оператор Truth Table.
Примитивы.
Порты.
Комбинационная логика.
Узел (node).
Определение групп.
Реализация условной логики (IF, CASE).
Значения по умолчанию.
Реализация двунаправленных выводов.
Последовательная логика.
Регистры.
Счетчики.
Цифровые автоматы (state machine).
Реализация иерархического проекта.
Макрофункции Altera.
Пользовательские макрофункции.
Импорт и экспорт цифровых автоматов.
5. Системы проектирования ПЛИС – MAX+PLUS и QUARTUS.
Поддерживаемые устройства (семейства микросхем), система лицензирования.
Средства описания проекта.
Схемный ввод, поддержка языка AHDL, интерфейс с САПР третьих
фирм, топологический редактор, иерархическая структура проекта,
библиотека параметризируемых модулей.
Средства компиляции проекта.
Логический синтез и трассировка, автоматическое обнаружение ошибок, поддержка мегафункций по программам MegaCore и AMPP.
Управление компиляцией.
Средства верификации проекта.
Временной анализ, функциональное и временное моделирование, анализ сигналов, возможность использования программ моделирования
(симуляторов) третьих фирм.
Аппаратные средства верификации проекта. Встроенный логический
анализатор с вводом через интерфейс JTAG.
6. Типичные проблемы-ловушки и способы преодоления.
Классические «гонки» сигналов.
103
Клапанирование тактовых сигналов.
Метастабильные состояния.
Неполное описание схем совпадения.
7. Типичные узлы, применяемые в проектах для ядерной физики.
Формирователи задержек и разрешающих времен, схемы совпадения.
Обработка сигналов быстрых АЦП. Теорема Котельникова-Найквиста.
Роль входного фильтра. Вычислители «бегущего среднего». Окно Дирихле, другие окна. Вычисление контрольных циклических кодов. Размен латентности на производительность при замене параллельных вычислителей на последовательные. Подход к конвейерным и систолическим структурам.
Практические и контрольные задания
1. Создать новый проект и моделировать делитель частоты на два.
Использовать примитив DFF.
2. Модифицировать проект для деления частоты на произвольное число.
При моделировании обратить внимание на выбросы. Готовый проект
должен иметь однотактную синхронизацию (Synchronous Design).
3. Оформить делитель в виде параметризованного библиотечного модуля,
включить в иерархический проект.
4. Определить максимальную тактовую частоту и энергопотребление делителя при наивысшей частоте. Установкой опций компилятора
увеличить возможную тактовую частоту.
5. Разработка модуля UART, часть1. Описание состояний флагами и статической машиной.
6. Разработка модуля UART, часть2. Избыточное сэмплирование, синхронизация и передача данных.
7. Разработка модуля UART, часть3. Внесение буферной памяти: режимы
FIFO, True Dual Port.
8. Вычисление
четности
и
контрольных
Параметризованный модуль CRC.
104
циклических
кодов.
9. Цифровая обработка сигналов. Переход от аналогового прототипа к
цифровой модели. Построить интегрирующее звено фильтра с бесконечной импульсной характеристикой. Внести затухание.
Варианты курсового проекта
1. Разработать и моделировать каскадный цифровой фильтр (медианный +
ФНЧ) на языке AHDL.
Проект должен иметь иерархическое строение: Параметризованные
макрофункции медианного фильтра и ФНЧ включаются в вышестоящий проектный файл. Порядок включения фильтров должен быть изменяемым. Верификация проекта должна доказывать правильное
функционирование фильтра при наличии на входе импульсного выброса и высокочастотного сигнала. Обратить внимание на сохранение точности и отсутствие переполнения. Указать цепи, определяющие быстродействие проекта. Оценить энергопотребление и объем используемых ресурсов.
2. Разработать и моделировать аппаратный анализатор спектра с выводом
на монитор VGA.
Предполагается, что на вход устройства подаются 12-битные отсчеты
внешнего амплитудно-цифрового преобразователя, а на выходе стандартный монитор отображает гистограмму спектра. Проект так же
должен иметь иерархическое строение, число столбцов в гистограмме
должно быть параметром компиляции. Как вариант, можно разработать
спрайтовый процессор. Верификация проекта должна доказывать правильное функционирование как модуля создания гистограммы, так и
модуля отображения на экране. Обратить внимание на реакцию
устройства в случае переполнения. Указать цепи, определяющие быстродействие проекта. Определить зависимость объема использованного
оборудования от количества столбцов.
3. Разработать и моделировать систему сбора данных на основе 12разрядного АЦП последовательного приближения и внешнего аналогового коммутатора.
Собранные данные должны храниться в ОЗУ и по команде внешнего
устройства передаваться ему пакетом по последовательной линии связи. Линия связи обязательно двунаправленная. Формат передачи и метод защиты данных на Ваше усмотрение. Верификация проекта должна
105
доказывать правильное функционирование модулей работы с АЦП и
коммутатором, передачу пакета данных, отсутствие артефактов на линии. Определить объем оборудования и энергопотребление устройства.
4. В качестве курсового может быть принят достаточного объема проект
устройства, разработанного Вами для нужд лаборатории Института или
Университета.
Пожелания и ограничения, которые должны быть соблюдены при выполнении задания.
1. Настоятельно НЕ рекомендуется использование схемного ввода.
2. Запрещается использовать входы асинхронной установки/сброса для
регистров и триггеров.
3. Запрещается подавать на тактовые входы что-либо, кроме тактовых
сигналов, распределяемых глобальной цепью.
4. Запрещается использование инверсных и клапанированных тактовых
сигналов.
5. Входные и выходные сигналы проекта должны быть оборудованы регистрами и иметь соответствующие опции включенными.
6. Входные и выходные сигналы проекта должны иметь определенный
электрический тип и иметь соответствующие опции включенными.
Литература
1. Programmable Logic Development System MAX+PLUS(R) Altera Corporation. http: //www.altera.com/
2. В. Б. Стешенко ПЛИС фирмы ALTERA: проектирование устройств
обработки сигналов. М.: ДОДЭКА, 2000.
3. Enchanced VHDL tutorial with applications. http://www.aldec.com/
4. Enchanced Verilog HDL tutorial with applications. http://www.aldec.com/
5. Boundary-Scan System. http://www.jtag.com/
6. В. С. Гутников. Фильтрация
Энергоатомиздат, 1990.
измерительных
106
сигналов.
СПб.:
НОВЫЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
(1-й курс магистратуры, 10-й сем., 64 ч., экзамен)
Программа курса лекций (64 ч.)
Старший преподаватель Сергей Валерьевич Дубров
Лекции построены в виде докладов преподавателя и студентов (вариант для
студентов: реферат). За одну лекцию представляются два-три доклада, один
в исполнении преподавателя, остальные – силами самих студентов. Темы
выбираются студентами из предложенного преподавателем списка либо
самостоятельно (по согласованию с лектором). Примерный список охватывает самые разные направления современной ИТ индустрии – как аппаратные (hardware), так и программные (software).
1. Архитектура и особенности современных микропроцессоров.
2. Скоростные шины (PCI-E, QPI…).
3. Технология скоростной памяти (DDR, DDR-2, -3, -4, -5).
4. Технологии построения современных локальных вычислительных сетей: Gigabit Ethernet, 10 Gigabit Ethernet. Коммутация. VLAN.
5. Технологии беспроводного доступа: BlueTooth, IEEE802.11, WiMAX.
6. Технологии современных проекторов: ЖКИ, микрозеркальная, лазерная.
7. Системы и устройства для хранения данных: IDE (ATA, SATA). SCSI,
SAS, SAN, NAS, RAID-массивы.
8. Технологии современных портативных
«Маленькие» ноутбуки – нетбуки.
компьютеров
(notebook).
9. CD, DVD, BluRay – технологии.
10. Понятие каталога (directory), обзор и сравнение технологий eDir
(Novell), Active Directory (Microsoft), LDAP.
11. Технологии современных браузеров: IE, Mozilla FF, Opera, Chrome.
12. Терминальный сервис в семействе Windows. «Надстройка» от фирмы
Citrix. Протоколы RDP, ICA.
13. Обзор новых возможностей семейства Windows 2008.
14. Технологии на базе Java (J2EE, JSP,…).
15. Технологии .NET.
16. Базы данных, SQL. Сравнительный обзор основных участников в этом
секторе рынка.
17. Кластерные вычисления. Технологии GRID.
18. Технологии мобильной связи: GSM, CDMA.
19. Технологии построения поисковых машин.
20. 3D-технологии в современных компьютерных играх. OpenGL, DirectX.
21. Трехмерный звук. Технологии сжатия звука (MP3, OGG, WMA,…).
22. Технологии современных КПК, коммуникаторов, смартфонов. Феномен
iPhone.
Литература
Поскольку в данном курсе обычно рассматриваются самые свежие и новые
технологии, то трудно порекомендовать ту или иную литературу в ее классическом – бумажном – воплощении. Книги очень быстро устаревают.
Основным источником информации для данного курса могут быть названы
тематические, поисковые Интернет-сайты или сайты фирм-разработчиков
той или иной технологии. Некоторые из них перечислены ниже:
www.google.com – на сегодня, несомненно, лучшая поисковая машина в Интернете.
2. www.yandex.ru – одна из лучших поисковых машин в русскоязычной части Интернета.
3. www.ixbt.com – авторитетный сайт, спеализирующийся на аппаратном обеспечении.
4. www.3dnews.ru – еще один очень авторитетный ресурс по аппаратному обеспечению.
5. www.novell.ru – русскоязычный сайт фирмы Novell.
6. www.microsoft.com/rus – русскоязычный сайт фирмы Microsoft.
7. www.java.com – сайт, посвященный технологиям Java.
8. www.citrix.com – сайт фирмы Citrix.
9. www.intel.com – сайт фирмы Intel.
10. www.ibm.com – сайт фирмы IBM.
1.
108
ПРОБЛЕМЫ БЕЗОПАСНОСТИ В ИНФОРМАЦИОННЫХ
ТЕХНОЛОГИЯХ
(1-й курс магистратуры, 10-й сем., 64 ч., экзамен)
Программа курса лекций (64 ч.)
Старший преподаватель Сергей Валерьевич Дубров
1. Определение информационной безопасности. Основные составляющие
информационной безопасности (конфиденциальность, целостность,
доступность). Классификация сетевых атак. Стандарты и спецификации
в области ИБ. Политика безопасности, внутренние угрозы. Принцип
трех «А»: аутентификация, авторизация, аудит.
2. Криптографические основы безопасности. Алгоритмы традиционного
(симметричного) шифрования, блочные и потоковые алгоритмы, сети
Фейстеля, S-boxes. Алгоритмы DES (режимы ECB, CBC, CFB, OFB).
Алгоритмы ГОСТ 28147, 3DES. Замена DES – AES (MARS, RC6,
Rijndael, Serpent, Twofish). Криптоанализ.
3. Криптография с открытым ключом. Шифрование, цифровая подпись,
обмен ключами. Алгоритм RSA (подробно). Схема обмена ключами
Диффи-Хелмана (подробно).
4. Хэш-функции. Простые хэш-функции, «парадокс дня рождения». MD5,
SHA-1, SHA-2 (-256, -384, -512), ГОСТ 3411. МАС (Message Authentication Code).
5. Сертификаты (X.509). PKI, CA, списки отозванных сертификатов (CRL).
Сочетание
традиционной
(симметричной)
криптографии
и
криптографии с открытым ключом.
6. Базовые (встроенные) средства обеспечения безопасности автономных
операционных систем. Разграничение доступа (сервисы, файловая
система). MAC, DAC, RBAC. Имперсонификация, эскалация
привиллегий. Пользователи, группы, права, привилегии (на примере
Windows2000/XP/2003, Linux). Аутентификация пользователя (challenge-response, многофакторная). Маркер доступа, списки доступа
(ACL).
7. Защита файловой системы средствами ОС. Права, атрибуты файлов и
каталогов, фильтры. Разделение доступа к файлам и каталогам.
Реализация разграничения доступа на файловой системе NTFS (WindowsNT/2000/XP/2003) (наследование, создатель/владелец). Реализация
на файловой системе Netware (явные назначения, фильтры,
эквивалентность по безопасности). Вариант NSS на Linux. Реализация
разграничения доступа к файлам и директориям на *nix-системах (sticky
bit). EFS, UAC, BitLocker.
8. Защита операционной системы в сетевом окружении. Использование
служб каталога и/или домена для аутентификации пользователя.
Реализация в eDir (NDS) фирмы Novell, Active Directory (Microsoft),
LDAP, NIS (Sun). Группы в AD, уровни, вложенность – в зависимости
от уровня работы домена/леса AD.
9. Алгоритм аутентификации Kerberos. KDC, работа в однодоменном и
многодоменном
варианте.
Доверительные
отношения,
типы,
направление. Схема входа в сеть с использованием Kerberos (на
примере AD). Управление настройками локальной безопасности с
помощью групповых политик (правил).
10. Защита Web. Протоколы SSL, TLS. Протокол защищенных электронных
транзакций (SET). Протокол SSH.
11. Недостатки защиты в основе и в реализации распространенных сетевых
протоколов первого поколения – telnet, ftp, smtp, pop3 и др. Методы
преодоления некоторых из них – однократные пароли, туннелирование,
новые протоколы. Защита электронной почты – S/MIME, PGP. Защита
от ложных ARP-, DNS-, DHCP-серверов. Защита от отказа в
обслуживании (DoS).
12. Обеспечение безопасности уровня IP – IPSec (Oakley, ISAKMP, AH,
ESP). Виртуальные частные сети (VPN, VPN over SSL (SSTP)).
Безопасные протоколы канального уровня PPTP, L2TP.
13. Защита систем. Межсетевые экраны (firewall, брандмауэры). Принципы
работы. Типы межсетевых экранов (пакетный фильтр (stateless, stateful),
шлюз
прикладного
уровня,
шлюз
уровня
коммутации).
«Демилитаризованная зона» (DMZ, 3-leg включение).
14. Обзор основных межсетевых экранов – Checkpoint, Cisco PIX/ASA,
Novell Border Manager, Microsoft ISA. Персональные межсетевые
экраны – необходимое дополнение к комплексной защите сети.
Проактивная защита, HIPS. Обзор нескольких персональные
межсетевых экранов – Comodo Firewall, Online Armor, Outpost Firewall.
110
15. Системы обнаружения вторжений – IDS, системы предотвращения
вторжений – IPS. Сопряжение с межсетевыми экранами. Сетевой
"карантин" для внешних пользователей сети (NAP).
16. Безопасность протоколов сетевого управления SNMP. Группы (community), нотация ASN.1. SNMP версии 3.
17. Безопасность беспроводных Wi-Fi сетей стандарта 802.11a/b/g/n – WEP,
WPA, WPA2, 802.11i.
18. Безопасность беспроводных сетей Bluetooth. Уязвимости, ошибки
реализации в различных системах.
19. Безопасность в web. Межсайтовый скриптинг. Уязвимость продуктов на
базе php-технологий (web-форумы).
20. Безопасность и защита сетевых устройств, работающих на втором
уровне эталонной модели OSI. Стандарт 802.1X. Перехват и анализ
сетевого трафика. Сниферы (на примере wireshark). Защита VLAN.
21. Вирусы, «черви», «троянцы». Обеспечение антивирусной безопасности.
Мониторирование в реальном времени, сканирование дисков и архивов.
Корпоративные версии антивирусных программ. Комплексное
обеспечение безопасности – сочетание антивируса, firewall-а, IPS.
Лучшие антивирусные пакеты – Norton Symantec Antivirus, Kaspersky
Anivirus, DrWeb, Panda Antivirus, CAI Innoculan.
Литература
1. Вильям Столингс. Основы защиты сетей. Приложения и стандарты. М.:
Издательский дом Вильямс, 2002.
2. Роберта Браг. Система безопасности Windows 2000. М.: Издательский
дом Вильямс, 2001
3. И. Д. Медведовский, П. В. Семьянов, Д. Г. Леонов. Атака на Internet. 2-е
изд. М.: ДМК, 1999.
4. Крис Касперски. Техника сетевых атак. М.: СОЛОН-Р, 2001.
5. Т. Оглтри. Firewalls. Практическое применение межсетевых экранов.
М.: ДМК Пресс, 2001.
6. Д. Соломон, М. Русинович. Внутреннее устройство Microsoft Windows
2000. Мастер-класс. СПб.: Питер, 2001.
111
7. Э. Таненбаум. Современные операционные системы. 2-е изд. СПб.:
Питер, 2002.
8. http://www.infosecurity.ru/
9. http://bugtraq.ru/
10. http://openna.com/
11. http://www.securityfocus.com/bid
12. http://www.microsoft.com/Windows2000/downloads/security/
13. http://www.securitylab.ru/
14. http://www.hackzone.ru/
15. http://www.securityspace.com/
16. http://thecrack.net/
17. http://www.nsa.gov/snac/index.html
18. http://www.sans.org/index.php
19. http://www.sec.ru/
20. http://opensores.thebunker.net/pub/mirrors/blackhat/presentations/bh-usa-02/
21. Дж. Чирилло. Защита от хакеров для профессионалов. СПб.: Питер,
2003.
22. Стюарт Мак-Клар, Саумил Шах, Шрирай Шах. Хакинг в WEB. Атаки и
защита. М.: Издательский дом Вильямс, 2003.
23. Брюс Шнайер. Прикладная криптография. Изд. ТРИУМФ, 2003.
24. Брюс Шнайер. Секреты и ложь. Безопасность данных в цифровом мире.
СПб.: Питер, 2003.
25. Д. Скляров. Искусство защиты и взлома информации. СПб.: БХВ, 2004.
26. Г. Хоглунд, Дж. Батлер. Руткиты: внедрение в ядро Windows. СПб.:
Питер, 2007.
27. http://www.intuit.ru
28. Б. Кэрриэ. Криминалистический анализ файловых систем. СПб.: Питер,
2006.
29. Википедия.
112
МЕНЕДЖМЕНТ ПРОГРАММНЫХ ПРОДУКТОВ
(1-й курс магистратуры, 10-й сем., 32 ч., экзамен)
Программа курса лекций (32 ч.)
Старший преподаватель Всеволод Юрьевич Рылов
1. Введение.
 Что такое проект и управление проектом.
 Признаки проекта.
 PMI и другие организации по управлению проектами.
 Time Management.
2. Организационные структуры, жизненный цикл проекта.
 Структура управления проектом.
 Жизненный цикл проекта.
 Участники проекта.
 Формы организационной структуры.
 Процессы управления проектом.
3. Интеграция проекта.
 Управление интеграцией проекта.
 Устав проекта.
 План управления проектом.
 Общее управление изменениями.
4. Управление содержанием проекта.
 Управление содержанием проекта.
 Планирование содержания.
 Иерархическая структура работ (ИСР).
 Управление содержанием.
5. Управление сроками проекта.
 Управление сроками проекта.
 Разработка графиков.
 Критический путь.
 Методы оценки длительности операций.
6. Управление стоимостью.
 Управление стоимостью проекта.
113
 Методы стоимостной оценки.
 Бюджет расходов.
7. Управление качеством.
 Управление качеством проекта.
 Планирование.
 Обеспечение.
 Контроль.
8. Управление ресурсами проекта.
 Человеческие ресурсы в управлении проектами.
 Команда проекта.
 Управление командой проекта.
9. Управление рисками.
 Управление рисками проекта.
 Виды рисков.
 Планирование рисков.
 Мониторинг и управление рисками.
10. Управление коммуникациями.
 Управление коммуникациями проекта.
 Планирование.
 Распространение информация.
 Отчетность.
11. Управление поставками проекта.




Управление поставками проекта.
Планирование покупок и приобретений.
Администрирование контрактов.
Профессиональная ответственность.
Практические задания
1. Разработка устава проекта
Студенты разбиваются на группы по 2-3 человека. Каждая группа выбирает реальный или вымышленный проект, с которым будет работать
в течение курса. На первом этапе необходимо разработать устав проекта, определить его идею, цели, участников.
114
2. Разработка содержания проекта
Для выбранного проекта каждая группа должна разработать документ
по содержанию, который будет определять проект.
3. Разработка ИСР и словаря ИСР
Для выбранного проекта разработайте иерархическую структуру работ
и определите словарь ИСР.
4. Разработка расписания проекта
Для выбранного проекта, на основе ИСР, устава и документа по содержанию необходимо разработать расписание проекта, выделить пакеты
задач и отдельные операции.
5. Разработка бюджета проекта
Для выбранного проекта на основе расписания, ИСР определить ресурсы для всех работ в проекте, составить план управления стоимостью
проекта.
6. Разработка плана по качеству
Для выбранного проекта определите критерии и политику качества, задокументируйте требования по качеству и способ его достижения в виде плана по качеству проекта.
7. Разработка плана управления рисками
Для выбранного проекта определите риски и разработайте план управления рисками проекта.
115
РАЗРАБОТКА РАСПРЕДЕЛЕННЫХ СИСТЕМ
(2-й курс магистратуры, 11-й семестр, 72 ч., диф. зачет)
Программа курса лекций (36 ч.)
Ассистент Николай Юрьевич Толстокулаков
Основной целью данного курса ставится обзор проблем возникающих при
создании больших распределенных систем и знакомство с платформой
J2EE, которая часто используется для решения подобных задач.
1. Распределенные программные системы и проблемы, возникающие при
их разработке – концепции и технологии этих систем: связь, процессы,
синхронизация, целостность и репликация, защита от сбоев и безопасность. Обзор существующих систем.
2. Примеры распределенных систем промежуточного уровня (middleware):
J2EE, CORBA, .Net.
2.1. Понятие контейнера и компонентов.
2.2. Основные контракты (API – платформа-приложение, SPI – платформа-service provider, сетевые протоколы, deployment
descriptors).
2.3. Разделение ролей (product provider, application component provider,
application assembler, application deployer, system administrator, tool
provider).
3. Базы данных и распределенные системы. Альтернативы классическим
базам данных (LDAP, не реляционные базы).
4. Транзакции, транзакционные источники данных в распределенных системах. ACID и уровни изоляции. Алгоритм Two phase commit.
5. EJB как пример распределенной системы объектов.
6. Служба Naming Service. Примеры JNDI, DNS.
7. Persistence – понятие OR mapper, реализация в EJB 3.0, особенности,
жизненный цикл, язык запросов.
8. Безопасность в распределенных системах. Пример OpenID. Модель
безопасности в J2EE.
9. Архитектура web приложений в рамках J2EE.
9.1. Возможности уровня представления: Servlet, JSP, JSTL, JSF.
9.2. Seam Framework – пример современного каркаса для построения
приложений в рамках J2EE среды.
10. XML & Web services – Предназначение, архитектура, основные интерфейсы, варианты использования, примеры.
Программа практических занятий (36 ч.)
Ассистент Николай Юрьевич Толстокулаков
На семинарских занятиях, проходящих в терминальном классе, студенты выполняют определенный набор небольших заданий и пишут курсовую
работу. Задания и курсовая работа ориентирована на знакомство студентов
с платформой J2EE.
117
Учебное издание
Адаманский Антон Валентинович
Аульченко Владимир Михайлович
Валеев Тагир Фаридович
Дубров Сергей Валерьевич
Жуланов Владимир Викторович
Идрисов Ренат Искандерович
Иртегов Дмитрий Валентинович
Коваленко Юрий Васильевич
Король Александр Аркадьевич
Курилин Олег Юрьевич
Логашенко Иван Борисович
Мигинский Денис Сергеевич
Пирогов Сергей Анатольевич
Сабитов Андрей Альбертович
Рубан Александр Анатольевич
Рылов Всеволод Юрьевич
Тимонов Владимир Сергеевич
Толстокулаков Николай Юрьевич
ПРОГРАММЫ И ЗАДАНИЯ НА 2009-2010 УЧЕБНЫЙ ГОД
Подписано в печать 7.10.2009 г.
Формат 60 × 84 1/16 . Уч.-изд. л. 7,25.
Уч. печ. л. 6,7. Тираж 100 экз.
Заказ №
Редакционно-издательский центр НГУ.
630090, Новосибирск, ул. Пирогова, 2
118
Download