Бакалавриат
2023/2024





Системное программирование
Статус:
Курс обязательный (Информационная безопасность)
Направление:
10.03.01. Информационная безопасность
Когда читается:
3-й курс, 2-4 модуль
Формат изучения:
без онлайн-курса
Охват аудитории:
для своего кампуса
Язык:
русский
Кредиты:
7
Контактные часы:
90
Программа дисциплины
Аннотация
Системное программирование является областью знаний об архитектуре и разработке системного программного обеспечения, включая загрузчики, трансляторы программ, операционные системы, средства контейнерной оркестрации и т.д. В данной дисциплине рассматриваются таксономии программ и языков программирования, а также устройство основных компонентов вычислительных систем (аппаратные и программные) различных архитектур (архитектуры фон Неймана и Гарвардская). В ходе изучения дисциплины студенты познакомятся с машинным представлением программ (ассемблер) и данных и аспектами трансляции программ.
Особое место в дисциплине занимает внутреннее устройство операционных систем: объекты и файловые системы, представление памяти, процессы и потоки, прерывания и подсистема ввода-вывода, средства межпроцессного взаимодействия и синхронизации, а также механизмы конфигурации. Также в курсе представлены основы архитектуры контейнерной оркестрации: подход «Infrastructure-as-a-Code» (IaC), интерфейсы и среды выполнения контейнеров, изоляция, планирование и балансировка нагрузки между приложениями.
При обучении предусмотрен контроль знаний студентов в виде практических работ и учета активности студентов на семинарах.
Цель освоения дисциплины
- Ознакомление с внутренним устройством основных компонентов вычислительных систем
- Ознакомление с машинным представлением программ и аспектами трансляции программ
- Ознакомление с внутренним устройством операционных систем
- Ознакомление с принципами разработки многопоточных и асинхронных программ с множественным доступом к разделяемым ресурсам и сетевым взаимодействием
- Ознакомление с основами архитектуры систем контейнерной оркестрации
- Формирование навыков разработки системного программного обеспечения
- Формирования навыков обратной разработки и отладки программ на уровне машинного представления
Планируемые результаты обучения
- Знает режимы работы процессора, в том числе, в защищённом режиме.
- Знает классификацию языков программирования
- Знает системные возможности BIOS для организации ввода/вывода
- Иметь представление в области разработки программного обеспечения для киберфизических систем, архитектуре многопоточных программ, параллельных алгоритмах, процессах и потоках, множественному доступу к разделяемым ресурсам, архитектуре многопоточной программы
- Иметь представление в области разработки программного обеспечения для киберфизических систем, реализации языков программирования, методы работы с интерактивным дизассемблером и специализированным программным обеспечением для изучения работы исполняемых файлов
- Иметь представление в области разработки программного обеспечения для киберфизических систем, реализации языков программирования, общую характеристику языков ассемблера: назначение, принципы построения и использования; структура языка
- Иметь представления об: инструментах создания параллельных программ; основные типы ошибок и проблем в параллельных программах; инструменты отладки параллельных программ. Изучить: инструменты создания и отладки многопоточных программ
- Студент должен по результатам обучения создавать эффективные параллельные программы; находить и исправлять ошибки и проблемы в многопоточных программах.
- Умеет организовывать программные проекты с помощью системы сборки cmake.
- Знает классификацию ПО (системное и прикладное)
- Знает классификацию языков программирования (компилируемые, интерпретируемые)
- Знает основы трансляции программ и основные типы трансляторов (компиляторы, интерпретаторы, виртуальные машины)
- Знает устройство основных компонентов вычислительных систем различных архитектур (фон Неймана и Гарвардской)
- Знает основы машинного представления программ (ассемблер) и данных в памяти компьютера
- Знает механизмы вызова подпрограмм и передачи аргументов в функции (соглашения о вызовах)
- Знает особенности сегментного и страничного устройства памяти
- Знает назначение и таксономию операционных систем
- Знает основы архитектуры операционных систем реального времени
- Знает основы архитектуры операционных систем с разделением времени
- Знает устройство памяти, процессов и потоков ОС
- Знает устройство объектов ОС и виртуальной файловой системы
- Знает основы диспетчеризации прерываний, устройство подсистемы ввода-вывода и основных файловых систем
- Знает механизмы конфигурации ОС
- Знает основы виртуализации и контейнеризации
- Знает основы архитектуры контейнерных сред
- Знает основы архитектуры систем контейнерной оркестрации
- Знает механизмы планирования систем контейнерной оркестрации
- Знает механизмы обеспечения безопасности систем контейнерной оркестрации
- Знает лучшие практики по внедрению и эксплуатации систем контейнерной оркестрации
- Умеет развертывать и настраивать операционные системы и отдельные подсистемы
- Умеет разрабатывать системные программы на языках Ассемблер/C/Rust с использованием низкоуровневых API операционных систем или аппаратных модулей
- Умеет проводить обратную разработку и отладку программ на уровне машинного представления (ассемблер)
- Умеет проводить анализ слепков оперативной памяти различных операционных систем
- Умеет развертывать и настраивать системы контейнерной оркестрации
- Знает принципы разработки многопоточных и асинхронных программ с множественным доступом к разделяемым ресурсам и сетевым взаимодействием
- Умеет разрабатывать многопоточные и асинхронные программы на языках C/Rust с множественным доступом к разделяемым ресурсам и сетевым взаимодействием (мультиплексирование ввода-вывода)
- Знает основные отличия аналоговой и цифровой схемотехники
- Знает основные термины и определения цифровой схемотехники
- Знает основные схемы, обозначения, таблицы истинности и временные диаграммы
- Знает основы булевой алгебры
- Знает основные полупроводниковые элементы: диоды, транзисторы (МОП), а также передаточные характеристики
- Знает основные комбинационные блоки
- Знает назначение языков описания аппаратуры в части симуляции и синтеза цифровых схем
- Умеет работать со средой моделирования
- Знает особенности представления данных в цифровых блоках
- Знает основные арифметические схемы
- Знает основные функциональные узлы последовательной логики
- Знает устройство защелок и триггеров
- Знает особенности построения последовательных схем
- Знает устройство конечных автоматов (автоматы Мура и Мили)
- Знает устройство регистров различных типов
- Знает схемотехнику матриц (PLM, FPGA): логические элементы (LE) и таблицы преобразования (LUT)
- Знает основные запоминающие элементы
- Знает иерархию памяти
- Знает аппаратную организацию прерываний
- Знает основные последовательные интерфейсы передачи данных (UART/USART, SPI, I2C)
- Знает системные шины данных (AMBA, USB, SATA, PCI/PCI-E)
- Знает основы технологий построения проводных (Ethernet) и беспроводных (Wi-Fi) сетей
- Знает основы технологий проектирования и производства печатных плат
- Знает особенности микроархитектуры процессора (конвейеры, порядок исполнения)
- Знает основные типы архитектур: фон Неймана (Принстонская) и Гарвардская
- Знает основные типы архитектур по набору команд: RISC, CISC, MIPS, VLIW
- Знает особенности устройства программных процессоров
- Знает устройство памяти компьютера
- Знает системные возможности UEFI для организации ввода/вывода
- Знает особенности размещения устройств на материнской плате
Содержание учебной дисциплины
- Средства синхронизации и взаимодействия в многопоточных программах
- Средства межпроцессного взаимодействия
- Низкоуровневые языки программирования
- Многопоточное программирование
- Дизассемблирование программ
Элементы контроля
- Семинарские занятияСеминарские занятия предназначены для изучения тем курса "Системное программирование". Формат проведения: учебный материал выдает преподаватель; учебный материал выдает учащийся. Если материал выдает учащийся, тогда он заранее готовит тему, согласованную с преподавателем. В случе успешного выступления студент получает дополнительные баллы. Весовой коэффициент составляет - 0.1 при расчете итоговой оценки
- Практические занятияПрактические работы предназначены для выработки и закреплении первоначальных умении
- Самостоятельные / индивидуальные заданияСамостоятельные и индивидуальные задания выдаются студентам по желанию для повышения оценки
Промежуточная аттестация
- 2023/2024 учебный год 3 модульПрактические работы * 0.7 + семинарские занятия * 0.1 + индивидуальные и самостоятельные работы * 0.2
- 2023/2024 учебный год 4 модуль0.7 * Практические занятия + 0.2 * Самостоятельные / индивидуальные задания + 0.1 * Семинарские занятия
Список литературы
Рекомендуемая основная литература
- Аблязов, Р. З. Программирование на ассемблере на платформе x86-64 / Р. З. Аблязов. — Москва : ДМК Пресс, 2011. — 304 с. — ISBN 978-5-94074-676-8. — Текст : электронный // Лань : электронно-библиотечная система. — URL: https://e.lanbook.com/book/1273 (дата обращения: 00.00.0000). — Режим доступа: для авториз. пользователей.
- Архитектура компьютера 6-е изд. - 978-5-4461-1103-9 - Таненбаум Э., Остин Т. - 2020 - Санкт-Петербург: Питер - https://ibooks.ru/bookshelf/361850 - 361850 - iBOOKS
- Архитектура компьютера, Таненбаум, Э., 2014
- Ассемблер — это просто. Учимся программировать. 2 изд. - 978-5-9775-0591-8 - Калашников О. - 2014 - Санкт-Петербург: БХВ-Петербург - https://ibooks.ru/bookshelf/22669 - 22669 - iBOOKS
Рекомендуемая дополнительная литература
- Язык Ассемблера для процессоров Intel, Ирвин, Кип Р., 2005