Системное программирование на языке C — 2017


Документы

Материалы лекций

Содержание занятий

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.

Задачи

  1. Внутреннее представление float. Задача сдаётся в iRunner. Срок: до 2017-10-20 19:00.
  2. std::vector. Задача сдаётся в iRunner. Кроме прохождения автоматических тестов, проводится code review. Срок: до 2017-10-27 19:00.
  3. wc. Задача сдаётся в iRunner. Кроме прохождения автоматических тестов, проводится code review. Срок: до 2017-12-04 08:00.
  4. Digest. Сдаётся в AnyTask. Срок: до 2017-12-11 08:00.
  5. Debug. Сдаётся в AnyTask. Срок: до 2017-12-29 08:00.
  6. Python. Сдаётся в AnyTask. Срок: до 2017-12-29 08:00.

Расписание

  • С 29 сентября: две пары по пятницам: 19:00 – 20:20 и 20:30 – 21:50.
  • С 17 ноября: одна пара по пятницам: 20:30 – 21:50.

Всего 40 часов: лекции 20 часов + лабораторные 20 часов.

Форма отчётности: зачёт.

Контакты

Преподаватель: Сергей Соболь.

Литература

  1. Керниган Б., Ритчи Д. Язык программирования Си = The C programming language. — 2-е изд. — М.: Вильямс, 2007. — С. 304.
  2. Michael Kerrisk. The Linux Programming Interface: A Linux and UNIX System Programming Handbook. — No Starch Press, 2010.
  3. W. Richard Stevens, Stephen A. Rago. Advanced Programming in the UNIX Environment. — Addison-Wesley, 2013.
  4. Jeffrey Richter. Windows via C/C++. — Microsoft Press, 2011.
  5. Agner Fog. Optimizing software in C++: An optimization guide for Windows, Linux and Mac platforms.