Системное программирование на языке C — 2017
Содержание
Документы
Материалы лекций
- О курсе
- Язык программирования C
- Типы данных в C
- Вещественные числа
- Стандартная библиотека
- Неопределённое поведение
- Избранные главы C
- Сборка программ на C
- Динамические библиотеки
- Системы автоматизации сборки
- Средства отладки
- Архитектура x86-64
- Аллокаторы
- Оптимизации
Содержание занятий
2017-09-29
Вводная лекция. Рассказывалось об этом курсе и о языке программирования C.
На практическом занятии решали и разбирали тест.
2017-10-06
Вспоминали основы языка C, в частности типы данных. Разбирали устройство вещественных типов согласно стандарту IEEE 754.
2017-10-13
Лекция посвящена стандартной библиотеке C и неопределённому поведению. На практике решали задачи по undefined behavior.
2017-10-20
Лекция вновь посвящена стандартной библиотеке C и синтаксису языка. На практике разбирали примеры ошибок, проявляющихся при переходе с x86 на x64. А также вместе писали программу, выполняющую ввод и вывод, и смотрели, чем отличаются текстовый и бинарный режим под Windows.
2017-10-27
На лекции рассматривались классические этапы сборки программы на C, форматы объектных файлов, типы экспортируемых символов, роль компоновщика, понятие статической библиотеки. Также поднимался вопрос о том, почему объём памяти RSS меняется от запуска к запуску.
2017-11-03
Занятий в этот день не было.
2017-11-10
Задачи на тему сборки для повторения
На паре рассматривали тему динамических библиотек. Преимущества и недостатки динамической компоновки. Relocation, PIC, GOT, PLT. Создание динамических библиотек в UNIX-системах.
2017-11-17
Практическое занятие: писали код чтения zip-архива с помощью библиотеки libzip на Linux. Рассматривали пример переопределения функций через LD_PRELOAD.
2017-11-24
Рассматривались системы сборки GNU Make и CMake. Писали мейкфайл для сборки ранее рассмотренных примеров на Linux. Затем собирали пример по чтению zip-архива на Windows (собрали библиотеки zlib и libzip, немного не успели).
2017-12-01
Дособрали пример чтения zip-архива под Windows.
Затем на Linux посмотрели, что такое GNU Autotools, и собрали свой билд Midnight Commander.
Далее изучали средства отладки, в частности принцип действия отладчика и отладчик gdb.
2017-12-08
Рассмотрели дополнительные инструменты отладки (valgrind, санитайзеры).
Кратко прошлись по особенностям динамических библиотек под Windows. Эти темы остаются для самостоятельного изучения.
Начали разбирать особенности архитектуры x86-64.
2017-12-15
Рассмотрели организацию виртуальной памяти, структуру адресного пространства процесса, механизм передачи параметров в функции.
Начали изучать принцип действия аллокатора.
2017-12-22
Пара перенесена на вторник, 26 декабря.
2017-12-26
Рассматривались вопросы оптимизации кода по скорости выполнения.
Домашние задания
Задания сдаются через систему AnyTask и систему iRunner 2.
AnyTask
Ссылка на курс: http://anytask.org/course/255
Инвайт для доступа (код вида s******) был разослан на почту, курс называется «БГУ 2017 > Системное программирование на языке СИ».
iRunner 2
Ссылка на курс: https://acm.bsu.by/courses/47/
Логины имеют вид oboi17XX.
Задачи
- Внутреннее представление float. Задача сдаётся в iRunner. Срок: до 2017-10-20 19:00.
- std::vector. Задача сдаётся в iRunner. Кроме прохождения автоматических тестов, проводится code review. Срок: до 2017-10-27 19:00.
- wc. Задача сдаётся в iRunner. Кроме прохождения автоматических тестов, проводится code review. Срок: до 2017-12-04 08:00.
- Digest. Сдаётся в AnyTask. Срок: до 2017-12-11 08:00.
- Debug. Сдаётся в AnyTask. Срок: до 2017-12-29 08:00.
- Python. Сдаётся в AnyTask. Срок: до 2017-12-29 08:00.
Расписание
- С 29 сентября: две пары по пятницам: 19:00 – 20:20 и 20:30 – 21:50.
- С 17 ноября: одна пара по пятницам: 20:30 – 21:50.
Всего 40 часов: лекции 20 часов + лабораторные 20 часов.
Форма отчётности: зачёт.
Контакты
Преподаватель: Сергей Соболь.
Литература
- Керниган Б., Ритчи Д. Язык программирования Си = The C programming language. — 2-е изд. — М.: Вильямс, 2007. — С. 304.
- Michael Kerrisk. The Linux Programming Interface: A Linux and UNIX System Programming Handbook. — No Starch Press, 2010.
- W. Richard Stevens, Stephen A. Rago. Advanced Programming in the UNIX Environment. — Addison-Wesley, 2013.
- Jeffrey Richter. Windows via C/C++. — Microsoft Press, 2011.
- Agner Fog. Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms.